From 6aead3f75e46948e2a3c20fbe43e94d8033767e9 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 13 Feb 2023 20:22:16 +0100 Subject: [PATCH 01/99] refactor(webapp): jest to latest and vue test utils to latest --- webapp/jest.config.js | 1 + webapp/package.json | 5 +- webapp/yarn.lock | 2040 ++++++++++++++++++++++++----------------- 3 files changed, 1209 insertions(+), 837 deletions(-) diff --git a/webapp/jest.config.js b/webapp/jest.config.js index 9980c319c..eecaaa92c 100644 --- a/webapp/jest.config.js +++ b/webapp/jest.config.js @@ -30,4 +30,5 @@ module.exports = { '^~/(.*)$': '/$1', }, moduleFileExtensions: ['js', 'json', 'vue'], + testEnvironment: 'jsdom', } diff --git a/webapp/package.json b/webapp/package.json index bc3577400..dd64c0de0 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -77,7 +77,7 @@ "@vue/cli-shared-utils": "~4.3.1", "@vue/eslint-config-prettier": "~6.0.0", "@vue/server-test-utils": "~1.0.0-beta.31", - "@vue/test-utils": "~1.0.0-beta.31", + "@vue/test-utils": "1.3.4", "async-validator": "^3.2.4", "babel-core": "~7.0.0-bridge.0", "babel-eslint": "~10.1.0", @@ -100,7 +100,8 @@ "eslint-plugin-vue": "~6.2.2", "flush-promises": "^1.0.2", "identity-obj-proxy": "^3.0.0", - "jest": "~26.6.3", + "jest": "29.4", + "jest-environment-jsdom": "^29.4.2", "mutation-observer": "^1.0.3", "prettier": "~2.7.1", "sass-loader": "~10.1.1", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index 9d5b415cc..e6974eb5d 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -102,6 +102,13 @@ dependencies: "@babel/highlight" "^7.10.4" +"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" @@ -109,13 +116,6 @@ dependencies: "@babel/highlight" "^7.14.5" -"@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" @@ -200,7 +200,7 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/core@^7.16.7": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.16.7": version "7.20.12" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== @@ -258,6 +258,15 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/generator@^7.7.2": + version "7.20.14" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" @@ -640,6 +649,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + "@babel/helper-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" @@ -890,6 +904,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== +"@babel/parser@^7.14.7", "@babel/parser@^7.20.13": + version "7.20.15" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" + integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== + "@babel/parser@^7.16.4", "@babel/parser@^7.16.8", "@babel/parser@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" @@ -1274,6 +1293,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -1386,6 +1412,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" + integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" @@ -2212,7 +2245,7 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6": +"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095" integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA== @@ -2258,6 +2291,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.7.2": + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" + integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.13" + "@babel/types" "^7.20.7" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@7.6.3": version "7.6.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" @@ -2627,144 +2676,164 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== +"@jest/console@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.4.2.tgz#f78374905c2454764152904a344a2d5226b0ef09" + integrity sha512-0I/rEJwMpV9iwi9cDEnT71a5nNGK9lj8Z4+1pRAU2x/thVXCDnaTGrvxyK+cAqZTFVFCiR+hfVrP4l2m+dCmQg== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.4.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^29.4.2" + jest-util "^29.4.2" slash "^3.0.0" -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== +"@jest/core@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.4.2.tgz#6e999b67bdc2df9d96ba9b142465bda71ee472c2" + integrity sha512-KGuoQah0P3vGNlaS/l9/wQENZGNKGoWb+OPxh3gz+YzG7/XExvYu34MzikRndQCdM2S0tzExN4+FL37i6gZmCQ== dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.4.2" + "@jest/reporters" "^29.4.2" + "@jest/test-result" "^29.4.2" + "@jest/transform" "^29.4.2" + "@jest/types" "^29.4.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" + ci-info "^3.2.0" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" + graceful-fs "^4.2.9" + jest-changed-files "^29.4.2" + jest-config "^29.4.2" + jest-haste-map "^29.4.2" + jest-message-util "^29.4.2" + jest-regex-util "^29.4.2" + jest-resolve "^29.4.2" + jest-resolve-dependencies "^29.4.2" + jest-runner "^29.4.2" + jest-runtime "^29.4.2" + jest-snapshot "^29.4.2" + jest-util "^29.4.2" + jest-validate "^29.4.2" + jest-watcher "^29.4.2" + micromatch "^4.0.4" + pretty-format "^29.4.2" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== +"@jest/environment@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.4.2.tgz#ee92c316ee2fbdf0bcd9d2db0ef42d64fea26b56" + integrity sha512-JKs3VUtse0vQfCaFGJRX1bir9yBdtasxziSyu+pIiEllAQOe4oQhdCYIf3+Lx+nGglFktSKToBnRJfD5QKp+NQ== dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/fake-timers" "^29.4.2" + "@jest/types" "^29.4.2" "@types/node" "*" - jest-mock "^26.6.2" + jest-mock "^29.4.2" -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== +"@jest/expect-utils@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.4.2.tgz#cd0065dfdd8e8a182aa350cc121db97b5eed7b3f" + integrity sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA== dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" + jest-get-type "^29.4.2" + +"@jest/expect@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.4.2.tgz#2d4a6a41b29380957c5094de19259f87f194578b" + integrity sha512-NUAeZVApzyaeLjfWIV/64zXjA2SS+NuUPHpAlO7IwVMGd5Vf9szTl9KEDlxY3B4liwLO31os88tYNHl6cpjtKQ== + dependencies: + expect "^29.4.2" + jest-snapshot "^29.4.2" + +"@jest/fake-timers@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.4.2.tgz#af43ee1a5720b987d0348f80df98f2cb17d45cd0" + integrity sha512-Ny1u0Wg6kCsHFWq7A/rW/tMhIedq2siiyHyLpHCmIhP7WmcAmd2cx95P+0xtTZlj5ZbJxIRQi4OPydZZUoiSQQ== + dependencies: + "@jest/types" "^29.4.2" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^29.4.2" + jest-mock "^29.4.2" + jest-util "^29.4.2" -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== +"@jest/globals@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.4.2.tgz#73f85f5db0e17642258b25fd0b9fc89ddedb50eb" + integrity sha512-zCk70YGPzKnz/I9BNFDPlK+EuJLk21ur/NozVh6JVM86/YYZtZHqxFFQ62O9MWq7uf3vIZnvNA0BzzrtxD9iyg== dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" + "@jest/environment" "^29.4.2" + "@jest/expect" "^29.4.2" + "@jest/types" "^29.4.2" + jest-mock "^29.4.2" -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== +"@jest/reporters@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.4.2.tgz#6abfa923941daae0acc76a18830ee9e79a22042d" + integrity sha512-10yw6YQe75zCgYcXgEND9kw3UZZH5tJeLzWv4vTk/2mrS1aY50A37F+XT2hPO5OqQFFnUWizXD8k1BMiATNfUw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.4.2" + "@jest/test-result" "^29.4.2" + "@jest/transform" "^29.4.2" + "@jest/types" "^29.4.2" + "@jridgewell/trace-mapping" "^0.3.15" + "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" + glob "^7.1.3" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" + istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" + istanbul-reports "^3.1.3" + jest-message-util "^29.4.2" + jest-util "^29.4.2" + jest-worker "^29.4.2" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== +"@jest/schemas@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.2.tgz#cf7cfe97c5649f518452b176c47ed07486270fc1" + integrity sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g== dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/source-map@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.2.tgz#f9815d59e25cd3d6828e41489cd239271018d153" + integrity sha512-tIoqV5ZNgYI9XCKXMqbYe5JbumcvyTgNN+V5QW4My033lanijvCD0D4PI9tBw4pRTqWOc00/7X3KVvUh+qnF4Q== + dependencies: + "@jridgewell/trace-mapping" "^0.3.15" callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" + graceful-fs "^4.2.9" -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== +"@jest/test-result@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.4.2.tgz#34b0ba069f2e3072261e4884c8fb6bd15ed6fb8d" + integrity sha512-HZsC3shhiHVvMtP+i55MGR5bPcc3obCFbA5bzIOb8pCjwBZf11cZliJncCgaVUbC5yoQNuGqCkC0Q3t6EItxZA== dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.4.2" + "@jest/types" "^29.4.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== +"@jest/test-sequencer@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.4.2.tgz#8b48e5bc4af80b42edacaf2a733d4f295edf28fb" + integrity sha512-9Z2cVsD6CcObIVrWigHp2McRJhvCxL27xHtrZFgNC1RwnoSpDx6fZo8QYjJmziFlW9/hr78/3sxF54S8B6v8rg== dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" + "@jest/test-result" "^29.4.2" + graceful-fs "^4.2.9" + jest-haste-map "^29.4.2" + slash "^3.0.0" "@jest/transform@^25.3.0": version "25.3.0" @@ -2788,26 +2857,26 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== +"@jest/transform@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.4.2.tgz#b24b72dbab4c8675433a80e222d6a8ef4656fb81" + integrity sha512-kf1v5iTJHn7p9RbOsBuc/lcwyPtJaZJt5885C98omWz79NIeD3PfoiiaPSu7JyCyFzNOIzKhmMhQLUhlTL9BvQ== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" + "@babel/core" "^7.11.6" + "@jest/types" "^29.4.2" + "@jridgewell/trace-mapping" "^0.3.15" + babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.4.2" + jest-regex-util "^29.4.2" + jest-util "^29.4.2" + micromatch "^4.0.4" + pirates "^4.0.4" slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + write-file-atomic "^4.0.2" "@jest/types@^25.3.0": version "25.3.0" @@ -2819,15 +2888,16 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== +"@jest/types@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.2.tgz#8f724a414b1246b2bfd56ca5225d9e1f39540d82" + integrity sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw== dependencies: + "@jest/schemas" "^29.4.2" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^15.0.0" + "@types/yargs" "^17.0.8" chalk "^4.0.0" "@jridgewell/gen-mapping@^0.1.0": @@ -2862,7 +2932,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== @@ -3750,24 +3820,29 @@ dependencies: "@sentry/cli" "^1.49.0" +"@sinclair/typebox@^0.25.16": + version "0.25.21" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.21.tgz#763b05a4b472c93a8db29b2c3e359d55b29ce272" + integrity sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g== + "@sindresorhus/is@^4.0.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@sinonjs/commons@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.0.tgz#f90ffc52a2e519f018b13b6c4da03cbff36ebed6" - integrity sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg== +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== +"@sinonjs/fake-timers@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" + integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^2.0.0" "@storybook/addon-a11y@^6.3.6": version "6.3.6" @@ -4735,6 +4810,11 @@ dependencies: defer-to-connect "^2.0.0" +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@types/accepts@*", "@types/accepts@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" @@ -4742,13 +4822,13 @@ dependencies: "@types/node" "*" -"@types/babel__core@^7.0.0": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== +"@types/babel__core@^7.1.14": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" + integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" @@ -4786,13 +4866,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/babel__traverse@^7.0.4": - version "7.0.16" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.16.tgz#0bbbf70c7bc4193210dd27e252c51260a37cd6a7" - integrity sha512-S63Dt4CZOkuTmpLGGWtT/mQdVORJOpx6SZWGVaP56dda/0Nx5nEe82K7/LAm8zYr6SfMq+1N2OreIOrHAx656w== - dependencies: - "@babel/types" "^7.3.0" - "@types/body-parser@*", "@types/body-parser@1.19.0": version "1.19.0" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" @@ -4930,10 +5003,10 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" - integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== +"@types/graceful-fs@^4.1.3": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" @@ -5011,6 +5084,15 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jsdom@^20.0.0": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + "@types/json-schema@^7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" @@ -5166,10 +5248,10 @@ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== -"@types/prettier@^2.0.0": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" - integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== +"@types/prettier@^2.1.5": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" + integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== "@types/pretty-hrtime@^1.0.0": version "1.0.1" @@ -5297,6 +5379,11 @@ resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776" integrity sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ== +"@types/tough-cookie@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" + integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== + "@types/uglify-js@*": version "3.13.1" resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" @@ -5354,6 +5441,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^17.0.8": + version "17.0.22" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" + integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== + dependencies: + "@types/yargs-parser" "*" + "@types/zen-observable@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d" @@ -5613,10 +5707,10 @@ resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.45.tgz#a3fffa7489eafff38d984e23d0236e230c818bc2" integrity sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg== -"@vue/test-utils@~1.0.0-beta.31": - version "1.0.0-beta.32" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.32.tgz#38c3947886236201a3f24b583c73598eb95ccc69" - integrity sha512-ywhe7PATMAk/ZGdsrcuQIliQusOyfe0OOHjKKCCERqgHh1g/kqPtmSMT5Jx4sErx53SYbNucr8QOK6/u5ianAw== +"@vue/test-utils@1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.3.4.tgz#83a68179178cb3da4b2b7c5c59ac660dbdff8ef5" + integrity sha512-yh2sbosCxk5FfwjXYXdY9rUffaJqYEFjsod5sCD4oosRn2x8LfBLEzQH0scdo5n7z8VkBUThpYzbkI6DVAWimA== dependencies: dom-event-types "^1.0.0" lodash "^4.17.15" @@ -5797,12 +5891,12 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== -abab@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@1: +abbrev@1, abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -5828,13 +5922,13 @@ acorn-globals@^4.1.0: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" + acorn "^8.1.0" + acorn-walk "^8.0.2" acorn-jsx@^5.1.0: version "5.1.0" @@ -5851,6 +5945,11 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== +acorn-walk@^8.0.2: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^5.5.3: version "5.7.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" @@ -5876,6 +5975,11 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== +acorn@^8.1.0, acorn@^8.8.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + address@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -5891,6 +5995,13 @@ agent-base@5: resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -6040,6 +6151,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -6067,6 +6183,11 @@ ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + ansi-to-html@^0.6.11: version "0.6.11" resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.11.tgz#5093fc4962186c0e9343dec572a4f71abdc93439" @@ -6971,18 +7092,17 @@ babel-helper-vue-jsx-merge-props@^2.0.2: resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg== -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== +babel-jest@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.4.2.tgz#b17b9f64be288040877cbe2649f91ac3b63b2ba6" + integrity sha512-vcghSqhtowXPG84posYkkkzcZsdayFkubUgbE3/1tuGbX7AQtwCkkNA/wIbB0BMjuCPoqTkiDyKN7Ty7d3uwNQ== dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" + "@jest/transform" "^29.4.2" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.4.2" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" slash "^3.0.0" babel-jest@~25.3.0: @@ -7114,6 +7234,17 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + babel-plugin-jest-hoist@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.2.6.tgz#2af07632b8ac7aad7d414c1e58425d5fc8e84909" @@ -7121,14 +7252,14 @@ babel-plugin-jest-hoist@^25.2.6: dependencies: "@types/babel__traverse" "^7.0.6" -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== +babel-plugin-jest-hoist@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.2.tgz#22aa43e255230f02371ffef1cac7eedef58f60bc" + integrity sha512-5HZRCfMeWypFEonRbEkwWXtNS1sQK159LhRVyRuLzyfVBxDy/34Tr/rg4YVi0SScSJ4fqeaR/OIeceJ/LaQ0pQ== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" + "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" babel-plugin-jsx-event-modifiers@^2.0.2: @@ -7290,12 +7421,12 @@ babel-preset-jest@^25.3.0: babel-plugin-jest-hoist "^25.2.6" babel-preset-current-node-syntax "^0.1.2" -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== +babel-preset-jest@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.4.2.tgz#f0b20c6a79a9f155515e72a2d4f537fe002a4e38" + integrity sha512-ecWdaLY/8JyfUDr0oELBMpj3R5I1L6ZqG+kRJmwqfHtLWuPrJStR0LUkvUhfykJWTsXXMnohsayN/twltBbDrQ== dependencies: - babel-plugin-jest-hoist "^26.6.2" + babel-plugin-jest-hoist "^29.4.2" babel-preset-current-node-syntax "^1.0.0" babel-preset-vue@~2.0.2: @@ -7376,9 +7507,9 @@ bail@^1.0.0: integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-64@^0.1.0: version "0.1.0" @@ -7533,6 +7664,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -7549,7 +7687,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -7566,11 +7704,6 @@ browser-process-hrtime@^0.1.2: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -7936,10 +8069,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== can-use-dom@^0.1.0: version "0.1.0" @@ -8234,6 +8367,11 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -8242,10 +8380,10 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== class-utils@^0.3.5: version "0.3.6" @@ -8413,14 +8551,14 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" clone-deep@^4.0.1: version "4.0.1" @@ -8559,12 +8697,12 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.0: +commander@^2.18.0, commander@^2.20.0, commander@~2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== -commander@^2.20.3, commander@^2.9.0: +commander@^2.19.0, commander@^2.20.3, commander@^2.9.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -8627,7 +8765,7 @@ compute-scroll-into-view@^1.0.17: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.0: version "1.6.2" @@ -8642,16 +8780,16 @@ concat-stream@^1.5.0: condense-newlines@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f" - integrity sha1-PemFVTE5R10yUCyDsC9gaE0kxV8= + integrity sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg== dependencies: extend-shallow "^2.0.1" is-whitespace "^0.3.0" kind-of "^3.0.2" -config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== +config-chain@^1.1.12, config-chain@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -8754,6 +8892,11 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, dependencies: safe-buffer "~5.1.1" +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -9029,7 +9172,7 @@ cross-fetch@^3.0.4: node-fetch "2.6.0" whatwg-fetch "3.0.0" -cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1: +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -9339,10 +9482,10 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== cssom@~0.3.6: version "0.3.8" @@ -9356,7 +9499,7 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" -cssstyle@^2.2.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -9394,14 +9537,14 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== +data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" date-fns@2.22.1: version "2.22.1" @@ -9464,10 +9607,10 @@ decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decimal.js@^10.2.0: - version "10.2.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" - integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== +decimal.js@^10.4.2: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: version "0.2.0" @@ -9481,6 +9624,11 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -9645,10 +9793,10 @@ dicer@0.3.0: dependencies: streamsearch "0.1.2" -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff-sequences@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.2.tgz#711fe6bd8a5869fe2539cee4a5152425ff671fda" + integrity sha512-R6P0Y6PrsH3n4hUXxL3nns0rbRk6Q33js3ygJBeEpbzLzgcNuJ61+u0RXasFpTKISw99TxUzFnumSnRLsjhLaw== diff@^4.0.1: version "4.0.1" @@ -9713,9 +9861,9 @@ dom-converter@^0.2: utila "~0.4" dom-event-types@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.0.0.tgz#5830a0a29e1bf837fe50a70cd80a597232813cae" - integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.1.0.tgz#120c1f92ddea7758db1ccee0a100a33c39f4701b" + integrity sha512-jNCX+uNJ3v38BKvPbpki6j5ItVlnSqVV6vDWGS6rExzCMjsc39frLjm1n91o6YaKK6AZl0wLloItW6C6mr61BQ== dom-serializer@0, dom-serializer@~0.1.1: version "0.1.1" @@ -9761,12 +9909,12 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: - webidl-conversions "^5.0.0" + webidl-conversions "^7.0.0" domhandler@^2.3.0: version "2.4.2" @@ -9990,10 +10138,10 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^7.0.1: version "7.0.3" @@ -10080,6 +10228,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + env-ci@3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-3.2.2.tgz#06936f1fcfbc999102a2211fc2539df64062b61f" @@ -10246,18 +10399,6 @@ escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.14.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - escodegen@^1.9.1: version "1.11.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" @@ -10270,6 +10411,18 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-config-prettier@^6.0.0, eslint-config-prettier@~6.15.0: version "6.15.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" @@ -10506,6 +10659,11 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + estree-walker@^2.0.1, estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" @@ -10606,19 +10764,19 @@ execa@^3.2.0, execa@^3.4.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exit@^0.1.2: @@ -10639,17 +10797,16 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== +expect@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.4.2.tgz#2ae34eb88de797c64a1541ad0f1e2ea8a7a7b492" + integrity sha512-+JHYg9O3hd3RlICG90OPVjRkPBoiUH7PxvDVMnRiaq1g6JUgZStX514erMl0v2Dc5SkfVbm7ztqbd6qHHPn+mQ== dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" + "@jest/expect-utils" "^29.4.2" + jest-get-type "^29.4.2" + jest-matcher-utils "^29.4.2" + jest-message-util "^29.4.2" + jest-util "^29.4.2" express@^4.16.3, express@^4.17.1, express@~4.17.1: version "4.17.1" @@ -10690,7 +10847,7 @@ express@^4.16.3, express@^4.17.1, express@~4.17.1: extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" @@ -10822,7 +10979,7 @@ fast-json-parse@^1.0.0: resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -11179,6 +11336,15 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -11318,7 +11484,7 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^1.2.7: version "1.2.9" @@ -11333,7 +11499,7 @@ fsevents@^2.1.2, fsevents@~2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== -fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -11421,7 +11587,7 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -11475,7 +11641,7 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.1: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -11591,7 +11757,7 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -11603,6 +11769,29 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -11780,10 +11969,10 @@ graceful-fs@^4.2.3: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== -graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== graphql-anywhere@^4.1.0-alpha.0: version "4.2.1" @@ -11857,11 +12046,6 @@ grid-index@^1.1.0: resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA== -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - gud@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" @@ -12225,12 +12409,12 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: - whatwg-encoding "^1.0.5" + whatwg-encoding "^2.0.0" html-entities@^1.2.0: version "1.2.1" @@ -12391,6 +12575,15 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-proxy-middleware@^0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -12448,11 +12641,24 @@ https-proxy-agent@^4.0.0: agent-base "5" debug "4" +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + hyperlinker@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" @@ -12465,6 +12671,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -12623,7 +12836,7 @@ inflected@^2.0.3: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -12716,11 +12929,6 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -12848,13 +13056,6 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - is-core-module@^2.2.0: version "2.5.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" @@ -12862,6 +13063,13 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -13107,10 +13315,10 @@ is-plain-object@^3.0.0: dependencies: isobject "^4.0.0" -is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-promise@^2.0.0: version "2.2.2" @@ -13220,7 +13428,7 @@ is-whitespace-character@^1.0.0: is-whitespace@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" - integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= + integrity sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg== is-window@^1.0.2: version "1.0.2" @@ -13242,7 +13450,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.1.1, is-wsl@^2.2.0: +is-wsl@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== @@ -13294,6 +13502,11 @@ istanbul-lib-coverage@^3.0.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== +istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + istanbul-lib-instrument@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.0.tgz#53321a7970f076262fd3292c8f9b2e4ac544aae1" @@ -13307,14 +13520,15 @@ istanbul-lib-instrument@^4.0.0: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: - "@babel/core" "^7.7.5" + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" + istanbul-lib-coverage "^3.2.0" semver "^6.3.0" istanbul-lib-report@^3.0.0: @@ -13335,10 +13549,10 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -13368,115 +13582,143 @@ javascript-detect-element-resize@^0.5.3: resolved "https://registry.yarnpkg.com/javascript-detect-element-resize/-/javascript-detect-element-resize-0.5.3.tgz#1a71cd51dfe565907f299012fe73a294104025de" integrity sha1-GnHNUd/lZZB/KZAS/nOilBBAJd4= -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== +jest-changed-files@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.4.2.tgz#bee1fafc8b620d6251423d1978a0080546bc4376" + integrity sha512-Qdd+AXdqD16PQa+VsWJpxR3kN0JyOCX1iugQfx5nUgAsI4gwsKviXkpclxOK9ZnwaY2IQVHz+771eAvqeOlfuw== dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" + execa "^5.0.0" + p-limit "^3.1.0" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== +jest-circus@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.4.2.tgz#2d00c04baefd0ee2a277014cd494d4b5970663ed" + integrity sha512-wW3ztp6a2P5c1yOc1Cfrt5ozJ7neWmqeXm/4SYiqcSriyisgq63bwFj1NuRdSR5iqS0CMEYwSZd89ZA47W9zUg== dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^29.4.2" + "@jest/expect" "^29.4.2" + "@jest/test-result" "^29.4.2" + "@jest/types" "^29.4.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^29.4.2" + jest-matcher-utils "^29.4.2" + jest-message-util "^29.4.2" + jest-runtime "^29.4.2" + jest-snapshot "^29.4.2" + jest-util "^29.4.2" + p-limit "^3.1.0" + pretty-format "^29.4.2" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.4.2.tgz#94a2f913a0a7a49d11bee98ad88bf48baae941f4" + integrity sha512-b+eGUtXq/K2v7SH3QcJvFvaUaCDS1/YAZBYz0m28Q/Ppyr+1qNaHmVYikOrbHVbZqYQs2IeI3p76uy6BWbXq8Q== + dependencies: + "@jest/core" "^29.4.2" + "@jest/test-result" "^29.4.2" + "@jest/types" "^29.4.2" chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" + jest-config "^29.4.2" + jest-util "^29.4.2" + jest-validate "^29.4.2" prompts "^2.0.1" - yargs "^15.4.1" + yargs "^17.3.1" -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== +jest-config@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.4.2.tgz#15386dd9ed2f7059516915515f786b8836a98f07" + integrity sha512-919CtnXic52YM0zW4C1QxjG6aNueX1kBGthuMtvFtRTAxhKfJmiXC9qwHmi6o2josjbDz8QlWyY55F1SIVmCWA== dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.4.2" + "@jest/types" "^29.4.2" + babel-jest "^29.4.2" chalk "^4.0.0" + ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.4.2" + jest-environment-node "^29.4.2" + jest-get-type "^29.4.2" + jest-regex-util "^29.4.2" + jest-resolve "^29.4.2" + jest-runner "^29.4.2" + jest-util "^29.4.2" + jest-validate "^29.4.2" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.4.2" + slash "^3.0.0" + strip-json-comments "^3.1.1" -jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== +jest-diff@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.4.2.tgz#b88502d5dc02d97f6512d73c37da8b36f49b4871" + integrity sha512-EK8DSajVtnjx9sa1BkjZq3mqChm2Cd8rIzdXkQMA8e0wuXq53ypz6s5o5V8HRZkoEt2ywJ3eeNWFKWeYr8HK4g== dependencies: chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + diff-sequences "^29.4.2" + jest-get-type "^29.4.2" + pretty-format "^29.4.2" -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== +jest-docblock@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.4.2.tgz#c78a95eedf9a24c0a6cc16cf2abdc4b8b0f2531b" + integrity sha512-dV2JdahgClL34Y5vLrAHde3nF3yo2jKRH+GIYJuCpfqwEJZcikzeafVTGAjbOfKPG17ez9iWXwUYp7yefeCRag== dependencies: detect-newline "^3.0.0" -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== +jest-each@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.4.2.tgz#e1347aff1303f4c35470827a62c029d389c5d44a" + integrity sha512-trvKZb0JYiCndc55V1Yh0Luqi7AsAdDWpV+mKT/5vkpnnFQfuQACV72IoRV161aAr6kAVIBpmYzwhBzm34vQkA== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.4.2" chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" + jest-get-type "^29.4.2" + jest-util "^29.4.2" + pretty-format "^29.4.2" -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== +jest-environment-jsdom@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.4.2.tgz#0cf95ad846949280dd58bc91a9ca463b6b232dd8" + integrity sha512-v1sH4Q0JGM+LPEGqHNM+m+uTMf3vpXpKiuDYqWUAh+0c9+nc7scGE+qTR5JuE+OOTDnwfzPgcv9sMq6zWAOaVg== dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^29.4.2" + "@jest/fake-timers" "^29.4.2" + "@jest/types" "^29.4.2" + "@types/jsdom" "^20.0.0" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" + jest-mock "^29.4.2" + jest-util "^29.4.2" + jsdom "^20.0.0" -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== +jest-environment-node@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.4.2.tgz#0eab835b41e25fd0c1a72f62665fc8db08762ad2" + integrity sha512-MLPrqUcOnNBc8zTOfqBbxtoa8/Ee8tZ7UFW7hRDQSUT+NGsvS96wlbHGTf+EFAT9KC3VNb7fWEM6oyvmxtE/9w== dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^29.4.2" + "@jest/fake-timers" "^29.4.2" + "@jest/types" "^29.4.2" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-mock "^29.4.2" + jest-util "^29.4.2" -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== +jest-get-type@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.2.tgz#7cb63f154bca8d8f57364d01614477d466fa43fe" + integrity sha512-vERN30V5i2N6lqlFu4ljdTqQAgrkTFMC9xaIIfOPYBw04pufjXRty5RuXBiB1d72tGbURa/UgoiHB90ruOSivg== jest-haste-map@^25.3.0: version "25.3.0" @@ -13497,91 +13739,66 @@ jest-haste-map@^25.3.0: optionalDependencies: fsevents "^2.1.2" -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== +jest-haste-map@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.4.2.tgz#9112df3f5121e643f1b2dcbaa86ab11b0b90b49a" + integrity sha512-WkUgo26LN5UHPknkezrBzr7lUtV1OpGsp+NfXbBwHztsFruS3gz+AMTTBcEklvi8uPzpISzYjdKXYZQJXBnfvw== dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" + "@jest/types" "^29.4.2" + "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" + graceful-fs "^4.2.9" + jest-regex-util "^29.4.2" + jest-util "^29.4.2" + jest-worker "^29.4.2" + micromatch "^4.0.4" + walker "^1.0.8" optionalDependencies: - fsevents "^2.1.2" + fsevents "^2.3.2" -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== +jest-leak-detector@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.4.2.tgz#8f05c6680e0cb46a1d577c0d3da9793bed3ea97b" + integrity sha512-Wa62HuRJmWXtX9F00nUpWlrbaH5axeYCdyRsOs/+Rb1Vb6+qWTlB5rKwCCRKtorM7owNwKsyJ8NRDUcZ8ghYUA== dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" + jest-get-type "^29.4.2" + pretty-format "^29.4.2" -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== +jest-matcher-utils@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.4.2.tgz#08d0bf5abf242e3834bec92c7ef5071732839e85" + integrity sha512-EZaAQy2je6Uqkrm6frnxBIdaWtSYFoR8SVb2sNLAtldswlR/29JAgx+hy67llT3+hXBaLB0zAm5UfeqerioZyg== dependencies: chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + jest-diff "^29.4.2" + jest-get-type "^29.4.2" + pretty-format "^29.4.2" -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== +jest-message-util@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.4.2.tgz#309a2924eae6ca67cf7f25781a2af1902deee717" + integrity sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g== dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.4.2" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.4.2" slash "^3.0.0" - stack-utils "^2.0.2" + stack-utils "^2.0.3" -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== +jest-mock@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.4.2.tgz#e1054be66fb3e975d26d4528fcde6979e4759de8" + integrity sha512-x1FSd4Gvx2yIahdaIKoBjwji6XpboDunSJ95RpntGrYulI1ByuYQCKN/P7hvk09JB74IonU3IPLdkutEWYt++g== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.4.2" "@types/node" "*" + jest-util "^29.4.2" jest-pnp-resolver@^1.2.2: version "1.2.2" @@ -13593,127 +13810,124 @@ jest-regex-util@^25.2.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +jest-regex-util@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.2.tgz#19187cca35d301f8126cf7a021dd4dcb7b58a1ca" + integrity sha512-XYZXOqUl1y31H6VLMrrUL1ZhXuiymLKPz0BO1kEeR5xER9Tv86RZrjTm74g5l9bPJQXA/hyLdaVPN/sdqfteig== -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== +jest-resolve-dependencies@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.2.tgz#6359db606f5967b68ca8bbe9dbc07a4306c12bf7" + integrity sha512-6pL4ptFw62rjdrPk7rRpzJYgcRqRZNsZTF1VxVTZMishbO6ObyWvX57yHOaNGgKoADtAHRFYdHQUEvYMJATbDg== dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" + jest-regex-util "^29.4.2" + jest-snapshot "^29.4.2" -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== +jest-resolve@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.4.2.tgz#8831f449671d08d161fe493003f61dc9b55b808e" + integrity sha512-RtKWW0mbR3I4UdkOrW7552IFGLYQ5AF9YrzD0FnIOkDu0rAMlA5/Y1+r7lhCAP4nXSBTaE7ueeqj6IOwZpgoqw== dependencies: - "@jest/types" "^26.6.2" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + jest-haste-map "^29.4.2" jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" + jest-util "^29.4.2" + jest-validate "^29.4.2" + resolve "^1.20.0" + resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== +jest-runner@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.4.2.tgz#2bcecf72303369df4ef1e6e983c22a89870d5125" + integrity sha512-wqwt0drm7JGjwdH+x1XgAl+TFPH7poowMguPQINYxaukCqlczAcNLJiK+OLxUxQAEWMdy+e6nHZlFHO5s7EuRg== dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.4.2" + "@jest/environment" "^29.4.2" + "@jest/test-result" "^29.4.2" + "@jest/transform" "^29.4.2" + "@jest/types" "^29.4.2" "@types/node" "*" chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.4.2" + jest-environment-node "^29.4.2" + jest-haste-map "^29.4.2" + jest-leak-detector "^29.4.2" + jest-message-util "^29.4.2" + jest-resolve "^29.4.2" + jest-runtime "^29.4.2" + jest-util "^29.4.2" + jest-watcher "^29.4.2" + jest-worker "^29.4.2" + p-limit "^3.1.0" + source-map-support "0.5.13" -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== +jest-runtime@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.4.2.tgz#d86b764c5b95d76cb26ed1f32644e99de5d5c134" + integrity sha512-3fque9vtpLzGuxT9eZqhxi+9EylKK/ESfhClv4P7Y9sqJPs58LjVhTt8jaMp/pRO38agll1CkSu9z9ieTQeRrw== dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" + "@jest/environment" "^29.4.2" + "@jest/fake-timers" "^29.4.2" + "@jest/globals" "^29.4.2" + "@jest/source-map" "^29.4.2" + "@jest/test-result" "^29.4.2" + "@jest/transform" "^29.4.2" + "@jest/types" "^29.4.2" + "@types/node" "*" chalk "^4.0.0" - cjs-module-lexer "^0.6.0" + cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" + graceful-fs "^4.2.9" + jest-haste-map "^29.4.2" + jest-message-util "^29.4.2" + jest-mock "^29.4.2" + jest-regex-util "^29.4.2" + jest-resolve "^29.4.2" + jest-snapshot "^29.4.2" + jest-util "^29.4.2" + semver "^7.3.5" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.4.1" jest-serializer@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.2.6.tgz#3bb4cc14fe0d8358489dbbefbb8a4e708ce039b7" integrity sha512-RMVCfZsezQS2Ww4kB5HJTMaMJ0asmC0BHlnobQC6yEtxiFKIxohFA4QSXSabKwSggaNkqxn6Z2VwdFCjhUWuiQ== -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== +jest-snapshot@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.4.2.tgz#ba1fb9abb279fd2c85109ff1757bc56b503bbb3a" + integrity sha512-PdfubrSNN5KwroyMH158R23tWcAXJyx4pvSvWls1dHoLCaUhGul9rsL3uVjtqzRpkxlkMavQjGuWG1newPgmkw== dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.4.2" + "@jest/transform" "^29.4.2" + "@jest/types" "^29.4.2" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" + expect "^29.4.2" + graceful-fs "^4.2.9" + jest-diff "^29.4.2" + jest-get-type "^29.4.2" + jest-haste-map "^29.4.2" + jest-matcher-utils "^29.4.2" + jest-message-util "^29.4.2" + jest-util "^29.4.2" natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" + pretty-format "^29.4.2" + semver "^7.3.5" jest-util@^25.3.0: version "25.3.0" @@ -13725,41 +13939,42 @@ jest-util@^25.3.0: is-ci "^2.0.0" make-dir "^3.0.0" -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== +jest-util@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.2.tgz#3db8580b295df453a97de4a1b42dd2578dabd2c2" + integrity sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.4.2" "@types/node" "*" chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== +jest-validate@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.4.2.tgz#3b3f8c4910ab9a3442d2512e2175df6b3f77b915" + integrity sha512-tto7YKGPJyFbhcKhIDFq8B5od+eVWD/ySZ9Tvcp/NGCvYA4RQbuzhbwYWtIjMT5W5zA2W0eBJwu4HVw34d5G6Q== dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" + "@jest/types" "^29.4.2" + camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^26.3.0" + jest-get-type "^29.4.2" leven "^3.1.0" - pretty-format "^26.6.2" + pretty-format "^29.4.2" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== +jest-watcher@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.4.2.tgz#09c0f4c9a9c7c0807fcefb1445b821c6f7953b7c" + integrity sha512-onddLujSoGiMJt+tKutehIidABa175i/Ays+QvKxCqBwp7fvxP3ZhKsrIdOodt71dKxqk4sc0LN41mWLGIK44w== dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/test-result" "^29.4.2" + "@jest/types" "^29.4.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.6.2" + emittery "^0.13.1" + jest-util "^29.4.2" string-length "^4.0.1" jest-worker@^25.1.0: @@ -13778,7 +13993,7 @@ jest-worker@^25.2.6: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^26.5.0, jest-worker@^26.6.2: +jest-worker@^26.5.0: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== @@ -13787,14 +14002,25 @@ jest-worker@^26.5.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -jest@~26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== +jest-worker@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.4.2.tgz#d9b2c3bafc69311d84d94e7fb45677fc8976296f" + integrity sha512-VIuZA2hZmFyRbchsUCHEehoSf2HEl0YVF8SDJqtPnKorAaBuh42V8QsLnde0XP5F6TyCynGPEGgBOn3Fc+wZGw== dependencies: - "@jest/core" "^26.6.3" + "@types/node" "*" + jest-util "^29.4.2" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@29.4: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.4.2.tgz#4c2127d03a71dc187f386156ef155dbf323fb7be" + integrity sha512-+5hLd260vNIHu+7ZgMIooSpKl7Jp5pHKb51e73AJU3owd5dEo/RfVwHbA/na3C/eozrt3hJOLGf96c7EWwIAzg== + dependencies: + "@jest/core" "^29.4.2" + "@jest/types" "^29.4.2" import-local "^3.0.2" - jest-cli "^26.6.3" + jest-cli "^29.4.2" jimp-compact@^0.8.0: version "0.8.4" @@ -13802,15 +14028,14 @@ jimp-compact@^0.8.0: integrity sha512-9mvZ7/TJ28bWtdx0RxmfiOTzSom4zuRniFTLtJHfNL6HxQdnRtjmX8XIRjmofgVXj2TW/GgSuZKB3dSZ5hNhKg== js-beautify@^1.6.12: - version "1.10.2" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.10.2.tgz#88c9099cd6559402b124cfab18754936f8a7b178" - integrity sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ== + version "1.14.7" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.7.tgz#9206296de33f86dc106d3e50a35b7cf8729703b2" + integrity sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A== dependencies: - config-chain "^1.1.12" + config-chain "^1.1.13" editorconfig "^0.15.3" - glob "^7.1.3" - mkdirp "~0.5.1" - nopt "~4.0.1" + glob "^8.0.3" + nopt "^6.0.0" js-beautify@^1.6.14: version "1.10.0" @@ -13924,37 +14149,37 @@ jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" -jsdom@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== +jsdom@^20.0.0: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== dependencies: - abab "^2.0.3" - acorn "^7.1.1" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.2.0" - data-urls "^2.0.0" - decimal.js "^10.2.0" - domexception "^2.0.1" - escodegen "^1.14.1" - html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" - nwsapi "^2.2.0" - parse5 "5.1.1" - request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.2.3" - xml-name-validator "^3.0.0" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" jsesc@^2.5.1: version "2.5.2" @@ -13976,6 +14201,11 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -14695,6 +14925,13 @@ make-error@^1, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -14962,6 +15199,14 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -15063,13 +15308,27 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@3.0.4, minimatch@^3.0.2, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -15095,9 +15354,9 @@ minimist@^1.1.1, minimist@^1.2.0: integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minimist@^1.2.6: version "1.2.7" @@ -15186,7 +15445,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3: version "0.5.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== @@ -15198,6 +15457,13 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + moment@2.24.0, moment@^2.18.1, moment@^2.22.1, moment@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" @@ -15426,18 +15692,6 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - node-object-hash@^1.2.0: version "1.4.2" resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-1.4.2.tgz#385833d85b229902b75826224f6077be969a9e94" @@ -15503,7 +15757,7 @@ nodemon@^1.19.4: undefsafe "^2.0.2" update-notifier "^2.5.0" -nopt@^4.0.1, nopt@~4.0.1: +nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= @@ -15511,6 +15765,13 @@ nopt@^4.0.1, nopt@~4.0.1: abbrev "1" osenv "^0.1.4" +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" + nopt@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" @@ -15518,6 +15779,14 @@ nopt@~1.0.10: dependencies: abbrev "1" +nopt@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -15599,6 +15868,13 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -15656,10 +15932,10 @@ nwsapi@^2.0.7: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +nwsapi@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" + integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== oauth-sign@~0.9.0: version "0.9.0" @@ -15828,6 +16104,13 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + open@^6.3.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" @@ -15905,7 +16188,7 @@ os-browserify@^0.3.0: os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== os-locale@^1.4.0: version "1.4.0" @@ -15917,7 +16200,7 @@ os-locale@^1.4.0: os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== osenv@^0.1.4: version "0.1.5" @@ -15944,11 +16227,6 @@ p-cancelable@^2.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== -p-each-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" - integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== - p-event@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" @@ -15994,7 +16272,7 @@ p-limit@^2.2.2: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -16172,16 +16450,21 @@ parse-json@^5.0.0: json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - parse5@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" @@ -16194,6 +16477,13 @@ parse5@^6.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0, parse5@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + parseurl@^1.3.2, parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -16265,7 +16555,7 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@^1.0.1: version "1.0.2" @@ -16287,6 +16577,11 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -16364,7 +16659,7 @@ picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -picomatch@^2.2.2: +picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -16421,6 +16716,11 @@ pirates@^4.0.0, pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" @@ -17289,15 +17589,14 @@ pretty-error@^2.0.2, pretty-error@^2.1.1: renderkid "^2.0.1" utila "~0.4" -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== +pretty-format@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.2.tgz#64bf5ccc0d718c03027d94ac957bdd32b3fb2401" + integrity sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg== dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" + "@jest/schemas" "^29.4.2" + ansi-styles "^5.0.0" + react-is "^18.0.0" pretty-hrtime@^1.0.3: version "1.0.3" @@ -17312,7 +17611,7 @@ pretty-time@^1.1.0: pretty@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" - integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU= + integrity sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w== dependencies: condense-newlines "^0.2.1" extend-shallow "^2.0.1" @@ -17567,7 +17866,7 @@ prosemirror-view@1.14.6, prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prose proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== protocol-buffers-schema@^3.3.1: version "3.6.0" @@ -17595,13 +17894,18 @@ prr@~1.0.1: pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== psl@^1.1.28: version "1.1.31" resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + pstree.remy@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" @@ -17810,6 +18114,11 @@ querystring@0.2.0, querystring@^0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + quick-format-unescaped@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-1.1.2.tgz#0ca581de3174becef25ac3c2e8956342381db698" @@ -18032,16 +18341,16 @@ react-is@^16.8.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" - integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== - react-is@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -18643,11 +18952,6 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -18697,6 +19001,11 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve.exports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.0.tgz#c1a0028c2d166ec2fbf7d0644584927e76e7400e" + integrity sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg== + resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" @@ -18712,13 +19021,14 @@ resolve@^1.14.2, resolve@^1.15.1, resolve@^1.19.0: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^1.18.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== +resolve@^1.20.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" responselike@^2.0.0: version "2.0.1" @@ -18787,13 +19097,6 @@ rimraf@^2.7.1: dependencies: glob "^7.1.3" -rimraf@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" - integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -18879,7 +19182,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -18932,10 +19235,10 @@ sax@^1.2.4, sax@~1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -saxes@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" @@ -19032,6 +19335,13 @@ semver@^7.3.4: dependencies: lru-cache "^6.0.0" +semver@^7.3.5: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -19222,11 +19532,6 @@ shelljs@0.7.7: interpret "^1.0.0" rechoir "^0.6.2" -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - side-channel@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" @@ -19247,13 +19552,18 @@ side-channel@^1.0.4: sigmund@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= + integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g== signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -19387,6 +19697,14 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@0.5.13, source-map-support@~0.5.12: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@^0.5.16, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -19403,14 +19721,6 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.12: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -19543,7 +19853,7 @@ stack-trace@0.0.10: resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= -stack-utils@^2.0.2, stack-utils@^2.0.3: +stack-utils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== @@ -19744,6 +20054,15 @@ string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + "string.prototype.matchall@^4.0.0 || ^3.0.1": version "4.0.2" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" @@ -19848,6 +20167,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -19897,6 +20223,11 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + style-loader@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" @@ -19996,6 +20327,13 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" @@ -20004,13 +20342,10 @@ supports-hyperlinks@^1.0.1: has-flag "^2.0.0" supports-color "^5.0.0" -supports-hyperlinks@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.0.0.tgz#b1b94a159e9df00b0a554b2d5f0e0a89690334b0" - integrity sha512-bFhn0MQ8qefLyJ3K7PpHiPUTuTVPWw6RXfaMeV6xgJLXtBbszyboz1bvGTVv4R0YpQm2DqlXXn0fFHhxUHVE5w== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-tags@^1.0.0: version "1.0.0" @@ -20194,14 +20529,6 @@ term-size@^2.1.0: resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.1.0.tgz#3aec444c07a7cf936e157c1dc224b590c3c7eef2" integrity sha512-I42EWhJ+2aeNQawGx1VtpO0DFI9YcfuvAMNIdKyf/6sRbHJ4P+ZQ/zIT87tE+ln1ymAGcCJds4dolfSAS0AcNg== -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -20306,11 +20633,6 @@ thread-loader@^2.1.3: loader-utils "^1.1.0" neo-async "^2.6.0" -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - throttle-debounce@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.1.0.tgz#257e648f0a56bd9e54fe0f132c4ab8611df4e1d5" @@ -20452,6 +20774,11 @@ tmp@^0.1.0: dependencies: rimraf "^2.6.3" +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -20539,14 +20866,15 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tough-cookie@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" tr46@^1.0.1: version "1.0.1" @@ -20555,10 +20883,10 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tr46@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" - integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== dependencies: punycode "^2.1.1" @@ -21012,6 +21340,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + universalify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" @@ -21162,6 +21495,14 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -21269,7 +21610,7 @@ uuid@^3.1.0, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.0.0, uuid@^8.3.0: +uuid@^8.0.0: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -21296,14 +21637,14 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== -v8-to-istanbul@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" - integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" - source-map "^0.7.3" validate-color@^2.1.0: version "2.1.1" @@ -21683,24 +22024,17 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - w3c-keyname@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/w3c-keyname/-/w3c-keyname-2.2.1.tgz#c4fe1a4b9e303c95e833b3d854b7d81070400db9" integrity sha512-j5k4xGK6k8TCna/08778KUEL98WvTogiG/TN/YStl8GNeXg5tI3Dvq3+JjwJhP4l7ogs6KWo1VYEdc1Qaioy3Q== -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== dependencies: - xml-name-validator "^3.0.0" + xml-name-validator "^4.0.0" walker@^1.0.7, walker@~1.0.5: version "1.0.7" @@ -21709,6 +22043,13 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" @@ -21758,15 +22099,10 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== webpack-bundle-analyzer@^3.6.1: version "3.6.1" @@ -21927,23 +22263,43 @@ webpackbar@^4.0.0: text-table "^0.2.0" wrap-ansi "^6.0.0" -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + whatwg-fetch@3.0.0, whatwg-fetch@>=0.10.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-url@^6.4.1: version "6.5.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" @@ -21962,25 +22318,11 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -whatwg-url@^8.0.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" - integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^2.0.2" - webidl-conversions "^6.1.0" - which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -22093,10 +22435,19 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^2.0.0: version "2.4.2" @@ -22126,6 +22477,14 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + write-json-file@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" @@ -22159,10 +22518,10 @@ ws@^6.0.0: dependencies: async-limiter "~1.0.0" -ws@^7.2.3: - version "7.4.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" - integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== +ws@^8.11.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.12.0.tgz#485074cc392689da78e1828a9ff23585e06cddd8" + integrity sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig== xdg-basedir@^3.0.0: version "3.0.0" @@ -22174,6 +22533,11 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" @@ -22221,10 +22585,15 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== yallist@^3.0.0: version "3.0.3" @@ -22253,7 +22622,7 @@ yaml@^1.7.2: dependencies: "@babel/runtime" "^7.6.3" -yargs-parser@^18.1.2, yargs-parser@^18.1.3: +yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -22261,6 +22630,11 @@ yargs-parser@^18.1.2, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-parser@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" @@ -22287,22 +22661,18 @@ yargs@6.6.0: y18n "^3.2.1" yargs-parser "^4.2.0" -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== +yargs@^17.3.1: + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" yargs@~1.2.6: version "1.2.6" From b2be8a301e90a3f2f489a1e4e7466ba9fdfbe20b Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 13 Feb 2023 20:29:16 +0100 Subject: [PATCH 02/99] first pages test working --- webapp/pages/admin.spec.js | 9 ++++++--- webapp/pages/group/_id/_slug.spec.js | 16 ++++++++++------ webapp/pages/index.spec.js | 15 +++++++++------ webapp/pages/post/_id/_slug/index.spec.js | 15 +++++++-------- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/webapp/pages/admin.spec.js b/webapp/pages/admin.spec.js index fc3849fc4..aa6eceab1 100644 --- a/webapp/pages/admin.spec.js +++ b/webapp/pages/admin.spec.js @@ -1,7 +1,9 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import admin from './admin.vue' -config.stubs['nuxt-child'] = '' +const stubs = { + 'nuxt-child': true, +} const localVue = global.localVue @@ -20,6 +22,7 @@ describe('admin.vue', () => { return mount(admin, { mocks, localVue, + stubs, }) } @@ -28,7 +31,7 @@ describe('admin.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) }) }) diff --git a/webapp/pages/group/_id/_slug.spec.js b/webapp/pages/group/_id/_slug.spec.js index 963952f5e..bb9279bce 100644 --- a/webapp/pages/group/_id/_slug.spec.js +++ b/webapp/pages/group/_id/_slug.spec.js @@ -1,15 +1,18 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import GroupProfileSlug from './_slug.vue' const localVue = global.localVue localVue.filter('date', (d) => d) -config.stubs['client-only'] = '' -config.stubs['v-popover'] = '' -config.stubs['nuxt-link'] = '' -config.stubs['infinite-loading'] = '' -config.stubs['follow-list'] = '' +const stubs = { + 'client-only': true, + 'v-popover': true, + 'nuxt-link': true, + 'router-link': true, + 'infinite-loading': true, + 'follow-list': true, +} describe('GroupProfileSlug', () => { let wrapper @@ -201,6 +204,7 @@ describe('GroupProfileSlug', () => { mocks, localVue, data, + stubs, }) } diff --git a/webapp/pages/index.spec.js b/webapp/pages/index.spec.js index 43400986c..47011f137 100644 --- a/webapp/pages/index.spec.js +++ b/webapp/pages/index.spec.js @@ -1,14 +1,16 @@ -import { config, shallowMount, mount } from '@vue/test-utils' +import { shallowMount, mount } from '@vue/test-utils' import PostIndex from './index.vue' import Vuex from 'vuex' import HashtagsFilter from '~/components/HashtagsFilter/HashtagsFilter' const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['router-link'] = '' -config.stubs['nuxt-link'] = '' -config.stubs['infinite-loading'] = '' +const stubs = { + 'client-only': true, + 'router-link': true, + 'nuxt-link': true, + 'infinite-loading': true, +} describe('PostIndex', () => { let wrapper @@ -95,7 +97,7 @@ describe('PostIndex', () => { it('clears the search when the filter menu emits clearSearch', () => { mocks.$route.query.hashtag = '#samplehashtag' wrapper = Wrapper() - wrapper.find(HashtagsFilter).vm.$emit('clearSearch') + wrapper.findComponent(HashtagsFilter).vm.$emit('clearSearch') expect(wrapper.vm.hashtag).toBeNull() }) @@ -123,6 +125,7 @@ describe('PostIndex', () => { store, mocks, localVue, + stubs, }) } diff --git a/webapp/pages/post/_id/_slug/index.spec.js b/webapp/pages/post/_id/_slug/index.spec.js index 2dd4522b2..4528e64ee 100644 --- a/webapp/pages/post/_id/_slug/index.spec.js +++ b/webapp/pages/post/_id/_slug/index.spec.js @@ -1,4 +1,4 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Vuex from 'vuex' import Vue from 'vue' import PostSlug from './index.vue' @@ -6,10 +6,6 @@ import CommentList from '~/components/CommentList/CommentList' import HcHashtag from '~/components/Hashtag/Hashtag' import VueMeta from 'vue-meta' -config.stubs['client-only'] = '' -config.stubs['nuxt-link'] = '' -config.stubs['router-link'] = '' - const localVue = global.localVue localVue.directive('scrollTo', jest.fn()) localVue.use(VueMeta, { keyName: 'head' }) @@ -81,6 +77,9 @@ describe('PostSlug', () => { }, } stubs = { + 'client-only': true, + 'nuxt-link': true, + 'router-link': true, HcEditor: { render: () => {}, methods: { insertReply: jest.fn(() => null) } }, ContentViewer: true, } @@ -148,7 +147,7 @@ describe('PostSlug', () => { describe('reply method called when emitted reply received', () => { it('CommentList', async () => { wrapper = await Wrapper() - wrapper.find(CommentList).vm.$emit('reply', { + wrapper.findComponent(CommentList).vm.$emit('reply', { id: 'commentAuthorId', slug: 'ogerly', }) @@ -176,12 +175,12 @@ describe('PostSlug', () => { it('are present', async () => { // Get length from backendData and compare against number of tags present in component. - expect(wrapper.findAll(HcHashtag).length).toBe(backendData.post.tags.length) + expect(wrapper.findAllComponents(HcHashtag).length).toBe(backendData.post.tags.length) }) it('are alphabetically ordered', async () => { // Get all HcHastag components - const wrappers = wrapper.findAll(HcHashtag).wrappers + const wrappers = wrapper.findAllComponents(HcHashtag).wrappers // Exctract ID properties (tag names) from component. const ids = [] wrappers.forEach((x) => { From 7d459fcea5671c287608122b570d31f078c642b5 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 13 Feb 2023 21:09:24 +0100 Subject: [PATCH 03/99] get settings pages mostly running --- webapp/pages/settings/blocked-users.spec.js | 10 ++++++---- webapp/pages/settings/data-download.spec.js | 2 +- webapp/pages/settings/delete-account.spec.js | 2 +- webapp/pages/settings/embeds.spec.js | 2 +- webapp/pages/settings/index.spec.js | 2 +- webapp/pages/settings/invites.spec.js | 2 +- webapp/pages/settings/languages.spec.js | 2 +- webapp/pages/settings/muted-users.spec.js | 10 ++++++---- .../pages/settings/my-email-address/index.spec.js | 11 ++++++++--- .../pages/settings/my-email-address/verify.spec.js | 13 +++++++++---- webapp/pages/settings/my-organizations.spec.js | 2 +- webapp/pages/settings/privacy.spec.js | 11 ++++------- webapp/pages/settings/security.spec.js | 2 +- 13 files changed, 41 insertions(+), 30 deletions(-) diff --git a/webapp/pages/settings/blocked-users.spec.js b/webapp/pages/settings/blocked-users.spec.js index 8c657392d..ee4348d0e 100644 --- a/webapp/pages/settings/blocked-users.spec.js +++ b/webapp/pages/settings/blocked-users.spec.js @@ -1,4 +1,4 @@ -import { config, mount, createLocalVue } from '@vue/test-utils' +import { mount, createLocalVue } from '@vue/test-utils' import BlockedUsers from './blocked-users.vue' import Styleguide from '@human-connection/styleguide' import Filters from '~/plugins/vue-filters' @@ -9,7 +9,9 @@ const localVue = createLocalVue() localVue.use(Styleguide) localVue.use(Filters) -config.stubs['nuxt-link'] = '' +const stubs = { + 'nuxt-link': true, +} describe('blocked-users.vue', () => { let wrapper @@ -35,7 +37,7 @@ describe('blocked-users.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(BlockedUsers, { mocks, localVue }) + return mount(BlockedUsers, { mocks, localVue, stubs }) } beforeEach(() => { @@ -43,7 +45,7 @@ describe('blocked-users.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) describe('given a list of blocked users', () => { diff --git a/webapp/pages/settings/data-download.spec.js b/webapp/pages/settings/data-download.spec.js index b50c8d046..7a71ef3f1 100644 --- a/webapp/pages/settings/data-download.spec.js +++ b/webapp/pages/settings/data-download.spec.js @@ -26,7 +26,7 @@ describe('data-download.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/settings/delete-account.spec.js b/webapp/pages/settings/delete-account.spec.js index aa8ffd954..c55e6bf83 100644 --- a/webapp/pages/settings/delete-account.spec.js +++ b/webapp/pages/settings/delete-account.spec.js @@ -36,7 +36,7 @@ describe('delete-account.vue', () => { }) it('renders', () => { - expect(wrapper.is('.delete-data')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/settings/embeds.spec.js b/webapp/pages/settings/embeds.spec.js index 75247ddf0..aa79d1787 100644 --- a/webapp/pages/settings/embeds.spec.js +++ b/webapp/pages/settings/embeds.spec.js @@ -36,7 +36,7 @@ describe('embeds.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/settings/index.spec.js b/webapp/pages/settings/index.spec.js index 01d68e029..03ec610bd 100644 --- a/webapp/pages/settings/index.spec.js +++ b/webapp/pages/settings/index.spec.js @@ -87,7 +87,7 @@ describe('index.vue', () => { }) it('renders', () => { - expect(Wrapper().contains('div')).toBe(true) + expect(Wrapper().element.tagName).toBe('DIV') }) describe('given form validation errors', () => { diff --git a/webapp/pages/settings/invites.spec.js b/webapp/pages/settings/invites.spec.js index cbc8d1765..6db61d853 100644 --- a/webapp/pages/settings/invites.spec.js +++ b/webapp/pages/settings/invites.spec.js @@ -26,7 +26,7 @@ describe('invites.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/settings/languages.spec.js b/webapp/pages/settings/languages.spec.js index 0e3665739..5f582e4e2 100644 --- a/webapp/pages/settings/languages.spec.js +++ b/webapp/pages/settings/languages.spec.js @@ -26,7 +26,7 @@ describe('languages.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/settings/muted-users.spec.js b/webapp/pages/settings/muted-users.spec.js index b818fa521..74caa8163 100644 --- a/webapp/pages/settings/muted-users.spec.js +++ b/webapp/pages/settings/muted-users.spec.js @@ -1,4 +1,4 @@ -import { config, mount, createLocalVue } from '@vue/test-utils' +import { mount, createLocalVue } from '@vue/test-utils' import MutedUsers from './muted-users.vue' import Styleguide from '@human-connection/styleguide' import Filters from '~/plugins/vue-filters' @@ -9,7 +9,9 @@ const localVue = createLocalVue() localVue.use(Styleguide) localVue.use(Filters) -config.stubs['nuxt-link'] = '' +const stubs = { + 'nuxt-link': true, +} describe('muted-users.vue', () => { let wrapper @@ -35,7 +37,7 @@ describe('muted-users.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(MutedUsers, { mocks, localVue }) + return mount(MutedUsers, { mocks, localVue, stubs }) } beforeEach(() => { @@ -43,7 +45,7 @@ describe('muted-users.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) describe('given a list of muted users', () => { diff --git a/webapp/pages/settings/my-email-address/index.spec.js b/webapp/pages/settings/my-email-address/index.spec.js index 808aee3be..87b85a59d 100644 --- a/webapp/pages/settings/my-email-address/index.spec.js +++ b/webapp/pages/settings/my-email-address/index.spec.js @@ -1,10 +1,12 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import EmailSettingsIndexPage from './index.vue' import Vuex from 'vuex' const localVue = global.localVue -config.stubs['sweetalert-icon'] = '' +const stubs = { + 'sweetalert-icon': true, +} describe('EmailSettingsIndexPage', () => { let store @@ -43,12 +45,15 @@ describe('EmailSettingsIndexPage', () => { store, mocks, localVue, + stubs, }) } describe('form', () => { describe('submit', () => { - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) describe('email unchanged', () => { beforeEach(() => { diff --git a/webapp/pages/settings/my-email-address/verify.spec.js b/webapp/pages/settings/my-email-address/verify.spec.js index 66407ad1f..4edbb26bd 100644 --- a/webapp/pages/settings/my-email-address/verify.spec.js +++ b/webapp/pages/settings/my-email-address/verify.spec.js @@ -1,11 +1,13 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import EmailVerifyPage from './verify.vue' import Vuex from 'vuex' const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['sweetalert-icon'] = '' +const stubs = { + 'sweetalert-icon': true, + 'client-only': true, +} describe('EmailVerifyPage', () => { let store @@ -108,12 +110,15 @@ describe('EmailVerifyPage', () => { }) describe('mount', () => { - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) const Wrapper = () => { return mount(EmailVerifyPage, { store, mocks, localVue, + stubs, }) } diff --git a/webapp/pages/settings/my-organizations.spec.js b/webapp/pages/settings/my-organizations.spec.js index 7f11b9871..6ae4cd74c 100644 --- a/webapp/pages/settings/my-organizations.spec.js +++ b/webapp/pages/settings/my-organizations.spec.js @@ -26,7 +26,7 @@ describe('my-organizations.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) }) }) diff --git a/webapp/pages/settings/privacy.spec.js b/webapp/pages/settings/privacy.spec.js index eb9cb90b3..4cabf5e50 100644 --- a/webapp/pages/settings/privacy.spec.js +++ b/webapp/pages/settings/privacy.spec.js @@ -47,22 +47,19 @@ describe('privacy.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) it('clicking on submit changes shoutsAllowed to false', async () => { - wrapper.find('#allow-shouts').trigger('click') - await wrapper.vm.$nextTick() - wrapper.find('.base-button').trigger('click') + await wrapper.find('#allow-shouts').setChecked(false) + await wrapper.find('.base-button').trigger('click') expect(wrapper.vm.shoutsAllowed).toBe(false) }) it('clicking on submit with a server error shows a toast and shoutsAllowed is still true', async () => { mocks.$apollo.mutate = jest.fn().mockRejectedValue({ message: 'Ouch!' }) - wrapper.find('#allow-shouts').trigger('click') - await wrapper.vm.$nextTick() + await wrapper.find('#allow-shouts').setChecked(false) await wrapper.find('.base-button').trigger('click') - await wrapper.vm.$nextTick() expect(mocks.$toast.error).toHaveBeenCalledWith('Ouch!') expect(wrapper.vm.shoutsAllowed).toBe(true) }) diff --git a/webapp/pages/settings/security.spec.js b/webapp/pages/settings/security.spec.js index dee9e640a..92ef93a0e 100644 --- a/webapp/pages/settings/security.spec.js +++ b/webapp/pages/settings/security.spec.js @@ -26,7 +26,7 @@ describe('security.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) From b3f50e04d88e76139355234a1f964be1dd691a98 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 13 Feb 2023 21:23:36 +0100 Subject: [PATCH 04/99] all settings tests work again --- webapp/pages/settings.spec.js | 9 ++++++--- webapp/pages/settings/index.spec.js | 2 +- webapp/pages/settings/my-organizations.spec.js | 2 +- webapp/pages/settings/notifications.spec.js | 11 ++++------- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/webapp/pages/settings.spec.js b/webapp/pages/settings.spec.js index 353f1e6b8..0f3c6e22c 100644 --- a/webapp/pages/settings.spec.js +++ b/webapp/pages/settings.spec.js @@ -1,9 +1,11 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import settings from './settings.vue' const localVue = global.localVue -config.stubs['nuxt-child'] = '' +const stubs = { + 'nuxt-child': true, +} describe('settings.vue', () => { let wrapper @@ -20,6 +22,7 @@ describe('settings.vue', () => { return mount(settings, { mocks, localVue, + stubs, }) } @@ -28,7 +31,7 @@ describe('settings.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) }) }) diff --git a/webapp/pages/settings/index.spec.js b/webapp/pages/settings/index.spec.js index 03ec610bd..0de675840 100644 --- a/webapp/pages/settings/index.spec.js +++ b/webapp/pages/settings/index.spec.js @@ -87,7 +87,7 @@ describe('index.vue', () => { }) it('renders', () => { - expect(Wrapper().element.tagName).toBe('DIV') + expect(Wrapper().element.tagName).toBe('FORM') }) describe('given form validation errors', () => { diff --git a/webapp/pages/settings/my-organizations.spec.js b/webapp/pages/settings/my-organizations.spec.js index 6ae4cd74c..b6d81bc3d 100644 --- a/webapp/pages/settings/my-organizations.spec.js +++ b/webapp/pages/settings/my-organizations.spec.js @@ -26,7 +26,7 @@ describe('my-organizations.vue', () => { }) it('renders', () => { - expect(wrapper.element.tagName).toBe('DIV') + expect(wrapper.element.tagName).toBe('ARTICLE') }) }) }) diff --git a/webapp/pages/settings/notifications.spec.js b/webapp/pages/settings/notifications.spec.js index 7b43ef2c4..855505fe2 100644 --- a/webapp/pages/settings/notifications.spec.js +++ b/webapp/pages/settings/notifications.spec.js @@ -47,22 +47,19 @@ describe('notifications.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) it('clicking on submit changes notifyByEmail to false', async () => { - wrapper.find('#send-email').trigger('click') - await wrapper.vm.$nextTick() - wrapper.find('.base-button').trigger('click') + await wrapper.find('#send-email').setChecked(false) + await wrapper.find('.base-button').trigger('click') expect(wrapper.vm.notifyByEmail).toBe(false) }) it('clicking on submit with a server error shows a toast and notifyByEmail is still true', async () => { mocks.$apollo.mutate = jest.fn().mockRejectedValue({ message: 'Ouch!' }) - wrapper.find('#send-email').trigger('click') - await wrapper.vm.$nextTick() + await wrapper.find('#send-email').setChecked(false) await wrapper.find('.base-button').trigger('click') - await wrapper.vm.$nextTick() expect(mocks.$toast.error).toHaveBeenCalledWith('Ouch!') expect(wrapper.vm.notifyByEmail).toBe(true) }) From 0d5f87c2a37e052ba3b8e84c6b94f4d2bd7146e8 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 13 Feb 2023 21:33:35 +0100 Subject: [PATCH 05/99] fix donations test --- webapp/pages/admin/donations.spec.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/webapp/pages/admin/donations.spec.js b/webapp/pages/admin/donations.spec.js index 57e28ff41..4a85590a9 100644 --- a/webapp/pages/admin/donations.spec.js +++ b/webapp/pages/admin/donations.spec.js @@ -57,7 +57,7 @@ describe('donations.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) describe('displays', () => { @@ -89,23 +89,19 @@ describe('donations.vue', () => { describe('form component click', () => { it('on #showDonations checkbox changes "showDonations" to true', async () => { // starts with false - wrapper.find('#showDonations').trigger('click') // set to true - await wrapper.vm.$nextTick() + await wrapper.find('#showDonations').setChecked(true) // set to true expect(wrapper.vm.showDonations).toBe(true) }) it('on #showDonations checkbox twice changes "showDonations" back to false', async () => { // starts with false - wrapper.find('#showDonations').trigger('click') // set to true - wrapper.find('#showDonations').trigger('click') // set to false - await wrapper.vm.$nextTick() + await wrapper.find('#showDonations').setChecked(true) // set to true + await wrapper.find('#showDonations').setChecked(false) // set to true expect(wrapper.vm.showDonations).toBe(false) }) it.skip('on donations-goal and enter value XXX', async () => { - wrapper.find('#donations-goal').setValue('20000') - await wrapper.vm.$nextTick() - // console.log(wrapper.find('#donations-goal').element.value) + await wrapper.find('#donations-goal').setValue('20000') expect(wrapper.vm.formData.goal).toBe('20000') }) }) @@ -141,7 +137,7 @@ describe('donations.vue', () => { }) it('calls mutation with input values once', async () => { - wrapper.find('#showDonations').trigger('click') // set to true + wrapper.find('#showDonations').setChecked(true) // set to true await wrapper.vm.$nextTick() wrapper.find('#donations-goal').setValue('20000') await wrapper.vm.$nextTick() From b2eda033ee1ee3e0c858e469a7768f1f09d39496 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 13 Feb 2023 21:39:57 +0100 Subject: [PATCH 06/99] all admin pages tests are working --- webapp/pages/admin/categories.spec.js | 2 +- webapp/pages/admin/hashtags.spec.js | 2 +- webapp/pages/admin/invite.spec.js | 2 +- webapp/pages/admin/notifications.spec.js | 2 +- webapp/pages/admin/organizations.spec.js | 2 +- webapp/pages/admin/pages.spec.js | 2 +- webapp/pages/admin/settings.spec.js | 2 +- webapp/pages/admin/users.spec.js | 10 +++++++--- 8 files changed, 14 insertions(+), 10 deletions(-) diff --git a/webapp/pages/admin/categories.spec.js b/webapp/pages/admin/categories.spec.js index 55715e74b..f293dacf2 100644 --- a/webapp/pages/admin/categories.spec.js +++ b/webapp/pages/admin/categories.spec.js @@ -26,7 +26,7 @@ describe('categories.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/admin/hashtags.spec.js b/webapp/pages/admin/hashtags.spec.js index cd2d308d1..b1a44aebf 100644 --- a/webapp/pages/admin/hashtags.spec.js +++ b/webapp/pages/admin/hashtags.spec.js @@ -26,7 +26,7 @@ describe('hashtags.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/admin/invite.spec.js b/webapp/pages/admin/invite.spec.js index e3e882119..da0f743a2 100644 --- a/webapp/pages/admin/invite.spec.js +++ b/webapp/pages/admin/invite.spec.js @@ -29,7 +29,7 @@ describe('invite.vue', () => { }) it('renders', () => { - expect(wrapper.is('.ds-section')).toBe(true) + expect(wrapper.classes('ds-section')).toBe(true) }) }) }) diff --git a/webapp/pages/admin/notifications.spec.js b/webapp/pages/admin/notifications.spec.js index c9acf81a6..34773058e 100644 --- a/webapp/pages/admin/notifications.spec.js +++ b/webapp/pages/admin/notifications.spec.js @@ -29,7 +29,7 @@ describe('notifications.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/admin/organizations.spec.js b/webapp/pages/admin/organizations.spec.js index d019d9485..2045a09b3 100644 --- a/webapp/pages/admin/organizations.spec.js +++ b/webapp/pages/admin/organizations.spec.js @@ -29,7 +29,7 @@ describe('organizations.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/admin/pages.spec.js b/webapp/pages/admin/pages.spec.js index e0c3c9fb4..91103b756 100644 --- a/webapp/pages/admin/pages.spec.js +++ b/webapp/pages/admin/pages.spec.js @@ -29,7 +29,7 @@ describe('pages.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/admin/settings.spec.js b/webapp/pages/admin/settings.spec.js index 78a5beb94..0f83a37d5 100644 --- a/webapp/pages/admin/settings.spec.js +++ b/webapp/pages/admin/settings.spec.js @@ -29,7 +29,7 @@ describe('settings.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/admin/users.spec.js b/webapp/pages/admin/users.spec.js index e8e624cc1..43c51fb52 100644 --- a/webapp/pages/admin/users.spec.js +++ b/webapp/pages/admin/users.spec.js @@ -1,9 +1,12 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Vuex from 'vuex' import Users from './users.vue' const localVue = global.localVue -config.stubs['nuxt-link'] = '' + +const stubs = { + 'nuxt-link': true, +} describe('Users', () => { let wrapper @@ -49,12 +52,13 @@ describe('Users', () => { mocks, localVue, store, + stubs, }) } it('renders', () => { wrapper = Wrapper() - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) describe('search', () => { From 4850e456fe5b7c158f23acc7f153576472604300 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 13 Feb 2023 23:08:41 +0100 Subject: [PATCH 07/99] pages tests nearly working --- webapp/jest.config.js | 1 + webapp/package.json | 5 +- webapp/pages/code-of-conduct.spec.js | 2 +- webapp/pages/data-privacy.spec.js | 2 +- webapp/pages/donate.spec.js | 2 +- webapp/pages/faq.spec.js | 2 +- webapp/pages/group/_id.spec.js | 9 +- webapp/pages/groups.spec.js | 11 +- webapp/pages/imprint.spec.js | 2 +- webapp/pages/login.spec.js | 9 +- webapp/pages/logout.spec.js | 2 +- webapp/pages/map.spec.js | 2 + webapp/pages/moderation.spec.js | 9 +- webapp/pages/moderation/index.spec.js | 11 +- webapp/pages/notifications/index.spec.js | 20 +- webapp/pages/organization.spec.js | 2 +- webapp/pages/password-reset.spec.js | 11 +- .../pages/password-reset/enter-nonce.spec.js | 8 +- webapp/pages/password-reset/request.spec.js | 9 +- webapp/pages/profile/_id.spec.js | 9 +- webapp/pages/profile/_id/_slug.spec.js | 15 +- webapp/pages/registration.spec.js | 15 +- webapp/pages/search/search-results.spec.js | 8 +- webapp/pages/support.spec.js | 2 +- .../terms-and-conditions-confirm.spec.js | 9 +- webapp/pages/terms-and-conditions.spec.js | 2 +- webapp/yarn.lock | 1888 ++++++++++------- 27 files changed, 1248 insertions(+), 819 deletions(-) diff --git a/webapp/jest.config.js b/webapp/jest.config.js index eecaaa92c..1b3f4d03e 100644 --- a/webapp/jest.config.js +++ b/webapp/jest.config.js @@ -20,6 +20,7 @@ module.exports = { transform: { '.*\\.(vue)$': 'vue-jest', '^.+\\.js$': 'babel-jest', + '/node_modules/@mapbox/mapbox-gl-geocoder/dist/*': 'babel-jest', }, testMatch: ['**/?(*.)+(spec|test).js?(x)'], modulePathIgnorePatterns: ['/build/'], diff --git a/webapp/package.json b/webapp/package.json index dd64c0de0..40cacbae7 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -67,7 +67,8 @@ "devDependencies": { "@babel/core": "~7.12.3", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/preset-env": "~7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.20.11", + "@babel/preset-env": "^7.20.2", "@faker-js/faker": "5.1.0", "@nuxtjs/composition-api": "0.32.0", "@storybook/addon-a11y": "^6.3.6", @@ -81,7 +82,7 @@ "async-validator": "^3.2.4", "babel-core": "~7.0.0-bridge.0", "babel-eslint": "~10.1.0", - "babel-jest": "~25.3.0", + "babel-jest": "29.4", "babel-loader": "~8.1.0", "babel-plugin-require-context-hook": "^1.0.0", "babel-preset-vue": "~2.0.2", diff --git a/webapp/pages/code-of-conduct.spec.js b/webapp/pages/code-of-conduct.spec.js index c050f65ba..e914ceaee 100644 --- a/webapp/pages/code-of-conduct.spec.js +++ b/webapp/pages/code-of-conduct.spec.js @@ -33,7 +33,7 @@ describe('code-of-conduct.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBeTruthy() + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', () => { diff --git a/webapp/pages/data-privacy.spec.js b/webapp/pages/data-privacy.spec.js index c5e4e4d62..a1fdf4afc 100644 --- a/webapp/pages/data-privacy.spec.js +++ b/webapp/pages/data-privacy.spec.js @@ -33,7 +33,7 @@ describe('data-privacy.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBeTruthy() + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', () => { diff --git a/webapp/pages/donate.spec.js b/webapp/pages/donate.spec.js index 719cdbf77..2eff7d8d0 100644 --- a/webapp/pages/donate.spec.js +++ b/webapp/pages/donate.spec.js @@ -37,7 +37,7 @@ describe('donate.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBeTruthy() + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', () => { diff --git a/webapp/pages/faq.spec.js b/webapp/pages/faq.spec.js index 3e92d3f7f..9d3c776cc 100644 --- a/webapp/pages/faq.spec.js +++ b/webapp/pages/faq.spec.js @@ -33,7 +33,7 @@ describe('faq.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBeTruthy() + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', () => { diff --git a/webapp/pages/group/_id.spec.js b/webapp/pages/group/_id.spec.js index bafd5c392..1a9a7203a 100644 --- a/webapp/pages/group/_id.spec.js +++ b/webapp/pages/group/_id.spec.js @@ -1,9 +1,11 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import _id from './_id.vue' const localVue = global.localVue -config.stubs['nuxt-child'] = '' +const stubs = { + 'nuxt-child': true, +} describe('Group profile _id.vue', () => { let wrapper @@ -19,6 +21,7 @@ describe('Group profile _id.vue', () => { return mount(_id, { mocks, localVue, + stubs, }) } @@ -27,7 +30,7 @@ describe('Group profile _id.vue', () => { }) it('renders', () => { - expect(wrapper.findAll('.nuxt-child')).toHaveLength(1) + expect(wrapper.findComponent({ name: 'nuxt-child' }).exists()).toBe(true) }) }) }) diff --git a/webapp/pages/groups.spec.js b/webapp/pages/groups.spec.js index 0fbacd6b3..3761f7ec2 100644 --- a/webapp/pages/groups.spec.js +++ b/webapp/pages/groups.spec.js @@ -1,10 +1,12 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import groups from './groups.vue' const localVue = global.localVue -config.stubs['nuxt-link'] = '' -config.stubs['client-only'] = '' +const stubs = { + 'nuxt-link': true, + 'client-only': true, +} describe('groups', () => { let wrapper @@ -21,6 +23,7 @@ describe('groups', () => { return mount(groups, { mocks, localVue, + stubs, }) } @@ -29,7 +32,7 @@ describe('groups', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) }) }) diff --git a/webapp/pages/imprint.spec.js b/webapp/pages/imprint.spec.js index 011e847db..5e8b57064 100644 --- a/webapp/pages/imprint.spec.js +++ b/webapp/pages/imprint.spec.js @@ -37,7 +37,7 @@ describe('imprint.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBeTruthy() + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', () => { diff --git a/webapp/pages/login.spec.js b/webapp/pages/login.spec.js index 09c1b066e..a65fc79a0 100644 --- a/webapp/pages/login.spec.js +++ b/webapp/pages/login.spec.js @@ -1,11 +1,13 @@ import Vuex from 'vuex' -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import login from './login.vue' const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['nuxt-link'] = '' +const stubs = { + 'client-only': true, + 'nuxt-link': true, +} describe('Login.vue', () => { let store @@ -50,6 +52,7 @@ describe('Login.vue', () => { store, mocks, localVue, + stubs, }) } diff --git a/webapp/pages/logout.spec.js b/webapp/pages/logout.spec.js index 4ec777bf6..460d321aa 100644 --- a/webapp/pages/logout.spec.js +++ b/webapp/pages/logout.spec.js @@ -32,7 +32,7 @@ describe('logout.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) it('logs out and redirects to login', () => { diff --git a/webapp/pages/map.spec.js b/webapp/pages/map.spec.js index dd2e1e8b0..5dbb34cf8 100644 --- a/webapp/pages/map.spec.js +++ b/webapp/pages/map.spec.js @@ -5,6 +5,8 @@ import VueMeta from 'vue-meta' import Vuex from 'vuex' import Map from './map' +jest.mock('@mapbox/mapbox-gl-geocoder') + jest.mock('mapbox-gl', () => { return { GeolocateControl: jest.fn(), diff --git a/webapp/pages/moderation.spec.js b/webapp/pages/moderation.spec.js index 2eeae9f7c..8cdf755e9 100644 --- a/webapp/pages/moderation.spec.js +++ b/webapp/pages/moderation.spec.js @@ -1,7 +1,9 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import moderation from './moderation.vue' -config.stubs['nuxt-child'] = '' +const stubs = { + 'nuxt-child': true, +} const localVue = global.localVue @@ -20,6 +22,7 @@ describe('moderation.vue', () => { return mount(moderation, { mocks, localVue, + stubs, }) } @@ -28,7 +31,7 @@ describe('moderation.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) }) }) diff --git a/webapp/pages/moderation/index.spec.js b/webapp/pages/moderation/index.spec.js index 249752aa3..d5329e3b5 100644 --- a/webapp/pages/moderation/index.spec.js +++ b/webapp/pages/moderation/index.spec.js @@ -1,8 +1,11 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Moderation from './index.vue' const localVue = global.localVue -config.stubs['client-only'] = '' + +const stubs = { + 'client-only': true, +} describe('moderation/index.vue', () => { let wrapper @@ -16,7 +19,7 @@ describe('moderation/index.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(Moderation, { mocks, localVue }) + return mount(Moderation, { mocks, localVue, stubs }) } beforeEach(() => { @@ -24,7 +27,7 @@ describe('moderation/index.vue', () => { }) it('renders', () => { - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) }) }) diff --git a/webapp/pages/notifications/index.spec.js b/webapp/pages/notifications/index.spec.js index ce18c6a3b..b55426456 100644 --- a/webapp/pages/notifications/index.spec.js +++ b/webapp/pages/notifications/index.spec.js @@ -1,4 +1,4 @@ -import { config, shallowMount, mount } from '@vue/test-utils' +import { shallowMount, mount } from '@vue/test-utils' import NotificationsPage from './index.vue' import DropdownFilter from '~/components/DropdownFilter/DropdownFilter' @@ -7,7 +7,9 @@ import PaginationButtons from '~/components/_new/generic/PaginationButtons/Pagin const localVue = global.localVue -config.stubs['client-only'] = '' +const stubs = { + 'client-only': true, +} describe('PostIndex', () => { let wrapper, Wrapper, mocks, propsData @@ -42,6 +44,7 @@ describe('PostIndex', () => { mocks, localVue, propsData, + stubs, }) } wrapper = Wrapper() @@ -67,6 +70,7 @@ describe('PostIndex', () => { mocks, localVue, propsData, + stubs, }) } }) @@ -79,7 +83,7 @@ describe('PostIndex', () => { { label: 'Unread', value: false }, ] wrapper = Wrapper() - wrapper.find(DropdownFilter).vm.$emit('filter', propsData.filterOptions[1]) + wrapper.findComponent(DropdownFilter).vm.$emit('filter', propsData.filterOptions[1]) }) it('sets `notificationRead` to value of received option', () => { @@ -98,7 +102,9 @@ describe('PostIndex', () => { describe('markNotificationAsRead', () => { beforeEach(() => { wrapper = Wrapper() - wrapper.find(NotificationsTable).vm.$emit('markNotificationAsRead', 'notificationSourceId') + wrapper + .findComponent(NotificationsTable) + .vm.$emit('markNotificationAsRead', 'notificationSourceId') }) it('calls markNotificationAsRead mutation', () => { @@ -112,7 +118,7 @@ describe('PostIndex', () => { mocks.$apollo.mutate = jest.fn().mockRejectedValueOnce({ message: 'Some error message' }) wrapper = Wrapper() wrapper - .find(NotificationsTable) + .findComponent(NotificationsTable) .vm.$emit('markNotificationAsRead', 'notificationSourceId') }) @@ -129,7 +135,7 @@ describe('PostIndex', () => { describe('next: given a user is on the first page', () => { it('adds offset to pageSize to skip first x notifications and display next page', () => { - wrapper.find(PaginationButtons).vm.$emit('next') + wrapper.findComponent(PaginationButtons).vm.$emit('next') expect(wrapper.vm.offset).toEqual(12) }) }) @@ -137,7 +143,7 @@ describe('PostIndex', () => { describe('back: given a user is on the third page', () => { it('sets offset when back is emitted', () => { wrapper.setData({ offset: 24 }) - wrapper.find(PaginationButtons).vm.$emit('back') + wrapper.findComponent(PaginationButtons).vm.$emit('back') expect(wrapper.vm.offset).toEqual(12) }) }) diff --git a/webapp/pages/organization.spec.js b/webapp/pages/organization.spec.js index 413e6218b..1829ac065 100644 --- a/webapp/pages/organization.spec.js +++ b/webapp/pages/organization.spec.js @@ -37,7 +37,7 @@ describe('organization.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBeTruthy() + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', () => { diff --git a/webapp/pages/password-reset.spec.js b/webapp/pages/password-reset.spec.js index 01052e89c..9337d1d59 100644 --- a/webapp/pages/password-reset.spec.js +++ b/webapp/pages/password-reset.spec.js @@ -1,11 +1,13 @@ import Vuex from 'vuex' -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import PasswordReset from './password-reset.vue' const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['nuxt-child'] = '' +const stubs = { + 'client-only': true, + 'nuxt-child': true, +} describe('password-reset.vue', () => { let wrapper @@ -47,12 +49,13 @@ describe('password-reset.vue', () => { return mount(PasswordReset, { mocks, localVue, + stubs, }) } it('renders', async () => { wrapper = await Wrapper() - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) it('renders with asyncData and not loggedIn', async () => { diff --git a/webapp/pages/password-reset/enter-nonce.spec.js b/webapp/pages/password-reset/enter-nonce.spec.js index 664e1f7ca..2835fac4c 100644 --- a/webapp/pages/password-reset/enter-nonce.spec.js +++ b/webapp/pages/password-reset/enter-nonce.spec.js @@ -1,9 +1,11 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import enterNonce from './enter-nonce.vue' const localVue = global.localVue -config.stubs['nuxt-link'] = '' +const stubs = { + 'nuxt-link': true, +} describe('enter-nonce.vue', () => { let wrapper @@ -20,7 +22,7 @@ describe('enter-nonce.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(enterNonce, { mocks, localVue }) + return mount(enterNonce, { mocks, localVue, stubs }) } beforeEach(() => { diff --git a/webapp/pages/password-reset/request.spec.js b/webapp/pages/password-reset/request.spec.js index f9bcefd79..622f377ee 100644 --- a/webapp/pages/password-reset/request.spec.js +++ b/webapp/pages/password-reset/request.spec.js @@ -1,10 +1,11 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import request from './request.vue' const localVue = global.localVue -// config.stubs['sweetalert-icon'] = '' -config.stubs['nuxt-link'] = '' +const stubs = { + 'nuxt-link': true, +} describe('request.vue', () => { let wrapper @@ -29,7 +30,7 @@ describe('request.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(request, { mocks, localVue }) + return mount(request, { mocks, localVue, stubs }) } beforeEach(() => { diff --git a/webapp/pages/profile/_id.spec.js b/webapp/pages/profile/_id.spec.js index aab216569..db65f403e 100644 --- a/webapp/pages/profile/_id.spec.js +++ b/webapp/pages/profile/_id.spec.js @@ -1,9 +1,11 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import _id from './_id.vue' const localVue = global.localVue -config.stubs['nuxt-child'] = '' +const stubs = { + 'nuxt-child': true, +} describe('Profile _id.vue', () => { let wrapper @@ -19,6 +21,7 @@ describe('Profile _id.vue', () => { return mount(_id, { mocks, localVue, + stubs, }) } @@ -27,7 +30,7 @@ describe('Profile _id.vue', () => { }) it('renders', () => { - expect(wrapper.findAll('.nuxt-child')).toHaveLength(1) + expect(wrapper.findComponent({ name: 'nuxt-child' }).exists()).toBe(true) }) }) }) diff --git a/webapp/pages/profile/_id/_slug.spec.js b/webapp/pages/profile/_id/_slug.spec.js index 477174485..8516d5e38 100644 --- a/webapp/pages/profile/_id/_slug.spec.js +++ b/webapp/pages/profile/_id/_slug.spec.js @@ -1,15 +1,17 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import ProfileSlug from './_slug.vue' const localVue = global.localVue localVue.filter('date', (d) => d) -config.stubs['client-only'] = '' -config.stubs['v-popover'] = '' -config.stubs['nuxt-link'] = '' -config.stubs['infinite-loading'] = '' -config.stubs['follow-list'] = '' +const stubs = { + 'client-only': true, + 'v-popover': true, + 'nuxt-link': true, + 'infinite-loading': true, + 'follow-list': true, +} describe('ProfileSlug', () => { let wrapper @@ -51,6 +53,7 @@ describe('ProfileSlug', () => { return mount(ProfileSlug, { mocks, localVue, + stubs, }) } diff --git a/webapp/pages/registration.spec.js b/webapp/pages/registration.spec.js index 3e17619a8..a276c2b8b 100644 --- a/webapp/pages/registration.spec.js +++ b/webapp/pages/registration.spec.js @@ -1,14 +1,16 @@ import Vuex from 'vuex' -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Registration from './registration.vue' import Vue from 'vue' const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['router-link'] = '' -config.stubs['nuxt-link'] = '' -config.stubs['infinite-loading'] = '' +const stubs = { + 'client-only': true, + 'router-link': true, + 'nuxt-link': true, + 'infinite-loading': true, +} describe('Registration', () => { let wrapper @@ -73,6 +75,7 @@ describe('Registration', () => { return mount(Registration, { mocks, localVue, + stubs, }) } @@ -310,7 +313,7 @@ describe('Registration', () => { it('renders', async () => { wrapper = await Wrapper() - expect(wrapper.is('.registration-slider')).toBe(true) + expect(wrapper.classes('registration-slider')).toBe(true) }) // The asyncTests must go last diff --git a/webapp/pages/search/search-results.spec.js b/webapp/pages/search/search-results.spec.js index c594f3e56..083e8a9e9 100644 --- a/webapp/pages/search/search-results.spec.js +++ b/webapp/pages/search/search-results.spec.js @@ -1,11 +1,13 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import searchResults from './search-results.vue' import VueMeta from 'vue-meta' const localVue = global.localVue localVue.use(VueMeta, { keyName: 'head' }) -config.stubs['client-only'] = '' +const stubs = { + 'client-only': true, +} describe('search-results.vue', () => { let wrapper @@ -32,7 +34,7 @@ describe('search-results.vue', () => { return { ...data, ...aData } } } - return mount(searchResults, { mocks, localVue }) + return mount(searchResults, { mocks, localVue, stubs }) } it('renders', async () => { diff --git a/webapp/pages/support.spec.js b/webapp/pages/support.spec.js index bda88a898..57e729796 100644 --- a/webapp/pages/support.spec.js +++ b/webapp/pages/support.spec.js @@ -37,7 +37,7 @@ describe('support.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBeTruthy() + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', () => { diff --git a/webapp/pages/terms-and-conditions-confirm.spec.js b/webapp/pages/terms-and-conditions-confirm.spec.js index 098e73a92..c8faeb6f1 100644 --- a/webapp/pages/terms-and-conditions-confirm.spec.js +++ b/webapp/pages/terms-and-conditions-confirm.spec.js @@ -1,12 +1,14 @@ import Vuex from 'vuex' -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import TermsAndConditionsConfirm from './terms-and-conditions-confirm.vue' import VueMeta from 'vue-meta' const localVue = global.localVue localVue.use(VueMeta, { keyName: 'head' }) -config.stubs['nuxt-link'] = '' +const stubs = { + 'nuxt-link': true, +} describe('terms-and-conditions-confirm.vue', () => { let wrapper @@ -45,12 +47,13 @@ describe('terms-and-conditions-confirm.vue', () => { return mount(TermsAndConditionsConfirm, { mocks, localVue, + stubs, }) } it('renders', async () => { wrapper = await Wrapper() - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', async () => { diff --git a/webapp/pages/terms-and-conditions.spec.js b/webapp/pages/terms-and-conditions.spec.js index 6046c2e41..cc3b5b435 100644 --- a/webapp/pages/terms-and-conditions.spec.js +++ b/webapp/pages/terms-and-conditions.spec.js @@ -33,7 +33,7 @@ describe('terms-and-conditions.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBeTruthy() + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', () => { diff --git a/webapp/yarn.lock b/webapp/yarn.lock index e6974eb5d..f7ac510f5 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -95,14 +95,14 @@ dependencies: xss "^1.0.6" -"@babel/code-frame@7.10.4", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": +"@babel/code-frame@7.10.4", "@babel/code-frame@^7.0.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== @@ -121,6 +121,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1": + version "7.20.14" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.14.tgz#4106fc8b755f3e3ee0a0a7c27dde5de1d2b2baf8" + integrity sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw== + "@babel/compat-data@^7.20.5": version "7.20.10" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" @@ -157,28 +162,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.9.0", "@babel/core@~7.12.3": - version "7.12.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" - integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.1" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.1" - "@babel/parser" "^7.12.3" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - "@babel/core@^7.1.6", "@babel/core@^7.12.10": version "7.14.8" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.8.tgz#20cdf7c84b5d86d83fac8710a8bc605a7ba3f010" @@ -221,6 +204,49 @@ json5 "^2.2.2" semver "^6.3.0" +"@babel/core@^7.9.0": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@~7.12.3": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.17.tgz#993c5e893333107a2815d8e0d73a2c3755e280b2" + integrity sha512-V3CuX1aBywbJvV2yzJScRxeiiw0v2KZZYYE3giywxzFJL13RiyPjaaDwhDnxmgFTTS7FgvM2ijr4QmKNIu0AtQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.12.17" + "@babel/helper-module-transforms" "^7.12.17" + "@babel/helpers" "^7.12.17" + "@babel/parser" "^7.12.17" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.12.17" + "@babel/types" "^7.12.17" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@7.6.4": version "7.6.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" @@ -231,14 +257,14 @@ lodash "^4.17.13" source-map "^0.5.0" -"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" - integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== +"@babel/generator@^7.12.1", "@babel/generator@^7.12.17", "@babel/generator@^7.12.5", "@babel/generator@^7.7.2": + version "7.20.14" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" + integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== dependencies: - "@babel/types" "^7.12.5" + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" - source-map "^0.5.0" "@babel/generator@^7.12.11", "@babel/generator@^7.14.8": version "7.14.8" @@ -258,15 +284,6 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/generator@^7.7.2": - version "7.20.14" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.14.tgz#9fa772c9f86a46c6ac9b321039400712b96f64ce" - integrity sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg== - dependencies: - "@babel/types" "^7.20.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - "@babel/helper-annotate-as-pure@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" @@ -274,6 +291,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-annotate-as-pure@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" @@ -289,6 +313,14 @@ "@babel/helper-explode-assignable-expression" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" @@ -316,7 +348,7 @@ browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.20.7": +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== @@ -350,6 +382,20 @@ "@babel/helper-replace-supers" "^7.14.5" "@babel/helper-split-export-declaration" "^7.14.5" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7": + version "7.20.12" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819" + integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-create-class-features-plugin@^7.8.3": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" @@ -370,6 +416,14 @@ "@babel/helper-annotate-as-pure" "^7.14.5" regexpu-core "^4.7.1" +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" + integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.2.1" + "@babel/helper-create-regexp-features-plugin@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" @@ -424,6 +478,18 @@ resolve "^1.14.2" semver "^6.1.2" +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" @@ -436,6 +502,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-explode-assignable-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" @@ -444,14 +517,13 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== +"@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" "@babel/helper-function-name@^7.14.5": version "7.14.5" @@ -462,14 +534,6 @@ "@babel/template" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-function-name@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" - integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== - dependencies: - "@babel/template" "^7.18.10" - "@babel/types" "^7.19.0" - "@babel/helper-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" @@ -479,13 +543,6 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - "@babel/helper-get-function-arity@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" @@ -521,13 +578,6 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-member-expression-to-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" - integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ== - dependencies: - "@babel/types" "^7.12.1" - "@babel/helper-member-expression-to-functions@^7.14.5", "@babel/helper-member-expression-to-functions@^7.14.7": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" @@ -535,6 +585,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-member-expression-to-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" + integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== + dependencies: + "@babel/types" "^7.20.7" + "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" @@ -549,12 +606,12 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-module-imports@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" - integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== +"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== dependencies: - "@babel/types" "^7.12.5" + "@babel/types" "^7.18.6" "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": version "7.14.5" @@ -563,27 +620,19 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.12.17", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" + integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.9.0": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" - integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== - dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-simple-access" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/helper-validator-identifier" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" - lodash "^4.17.19" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.10" + "@babel/types" "^7.20.7" "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.14.8": version "7.14.8" @@ -599,26 +648,20 @@ "@babel/traverse" "^7.14.8" "@babel/types" "^7.14.8" -"@babel/helper-module-transforms@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" - integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== +"@babel/helper-module-transforms@^7.9.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.10" - "@babel/types" "^7.20.7" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - dependencies: - "@babel/types" "^7.10.4" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" "@babel/helper-optimise-call-expression@^7.14.5": version "7.14.5" @@ -627,6 +670,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" @@ -639,21 +689,16 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - "@babel/helper-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" @@ -670,6 +715,16 @@ "@babel/helper-wrap-function" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-remap-async-to-generator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" @@ -681,15 +736,17 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-replace-supers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" - integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== +"@babel/helper-replace-supers@^7.12.1", "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" + integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== dependencies: - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" "@babel/helper-replace-supers@^7.14.5": version "7.14.5" @@ -721,12 +778,12 @@ "@babel/traverse" "^7.8.6" "@babel/types" "^7.8.6" -"@babel/helper-simple-access@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" - integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== +"@babel/helper-simple-access@^7.12.1", "@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== dependencies: - "@babel/types" "^7.12.1" + "@babel/types" "^7.20.2" "@babel/helper-simple-access@^7.14.5", "@babel/helper-simple-access@^7.14.8": version "7.14.8" @@ -735,13 +792,6 @@ dependencies: "@babel/types" "^7.14.8" -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - "@babel/helper-simple-access@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" @@ -757,12 +807,19 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" "@babel/helper-split-export-declaration@^7.14.5": version "7.14.5" @@ -771,13 +828,6 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" @@ -790,21 +840,16 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.8": version "7.14.8" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz#32be33a756f29e278a0d644fa08a2c9e0f88a34c" integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - "@babel/helper-validator-option@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" @@ -825,6 +870,16 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + "@babel/helper-wrap-function@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" @@ -835,14 +890,14 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helpers@^7.12.1": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" - integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== +"@babel/helpers@^7.12.1", "@babel/helpers@^7.12.17": + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.13.tgz#e3cb731fb70dc5337134cadc24cbbad31cc87ad2" + integrity sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg== dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.5" - "@babel/types" "^7.12.5" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.13" + "@babel/types" "^7.20.7" "@babel/helpers@^7.12.5", "@babel/helpers@^7.14.8": version "7.14.8" @@ -862,12 +917,12 @@ "@babel/traverse" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" @@ -880,16 +935,12 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.17", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5", "@babel/parser@^7.14.7", "@babel/parser@^7.20.13": + version "7.20.15" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" + integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== -"@babel/parser@^7.1.0", "@babel/parser@^7.1.3", "@babel/parser@^7.10.4", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5", "@babel/parser@^7.7.0", "@babel/parser@^7.7.5": +"@babel/parser@^7.1.3", "@babel/parser@^7.7.0": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0" integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ== @@ -904,16 +955,18 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== -"@babel/parser@^7.14.7", "@babel/parser@^7.20.13": - version "7.20.15" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.15.tgz#eec9f36d8eaf0948bb88c87a46784b5ee9fd0c89" - integrity sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg== - "@babel/parser@^7.16.4", "@babel/parser@^7.16.8", "@babel/parser@^7.20.7": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" @@ -923,6 +976,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-proposal-optional-chaining" "^7.14.5" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" + "@babel/plugin-proposal-async-generator-functions@^7.14.7": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" @@ -932,6 +994,16 @@ "@babel/helper-remap-async-to-generator" "^7.14.5" "@babel/plugin-syntax-async-generators" "^7.8.4" +"@babel/plugin-proposal-async-generator-functions@^7.20.1": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-async-generator-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" @@ -949,6 +1021,14 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-proposal-class-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" @@ -966,6 +1046,15 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz#92592e9029b13b15be0f7ce6a7aedc2879ca45a7" + integrity sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-proposal-decorators@^7.12.12": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz#59bc4dfc1d665b5a6749cf798ff42297ed1b2c1d" @@ -992,6 +1081,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" @@ -1016,6 +1113,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-json-strings@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" @@ -1024,6 +1129,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-proposal-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" @@ -1040,6 +1153,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" @@ -1048,6 +1169,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" @@ -1064,6 +1193,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" @@ -1092,6 +1229,17 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.14.5" +"@babel/plugin-proposal-object-rest-spread@^7.20.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + "@babel/plugin-proposal-object-rest-spread@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f" @@ -1108,6 +1256,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" @@ -1125,6 +1281,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz#49f2b372519ab31728cc14115bb0998b15bfda55" + integrity sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" @@ -1141,6 +1306,14 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" @@ -1151,6 +1324,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135" + integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" @@ -1159,6 +1342,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-unicode-property-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": version "7.8.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" @@ -1188,20 +1379,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" - integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" @@ -1251,6 +1435,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -1300,20 +1491,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897" - integrity sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": version "7.8.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.0.tgz#5d8f24ecffa4ae74164e53264953c5ea8ba6d149" @@ -1328,14 +1512,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== @@ -1426,6 +1610,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" + integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-transform-arrow-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" @@ -1442,6 +1633,15 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-transform-async-to-generator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" @@ -1458,6 +1658,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" @@ -1472,6 +1679,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-block-scoping@^7.20.2": + version "7.20.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.15.tgz#3e1b2aa9cbbe1eb8d644c823141a9c5c2a22392d" + integrity sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-transform-block-scoping@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" @@ -1493,6 +1707,21 @@ "@babel/helper-split-export-declaration" "^7.14.5" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.20.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz#f438216f094f6bb31dc266ebfab8ff05aecad073" + integrity sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + "@babel/plugin-transform-classes@^7.9.0": version "7.9.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d" @@ -1514,6 +1743,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" + integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" + "@babel/plugin-transform-computed-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" @@ -1528,6 +1765,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-destructuring@^7.20.2": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz#8bda578f71620c7de7c93af590154ba331415454" + integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-transform-destructuring@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" @@ -1543,6 +1787,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-dotall-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" @@ -1558,6 +1810,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-duplicate-keys@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" @@ -1573,6 +1832,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-exponentiation-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" @@ -1596,6 +1863,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-for-of@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" @@ -1611,6 +1885,15 @@ "@babel/helper-function-name" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" @@ -1626,6 +1909,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" @@ -1640,6 +1930,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-member-expression-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" @@ -1656,6 +1953,14 @@ "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.19.6": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-transform-modules-amd@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4" @@ -1675,6 +1980,15 @@ "@babel/helper-simple-access" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.19.6", "@babel/plugin-transform-modules-commonjs@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607" + integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-simple-access" "^7.20.2" + "@babel/plugin-transform-modules-commonjs@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" @@ -1696,6 +2010,16 @@ "@babel/helper-validator-identifier" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.19.6": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/plugin-transform-modules-systemjs@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90" @@ -1714,6 +2038,14 @@ "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-modules-umd@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" @@ -1729,6 +2061,14 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" @@ -1743,6 +2083,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-new-target@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" @@ -1758,6 +2105,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.14.5" +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/plugin-transform-object-super@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" @@ -1773,6 +2128,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz#0ee349e9d1bc96e78e3b37a7af423a4078a7083f" + integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-transform-parameters@^7.8.7": version "7.8.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.7.tgz#66fa2f1de4129b4e0447509223ac71bda4955395" @@ -1789,6 +2151,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-property-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" @@ -1836,6 +2205,14 @@ dependencies: regenerator-transform "^0.14.2" +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + regenerator-transform "^0.15.1" + "@babel/plugin-transform-regenerator@^7.8.7": version "7.8.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" @@ -1850,6 +2227,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-reserved-words@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" @@ -1874,6 +2258,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-shorthand-properties@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" @@ -1889,6 +2280,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" +"@babel/plugin-transform-spread@^7.19.0": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-transform-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" @@ -1903,6 +2302,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-sticky-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" @@ -1918,6 +2324,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-template-literals@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" @@ -1933,6 +2346,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-typeof-symbol@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" @@ -1956,6 +2376,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-transform-unicode-regex@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" @@ -1964,6 +2391,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-unicode-regex@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" @@ -2051,7 +2486,88 @@ core-js-compat "^3.15.0" semver "^6.3.0" -"@babel/preset-env@^7.9.0", "@babel/preset-env@~7.9.0": +"@babel/preset-env@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" + integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== + dependencies: + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.20.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.20.2" + "@babel/plugin-transform-classes" "^7.20.2" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.20.2" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.19.6" + "@babel/plugin-transform-modules-commonjs" "^7.19.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + +"@babel/preset-env@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ== @@ -2148,6 +2664,17 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + "@babel/preset-react@^7.12.10": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" @@ -2180,6 +2707,11 @@ pirates "^4.0.0" source-map-support "^0.5.16" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/runtime-corejs3@^7.8.3": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.8.4.tgz#ccc4e042e2fae419c67fa709567e5d2179ed3940" @@ -2209,14 +2741,14 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.7.4", "@babel/template@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== +"@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.18.10", "@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@babel/template@^7.12.7", "@babel/template@^7.14.5": version "7.14.5" @@ -2227,15 +2759,6 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@babel/template@^7.3.3": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" @@ -2245,20 +2768,30 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095" - integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA== +"@babel/template@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.5" - "@babel/types" "^7.12.5" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.17", "@babel/traverse@^7.20.13", "@babel/traverse@^7.20.5", "@babel/traverse@^7.7.2": + version "7.20.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" + integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.13" + "@babel/types" "^7.20.7" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.19" "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8": version "7.14.8" @@ -2291,21 +2824,20 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.7.2": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.13.tgz#817c1ba13d11accca89478bd5481b2d168d07473" - integrity sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ== +"@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095" + integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA== dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.19.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.20.13" - "@babel/types" "^7.20.7" + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.5" + "@babel/types" "^7.12.5" debug "^4.1.0" globals "^11.1.0" + lodash "^4.17.19" "@babel/types@7.6.3": version "7.6.3" @@ -2316,13 +2848,13 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.6.3", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.8.7", "@babel/types@^7.9.0": - version "7.12.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96" - integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA== +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.12.1", "@babel/types@^7.12.17", "@babel/types@^7.12.5", "@babel/types@^7.16.8", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.3.0": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" + integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" "@babel/types@^7.12.0", "@babel/types@^7.12.11", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.6.1", "@babel/types@^7.9.6": @@ -2342,13 +2874,13 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.16.8", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" - integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== +"@babel/types@^7.4.4", "@babel/types@^7.6.3", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.8.7", "@babel/types@^7.9.0": + version "7.12.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96" + integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA== dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -2366,14 +2898,6 @@ openurl "1.1.1" yargs "6.6.0" -"@cnakazawa/watch@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" - integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - "@csstools/convert-colors@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" @@ -2662,19 +3186,20 @@ vue "^2.6.10" "@istanbuljs/load-nyc-config@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" - integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" find-up "^4.1.0" + get-package-type "^0.1.0" js-yaml "^3.13.1" resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^29.4.2": version "29.4.2" @@ -2835,28 +3360,6 @@ jest-haste-map "^29.4.2" slash "^3.0.0" -"@jest/transform@^25.3.0": - version "25.3.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.3.0.tgz#083c5447d5307d9b9494d6968115b647460e71f1" - integrity sha512-W01p8kTDvvEX6kd0tJc7Y5VdYyFaKwNWy1HQz6Jqlhu48z/8Gxp+yFCDVj+H8Rc7ezl3Mg0hDaGuFVkmHOqirg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.3.0" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.3" - jest-haste-map "^25.3.0" - jest-regex-util "^25.2.6" - jest-util "^25.3.0" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^2.0.0" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - "@jest/transform@^29.4.2": version "29.4.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.4.2.tgz#b24b72dbab4c8675433a80e222d6a8ef4656fb81" @@ -2878,16 +3381,6 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^25.3.0": - version "25.3.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.3.0.tgz#88f94b277a1d028fd7117bc1f74451e0fc2131e7" - integrity sha512-UkaDNewdqXAmCDbN2GlUM6amDKS78eCqiw/UmF5nE0mmLTd6moJkiZJML/X52Ke3LH7Swhw883IRXq8o9nWjVw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - "@jest/types@^29.4.2": version "29.4.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.2.tgz#8f724a414b1246b2bfd56ca5225d9e1f39540d82" @@ -4833,36 +5326,25 @@ "@types/babel__template" "*" "@types/babel__traverse" "*" -"@types/babel__core@^7.1.7": - version "7.1.7" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" - integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - "@types/babel__generator@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" - integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" - integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw== + version "7.18.3" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== dependencies: "@babel/types" "^7.3.0" @@ -4903,7 +5385,7 @@ dependencies: "@types/color-name" "*" -"@types/color-name@*", "@types/color-name@^1.1.1": +"@types/color-name@*": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== @@ -5057,26 +5539,23 @@ resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-coverage@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== "@types/istanbul-lib-report@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" - integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - "@types/istanbul-reports@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" @@ -5430,16 +5909,9 @@ "@types/node" "*" "@types/yargs-parser@*": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.0.0.tgz#453743c5bbf9f1bed61d959baab5b06be029b2d0" - integrity sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw== - -"@types/yargs@^15.0.0": - version "15.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.1.tgz#9266a9d7be68cfcc982568211085a49a277f7c96" - integrity sha512-sYlwNU7zYi6eZbMzFvG6eHD7VsEvFdoDtlD7eI1JTg7YNnuguzmiGsc6MPSq5l8n+h21AsNof0je+9sgOe4+dg== - dependencies: - "@types/yargs-parser" "*" + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": version "17.0.22" @@ -6176,11 +6648,10 @@ ansi-styles@^4.0.0: color-convert "^2.0.0" ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - "@types/color-name" "^1.1.1" color-convert "^2.0.1" ansi-styles@^5.0.0: @@ -6221,7 +6692,15 @@ anymatch@^3.0.0, anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -anymatch@^3.0.3, anymatch@~3.1.1: +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -6763,7 +7242,7 @@ argparse@^1.0.7: arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -6773,7 +7252,7 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-equal@^1.0.0: version "1.0.0" @@ -6828,7 +7307,7 @@ array-uniq@^1.0.1: array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== array.prototype.flat@^1.2.1: version "1.2.1" @@ -6910,7 +7389,7 @@ assert@^2.0.0: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== assignment@2.0.0: version "2.0.0" @@ -6988,7 +7467,7 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.1: +atob@^2.1.1, atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== @@ -7092,7 +7571,7 @@ babel-helper-vue-jsx-merge-props@^2.0.2: resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" integrity sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg== -babel-jest@^29.4.2: +babel-jest@29.4, babel-jest@^29.4.2: version "29.4.2" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.4.2.tgz#b17b9f64be288040877cbe2649f91ac3b63b2ba6" integrity sha512-vcghSqhtowXPG84posYkkkzcZsdayFkubUgbE3/1tuGbX7AQtwCkkNA/wIbB0BMjuCPoqTkiDyKN7Ty7d3uwNQ== @@ -7105,19 +7584,6 @@ babel-jest@^29.4.2: graceful-fs "^4.2.9" slash "^3.0.0" -babel-jest@~25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.3.0.tgz#999d0c19e8427f66b796bf9ea233eedf087b957c" - integrity sha512-qiXeX1Cmw4JZ5yQ4H57WpkO0MZ61Qj+YnsVUwAMnDV5ls+yHon11XjarDdgP7H8lTmiEi6biiZA8y3Tmvx6pCg== - dependencies: - "@jest/transform" "^25.3.0" - "@jest/types" "^25.3.0" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.3.0" - chalk "^3.0.0" - slash "^3.0.0" - babel-loader@^8.1.0, babel-loader@~8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" @@ -7223,17 +7689,6 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" - babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -7245,13 +7700,6 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.2.6.tgz#2af07632b8ac7aad7d414c1e58425d5fc8e84909" - integrity sha512-qE2xjMathybYxjiGFJg0mLFrz0qNp83aNZycWDY/SuHiZNq+vQfRQtuINqyXyue1ELd8Rd+1OhFSLjms8msMbw== - dependencies: - "@types/babel__traverse" "^7.0.6" - babel-plugin-jest-hoist@^29.4.2: version "29.4.2" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.2.tgz#22aa43e255230f02371ffef1cac7eedef58f60bc" @@ -7312,6 +7760,15 @@ babel-plugin-polyfill-corejs2@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + semver "^6.1.1" + babel-plugin-polyfill-corejs3@^0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" @@ -7328,6 +7785,14 @@ babel-plugin-polyfill-corejs3@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" core-js-compat "^3.14.0" +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + babel-plugin-polyfill-regenerator@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" @@ -7335,6 +7800,13 @@ babel-plugin-polyfill-regenerator@^0.2.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + babel-plugin-require-context-hook@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-require-context-hook/-/babel-plugin-require-context-hook-1.0.0.tgz#3f0e7cce87c338f53639b948632fd4e73834632d" @@ -7379,22 +7851,6 @@ babel-polyfill@6.26.0: core-js "^2.5.0" regenerator-runtime "^0.10.5" -babel-preset-current-node-syntax@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz#fb4a4c51fe38ca60fede1dc74ab35eb843cb41d6" - integrity sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - babel-preset-current-node-syntax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" @@ -7413,14 +7869,6 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.3.0.tgz#9ab40aee52a19bdc52b8b1ec2403d5914ac3d86b" - integrity sha512-tjdvLKNMwDI9r+QWz9sZUQGTq1dpoxjUqFUpEasAc7MOtHg9XuLT2fx0udFG+k1nvMV0WvHHVAN7VmCZ+1Zxbw== - dependencies: - babel-plugin-jest-hoist "^25.2.6" - babel-preset-current-node-syntax "^0.1.2" - babel-preset-jest@^29.4.2: version "29.4.2" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.4.2.tgz#f0b20c6a79a9f155515e72a2d4f537fe002a4e38" @@ -7803,10 +8251,20 @@ browserslist@^4.21.3: node-releases "^2.0.6" update-browserslist-db "^1.0.9" -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= +browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" @@ -8119,12 +8577,10 @@ caniuse-lite@^1.0.30001400: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz#987437b266260b640a23cd18fbddb509d7f69f3e" integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" +caniuse-lite@^1.0.30001449: + version "1.0.30001451" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz#2e197c698fc1373d63e1406d6607ea4617c613f1" + integrity sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w== capture-stack-trace@^1.0.0: version "1.0.1" @@ -8362,11 +8818,6 @@ ci-info@^1.5.0, ci-info@^1.6.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - ci-info@^3.2.0: version "3.8.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" @@ -8618,7 +9069,7 @@ collect-v8-coverage@^1.0.0: collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -8640,7 +9091,7 @@ color-convert@^2.0.0, color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" @@ -8885,13 +9336,18 @@ content-type@^1.0.4, content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.5.0, convert-source-map@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -8943,7 +9399,7 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== copy-to-clipboard@^3.0.8: version "3.2.0" @@ -8967,6 +9423,13 @@ core-js-compat@^3.14.0, core-js-compat@^3.15.0, core-js-compat@^3.8.1: browserslist "^4.16.6" semver "7.0.0" +core-js-compat@^3.25.1: + version "3.28.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.28.0.tgz#c08456d854608a7264530a2afa281fadf20ecee6" + integrity sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg== + dependencies: + browserslist "^4.21.5" + core-js-compat@^3.6.2: version "3.6.3" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.3.tgz#41e281ca771209d5f2eb63ce34f96037d0928538" @@ -9573,7 +10036,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6. dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.0.1, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -9594,6 +10057,13 @@ debug@^3.0.0, debug@^3.0.1, debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" +debug@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -9613,9 +10083,9 @@ decimal.js@^10.4.2: integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== decompress-response@^6.0.0: version "6.0.0" @@ -9671,14 +10141,14 @@ define-properties@^1.1.2, define-properties@^1.1.3: define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -10113,6 +10583,11 @@ electron-to-chromium@^1.4.251: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== +electron-to-chromium@^1.4.284: + version "1.4.295" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz#911d5df67542bf7554336142eb302c5ec90bba66" + integrity sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -10193,13 +10668,20 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: once "^1.4.0" +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + enhanced-resolve@^4.0.0, enhanced-resolve@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" @@ -10392,7 +10874,7 @@ escape-html@~1.0.3: escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: version "2.0.0" @@ -10717,11 +11199,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== - execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -10787,7 +11264,7 @@ exit@^0.1.2: expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -10854,7 +11331,7 @@ extend-shallow@^2.0.1: extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -11016,11 +11493,11 @@ fault@^1.0.2: format "^0.2.2" fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: - bser "^2.0.0" + bser "2.1.1" fbjs@^0.8.0: version "0.8.17" @@ -11107,7 +11584,7 @@ filesize@^3.6.1: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -11288,7 +11765,7 @@ follow-redirects@^1.0.0: for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== forever-agent@~0.6.1: version "0.6.1" @@ -11367,7 +11844,7 @@ forwarded@~0.1.2: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" @@ -11494,16 +11971,16 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" -fsevents@^2.1.2, fsevents@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== - fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -11567,12 +12044,7 @@ generic-names@^2.0.1: dependencies: loader-utils "^1.1.0" -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -gensync@^1.0.0-beta.2: +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -11610,6 +12082,11 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -11649,7 +12126,7 @@ get-stream@^6.0.0, get-stream@^6.0.1: get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== getpass@^0.1.1: version "0.1.7" @@ -11757,7 +12234,7 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.6, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -11769,7 +12246,7 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3: +glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -11964,11 +12441,6 @@ graceful-fs@^4.2.0, graceful-fs@^4.2.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== -graceful-fs@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" @@ -12129,7 +12601,7 @@ has-flag@^2.0.0: has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" @@ -12166,7 +12638,7 @@ has-unicode@^2.0.0: has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -12175,7 +12647,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -12184,12 +12656,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -12806,7 +13278,7 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^3.0.0, indent-string@^3.2.0: version "3.2.0" @@ -12947,7 +13419,7 @@ is-absolute-url@^2.0.0: is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== dependencies: kind-of "^3.0.2" @@ -13037,13 +13509,6 @@ is-ci@^1.0.10: dependencies: ci-info "^1.5.0" -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" @@ -13073,7 +13538,7 @@ is-core-module@^2.9.0: is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== dependencies: kind-of "^3.0.2" @@ -13141,7 +13606,7 @@ is-expression@^4.0.0: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -13258,7 +13723,7 @@ is-npm@^1.0.0: is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" @@ -13301,7 +13766,7 @@ is-plain-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== @@ -13403,7 +13868,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.1" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -13465,19 +13930,19 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isobject@^4.0.0: version "4.0.0" @@ -13497,29 +13962,11 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-coverage@^3.2.0: +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.0.tgz#53321a7970f076262fd3292c8f9b2e4ac544aae1" - integrity sha512-Nm4wVHdo7ZXSG30KjZ2Wl5SU/Bw7bDx1PdaiIFzEStdjs0H12mOTncn1GVYuqQSaZxpg87VGBRsVRPGD2cD1AQ== - dependencies: - "@babel/core" "^7.7.5" - "@babel/parser" "^7.7.5" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" @@ -13720,25 +14167,6 @@ jest-get-type@^29.4.2: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.2.tgz#7cb63f154bca8d8f57364d01614477d466fa43fe" integrity sha512-vERN30V5i2N6lqlFu4ljdTqQAgrkTFMC9xaIIfOPYBw04pufjXRty5RuXBiB1d72tGbURa/UgoiHB90ruOSivg== -jest-haste-map@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.3.0.tgz#b7683031c9c9ddc0521d311564108b244b11e4c6" - integrity sha512-LjXaRa+F8wwtSxo9G+hHD/Cp63PPQzvaBL9XCVoJD2rrcJO0Zr2+YYzAFWWYJ5GlPUkoaJFJtOuk0sL6MJY80A== - dependencies: - "@jest/types" "^25.3.0" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.3" - jest-serializer "^25.2.6" - jest-util "^25.3.0" - jest-worker "^25.2.6" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - which "^2.0.2" - optionalDependencies: - fsevents "^2.1.2" - jest-haste-map@^29.4.2: version "29.4.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.4.2.tgz#9112df3f5121e643f1b2dcbaa86ab11b0b90b49a" @@ -13805,11 +14233,6 @@ jest-pnp-resolver@^1.2.2: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== - jest-regex-util@^29.4.2: version "29.4.2" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.2.tgz#19187cca35d301f8126cf7a021dd4dcb7b58a1ca" @@ -13894,11 +14317,6 @@ jest-runtime@^29.4.2: slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.2.6.tgz#3bb4cc14fe0d8358489dbbefbb8a4e708ce039b7" - integrity sha512-RMVCfZsezQS2Ww4kB5HJTMaMJ0asmC0BHlnobQC6yEtxiFKIxohFA4QSXSabKwSggaNkqxn6Z2VwdFCjhUWuiQ== - jest-snapshot@^29.4.2: version "29.4.2" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.4.2.tgz#ba1fb9abb279fd2c85109ff1757bc56b503bbb3a" @@ -13929,16 +14347,6 @@ jest-snapshot@^29.4.2: pretty-format "^29.4.2" semver "^7.3.5" -jest-util@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.3.0.tgz#e3b0064165818f10d78514696fd25efba82cf049" - integrity sha512-dc625P/KS/CpWTJJJxKc4bA3A6c+PJGBAqS8JTJqx4HqPoKNqXg/Ec8biL2Z1TabwK7E7Ilf0/ukSEXM1VwzNA== - dependencies: - "@jest/types" "^25.3.0" - chalk "^3.0.0" - is-ci "^2.0.0" - make-dir "^3.0.0" - jest-util@^29.4.2: version "29.4.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.2.tgz#3db8580b295df453a97de4a1b42dd2578dabd2c2" @@ -13985,14 +14393,6 @@ jest-worker@^25.1.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.2.6.tgz#d1292625326794ce187c38f51109faced3846c58" - integrity sha512-FJn9XDUSxcOR4cwDzRfL1z56rUofNTFs539FGASpd50RHdb6EVkhxQqktodW2mI49l+W3H+tFJDotCHUQF6dmA== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^26.5.0: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -14080,7 +14480,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.0: +js-yaml@^3.13.0, js-yaml@^3.9.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -14088,6 +14488,14 @@ js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -14238,12 +14646,10 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" - integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== - dependencies: - minimist "^1.2.5" +json5@^2.1.2, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== json5@^2.1.3: version "2.2.0" @@ -14252,11 +14658,6 @@ json5@^2.1.3: dependencies: minimist "^1.2.5" -json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -14356,14 +14757,14 @@ keyv@^4.0.0: kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" @@ -14372,12 +14773,7 @@ kind-of@^5.0.0: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -kind-of@^6.0.3: +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -14906,14 +15302,7 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" - integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== - dependencies: - semver "^6.0.0" - -make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -14932,17 +15321,10 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-obj@^1.0.0: version "1.0.1" @@ -14967,7 +15349,7 @@ map-promisified@^0.4.0: map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" @@ -15191,15 +15573,7 @@ micromatch@^4.0.0: braces "^3.0.1" picomatch "^2.2.3" -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -15348,12 +15722,7 @@ minimist@^0.1.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" integrity sha1-md9lelJXTCHJBXSX33QnkLK0wN4= -minimist@^1.1.1, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -15484,13 +15853,23 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.1, ms@^2.1.1: +ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + murmurhash-js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" @@ -15638,7 +16017,7 @@ node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-ipc@^9.1.1: version "9.1.1" @@ -15690,7 +16069,7 @@ node-loggly-bulk@^2.2.4: node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + integrity sha512-JMaRS9L4wSRIR+6PTVEikTrq/lMGEZR43a48ETeilY0Q0iMwVnccMFrUM1k+tNzmYuIU0Vh710bCUqHX+/+ctQ== node-object-hash@^1.2.0: version "1.4.2" @@ -15730,6 +16109,11 @@ node-releases@^2.0.6: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + node-res@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/node-res/-/node-res-5.0.1.tgz#ffaa462e206509d66d0ba28a4daf1f032daa6460" @@ -15800,7 +16184,7 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: remove-trailing-separator "^1.0.1" @@ -15850,7 +16234,7 @@ npm-packlist@^1.1.6: npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" @@ -15950,7 +16334,7 @@ object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1 object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" @@ -15994,7 +16378,7 @@ object-path@^0.11.4: object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" @@ -16057,7 +16441,7 @@ object.getownpropertydescriptors@^2.1.0: object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" @@ -16086,7 +16470,7 @@ on-headers@^1.0.2, on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -16244,7 +16628,7 @@ p-filter@^2.1.0: p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-finally@^2.0.0: version "2.0.1" @@ -16258,13 +16642,20 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== dependencies: p-try "^2.0.0" +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-limit@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" @@ -16508,7 +16899,7 @@ pascal-case@^3.1.2: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== password-prompt@^1.0.7, password-prompt@^1.1.2: version "1.1.2" @@ -16565,19 +16956,14 @@ path-is-inside@^1.0.1: path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-parse@^1.0.7: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -16644,12 +17030,12 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +picomatch@^2.0.4, picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^2.0.5, picomatch@^2.0.7: +picomatch@^2.0.7: version "2.2.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== @@ -16659,11 +17045,6 @@ picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -picomatch@^2.2.2, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" @@ -16709,7 +17090,7 @@ pino@4.10.2: quick-format-unescaped "^1.1.1" split2 "^2.2.0" -pirates@^4.0.0, pirates@^4.0.1: +pirates@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== @@ -16797,7 +17178,7 @@ popper.js@^1.14.4, popper.js@^1.14.7, popper.js@^1.16.1: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== postcss-attribute-case-insensitive@^4.0.1: version "4.0.1" @@ -18586,11 +18967,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== - recast@0.20.4: version "0.20.4" resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.4.tgz#db55983eac70c46b3fff96c8e467d65ffb4a7abc" @@ -18668,6 +19044,13 @@ refractor@^3.1.0: parse-entities "^2.0.0" prismjs "~1.24.0" +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -18687,6 +19070,11 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" @@ -18715,6 +19103,13 @@ regenerator-transform@^0.14.2: "@babel/runtime" "^7.8.4" private "^0.1.8" +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== + dependencies: + "@babel/runtime" "^7.8.4" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -18777,6 +19172,18 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +regexpu-core@^5.2.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.0.tgz#4d0d044b76fedbad6238703ae84bfdedee2cf074" + integrity sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + registry-auth-token@^3.0.1: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" @@ -18816,6 +19223,13 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + relateurl@0.2.x, relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -18872,7 +19286,7 @@ remark-squeeze-paragraphs@4.0.0: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== renderkid@^2.0.1: version "2.0.3" @@ -18886,14 +19300,14 @@ renderkid@^2.0.1: utila "^0.4.0" repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== request-promise-core@1.1.3: version "1.1.3" @@ -18999,14 +19413,14 @@ resolve-protobuf-schema@^2.1.0: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve.exports@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.0.tgz#c1a0028c2d166ec2fbf7d0644584927e76e7400e" integrity sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.2.0, resolve@^1.5.0, resolve@^1.8.1: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -19021,7 +19435,7 @@ resolve@^1.14.2, resolve@^1.15.1, resolve@^1.19.0: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^1.20.0: +resolve@^1.20.0, resolve@^1.3.2: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -19117,11 +19531,6 @@ rope-sequence@^1.3.0: resolved "https://registry.yarnpkg.com/rope-sequence/-/rope-sequence-1.3.2.tgz#a19e02d72991ca71feb6b5f8a91154e48e3c098b" integrity sha512-ku6MFrwEVSVmXLvy3dYph3LAMNS0890K7fabn+0YIRQ2T96T9F4gkFf0vf0WW0JUraNWwGRtInEpH7yO4tbQZg== -rsvp@^4.8.4: - version "4.8.4" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" - integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== - run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -19178,7 +19587,7 @@ safe-buffer@^5.0.1: safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" @@ -19187,21 +19596,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - sass-loader@~10.1.1: version "10.1.1" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" @@ -19424,20 +19818,10 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -19487,7 +19871,7 @@ shallowequal@1.1.0, shallowequal@^1.1.0: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -19501,7 +19885,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" @@ -19554,12 +19938,7 @@ sigmund@^1.0.1: resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" integrity sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g== -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -19686,7 +20065,18 @@ source-map-js@^0.6.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-resolve@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== @@ -19722,9 +20112,9 @@ source-map-support@^0.5.6: source-map "^0.6.0" source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@0.5.6: version "0.5.6" @@ -19734,7 +20124,7 @@ source-map@0.5.6: source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" @@ -19804,7 +20194,7 @@ split2@^2.2.0: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: version "1.16.1" @@ -19873,7 +20263,7 @@ state-toggle@^1.0.0: static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -20199,7 +20589,7 @@ strip-color@^0.1.0: strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== strip-final-newline@^2.0.0: version "2.0.0" @@ -20321,9 +20711,9 @@ supports-color@^6.1.0: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" @@ -20779,11 +21169,6 @@ tmpl@1.0.5: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -20797,19 +21182,19 @@ to-fast-properties@^1.0.3: to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -21113,13 +21498,6 @@ typed-styles@^0.0.7: resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -21191,6 +21569,11 @@ unicode-canonical-property-names-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" @@ -21199,6 +21582,14 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" @@ -21209,11 +21600,21 @@ unicode-match-property-value-ecmascript@^1.2.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + unicode-property-aliases-ecmascript@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + unified@9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" @@ -21227,14 +21628,14 @@ unified@9.2.0: vfile "^4.0.0" union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" is-extendable "^0.1.1" - set-value "^0.4.3" + set-value "^2.0.1" uniq@^1.0.1: version "1.0.1" @@ -21397,7 +21798,7 @@ unquote@^1.1.0, unquote@~1.1.1: unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -21422,7 +21823,7 @@ upath@^2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.0.9: +update-browserslist-db@^1.0.10, update-browserslist-db@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== @@ -21468,7 +21869,7 @@ uri-js@^4.2.2: urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-loader@^2.3.0: version "2.3.0" @@ -22036,13 +22437,6 @@ w3c-xmlserializer@^4.0.0: dependencies: xml-name-validator "^4.0.0" -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - walker@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" @@ -22330,7 +22724,7 @@ which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -22467,16 +22861,6 @@ write-file-atomic@^2.3.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.1.tgz#558328352e673b5bb192cf86500d60b230667d4b" - integrity sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - write-file-atomic@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" From 038bae557184bfab1499426b844131e0ae58dec7 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 15 Feb 2023 07:56:48 +0100 Subject: [PATCH 08/99] stub router link --- webapp/pages/profile/_id/_slug.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/webapp/pages/profile/_id/_slug.spec.js b/webapp/pages/profile/_id/_slug.spec.js index 8516d5e38..5ab87ad3a 100644 --- a/webapp/pages/profile/_id/_slug.spec.js +++ b/webapp/pages/profile/_id/_slug.spec.js @@ -11,6 +11,7 @@ const stubs = { 'nuxt-link': true, 'infinite-loading': true, 'follow-list': true, + 'router-link': true, } describe('ProfileSlug', () => { From 4ce5bdd6fa6d6acc6a8e95bcdaaa6537d5a4c706 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 15 Feb 2023 10:23:34 +0100 Subject: [PATCH 09/99] get most components working --- .../components/AvatarMenu/AvatarMenu.spec.js | 10 +- .../CommentCard/CommentCard.spec.js | 11 ++- .../CommentList/CommentList.spec.js | 15 +-- .../ComponentSlider/ComponentSlider.spec.js | 2 +- .../ContentMenu/ContentMenu.spec.js | 97 ++++++++++--------- .../ContributionForm/ContributionForm.spec.js | 11 ++- .../components/DeleteData/DeleteData.spec.js | 8 +- webapp/components/Editor/Editor.spec.js | 2 +- .../components/Embed/EmbedComponent.spec.js | 2 +- .../components/EnterNonce/EnterNonce.spec.js | 4 +- webapp/components/Group/GroupForm.spec.js | 8 +- webapp/components/Hashtag/Hashtag.spec.js | 7 +- .../HashtagsFilter/HashtagsFilter.spec.js | 2 +- .../InviteButton/InviteButton.spec.js | 8 +- .../LocaleSwitch/LocaleSwitch.spec.js | 8 +- .../LoginButton/LoginButton.spec.js | 8 +- webapp/components/LoginForm/LoginForm.spec.js | 12 ++- .../MasonryGrid/MasonryGridItem.spec.js | 16 +-- webapp/components/Modal/ConfirmModal.spec.js | 12 ++- .../components/Modal/DeleteUserModal.spec.js | 15 ++- webapp/components/Modal/DisableModal.spec.js | 4 +- webapp/components/Modal/ReportModal.spec.js | 14 ++- .../Notification/Notification.spec.js | 5 +- .../NotificationList/NotificationList.spec.js | 8 +- .../NotificationMenu/NotificationMenu.spec.js | 38 ++++++-- .../NotificationsTable.spec.js | 5 +- .../components/PageFooter/PageFooter.spec.js | 10 +- webapp/components/Password/Change.spec.js | 3 +- .../PasswordReset/ChangePassword.spec.js | 11 ++- .../components/PasswordReset/Request.spec.js | 13 +-- .../components/PostTeaser/PostTeaser.spec.js | 11 ++- webapp/components/Registration/Signup.spec.js | 13 ++- webapp/components/RelativeDateTime/spec.js | 2 +- .../ReleaseModal/ReleaseModal.spec.js | 4 +- .../SocialMedia/SocialMedia.spec.js | 10 +- .../SearchResults/SearchResults.spec.js | 10 +- .../TabNavigation/TabNavigation.spec.js | 8 +- .../FiledReportsTable.spec.js | 5 +- .../features/ProfileList/FollowList.spec.js | 15 +-- .../features/ReportList/ReportList.spec.js | 10 +- .../features/ReportRow/ReportRow.spec.js | 5 +- .../ReportsTable/ReportsTable.spec.js | 10 +- .../features/SearchField/SearchField.spec.js | 9 +- .../generic/SearchPost/SearchPost.spec.js | 4 +- .../SearchableInput/SearchableInput.spec.js | 9 +- 45 files changed, 300 insertions(+), 194 deletions(-) diff --git a/webapp/components/AvatarMenu/AvatarMenu.spec.js b/webapp/components/AvatarMenu/AvatarMenu.spec.js index 5495c9ae6..be34c1804 100644 --- a/webapp/components/AvatarMenu/AvatarMenu.spec.js +++ b/webapp/components/AvatarMenu/AvatarMenu.spec.js @@ -1,11 +1,13 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Vuex from 'vuex' import AvatarMenu from './AvatarMenu.vue' const localVue = global.localVue -config.stubs['nuxt-link'] = '' -config.stubs['router-link'] = '' +const stubs = { + 'nuxt-link': true, + 'router-link': true, +} describe('AvatarMenu.vue', () => { let propsData, getters, wrapper, mocks @@ -34,7 +36,7 @@ describe('AvatarMenu.vue', () => { const store = new Vuex.Store({ getters, }) - return mount(AvatarMenu, { propsData, localVue, store, mocks }) + return mount(AvatarMenu, { propsData, localVue, store, mocks, stubs }) } describe('mount', () => { diff --git a/webapp/components/CommentCard/CommentCard.spec.js b/webapp/components/CommentCard/CommentCard.spec.js index 0ebcb2649..7764afd1e 100644 --- a/webapp/components/CommentCard/CommentCard.spec.js +++ b/webapp/components/CommentCard/CommentCard.spec.js @@ -1,13 +1,10 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import CommentCard from './CommentCard.vue' import Vuex from 'vuex' const localVue = global.localVue localVue.directive('scrollTo', jest.fn()) -config.stubs['client-only'] = '' -config.stubs['nuxt-link'] = '' - describe('CommentCard.vue', () => { let propsData, mocks, stubs, getters, wrapper, Wrapper @@ -46,6 +43,8 @@ describe('CommentCard.vue', () => { } stubs = { ContentViewer: true, + 'client-only': true, + 'nuxt-link': true, } getters = { 'auth/user': () => { @@ -56,7 +55,9 @@ describe('CommentCard.vue', () => { }) describe('mount', () => { - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) Wrapper = () => { const store = new Vuex.Store({ diff --git a/webapp/components/CommentList/CommentList.spec.js b/webapp/components/CommentList/CommentList.spec.js index 39f76ff12..f4195aa41 100644 --- a/webapp/components/CommentList/CommentList.spec.js +++ b/webapp/components/CommentList/CommentList.spec.js @@ -1,4 +1,4 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import CommentList from './CommentList' import Vuex from 'vuex' import Vue from 'vue' @@ -8,10 +8,6 @@ const localVue = global.localVue localVue.filter('truncate', (string) => string) localVue.directive('scrollTo', jest.fn()) -config.stubs['v-popover'] = '' -config.stubs['nuxt-link'] = '' -config.stubs['client-only'] = '' - describe('CommentList.vue', () => { let mocks, store, wrapper, propsData, stubs @@ -72,7 +68,10 @@ describe('CommentList.vue', () => { }, } stubs = { - EditorContent: "
", + EditorContent: true, + 'v-popover': true, + 'nuxt-link': true, + 'client-only': true, } }) @@ -92,7 +91,9 @@ describe('CommentList.vue', () => { }) describe('scrollToAnchor mixin', () => { - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) describe('$route.hash !== `#comments`', () => { it('skips $scrollTo', () => { diff --git a/webapp/components/ComponentSlider/ComponentSlider.spec.js b/webapp/components/ComponentSlider/ComponentSlider.spec.js index 25bf3e7f4..0f1f345e9 100644 --- a/webapp/components/ComponentSlider/ComponentSlider.spec.js +++ b/webapp/components/ComponentSlider/ComponentSlider.spec.js @@ -52,7 +52,7 @@ describe('ComponentSlider.vue', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBe(true) + expect(wrapper.element.tagName).toBe('DIV') }) it('click on next Button', async () => { diff --git a/webapp/components/ContentMenu/ContentMenu.spec.js b/webapp/components/ContentMenu/ContentMenu.spec.js index 37bef14f6..0bd398e41 100644 --- a/webapp/components/ContentMenu/ContentMenu.spec.js +++ b/webapp/components/ContentMenu/ContentMenu.spec.js @@ -1,4 +1,4 @@ -import { config, mount, createLocalVue } from '@vue/test-utils' +import { mount, createLocalVue } from '@vue/test-utils' import Vuex from 'vuex' import VTooltip from 'v-tooltip' import Styleguide from '@human-connection/styleguide' @@ -10,7 +10,11 @@ localVue.use(Styleguide) localVue.use(VTooltip) localVue.use(Vuex) -config.stubs['router-link'] = '' +const stubs = { + 'router-link': { + template: '', + }, +} let getters, mutations, mocks, menuToggle, openModalSpy @@ -36,7 +40,7 @@ describe('ContentMenu.vue', () => { 'auth/isAdmin': () => false, } - const openContentMenu = (values = {}) => { + const openContentMenu = async (values = {}) => { const store = new Vuex.Store({ mutations, getters }) const wrapper = mount(ContentMenu, { propsData: { @@ -45,16 +49,17 @@ describe('ContentMenu.vue', () => { mocks, store, localVue, + stubs, }) menuToggle = wrapper.find('[data-test="content-menu-button"]') - menuToggle.trigger('click') + await menuToggle.trigger('click') return wrapper } describe('owner of contribution', () => { let wrapper - beforeEach(() => { - wrapper = openContentMenu({ + beforeEach(async () => { + wrapper = await openContentMenu({ isOwner: true, resourceType: 'contribution', resource: { @@ -86,9 +91,9 @@ describe('ContentMenu.vue', () => { }) describe('admin can', () => { - it('pin unpinned post', () => { + it('pin unpinned post', async () => { getters['auth/isAdmin'] = () => true - const wrapper = openContentMenu({ + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'contribution', resource: { @@ -111,8 +116,8 @@ describe('ContentMenu.vue', () => { ]) }) - it('unpin pinned post', () => { - const wrapper = openContentMenu({ + it('unpin pinned post', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'contribution', resource: { @@ -135,11 +140,11 @@ describe('ContentMenu.vue', () => { ]) }) - it('can delete another user', () => { + it('can delete another user', async () => { getters['auth/user'] = () => { return { id: 'some-user', slug: 'some-user' } } - const wrapper = openContentMenu({ + const wrapper = await openContentMenu({ resourceType: 'user', resource: { id: 'another-user', @@ -161,8 +166,8 @@ describe('ContentMenu.vue', () => { ]) }) - it('can not delete the own account', () => { - const wrapper = openContentMenu({ + it('can not delete the own account', async () => { + const wrapper = await openContentMenu({ resourceType: 'user', resource: { id: 'some-user', @@ -179,8 +184,8 @@ describe('ContentMenu.vue', () => { describe('owner of comment can', () => { let wrapper - beforeEach(() => { - wrapper = openContentMenu({ + beforeEach(async () => { + wrapper = await openContentMenu({ isOwner: true, resourceType: 'comment', resource: { @@ -208,10 +213,10 @@ describe('ContentMenu.vue', () => { }) describe('reporting', () => { - it('a post of another user is possible', () => { + it('a post of another user is possible', async () => { getters['auth/isAdmin'] = () => false getters['auth/isModerator'] = () => false - const wrapper = openContentMenu({ + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'contribution', resource: { @@ -227,8 +232,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('report') }) - it('a comment of another user is possible', () => { - const wrapper = openContentMenu({ + it('a comment of another user is possible', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'comment', resource: { @@ -244,8 +249,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('report') }) - it('another user is possible', () => { - const wrapper = openContentMenu({ + it('another user is possible', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'user', resource: { @@ -261,8 +266,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('report') }) - it('another organization is possible', () => { - const wrapper = openContentMenu({ + it('another organization is possible', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'organization', resource: { @@ -280,10 +285,10 @@ describe('ContentMenu.vue', () => { }) describe('moderator', () => { - it('can disable posts', () => { + it('can disable posts', async () => { getters['auth/isAdmin'] = () => false getters['auth/isModerator'] = () => true - const wrapper = openContentMenu({ + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'contribution', resource: { @@ -300,8 +305,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('disable') }) - it('can disable comments', () => { - const wrapper = openContentMenu({ + it('can disable comments', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'comment', resource: { @@ -318,8 +323,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('disable') }) - it('can disable users', () => { - const wrapper = openContentMenu({ + it('can disable users', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'user', resource: { @@ -336,8 +341,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('disable') }) - it('can disable organizations', () => { - const wrapper = openContentMenu({ + it('can disable organizations', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'organization', resource: { @@ -354,8 +359,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('disable') }) - it('can release posts', () => { - const wrapper = openContentMenu({ + it('can release posts', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'contribution', resource: { @@ -372,8 +377,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('release') }) - it('can release comments', () => { - const wrapper = openContentMenu({ + it('can release comments', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'comment', resource: { @@ -390,8 +395,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('release') }) - it('can release users', () => { - const wrapper = openContentMenu({ + it('can release users', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'user', resource: { @@ -408,8 +413,8 @@ describe('ContentMenu.vue', () => { expect(openModalSpy).toHaveBeenCalledWith('release') }) - it('can release organizations', () => { - const wrapper = openContentMenu({ + it('can release organizations', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'organization', resource: { @@ -428,10 +433,10 @@ describe('ContentMenu.vue', () => { }) describe('user', () => { - it('can access settings', () => { + it('can access settings', async () => { getters['auth/isAdmin'] = () => false getters['auth/isModerator'] = () => false - const wrapper = openContentMenu({ + const wrapper = await openContentMenu({ isOwner: true, resourceType: 'user', resource: { @@ -448,8 +453,8 @@ describe('ContentMenu.vue', () => { ).toBe('/settings') }) - it('can mute other users', () => { - const wrapper = openContentMenu({ + it('can mute other users', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'user', resource: { @@ -472,8 +477,8 @@ describe('ContentMenu.vue', () => { ]) }) - it('can unmute muted users', () => { - const wrapper = openContentMenu({ + it('can unmute muted users', async () => { + const wrapper = await openContentMenu({ isOwner: false, resourceType: 'user', resource: { diff --git a/webapp/components/ContributionForm/ContributionForm.spec.js b/webapp/components/ContributionForm/ContributionForm.spec.js index 1ef1777fe..8ebd7d4de 100644 --- a/webapp/components/ContributionForm/ContributionForm.spec.js +++ b/webapp/components/ContributionForm/ContributionForm.spec.js @@ -1,4 +1,4 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import ContributionForm from './ContributionForm.vue' import Vuex from 'vuex' @@ -11,9 +11,11 @@ global.MutationObserver = MutationObserver const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['nuxt-link'] = '' -config.stubs['v-popover'] = '' +const stubs = { + 'client-only': true, + 'nuxt-link': true, + 'v-popover': true, +} describe('ContributionForm.vue', () => { let wrapper, postTitleInput, expectedParams, cancelBtn, mocks, propsData @@ -88,6 +90,7 @@ describe('ContributionForm.vue', () => { localVue, store, propsData, + stubs, }) } diff --git a/webapp/components/DeleteData/DeleteData.spec.js b/webapp/components/DeleteData/DeleteData.spec.js index c540c9832..f34b2fe6f 100644 --- a/webapp/components/DeleteData/DeleteData.spec.js +++ b/webapp/components/DeleteData/DeleteData.spec.js @@ -115,9 +115,9 @@ describe('DeleteData.vue', () => { enableContributionDeletionCheckbox = wrapper.find( '[data-test="contributions-deletion-checkbox"]', ) - enableContributionDeletionCheckbox.trigger('click') + enableContributionDeletionCheckbox.setChecked(true) enableCommentDeletionCheckbox = wrapper.find('[data-test="comments-deletion-checkbox"]') - enableCommentDeletionCheckbox.trigger('click') + enableCommentDeletionCheckbox.setChecked(true) deleteAccountBtn.trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith( expect.objectContaining({ @@ -133,7 +133,7 @@ describe('DeleteData.vue', () => { enableContributionDeletionCheckbox = wrapper.find( '[data-test="contributions-deletion-checkbox"]', ) - enableContributionDeletionCheckbox.trigger('click') + enableContributionDeletionCheckbox.setChecked(true) deleteAccountBtn.trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith( expect.objectContaining({ @@ -147,7 +147,7 @@ describe('DeleteData.vue', () => { it("deletes a user's comments if requested", () => { enableCommentDeletionCheckbox = wrapper.find('[data-test="comments-deletion-checkbox"]') - enableCommentDeletionCheckbox.trigger('click') + enableCommentDeletionCheckbox.setChecked(true) deleteAccountBtn.trigger('click') expect(mocks.$apollo.mutate).toHaveBeenCalledWith( expect.objectContaining({ diff --git a/webapp/components/Editor/Editor.spec.js b/webapp/components/Editor/Editor.spec.js index f51c5782f..98c287ced 100644 --- a/webapp/components/Editor/Editor.spec.js +++ b/webapp/components/Editor/Editor.spec.js @@ -35,7 +35,7 @@ describe('Editor.vue', () => { describe('mount', () => { it('renders', () => { - expect(Wrapper().is('div')).toBe(true) + expect(Wrapper().element.tagName).toBe('DIV') }) describe('given a piece of text', () => { diff --git a/webapp/components/Embed/EmbedComponent.spec.js b/webapp/components/Embed/EmbedComponent.spec.js index cd3526368..0d20f969f 100644 --- a/webapp/components/Embed/EmbedComponent.spec.js +++ b/webapp/components/Embed/EmbedComponent.spec.js @@ -160,7 +160,7 @@ describe('EmbedComponent.vue', () => { describe('sets permanently', () => { beforeEach(() => { - wrapper.find('input[type=checkbox]').trigger('click') + wrapper.find('input[type=checkbox]').setChecked(true) wrapper.find('[data-test="play-now-button"]').trigger('click') }) diff --git a/webapp/components/EnterNonce/EnterNonce.spec.js b/webapp/components/EnterNonce/EnterNonce.spec.js index a1f2e6b94..e75c8cf49 100644 --- a/webapp/components/EnterNonce/EnterNonce.spec.js +++ b/webapp/components/EnterNonce/EnterNonce.spec.js @@ -19,7 +19,9 @@ describe('EnterNonce ', () => { }) describe('mount', () => { - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) Wrapper = () => { return mount(EnterNonce, { diff --git a/webapp/components/Group/GroupForm.spec.js b/webapp/components/Group/GroupForm.spec.js index 0300bacd0..0eb503856 100644 --- a/webapp/components/Group/GroupForm.spec.js +++ b/webapp/components/Group/GroupForm.spec.js @@ -1,9 +1,11 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import GroupForm from './GroupForm.vue' const localVue = global.localVue -config.stubs['nuxt-link'] = '' +const stubs = { + 'nuxt-link': true, +} const propsData = { update: false, @@ -25,7 +27,7 @@ describe('GroupForm', () => { describe('mount', () => { const Wrapper = () => { - return mount(GroupForm, { propsData, mocks, localVue }) + return mount(GroupForm, { propsData, mocks, localVue, stubs }) } beforeEach(() => { diff --git a/webapp/components/Hashtag/Hashtag.spec.js b/webapp/components/Hashtag/Hashtag.spec.js index 4a420d7d8..873919e20 100644 --- a/webapp/components/Hashtag/Hashtag.spec.js +++ b/webapp/components/Hashtag/Hashtag.spec.js @@ -1,10 +1,12 @@ -import { config, shallowMount } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Hashtag from './Hashtag' const localVue = global.localVue -config.stubs['nuxt-link'] = '' +const stubs = { + 'nuxt-link': true, +} describe('Hashtag', () => { let id @@ -15,6 +17,7 @@ describe('Hashtag', () => { propsData: { id, }, + stubs, }) } diff --git a/webapp/components/HashtagsFilter/HashtagsFilter.spec.js b/webapp/components/HashtagsFilter/HashtagsFilter.spec.js index 3318ed7c0..07496c9fc 100644 --- a/webapp/components/HashtagsFilter/HashtagsFilter.spec.js +++ b/webapp/components/HashtagsFilter/HashtagsFilter.spec.js @@ -29,7 +29,7 @@ describe('HashtagsFilter.vue', () => { it('renders a card', () => { wrapper = Wrapper() - expect(wrapper.is('.base-card')).toBe(true) + expect(wrapper.classes('base-card')).toBe(true) }) describe('click clear search button', () => { diff --git a/webapp/components/InviteButton/InviteButton.spec.js b/webapp/components/InviteButton/InviteButton.spec.js index f28045612..fde1afd1d 100644 --- a/webapp/components/InviteButton/InviteButton.spec.js +++ b/webapp/components/InviteButton/InviteButton.spec.js @@ -1,7 +1,9 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import InviteButton from './InviteButton.vue' -config.stubs['v-popover'] = '' +const stubs = { + 'v-popover': true, +} describe('InviteButton.vue', () => { let wrapper @@ -22,7 +24,7 @@ describe('InviteButton.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(InviteButton, { mocks, propsData }) + return mount(InviteButton, { mocks, propsData, stubs }) } beforeEach(() => { diff --git a/webapp/components/LocaleSwitch/LocaleSwitch.spec.js b/webapp/components/LocaleSwitch/LocaleSwitch.spec.js index 800309bfc..158624f18 100644 --- a/webapp/components/LocaleSwitch/LocaleSwitch.spec.js +++ b/webapp/components/LocaleSwitch/LocaleSwitch.spec.js @@ -1,11 +1,13 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import LocaleSwitch from './LocaleSwitch.vue' import Vuex from 'vuex' const localVue = global.localVue -config.stubs['client-only'] = '' +const stubs = { + 'client-only': true, +} describe('LocaleSwitch.vue', () => { let wrapper, mocks, computed, deutschLanguageItem, getters @@ -65,7 +67,7 @@ describe('LocaleSwitch.vue', () => { const store = new Vuex.Store({ getters, }) - return mount(LocaleSwitch, { mocks, localVue, computed, store }) + return mount(LocaleSwitch, { mocks, localVue, computed, store, stubs }) } describe('with current user', () => { diff --git a/webapp/components/LoginButton/LoginButton.spec.js b/webapp/components/LoginButton/LoginButton.spec.js index 62e663714..c288b73d3 100644 --- a/webapp/components/LoginButton/LoginButton.spec.js +++ b/webapp/components/LoginButton/LoginButton.spec.js @@ -1,7 +1,9 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import LoginButton from './LoginButton.vue' -config.stubs['v-popover'] = '' +const stubs = { + 'v-popover': true, +} describe('LoginButton.vue', () => { let wrapper @@ -22,7 +24,7 @@ describe('LoginButton.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(LoginButton, { mocks, propsData }) + return mount(LoginButton, { mocks, propsData, stubs }) } beforeEach(() => { diff --git a/webapp/components/LoginForm/LoginForm.spec.js b/webapp/components/LoginForm/LoginForm.spec.js index 10fc2c622..e0972b453 100644 --- a/webapp/components/LoginForm/LoginForm.spec.js +++ b/webapp/components/LoginForm/LoginForm.spec.js @@ -2,15 +2,17 @@ import Vue from 'vue' import LoginForm from './LoginForm.vue' import Styleguide from '@human-connection/styleguide' import Vuex from 'vuex' -import { config, mount, createLocalVue } from '@vue/test-utils' +import { mount, createLocalVue } from '@vue/test-utils' const localVue = createLocalVue() localVue.use(Vuex) localVue.use(Styleguide) -config.stubs['nuxt-link'] = '' -config.stubs['locale-switch'] = '' -config.stubs['client-only'] = '' +const stubs = { + 'nuxt-link': true, + 'locale-switch': true, + 'client-only': true, +} const authUserMock = jest.fn().mockReturnValue({ activeCategories: [] }) @@ -46,7 +48,7 @@ describe('LoginForm', () => { error: jest.fn(), }, } - return mount(LoginForm, { mocks, localVue, propsData, store }) + return mount(LoginForm, { mocks, localVue, propsData, store, stubs }) } describe('fill in email and password and submit', () => { diff --git a/webapp/components/MasonryGrid/MasonryGridItem.spec.js b/webapp/components/MasonryGrid/MasonryGridItem.spec.js index 86233efc9..26309f00d 100644 --- a/webapp/components/MasonryGrid/MasonryGridItem.spec.js +++ b/webapp/components/MasonryGrid/MasonryGridItem.spec.js @@ -1,9 +1,11 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import MasonryGridItem from './MasonryGridItem' const localVue = global.localVue -config.stubs['ds-grid-item'] = '' +const stubs = { + 'ds-grid-item': true, +} describe('MasonryGridItem', () => { let wrapper @@ -11,34 +13,34 @@ describe('MasonryGridItem', () => { describe('given an imageAspectRatio', () => { it('sets the initial rowSpan to 13 when the ratio is higher than 1.3', () => { const propsData = { imageAspectRatio: 2 } - wrapper = mount(MasonryGridItem, { localVue, propsData }) + wrapper = mount(MasonryGridItem, { localVue, propsData, stubs }) expect(wrapper.vm.rowSpan).toBe(13) }) it('sets the initial rowSpan to 15 when the ratio is between 1.3 and 1', () => { const propsData = { imageAspectRatio: 1.1 } - wrapper = mount(MasonryGridItem, { localVue, propsData }) + wrapper = mount(MasonryGridItem, { localVue, propsData, stubs }) expect(wrapper.vm.rowSpan).toBe(15) }) it('sets the initial rowSpan to 18 when the ratio is between 1 and 0.7', () => { const propsData = { imageAspectRatio: 0.7 } - wrapper = mount(MasonryGridItem, { localVue, propsData }) + wrapper = mount(MasonryGridItem, { localVue, propsData, stubs }) expect(wrapper.vm.rowSpan).toBe(18) }) it('sets the initial rowSpan to 25 when the ratio is lower than 0.7', () => { const propsData = { imageAspectRatio: 0.3 } - wrapper = mount(MasonryGridItem, { localVue, propsData }) + wrapper = mount(MasonryGridItem, { localVue, propsData, stubs }) expect(wrapper.vm.rowSpan).toBe(25) }) describe('given no aspect ratio', () => { it('sets the initial rowSpan to 8 when not given an imageAspectRatio', () => { - wrapper = mount(MasonryGridItem, { localVue }) + wrapper = mount(MasonryGridItem, { localVue, stubs }) expect(wrapper.vm.rowSpan).toBe(8) }) }) diff --git a/webapp/components/Modal/ConfirmModal.spec.js b/webapp/components/Modal/ConfirmModal.spec.js index 6d7d0ccf6..28fef3058 100644 --- a/webapp/components/Modal/ConfirmModal.spec.js +++ b/webapp/components/Modal/ConfirmModal.spec.js @@ -1,11 +1,13 @@ -import { config, shallowMount, mount } from '@vue/test-utils' +import { shallowMount, mount } from '@vue/test-utils' import ConfirmModal from './ConfirmModal.vue' import { postMenuModalsData } from '~/components/utils/PostHelpers' const localVue = global.localVue -config.stubs['sweetalert-icon'] = '' +const stubs = { + 'sweetalert-icon': true, +} describe('ConfirmModal.vue', () => { let Wrapper @@ -41,6 +43,7 @@ describe('ConfirmModal.vue', () => { propsData, mocks, localVue, + stubs, }) } @@ -90,10 +93,13 @@ describe('ConfirmModal.vue', () => { propsData, mocks, localVue, + stubs, }) } - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) describe('given post id', () => { beforeEach(() => { diff --git a/webapp/components/Modal/DeleteUserModal.spec.js b/webapp/components/Modal/DeleteUserModal.spec.js index d2f28e8b0..1a1c152cd 100644 --- a/webapp/components/Modal/DeleteUserModal.spec.js +++ b/webapp/components/Modal/DeleteUserModal.spec.js @@ -1,9 +1,12 @@ -import { config, mount, shallowMount } from '@vue/test-utils' +import { mount, shallowMount } from '@vue/test-utils' import Vuex from 'vuex' import DeleteUserModal from './DeleteUserModal.vue' const localVue = global.localVue -config.stubs['sweetalert-icon'] = '' -config.stubs['nuxt-link'] = '' + +const stubs = { + 'sweetalert-icon': true, + 'nuxt-link': true, +} localVue.use(DeleteUserModal) @@ -49,6 +52,7 @@ describe('DeleteUserModal.vue', () => { mocks, store, localVue, + stubs, }) } @@ -74,9 +78,12 @@ describe('DeleteUserModal.vue', () => { mocks, store, localVue, + stubs, }) } - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) describe('given another user', () => { beforeEach(() => { diff --git a/webapp/components/Modal/DisableModal.spec.js b/webapp/components/Modal/DisableModal.spec.js index b7e52b5a0..0a7ffe25b 100644 --- a/webapp/components/Modal/DisableModal.spec.js +++ b/webapp/components/Modal/DisableModal.spec.js @@ -102,7 +102,9 @@ describe('DisableModal.vue', () => { localVue, }) } - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) describe('given id', () => { beforeEach(() => { diff --git a/webapp/components/Modal/ReportModal.spec.js b/webapp/components/Modal/ReportModal.spec.js index 999adacb4..d993e8103 100644 --- a/webapp/components/Modal/ReportModal.spec.js +++ b/webapp/components/Modal/ReportModal.spec.js @@ -1,10 +1,12 @@ -import { config, shallowMount, mount } from '@vue/test-utils' +import { shallowMount, mount } from '@vue/test-utils' import ReportModal from './ReportModal.vue' import Vue from 'vue' const localVue = global.localVue -config.stubs['sweetalert-icon'] = '' +const stubs = { + 'sweetalert-icon': true, +} describe('ReportModal.vue', () => { let wrapper @@ -39,6 +41,7 @@ describe('ReportModal.vue', () => { propsData, mocks, localVue, + stubs, }) } @@ -109,13 +112,16 @@ describe('ReportModal.vue', () => { propsData, mocks, localVue, + stubs, }) } - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) it('renders', () => { - expect(Wrapper().is('div')).toBe(true) + expect(Wrapper().element.tagName).toBe('DIV') }) describe('given id', () => { diff --git a/webapp/components/Notification/Notification.spec.js b/webapp/components/Notification/Notification.spec.js index 879bbfb7d..844f78e71 100644 --- a/webapp/components/Notification/Notification.spec.js +++ b/webapp/components/Notification/Notification.spec.js @@ -1,12 +1,10 @@ -import { config, mount, RouterLinkStub } from '@vue/test-utils' +import { mount, RouterLinkStub } from '@vue/test-utils' import Notification from './Notification.vue' import Vuex from 'vuex' const localVue = global.localVue -config.stubs['client-only'] = '' - describe('Notification', () => { let stubs let getters @@ -20,6 +18,7 @@ describe('Notification', () => { } stubs = { NuxtLink: RouterLinkStub, + 'client-only': true, } getters = { 'auth/user': () => { diff --git a/webapp/components/NotificationList/NotificationList.spec.js b/webapp/components/NotificationList/NotificationList.spec.js index 219c1fdbb..4c6d3690a 100644 --- a/webapp/components/NotificationList/NotificationList.spec.js +++ b/webapp/components/NotificationList/NotificationList.spec.js @@ -1,4 +1,4 @@ -import { config, shallowMount, mount, RouterLinkStub } from '@vue/test-utils' +import { shallowMount, mount, RouterLinkStub } from '@vue/test-utils' import NotificationList from './NotificationList' import Notification from '../Notification/Notification' import Vuex from 'vuex' @@ -9,9 +9,6 @@ const localVue = global.localVue localVue.filter('truncate', (string) => string) -config.stubs['client-only'] = '' -config.stubs['v-popover'] = '' - describe('NotificationList.vue', () => { let wrapper let mocks @@ -33,6 +30,8 @@ describe('NotificationList.vue', () => { } stubs = { NuxtLink: RouterLinkStub, + 'client-only': true, + 'v-popover': true, } propsData = { notifications } }) @@ -44,6 +43,7 @@ describe('NotificationList.vue', () => { mocks, store, localVue, + stubs, }) } diff --git a/webapp/components/NotificationMenu/NotificationMenu.spec.js b/webapp/components/NotificationMenu/NotificationMenu.spec.js index 3986471fd..448ea37e4 100644 --- a/webapp/components/NotificationMenu/NotificationMenu.spec.js +++ b/webapp/components/NotificationMenu/NotificationMenu.spec.js @@ -1,12 +1,10 @@ -import { config, mount, RouterLinkStub } from '@vue/test-utils' +import { mount, RouterLinkStub } from '@vue/test-utils' import NotificationMenu from './NotificationMenu' const localVue = global.localVue localVue.filter('truncate', (string) => string) -config.stubs.dropdown = '' - describe('NotificationMenu.vue', () => { let wrapper let mocks @@ -23,6 +21,8 @@ describe('NotificationMenu.vue', () => { } stubs = { NuxtLink: RouterLinkStub, + UserTeaser: true, + 'client-only': true, } }) @@ -38,13 +38,13 @@ describe('NotificationMenu.vue', () => { it('renders as link without counter', () => { wrapper = Wrapper() - expect(wrapper.is('a.notifications-menu')).toBe(true) + expect(wrapper.classes('notifications-menu')).toBe(true) expect(() => wrapper.get('.count')).toThrow() }) it('no dropdown is rendered', () => { wrapper = Wrapper() - expect(wrapper.contains('.dropdown')).toBe(false) + expect(wrapper.find('.dropdown').exists()).toBe(false) }) describe('given only read notifications', () => { @@ -73,13 +73,13 @@ describe('NotificationMenu.vue', () => { it('renders as link without counter', () => { wrapper = Wrapper() - expect(wrapper.is('a.notifications-menu')).toBe(true) + expect(wrapper.classes('notifications-menu')).toBe(true) expect(() => wrapper.get('.count')).toThrow() }) it('no dropdown is rendered', () => { wrapper = Wrapper() - expect(wrapper.contains('.dropdown')).toBe(false) + expect(wrapper.find('.dropdown').exists()).toBe(false) }) }) @@ -101,6 +101,14 @@ describe('NotificationMenu.vue', () => { name: 'John Doe', }, }, + from: { + title: 'Title', + author: { + id: 'reporter', + slug: 'reporter', + name: 'reporter', + }, + }, }, { id: 'notification-42', @@ -115,6 +123,14 @@ describe('NotificationMenu.vue', () => { name: 'John Doe', }, }, + from: { + title: 'Title', + author: { + id: 'reporter', + slug: 'reporter', + name: 'reporter', + }, + }, }, { id: 'notification-43', @@ -129,6 +145,14 @@ describe('NotificationMenu.vue', () => { name: 'John Doe', }, }, + from: { + title: 'Title', + author: { + id: 'reporter', + slug: 'reporter', + name: 'reporter', + }, + }, }, ], } diff --git a/webapp/components/NotificationsTable/NotificationsTable.spec.js b/webapp/components/NotificationsTable/NotificationsTable.spec.js index b502b5982..e48610034 100644 --- a/webapp/components/NotificationsTable/NotificationsTable.spec.js +++ b/webapp/components/NotificationsTable/NotificationsTable.spec.js @@ -1,4 +1,4 @@ -import { config, mount, RouterLinkStub } from '@vue/test-utils' +import { mount, RouterLinkStub } from '@vue/test-utils' import Vuex from 'vuex' import NotificationsTable from './NotificationsTable' @@ -8,8 +8,6 @@ const localVue = global.localVue localVue.filter('truncate', (string) => string) -config.stubs['client-only'] = '' - describe('NotificationsTable.vue', () => { let wrapper, mocks, propsData, stubs const postNotification = notifications[0] @@ -21,6 +19,7 @@ describe('NotificationsTable.vue', () => { } stubs = { NuxtLink: RouterLinkStub, + 'client-only': true, } propsData = {} }) diff --git a/webapp/components/PageFooter/PageFooter.spec.js b/webapp/components/PageFooter/PageFooter.spec.js index 53302192a..b02541fbf 100644 --- a/webapp/components/PageFooter/PageFooter.spec.js +++ b/webapp/components/PageFooter/PageFooter.spec.js @@ -1,10 +1,14 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import PageFooter from './PageFooter.vue' import linksDefault from '~/constants/links.js' const localVue = global.localVue -config.stubs['nuxt-link'] = '' +const stubs = { + 'nuxt-link': { + template: '', + }, +} describe('PageFooter.vue', () => { let mocks @@ -21,7 +25,7 @@ describe('PageFooter.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(PageFooter, { mocks, localVue }) + return mount(PageFooter, { mocks, localVue, stubs }) } describe('links.js', () => { diff --git a/webapp/components/Password/Change.spec.js b/webapp/components/Password/Change.spec.js index 95b7c1a3a..ea5c392a9 100644 --- a/webapp/components/Password/Change.spec.js +++ b/webapp/components/Password/Change.spec.js @@ -90,9 +90,8 @@ describe('ChangePassword.vue', () => { }) describe('submit form', () => { - beforeEach(async (done) => { + beforeEach(async () => { await wrapper.find('form').trigger('submit') - done() }) it('calls changePassword mutation', () => { diff --git a/webapp/components/PasswordReset/ChangePassword.spec.js b/webapp/components/PasswordReset/ChangePassword.spec.js index cef110798..f885203c8 100644 --- a/webapp/components/PasswordReset/ChangePassword.spec.js +++ b/webapp/components/PasswordReset/ChangePassword.spec.js @@ -1,9 +1,11 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import ChangePassword from './ChangePassword' const localVue = global.localVue -config.stubs['sweetalert-icon'] = '' +const stubs = { + 'sweetalert-icon': true, +} describe('ChangePassword ', () => { let wrapper @@ -27,13 +29,16 @@ describe('ChangePassword ', () => { }) describe('mount', () => { - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) Wrapper = () => { return mount(ChangePassword, { mocks, propsData, localVue, + stubs, }) } diff --git a/webapp/components/PasswordReset/Request.spec.js b/webapp/components/PasswordReset/Request.spec.js index e601030c6..a30ba70b4 100644 --- a/webapp/components/PasswordReset/Request.spec.js +++ b/webapp/components/PasswordReset/Request.spec.js @@ -1,12 +1,8 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Request from './Request' const localVue = global.localVue -config.stubs['sweetalert-icon'] = '' -config.stubs['client-only'] = '' -config.stubs['nuxt-link'] = '' - describe('Request', () => { let wrapper, Wrapper, mocks, stubs @@ -27,11 +23,16 @@ describe('Request', () => { } stubs = { LocaleSwitch: "
", + 'sweetalert-icon': true, + 'client-only': true, + 'nuxt-link': true, } }) describe('mount', () => { - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) Wrapper = () => { return mount(Request, { diff --git a/webapp/components/PostTeaser/PostTeaser.spec.js b/webapp/components/PostTeaser/PostTeaser.spec.js index 546c4581d..7791c62f0 100644 --- a/webapp/components/PostTeaser/PostTeaser.spec.js +++ b/webapp/components/PostTeaser/PostTeaser.spec.js @@ -1,4 +1,4 @@ -import { config, shallowMount, mount, RouterLinkStub } from '@vue/test-utils' +import { shallowMount, mount, RouterLinkStub } from '@vue/test-utils' import Vuex from 'vuex' @@ -6,9 +6,6 @@ import PostTeaser from './PostTeaser.vue' const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['v-popover'] = '' - describe('PostTeaser', () => { let store let stubs @@ -35,6 +32,8 @@ describe('PostTeaser', () => { } stubs = { NuxtLink: RouterLinkStub, + 'client-only': true, + 'v-popover': true, } mocks = { $t: jest.fn(), @@ -77,7 +76,9 @@ describe('PostTeaser', () => { spy.mockReset() }) - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) describe('test Post callbacks', () => { beforeEach(() => { diff --git a/webapp/components/Registration/Signup.spec.js b/webapp/components/Registration/Signup.spec.js index dda0cbb9d..7ef2dc994 100644 --- a/webapp/components/Registration/Signup.spec.js +++ b/webapp/components/Registration/Signup.spec.js @@ -1,10 +1,12 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Signup, { SignupMutation } from './Signup' const localVue = global.localVue -config.stubs['sweetalert-icon'] = '' -config.stubs['nuxt-link'] = '' +const stubs = { + 'sweetalert-icon': true, + 'nuxt-link': true, +} describe('Signup', () => { let wrapper @@ -28,13 +30,16 @@ describe('Signup', () => { }) describe('mount', () => { - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) Wrapper = () => { return mount(Signup, { mocks, propsData, localVue, + stubs, }) } diff --git a/webapp/components/RelativeDateTime/spec.js b/webapp/components/RelativeDateTime/spec.js index 833baae3a..b0dd687b2 100644 --- a/webapp/components/RelativeDateTime/spec.js +++ b/webapp/components/RelativeDateTime/spec.js @@ -42,7 +42,7 @@ describe('RelativeDateTime', () => { }) it('renders', () => { - expect(Wrapper().is('span')).toBe(true) + expect(Wrapper().element.tagName).toBe('SPAN') }) describe("locale == 'en'", () => { diff --git a/webapp/components/ReleaseModal/ReleaseModal.spec.js b/webapp/components/ReleaseModal/ReleaseModal.spec.js index 9cded646f..a976e37e5 100644 --- a/webapp/components/ReleaseModal/ReleaseModal.spec.js +++ b/webapp/components/ReleaseModal/ReleaseModal.spec.js @@ -100,7 +100,9 @@ describe('ReleaseModal.vue', () => { }) } - beforeEach(jest.useFakeTimers) + beforeEach(() => { + jest.useFakeTimers() + }) describe('given id', () => { beforeEach(() => { diff --git a/webapp/components/SocialMedia/SocialMedia.spec.js b/webapp/components/SocialMedia/SocialMedia.spec.js index 420fbeaf2..5aa8220ae 100644 --- a/webapp/components/SocialMedia/SocialMedia.spec.js +++ b/webapp/components/SocialMedia/SocialMedia.spec.js @@ -1,8 +1,10 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import SocialMedia from './SocialMedia.vue' -config.stubs['ds-space'] = '' -config.stubs['ds-text'] = '' +const stubs = { + 'ds-space': true, + 'ds-text': true, +} describe('SocialMedia.vue', () => { let propsData @@ -18,7 +20,7 @@ describe('SocialMedia.vue', () => { describe('mount', () => { const Wrapper = () => { - return mount(SocialMedia, { propsData, mocks }) + return mount(SocialMedia, { propsData, mocks, stubs }) } describe('socialMedia card title', () => { diff --git a/webapp/components/_new/features/SearchResults/SearchResults.spec.js b/webapp/components/_new/features/SearchResults/SearchResults.spec.js index 19653fcac..ace02bd46 100644 --- a/webapp/components/_new/features/SearchResults/SearchResults.spec.js +++ b/webapp/components/_new/features/SearchResults/SearchResults.spec.js @@ -1,4 +1,4 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Vuex from 'vuex' import SearchResults from './SearchResults' import helpers from '~/storybook/helpers' @@ -9,8 +9,10 @@ const localVue = global.localVue localVue.directive('scrollTo', jest.fn()) -config.stubs['client-only'] = '' -config.stubs['nuxt-link'] = '' +const stubs = { + 'client-only': true, + 'nuxt-link': true, +} describe('SearchResults', () => { let mocks, getters, propsData, wrapper @@ -18,7 +20,7 @@ describe('SearchResults', () => { const store = new Vuex.Store({ getters, }) - return mount(SearchResults, { mocks, localVue, propsData, store }) + return mount(SearchResults, { mocks, localVue, propsData, store, stubs }) } beforeEach(() => { diff --git a/webapp/components/_new/generic/TabNavigation/TabNavigation.spec.js b/webapp/components/_new/generic/TabNavigation/TabNavigation.spec.js index 76ce9665a..f545839ef 100644 --- a/webapp/components/_new/generic/TabNavigation/TabNavigation.spec.js +++ b/webapp/components/_new/generic/TabNavigation/TabNavigation.spec.js @@ -1,14 +1,16 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import TabNavigation from './TabNavigation' const localVue = global.localVue -config.stubs['client-only'] = '' +const stubs = { + 'client-only': true, +} describe('TabNavigation', () => { let mocks, propsData, wrapper const Wrapper = () => { - return mount(TabNavigation, { mocks, localVue, propsData }) + return mount(TabNavigation, { mocks, localVue, propsData, stubs }) } beforeEach(() => { diff --git a/webapp/components/features/FiledReportsTable/FiledReportsTable.spec.js b/webapp/components/features/FiledReportsTable/FiledReportsTable.spec.js index 4931ea6c6..7a99e85aa 100644 --- a/webapp/components/features/FiledReportsTable/FiledReportsTable.spec.js +++ b/webapp/components/features/FiledReportsTable/FiledReportsTable.spec.js @@ -1,4 +1,4 @@ -import { config, mount, RouterLinkStub } from '@vue/test-utils' +import { mount, RouterLinkStub } from '@vue/test-utils' import Vuex from 'vuex' import FiledReportsTable from './FiledReportsTable' import { reports } from '~/components/features/ReportList/ReportList.story.js' @@ -7,8 +7,6 @@ const localVue = global.localVue localVue.filter('truncate', (string) => string) -config.stubs['client-only'] = '' - describe('FiledReportsTable.vue', () => { let wrapper, mocks, propsData, stubs, filed @@ -18,6 +16,7 @@ describe('FiledReportsTable.vue', () => { } stubs = { NuxtLink: RouterLinkStub, + 'client-only': true, } propsData = {} }) diff --git a/webapp/components/features/ProfileList/FollowList.spec.js b/webapp/components/features/ProfileList/FollowList.spec.js index 44a855eed..07214ae38 100644 --- a/webapp/components/features/ProfileList/FollowList.spec.js +++ b/webapp/components/features/ProfileList/FollowList.spec.js @@ -1,4 +1,4 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Vuex from 'vuex' import helpers from '~/storybook/helpers' @@ -6,9 +6,11 @@ import FollowList from './FollowList.vue' const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['ds-space'] = '' -config.stubs['nuxt-link'] = '' +const stubs = { + 'client-only': true, + 'ds-space': true, + 'nuxt-link': true, +} const user = { ...helpers.fakeUser()[0], @@ -45,6 +47,7 @@ describe('FollowList.vue', () => { $t: jest.fn((str) => str), }, localVue, + stubs, }) beforeAll(() => { @@ -138,11 +141,11 @@ describe('FollowList.vue', () => { }) it('renders the user-teasers as an overflowing list', () => { - expect(wrapper.find('.--overflow').is('ul')).toBe(true) + expect(wrapper.find('.--overflow').element.tagName).toBe('UL') }) it('renders a filter text input', () => { - expect(wrapper.find('[name="followingFilter"]').is('input')).toBe(true) + expect(wrapper.find('[name="followingFilter"]').element.tagName).toBe('INPUT') }) }) }) diff --git a/webapp/components/features/ReportList/ReportList.spec.js b/webapp/components/features/ReportList/ReportList.spec.js index d4dbc7132..84848ce82 100644 --- a/webapp/components/features/ReportList/ReportList.spec.js +++ b/webapp/components/features/ReportList/ReportList.spec.js @@ -1,4 +1,4 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Vuex from 'vuex' import ReportList from './ReportList' import { reports } from './ReportList.story' @@ -7,8 +7,10 @@ import DropdownFilter from '~/components/DropdownFilter/DropdownFilter' const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['nuxt-link'] = '' +const stubs = { + 'client-only': true, + 'nuxt-link': true, +} describe('ReportList', () => { let mocks, mutations, getters, wrapper @@ -45,7 +47,7 @@ describe('ReportList', () => { mutations, getters, }) - return mount(ReportList, { mocks, localVue, store }) + return mount(ReportList, { mocks, localVue, store, stubs }) } describe('renders children components', () => { diff --git a/webapp/components/features/ReportRow/ReportRow.spec.js b/webapp/components/features/ReportRow/ReportRow.spec.js index b541a40d9..6a4bf922e 100644 --- a/webapp/components/features/ReportRow/ReportRow.spec.js +++ b/webapp/components/features/ReportRow/ReportRow.spec.js @@ -1,4 +1,4 @@ -import { config, mount, RouterLinkStub } from '@vue/test-utils' +import { mount, RouterLinkStub } from '@vue/test-utils' import Vuex from 'vuex' import ReportRow from './ReportRow.vue' import BaseIcon from '~/components/_new/generic/BaseIcon/BaseIcon' @@ -6,8 +6,6 @@ import { reports } from '~/components/features/ReportList/ReportList.story.js' const localVue = global.localVue -config.stubs['client-only'] = '' - describe('ReportRow', () => { let propsData, mocks, stubs, getters, wrapper @@ -18,6 +16,7 @@ describe('ReportRow', () => { } stubs = { NuxtLink: RouterLinkStub, + 'client-only': true, } getters = { 'auth/user': () => { diff --git a/webapp/components/features/ReportsTable/ReportsTable.spec.js b/webapp/components/features/ReportsTable/ReportsTable.spec.js index c80e4fea5..688139eec 100644 --- a/webapp/components/features/ReportsTable/ReportsTable.spec.js +++ b/webapp/components/features/ReportsTable/ReportsTable.spec.js @@ -1,12 +1,14 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Vuex from 'vuex' import ReportsTable from './ReportsTable.vue' import { reports } from '~/components/features/ReportList/ReportList.story.js' const localVue = global.localVue -config.stubs['client-only'] = '' -config.stubs['nuxt-link'] = '' +const stubs = { + 'client-only': true, + 'nuxt-link': true, +} describe('ReportsTable', () => { let propsData, mocks, getters, wrapper, reportsTable @@ -29,7 +31,7 @@ describe('ReportsTable', () => { const store = new Vuex.Store({ getters, }) - return mount(ReportsTable, { propsData, mocks, localVue, store }) + return mount(ReportsTable, { propsData, mocks, localVue, store, stubs }) } describe('given no reports', () => { diff --git a/webapp/components/features/SearchField/SearchField.spec.js b/webapp/components/features/SearchField/SearchField.spec.js index 140b55caa..ec5276212 100644 --- a/webapp/components/features/SearchField/SearchField.spec.js +++ b/webapp/components/features/SearchField/SearchField.spec.js @@ -1,4 +1,4 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Vuex from 'vuex' import SearchField from './SearchField.vue' import SearchableInput from '~/components/generic/SearchableInput/SearchableInput' @@ -7,7 +7,10 @@ const localVue = global.localVue localVue.filter('truncate', () => 'truncated string') localVue.filter('dateTime', () => Date.now) -config.stubs['nuxt-link'] = '' + +const stubs = { + 'nuxt-link': true, +} describe('SearchField.vue', () => { let mocks, wrapper, getters @@ -26,7 +29,7 @@ describe('SearchField.vue', () => { const store = new Vuex.Store({ getters, }) - return mount(SearchField, { mocks, localVue, store }) + return mount(SearchField, { mocks, localVue, store, stubs }) } describe('mount', () => { diff --git a/webapp/components/generic/SearchPost/SearchPost.spec.js b/webapp/components/generic/SearchPost/SearchPost.spec.js index 3e05c9d74..3c690e39c 100644 --- a/webapp/components/generic/SearchPost/SearchPost.spec.js +++ b/webapp/components/generic/SearchPost/SearchPost.spec.js @@ -37,11 +37,11 @@ describe('SearchPost.vue', () => { }) it('renders post commentsCount', () => { - expect(counts.text()).toContain(propsData.option.commentsCount) + expect(counts.text()).toContain(propsData.option.commentsCount.toString()) }) it('renders post shoutedCount', () => { - expect(counts.text()).toContain(propsData.option.shoutedCount) + expect(counts.text()).toContain(propsData.option.shoutedCount.toString()) }) it('renders post author', () => { diff --git a/webapp/components/generic/SearchableInput/SearchableInput.spec.js b/webapp/components/generic/SearchableInput/SearchableInput.spec.js index e0e9f9831..cda9150b8 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.spec.js +++ b/webapp/components/generic/SearchableInput/SearchableInput.spec.js @@ -1,4 +1,4 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Vuex from 'vuex' import Vue from 'vue' import SearchableInput from './SearchableInput' @@ -8,7 +8,10 @@ const localVue = global.localVue localVue.filter('truncate', () => 'truncated string') localVue.filter('dateTime', () => Date.now) -config.stubs['nuxt-link'] = '' + +const stubs = { + 'nuxt-link': true, +} describe('SearchableInput.vue', () => { let mocks, propsData, getters, wrapper @@ -28,7 +31,7 @@ describe('SearchableInput.vue', () => { const store = new Vuex.Store({ getters, }) - return mount(SearchableInput, { mocks, localVue, propsData, store }) + return mount(SearchableInput, { mocks, localVue, propsData, store, stubs }) } describe('mount', () => { From 6eb5ad25af59e20ac462d0d309de870d861b5c2a Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 15 Feb 2023 11:12:19 +0100 Subject: [PATCH 10/99] get all components tests running --- webapp/components/Badges.spec.js | 4 ++-- webapp/components/Category/index.spec.js | 9 ++++---- .../ContentMenu/GroupContentMenu.spec.js | 10 ++++++--- .../ContributionForm/ContributionForm.spec.js | 2 +- webapp/components/Editor/nodes/Embed.spec.js | 2 +- .../InviteButton/InviteButton.spec.js | 8 ++++--- .../LoginButton/LoginButton.spec.js | 5 +++-- webapp/components/Modal.spec.js | 22 +++++++++---------- .../NotificationList/NotificationList.spec.js | 4 ++-- .../components/PasswordReset/Request.spec.js | 2 +- .../generic/CounterIcon/CounterIcon.spec.js | 4 ++-- .../ProfileAvatar/ProfileAvatar.spec.js | 6 ++--- .../features/ReportList/ReportList.spec.js | 6 ++--- .../features/ReportRow/ReportRow.spec.js | 12 +++++----- .../features/SearchField/SearchField.spec.js | 2 +- 15 files changed, 54 insertions(+), 44 deletions(-) diff --git a/webapp/components/Badges.spec.js b/webapp/components/Badges.spec.js index f81eaafb1..d19c2beb2 100644 --- a/webapp/components/Badges.spec.js +++ b/webapp/components/Badges.spec.js @@ -14,7 +14,7 @@ describe('Badges.vue', () => { } it('has class "hc-badges"', () => { - expect(Wrapper().contains('.hc-badges')).toBe(true) + expect(Wrapper().find('.hc-badges').exists()).toBe(true) }) describe('given a badge', () => { @@ -23,7 +23,7 @@ describe('Badges.vue', () => { }) it('proxies badge icon, which is just a URL without metadata', () => { - expect(Wrapper().contains('img[src="/api/path/to/some/icon"]')).toBe(true) + expect(Wrapper().find('img[src="/api/path/to/some/icon"]').exists()).toBe(true) }) }) }) diff --git a/webapp/components/Category/index.spec.js b/webapp/components/Category/index.spec.js index 9abb8a11d..22a85f6f1 100644 --- a/webapp/components/Category/index.spec.js +++ b/webapp/components/Category/index.spec.js @@ -1,4 +1,4 @@ -import { shallowMount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import Category from './index' @@ -9,7 +9,7 @@ describe('Category', () => { let name const Wrapper = () => { - return shallowMount(Category, { + return mount(Category, { localVue, propsData: { icon, @@ -27,8 +27,9 @@ describe('Category', () => { it('shows Name', () => { expect(Wrapper().text()).toContain('Peter') }) - it('shows Icon Svg', () => { - expect(Wrapper().contains('svg')) + + it('shows base icon', () => { + expect(Wrapper().find('.base-icon').exists()).toBe(true) }) }) }) diff --git a/webapp/components/ContentMenu/GroupContentMenu.spec.js b/webapp/components/ContentMenu/GroupContentMenu.spec.js index 8b17b24b1..49a66aaac 100644 --- a/webapp/components/ContentMenu/GroupContentMenu.spec.js +++ b/webapp/components/ContentMenu/GroupContentMenu.spec.js @@ -1,9 +1,13 @@ -import { config, mount } from '@vue/test-utils' +import { mount } from '@vue/test-utils' import GroupContentMenu from './GroupContentMenu.vue' const localVue = global.localVue -config.stubs['router-link'] = '' +const stubs = { + 'router-link': { + template: '', + }, +} const propsData = { usage: 'groupTeaser', @@ -24,7 +28,7 @@ describe('GroupContentMenu', () => { describe('mount', () => { const Wrapper = () => { - return mount(GroupContentMenu, { propsData, mocks, localVue }) + return mount(GroupContentMenu, { propsData, mocks, localVue, stubs }) } beforeEach(() => { diff --git a/webapp/components/ContributionForm/ContributionForm.spec.js b/webapp/components/ContributionForm/ContributionForm.spec.js index 8ebd7d4de..ef3b47c37 100644 --- a/webapp/components/ContributionForm/ContributionForm.spec.js +++ b/webapp/components/ContributionForm/ContributionForm.spec.js @@ -166,7 +166,7 @@ describe('ContributionForm.vue', () => { .mockImplementation(function () { this.onload({ target: { result: 'someUrlToImage' } }) }) - wrapper.find(ImageUploader).vm.$emit('addHeroImage', imageUpload) + wrapper.findComponent(ImageUploader).vm.$emit('addHeroImage', imageUpload) await wrapper.find('form').trigger('submit') expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expect.objectContaining(expectedParams)) expect(spy).toHaveBeenCalledWith(imageUpload) diff --git a/webapp/components/Editor/nodes/Embed.spec.js b/webapp/components/Editor/nodes/Embed.spec.js index 372b189f9..05edb1296 100644 --- a/webapp/components/Editor/nodes/Embed.spec.js +++ b/webapp/components/Editor/nodes/Embed.spec.js @@ -42,7 +42,7 @@ describe('Embed.vue', () => { propsData.node = { attrs: { href: 'https://www.youtube.com/watch?v=qkdXAtO40Fo' } } const wrapper = Wrapper({ propsData }) await wrapper.html() - expect(wrapper.contains('embed-component-stub')).toBe(true) + expect(wrapper.find('embed-component-stub').exists()).toBe(true) }) }) diff --git a/webapp/components/InviteButton/InviteButton.spec.js b/webapp/components/InviteButton/InviteButton.spec.js index fde1afd1d..cb73ecfd1 100644 --- a/webapp/components/InviteButton/InviteButton.spec.js +++ b/webapp/components/InviteButton/InviteButton.spec.js @@ -2,7 +2,9 @@ import { mount } from '@vue/test-utils' import InviteButton from './InviteButton.vue' const stubs = { - 'v-popover': true, + 'v-popover': { + template: '', + }, } describe('InviteButton.vue', () => { @@ -32,12 +34,12 @@ describe('InviteButton.vue', () => { }) it('renders', () => { - expect(wrapper.contains('.invite-button')).toBe(true) + expect(wrapper.find('.invite-button').exists()).toBe(true) }) it('open popup', () => { wrapper.find('.base-button').trigger('click') - expect(wrapper.contains('.invite-button')).toBe(true) + expect(wrapper.find('.invite-button').exists()).toBe(true) }) it('invite codes not available', async () => { diff --git a/webapp/components/LoginButton/LoginButton.spec.js b/webapp/components/LoginButton/LoginButton.spec.js index c288b73d3..d529dbfb6 100644 --- a/webapp/components/LoginButton/LoginButton.spec.js +++ b/webapp/components/LoginButton/LoginButton.spec.js @@ -3,6 +3,7 @@ import LoginButton from './LoginButton.vue' const stubs = { 'v-popover': true, + 'nuxt-link': true, } describe('LoginButton.vue', () => { @@ -32,12 +33,12 @@ describe('LoginButton.vue', () => { }) it('renders', () => { - expect(wrapper.contains('.login-button')).toBe(true) + expect(wrapper.find('.login-button').exists()).toBe(true) }) it('open popup', () => { wrapper.find('.base-button').trigger('click') - expect(wrapper.contains('.login-button')).toBe(true) + expect(wrapper.find('.login-button').exists()).toBe(true) }) }) }) diff --git a/webapp/components/Modal.spec.js b/webapp/components/Modal.spec.js index c08c90f51..037e84497 100644 --- a/webapp/components/Modal.spec.js +++ b/webapp/components/Modal.spec.js @@ -57,9 +57,9 @@ describe('Modal.vue', () => { it('initially empty', () => { wrapper = Wrapper() - expect(wrapper.contains(ConfirmModal)).toBe(false) - expect(wrapper.contains(DisableModal)).toBe(false) - expect(wrapper.contains(ReportModal)).toBe(false) + expect(wrapper.findComponent(ConfirmModal).exists()).toBe(false) + expect(wrapper.findComponent(DisableModal).exists()).toBe(false) + expect(wrapper.findComponent(ReportModal).exists()).toBe(false) }) describe('store/modal holds data to disable', () => { @@ -78,11 +78,11 @@ describe('Modal.vue', () => { }) it('renders disable modal', () => { - expect(wrapper.contains(DisableModal)).toBe(true) + expect(wrapper.findComponent(DisableModal).exists()).toBe(true) }) it('passes data to disable modal', () => { - expect(wrapper.find(DisableModal).props()).toEqual({ + expect(wrapper.findComponent(DisableModal).props()).toEqual({ type: 'contribution', name: 'some title', id: 'c456', @@ -91,9 +91,9 @@ describe('Modal.vue', () => { describe('child component emits close', () => { it('turns empty', async () => { - wrapper.find(DisableModal).vm.$emit('close') + wrapper.findComponent(DisableModal).vm.$emit('close') await Vue.nextTick() - expect(wrapper.contains(DisableModal)).toBe(false) + expect(wrapper.findComponent(DisableModal).exists()).toBe(false) }) }) @@ -109,7 +109,7 @@ describe('Modal.vue', () => { }, } wrapper = Wrapper() - expect(wrapper.find(DisableModal).props()).toEqual({ + expect(wrapper.findComponent(DisableModal).props()).toEqual({ type: 'comment', name: 'Author name', id: 'c456', @@ -124,7 +124,7 @@ describe('Modal.vue', () => { }, } wrapper = Wrapper() - expect(wrapper.find(DisableModal).props()).toEqual({ + expect(wrapper.findComponent(DisableModal).props()).toEqual({ type: 'comment', name: '', id: 'c456', @@ -142,7 +142,7 @@ describe('Modal.vue', () => { }, } wrapper = Wrapper() - expect(wrapper.find(DisableModal).props()).toEqual({ + expect(wrapper.findComponent(DisableModal).props()).toEqual({ type: 'user', name: 'Username', id: 'u456', @@ -160,7 +160,7 @@ describe('Modal.vue', () => { }, } wrapper = Wrapper() - expect(wrapper.find(DisableModal).props()).toEqual({ + expect(wrapper.findComponent(DisableModal).props()).toEqual({ type: 'something', name: null, id: 's456', diff --git a/webapp/components/NotificationList/NotificationList.spec.js b/webapp/components/NotificationList/NotificationList.spec.js index 4c6d3690a..7f7038d59 100644 --- a/webapp/components/NotificationList/NotificationList.spec.js +++ b/webapp/components/NotificationList/NotificationList.spec.js @@ -52,7 +52,7 @@ describe('NotificationList.vue', () => { }) it('renders Notification.vue for each notification of the user', () => { - expect(wrapper.findAll(Notification)).toHaveLength(2) + expect(wrapper.findAllComponents(Notification)).toHaveLength(2) }) }) @@ -97,7 +97,7 @@ describe('NotificationList.vue', () => { }) it('renders Notification.vue zero times', () => { - expect(wrapper.findAll(Notification)).toHaveLength(0) + expect(wrapper.findAllComponents(Notification)).toHaveLength(0) }) }) }) diff --git a/webapp/components/PasswordReset/Request.spec.js b/webapp/components/PasswordReset/Request.spec.js index a30ba70b4..50d6495bd 100644 --- a/webapp/components/PasswordReset/Request.spec.js +++ b/webapp/components/PasswordReset/Request.spec.js @@ -22,7 +22,7 @@ describe('Request', () => { }, } stubs = { - LocaleSwitch: "
", + LocaleSwitch: true, 'sweetalert-icon': true, 'client-only': true, 'nuxt-link': true, diff --git a/webapp/components/_new/generic/CounterIcon/CounterIcon.spec.js b/webapp/components/_new/generic/CounterIcon/CounterIcon.spec.js index 49be22bde..584a971c4 100644 --- a/webapp/components/_new/generic/CounterIcon/CounterIcon.spec.js +++ b/webapp/components/_new/generic/CounterIcon/CounterIcon.spec.js @@ -19,7 +19,7 @@ describe('CounterIcon.vue', () => { }) it('renders the icon', () => { - expect(wrapper.find(BaseIcon).exists()).toBe(true) + expect(wrapper.findComponent(BaseIcon).exists()).toBe(true) }) it('renders the count', () => { @@ -35,7 +35,7 @@ describe('CounterIcon.vue', () => { }) it('renders the icon', () => { - expect(wrapper.find(BaseIcon).exists()).toBe(true) + expect(wrapper.findComponent(BaseIcon).exists()).toBe(true) }) it('renders the capped count with a plus', () => { diff --git a/webapp/components/_new/generic/ProfileAvatar/ProfileAvatar.spec.js b/webapp/components/_new/generic/ProfileAvatar/ProfileAvatar.spec.js index 44d35bd71..413af5047 100644 --- a/webapp/components/_new/generic/ProfileAvatar/ProfileAvatar.spec.js +++ b/webapp/components/_new/generic/ProfileAvatar/ProfileAvatar.spec.js @@ -20,7 +20,7 @@ describe('ProfileAvatar', () => { }) it('renders an icon', () => { - expect(wrapper.find(BaseIcon).exists()).toBe(true) + expect(wrapper.findComponent(BaseIcon).exists()).toBe(true) }) describe('given a profile', () => { @@ -38,7 +38,7 @@ describe('ProfileAvatar', () => { it('renders an icon', () => { propsData = { profile: { name: null } } wrapper = Wrapper() - expect(wrapper.find(BaseIcon).exists()).toBe(true) + expect(wrapper.findComponent(BaseIcon).exists()).toBe(true) }) }) @@ -46,7 +46,7 @@ describe('ProfileAvatar', () => { it('renders an icon', () => { propsData = { profile: { name: 'Anonymous' } } wrapper = Wrapper() - expect(wrapper.find(BaseIcon).exists()).toBe(true) + expect(wrapper.findComponent(BaseIcon).exists()).toBe(true) }) }) diff --git a/webapp/components/features/ReportList/ReportList.spec.js b/webapp/components/features/ReportList/ReportList.spec.js index 84848ce82..17c609115 100644 --- a/webapp/components/features/ReportList/ReportList.spec.js +++ b/webapp/components/features/ReportList/ReportList.spec.js @@ -56,11 +56,11 @@ describe('ReportList', () => { }) it('renders DropdownFilter', () => { - expect(wrapper.find(DropdownFilter).exists()).toBe(true) + expect(wrapper.findComponent(DropdownFilter).exists()).toBe(true) }) it('renders ReportsTable', () => { - expect(wrapper.find(ReportsTable).exists()).toBe(true) + expect(wrapper.findComponent(ReportsTable).exists()).toBe(true) }) }) @@ -68,7 +68,7 @@ describe('ReportList', () => { beforeEach(async () => { wrapper = Wrapper() wrapper.setData({ reports }) - wrapper.find(ReportsTable).vm.$emit('confirm', reports[0]) + wrapper.findComponent(ReportsTable).vm.$emit('confirm', reports[0]) }) it('calls modal/SET_OPEN', () => { diff --git a/webapp/components/features/ReportRow/ReportRow.spec.js b/webapp/components/features/ReportRow/ReportRow.spec.js index 6a4bf922e..a1b405edc 100644 --- a/webapp/components/features/ReportRow/ReportRow.spec.js +++ b/webapp/components/features/ReportRow/ReportRow.spec.js @@ -84,7 +84,9 @@ describe('ReportRow', () => { wrapper = Wrapper() }) it('renders the disabled icon', () => { - expect(wrapper.find('.status-line').find(BaseIcon).props().name).toEqual('eye-slash') + expect(wrapper.find('.status-line').findComponent(BaseIcon).props().name).toEqual( + 'eye-slash', + ) }) it('renders its current status', () => { @@ -98,7 +100,7 @@ describe('ReportRow', () => { wrapper = Wrapper() }) it('renders the enabled icon', () => { - expect(wrapper.find('.status-line').find(BaseIcon).props().name).toEqual('eye') + expect(wrapper.find('.status-line').findComponent(BaseIcon).props().name).toEqual('eye') }) it('renders its current status', () => { @@ -119,7 +121,7 @@ describe('ReportRow', () => { }) it('renders a comments icon', () => { - const commentsIcon = wrapper.find(BaseIcon).props().name + const commentsIcon = wrapper.findComponent(BaseIcon).props().name expect(commentsIcon).toEqual('comments') }) @@ -141,7 +143,7 @@ describe('ReportRow', () => { }) it('renders a bookmark icon', () => { - const postIcon = wrapper.find(BaseIcon).props().name + const postIcon = wrapper.findComponent(BaseIcon).props().name expect(postIcon).toEqual('bookmark') }) @@ -163,7 +165,7 @@ describe('ReportRow', () => { }) it('renders a user icon', () => { - const userIcon = wrapper.find(BaseIcon).props().name + const userIcon = wrapper.findComponent(BaseIcon).props().name expect(userIcon).toEqual('user') }) diff --git a/webapp/components/features/SearchField/SearchField.spec.js b/webapp/components/features/SearchField/SearchField.spec.js index ec5276212..e66c31938 100644 --- a/webapp/components/features/SearchField/SearchField.spec.js +++ b/webapp/components/features/SearchField/SearchField.spec.js @@ -36,7 +36,7 @@ describe('SearchField.vue', () => { describe('Emitted events', () => { let searchableInputComponent beforeEach(() => { - searchableInputComponent = wrapper.find(SearchableInput) + searchableInputComponent = wrapper.findComponent(SearchableInput) }) describe('query event', () => { From 0eddfd3aa09216abe5475de77a068c43b5eddd32 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 15 Feb 2023 11:19:29 +0100 Subject: [PATCH 11/99] layouts tests working --- webapp/layouts/basic.spec.js | 11 ++++++++--- webapp/layouts/blank.spec.js | 11 ++++++++--- webapp/layouts/default.spec.js | 19 ++++++++++++++----- webapp/layouts/error.spec.js | 10 +++++++--- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/webapp/layouts/basic.spec.js b/webapp/layouts/basic.spec.js index f84195246..c87fc103b 100644 --- a/webapp/layouts/basic.spec.js +++ b/webapp/layouts/basic.spec.js @@ -1,10 +1,14 @@ import Vuex from 'vuex' -import { config, shallowMount } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Basic from './basic.vue' const localVue = global.localVue -config.stubs.nuxt = '' +const stubs = { + nuxt: { + template: '', + }, +} describe('basic.vue', () => { let wrapper @@ -28,6 +32,7 @@ describe('basic.vue', () => { store, mocks, localVue, + stubs, }) } @@ -36,7 +41,7 @@ describe('basic.vue', () => { }) it('renders', () => { - expect(wrapper.is('.layout-blank')).toBe(true) + expect(wrapper.classes('layout-blank')).toBe(true) }) }) }) diff --git a/webapp/layouts/blank.spec.js b/webapp/layouts/blank.spec.js index a3ea3120c..f4c33cd9c 100644 --- a/webapp/layouts/blank.spec.js +++ b/webapp/layouts/blank.spec.js @@ -1,9 +1,13 @@ -import { config, shallowMount } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Blank from './blank.vue' const localVue = global.localVue -config.stubs.nuxt = '' +const stubs = { + nuxt: { + template: '', + }, +} describe('blank.vue', () => { let wrapper @@ -20,6 +24,7 @@ describe('blank.vue', () => { return shallowMount(Blank, { mocks, localVue, + stubs, }) } @@ -28,7 +33,7 @@ describe('blank.vue', () => { }) it('renders', () => { - expect(wrapper.is('.layout-blank')).toBe(true) + expect(wrapper.classes('layout-blank')).toBe(true) }) }) }) diff --git a/webapp/layouts/default.spec.js b/webapp/layouts/default.spec.js index 3d465ce76..bf54d3581 100644 --- a/webapp/layouts/default.spec.js +++ b/webapp/layouts/default.spec.js @@ -1,13 +1,21 @@ import Vuex from 'vuex' -import { config, shallowMount } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Default from './default.vue' const localVue = global.localVue localVue.directive('scrollTo', jest.fn()) -config.stubs.nuxt = '' -config.stubs['client-only'] = '' -config.stubs['nuxt-link'] = '' +const stubs = { + nuxt: { + template: '', + }, + 'client-only': { + template: '', + }, + 'nuxt-link': { + template: '', + }, +} describe('default.vue', () => { let wrapper @@ -38,6 +46,7 @@ describe('default.vue', () => { store, mocks, localVue, + stubs, }) } @@ -46,7 +55,7 @@ describe('default.vue', () => { }) it('renders', () => { - expect(wrapper.is('.layout-default')).toBe(true) + expect(wrapper.classes('layout-default')).toBe(true) }) }) }) diff --git a/webapp/layouts/error.spec.js b/webapp/layouts/error.spec.js index dccb5eb49..95b54c965 100644 --- a/webapp/layouts/error.spec.js +++ b/webapp/layouts/error.spec.js @@ -1,9 +1,13 @@ -import { config, shallowMount } from '@vue/test-utils' +import { shallowMount } from '@vue/test-utils' import Error from './error.vue' const localVue = global.localVue -config.stubs['nuxt-link'] = '' +const stubs = { + 'nuxt-link': { + template: '', + }, +} describe('error.vue', () => { let mocks, wrapper @@ -15,7 +19,7 @@ describe('error.vue', () => { }) const Wrapper = (propsData = {}) => { - return shallowMount(Error, { mocks, propsData, localVue }) + return shallowMount(Error, { mocks, propsData, localVue, stubs }) } describe('shallowMount', () => { From 43bb4685d3805edbe3ea37a950adaaa21010ce20 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 21 Feb 2023 05:26:25 +0100 Subject: [PATCH 12/99] Check that about !== 'null' cause the resolver has an undefinedToNull. --- webapp/pages/map.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index 424061203..a1cdceff4 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -257,7 +257,7 @@ export default { ` description += - e.features[0].properties.about && e.features[0].properties.about.length > 0 + e.features[0].properties.about && e.features[0].properties.about !== 'null' && e.features[0].properties.about.length > 0 ? `
From f104bdcdd001afe4e2c3bf6b3e0127cb1dd72e36 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 21 Feb 2023 05:59:11 +0100 Subject: [PATCH 13/99] Correct linting. --- webapp/pages/map.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index a1cdceff4..9473606e6 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -257,7 +257,9 @@ export default {
` description += - e.features[0].properties.about && e.features[0].properties.about !== 'null' && e.features[0].properties.about.length > 0 + e.features[0].properties.about && + e.features[0].properties.about !== 'null' && + e.features[0].properties.about.length > 0 ? `
From df078f18d8663cfc79c61b5ac8298f7bec6fcae3 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 21 Feb 2023 06:01:42 +0100 Subject: [PATCH 14/99] Correct order of tests. --- webapp/pages/map.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index 9473606e6..c0f052961 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -258,8 +258,8 @@ export default { ` description += e.features[0].properties.about && - e.features[0].properties.about !== 'null' && - e.features[0].properties.about.length > 0 + e.features[0].properties.about.length > 0 && + e.features[0].properties.about !== 'null' ? `
From c3b2379af0156a6ebeb80d375d25ad47721e1f47 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 21 Feb 2023 10:22:16 +0100 Subject: [PATCH 15/99] markers.geoJSON made 'null' out of a property that had null in it. So added a check on the value and set undefined if value is null. --- webapp/pages/map.vue | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index c0f052961..753ace576 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -258,8 +258,7 @@ export default { ` description += e.features[0].properties.about && - e.features[0].properties.about.length > 0 && - e.features[0].properties.about !== 'null' + e.features[0].properties.about.length > 0 ? `
@@ -338,7 +337,7 @@ export default { id: user.id, slug: user.slug, name: user.name, - about: user.about, + about: user.about ? user.about : undefined, }, geometry: { type: 'Point', @@ -359,7 +358,7 @@ export default { id: group.id, slug: group.slug, name: group.name, - about: group.about, + about: group.about ? group.about : undefined, }, geometry: { type: 'Point', @@ -379,7 +378,7 @@ export default { id: this.currentUser.id, slug: this.currentUser.slug, name: this.currentUser.name, - about: this.currentUser.about, + about: this.currentUser.about ? this.currentUser.about : undefined, }, geometry: { type: 'Point', From b5de63f43f60d53bd9019e12f4cdbe20db2a7d11 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 21 Feb 2023 10:23:49 +0100 Subject: [PATCH 16/99] Remove lint fixe that isn't needed anymore. --- webapp/pages/map.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index 753ace576..3779d4f18 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -257,8 +257,7 @@ export default {
` description += - e.features[0].properties.about && - e.features[0].properties.about.length > 0 + e.features[0].properties.about && e.features[0].properties.about.length > 0 ? `
From 5cd3725a0df32324c316bc003d816964b781d409 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 21 Feb 2023 11:39:51 +0100 Subject: [PATCH 17/99] Withdrew space. --- webapp/pages/map.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/pages/map.vue b/webapp/pages/map.vue index 3779d4f18..6f663b6b1 100644 --- a/webapp/pages/map.vue +++ b/webapp/pages/map.vue @@ -357,7 +357,7 @@ export default { id: group.id, slug: group.slug, name: group.name, - about: group.about ? group.about : undefined, + about: group.about ? group.about : undefined, }, geometry: { type: 'Point', From 10a22487ef2df027147409c2fd8f0a8f32cc2094 Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 23 Feb 2023 09:06:41 +0100 Subject: [PATCH 18/99] Withdrew helper/jest.js and replace it with graphql-tag --- backend/src/helpers/jest.js | 10 ---------- .../src/middleware/hashtags/hashtagsMiddleware.spec.js | 2 +- backend/src/middleware/languages/languages.spec.js | 2 +- .../notifications/notificationsMiddleware.spec.js | 2 +- backend/src/middleware/orderByMiddleware.spec.js | 2 +- backend/src/middleware/permissionsMiddleware.spec.js | 2 +- .../middleware/softDelete/softDeleteMiddleware.spec.js | 2 +- backend/src/middleware/userInteractions.spec.js | 2 +- .../middleware/validation/validationMiddleware.spec.js | 2 +- backend/src/schema/resolvers/comments.spec.js | 2 +- backend/src/schema/resolvers/donations.spec.js | 2 +- backend/src/schema/resolvers/emails.spec.js | 2 +- backend/src/schema/resolvers/embeds.spec.js | 2 +- backend/src/schema/resolvers/follow.spec.js | 2 +- backend/src/schema/resolvers/inviteCodes.spec.js | 2 +- backend/src/schema/resolvers/locations.spec.js | 2 +- backend/src/schema/resolvers/moderation.spec.js | 2 +- backend/src/schema/resolvers/notifications.spec.js | 2 +- backend/src/schema/resolvers/passwordReset.spec.js | 2 +- backend/src/schema/resolvers/posts.spec.js | 2 +- backend/src/schema/resolvers/registration.spec.js | 2 +- backend/src/schema/resolvers/reports.spec.js | 2 +- backend/src/schema/resolvers/rewards.spec.js | 2 +- backend/src/schema/resolvers/searches.spec.js | 2 +- backend/src/schema/resolvers/shout.spec.js | 2 +- backend/src/schema/resolvers/socialMedia.spec.js | 2 +- backend/src/schema/resolvers/statistics.spec.js | 2 +- backend/src/schema/resolvers/userData.spec.js | 2 +- backend/src/schema/resolvers/user_management.spec.js | 2 +- backend/src/schema/resolvers/users.spec.js | 2 +- backend/src/schema/resolvers/users/location.spec.js | 2 +- backend/src/schema/resolvers/users/mutedUsers.spec.js | 2 +- backend/src/schema/resolvers/viewedTeaserCount.spec.js | 2 +- 33 files changed, 32 insertions(+), 42 deletions(-) diff --git a/backend/src/helpers/jest.js b/backend/src/helpers/jest.js index e3f6a3c84..09744e9f2 100644 --- a/backend/src/helpers/jest.js +++ b/backend/src/helpers/jest.js @@ -1,13 +1,3 @@ -// TODO: can be replaced with: (which is no a fake) -// import gql from 'graphql-tag' -// See issue: https://github.com/Ocelot-Social-Community/Ocelot-Social/issues/5152 - -//* This is a fake ES2015 template string, just to benefit of syntax -// highlighting of `gql` template strings in certain editors. -export function gql(strings) { - return strings.join('') -} - // sometime we have to wait to check a db state by having a look into the db in a certain moment // or we wait a bit to check if we missed to set an await somewhere // see: https://www.sitepoint.com/delay-sleep-pause-wait/ diff --git a/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js b/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js index bcecee73b..10d53ab7b 100644 --- a/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js +++ b/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js @@ -1,4 +1,4 @@ -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { cleanDatabase } from '../../db/factories' import { createTestClient } from 'apollo-server-testing' import { getNeode, getDriver } from '../../db/neo4j' diff --git a/backend/src/middleware/languages/languages.spec.js b/backend/src/middleware/languages/languages.spec.js index 99e87152e..f4f57adc4 100644 --- a/backend/src/middleware/languages/languages.spec.js +++ b/backend/src/middleware/languages/languages.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/middleware/notifications/notificationsMiddleware.spec.js b/backend/src/middleware/notifications/notificationsMiddleware.spec.js index ad7fd3f8c..a8a5d396b 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.spec.js +++ b/backend/src/middleware/notifications/notificationsMiddleware.spec.js @@ -1,4 +1,4 @@ -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { cleanDatabase } from '../../db/factories' import { createTestClient } from 'apollo-server-testing' import { getNeode, getDriver } from '../../db/neo4j' diff --git a/backend/src/middleware/orderByMiddleware.spec.js b/backend/src/middleware/orderByMiddleware.spec.js index 1aef1c52a..7453cf301 100644 --- a/backend/src/middleware/orderByMiddleware.spec.js +++ b/backend/src/middleware/orderByMiddleware.spec.js @@ -1,4 +1,4 @@ -import { gql } from '../helpers/jest' +import gql from 'graphql-tag' import { cleanDatabase } from '../db/factories' import { getNeode, getDriver } from '../db/neo4j' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/middleware/permissionsMiddleware.spec.js b/backend/src/middleware/permissionsMiddleware.spec.js index 35a2ab82b..667e74164 100644 --- a/backend/src/middleware/permissionsMiddleware.spec.js +++ b/backend/src/middleware/permissionsMiddleware.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' import createServer from '../server' import Factory, { cleanDatabase } from '../db/factories' -import { gql } from '../helpers/jest' +import gql from 'graphql-tag' import { getDriver, getNeode } from '../db/neo4j' import CONFIG from '../config' diff --git a/backend/src/middleware/softDelete/softDeleteMiddleware.spec.js b/backend/src/middleware/softDelete/softDeleteMiddleware.spec.js index 7e14cad1f..88d46a1c7 100644 --- a/backend/src/middleware/softDelete/softDeleteMiddleware.spec.js +++ b/backend/src/middleware/softDelete/softDeleteMiddleware.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/middleware/userInteractions.spec.js b/backend/src/middleware/userInteractions.spec.js index 2f97bda5a..94d1ff274 100644 --- a/backend/src/middleware/userInteractions.spec.js +++ b/backend/src/middleware/userInteractions.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../db/factories' -import { gql } from '../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../db/neo4j' import createServer from '../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/middleware/validation/validationMiddleware.spec.js b/backend/src/middleware/validation/validationMiddleware.spec.js index a887832c1..2e1cd6fa7 100644 --- a/backend/src/middleware/validation/validationMiddleware.spec.js +++ b/backend/src/middleware/validation/validationMiddleware.spec.js @@ -1,4 +1,4 @@ -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import Factory, { cleanDatabase } from '../../db/factories' import { getNeode, getDriver } from '../../db/neo4j' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/comments.spec.js b/backend/src/schema/resolvers/comments.spec.js index 09487082e..b2730dad4 100644 --- a/backend/src/schema/resolvers/comments.spec.js +++ b/backend/src/schema/resolvers/comments.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { createTestClient } from 'apollo-server-testing' import createServer from '../../server' import { getNeode, getDriver } from '../../db/neo4j' diff --git a/backend/src/schema/resolvers/donations.spec.js b/backend/src/schema/resolvers/donations.spec.js index 5a2bcfd7b..9fc010eca 100644 --- a/backend/src/schema/resolvers/donations.spec.js +++ b/backend/src/schema/resolvers/donations.spec.js @@ -1,6 +1,6 @@ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' diff --git a/backend/src/schema/resolvers/emails.spec.js b/backend/src/schema/resolvers/emails.spec.js index 4778e3fcf..02a631495 100644 --- a/backend/src/schema/resolvers/emails.spec.js +++ b/backend/src/schema/resolvers/emails.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getDriver, getNeode } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/embeds.spec.js b/backend/src/schema/resolvers/embeds.spec.js index 347825f3a..0f0d41357 100644 --- a/backend/src/schema/resolvers/embeds.spec.js +++ b/backend/src/schema/resolvers/embeds.spec.js @@ -3,7 +3,7 @@ import fs from 'fs' import path from 'path' import { createTestClient } from 'apollo-server-testing' import createServer from '../../server' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' jest.mock('node-fetch') const { Response } = jest.requireActual('node-fetch') diff --git a/backend/src/schema/resolvers/follow.spec.js b/backend/src/schema/resolvers/follow.spec.js index 14d8a366d..0d9d524ff 100644 --- a/backend/src/schema/resolvers/follow.spec.js +++ b/backend/src/schema/resolvers/follow.spec.js @@ -2,7 +2,7 @@ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '../../db/factories' import { getDriver, getNeode } from '../../db/neo4j' import createServer from '../../server' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' const driver = getDriver() const neode = getNeode() diff --git a/backend/src/schema/resolvers/inviteCodes.spec.js b/backend/src/schema/resolvers/inviteCodes.spec.js index b55ab079b..1df791ba6 100644 --- a/backend/src/schema/resolvers/inviteCodes.spec.js +++ b/backend/src/schema/resolvers/inviteCodes.spec.js @@ -1,6 +1,6 @@ import Factory, { cleanDatabase } from '../../db/factories' import { getDriver } from '../../db/neo4j' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' import CONSTANTS_REGISTRATION from './../../constants/registration' diff --git a/backend/src/schema/resolvers/locations.spec.js b/backend/src/schema/resolvers/locations.spec.js index 87542cf6d..82aebd441 100644 --- a/backend/src/schema/resolvers/locations.spec.js +++ b/backend/src/schema/resolvers/locations.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/moderation.spec.js b/backend/src/schema/resolvers/moderation.spec.js index 9f5014756..1665e9446 100644 --- a/backend/src/schema/resolvers/moderation.spec.js +++ b/backend/src/schema/resolvers/moderation.spec.js @@ -1,6 +1,6 @@ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' diff --git a/backend/src/schema/resolvers/notifications.spec.js b/backend/src/schema/resolvers/notifications.spec.js index 82d6e6371..36bd530eb 100644 --- a/backend/src/schema/resolvers/notifications.spec.js +++ b/backend/src/schema/resolvers/notifications.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getDriver } from '../../db/neo4j' import { createTestClient } from 'apollo-server-testing' import createServer from '../.././server' diff --git a/backend/src/schema/resolvers/passwordReset.spec.js b/backend/src/schema/resolvers/passwordReset.spec.js index 90c570f5a..fa5f26e58 100644 --- a/backend/src/schema/resolvers/passwordReset.spec.js +++ b/backend/src/schema/resolvers/passwordReset.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import CONSTANTS_REGISTRATION from './../../constants/registration' import createPasswordReset from './helpers/createPasswordReset' diff --git a/backend/src/schema/resolvers/posts.spec.js b/backend/src/schema/resolvers/posts.spec.js index 7a0dc0176..9335c1313 100644 --- a/backend/src/schema/resolvers/posts.spec.js +++ b/backend/src/schema/resolvers/posts.spec.js @@ -1,6 +1,6 @@ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' diff --git a/backend/src/schema/resolvers/registration.spec.js b/backend/src/schema/resolvers/registration.spec.js index ae6bcb7d7..bfc6a5fa6 100644 --- a/backend/src/schema/resolvers/registration.spec.js +++ b/backend/src/schema/resolvers/registration.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getDriver, getNeode } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/reports.spec.js b/backend/src/schema/resolvers/reports.spec.js index 449bdb3a7..96ef07d03 100644 --- a/backend/src/schema/resolvers/reports.spec.js +++ b/backend/src/schema/resolvers/reports.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' import createServer from '../.././server' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getDriver, getNeode } from '../../db/neo4j' const instance = getNeode() diff --git a/backend/src/schema/resolvers/rewards.spec.js b/backend/src/schema/resolvers/rewards.spec.js index 108973c9c..06fe87ec0 100644 --- a/backend/src/schema/resolvers/rewards.spec.js +++ b/backend/src/schema/resolvers/rewards.spec.js @@ -1,6 +1,6 @@ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' diff --git a/backend/src/schema/resolvers/searches.spec.js b/backend/src/schema/resolvers/searches.spec.js index 7c1a5a254..f889c2ac8 100644 --- a/backend/src/schema/resolvers/searches.spec.js +++ b/backend/src/schema/resolvers/searches.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/shout.spec.js b/backend/src/schema/resolvers/shout.spec.js index f774d7d0b..294a28a76 100644 --- a/backend/src/schema/resolvers/shout.spec.js +++ b/backend/src/schema/resolvers/shout.spec.js @@ -1,6 +1,6 @@ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' diff --git a/backend/src/schema/resolvers/socialMedia.spec.js b/backend/src/schema/resolvers/socialMedia.spec.js index dafbed6d6..8265e8376 100644 --- a/backend/src/schema/resolvers/socialMedia.spec.js +++ b/backend/src/schema/resolvers/socialMedia.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' import createServer from '../../server' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getDriver } from '../../db/neo4j' const driver = getDriver() diff --git a/backend/src/schema/resolvers/statistics.spec.js b/backend/src/schema/resolvers/statistics.spec.js index 46330ef9a..15aa2d449 100644 --- a/backend/src/schema/resolvers/statistics.spec.js +++ b/backend/src/schema/resolvers/statistics.spec.js @@ -1,6 +1,6 @@ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' diff --git a/backend/src/schema/resolvers/userData.spec.js b/backend/src/schema/resolvers/userData.spec.js index ee4901f0a..3c521a4f1 100644 --- a/backend/src/schema/resolvers/userData.spec.js +++ b/backend/src/schema/resolvers/userData.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/user_management.spec.js b/backend/src/schema/resolvers/user_management.spec.js index a249d7500..546c7a748 100644 --- a/backend/src/schema/resolvers/user_management.spec.js +++ b/backend/src/schema/resolvers/user_management.spec.js @@ -1,7 +1,7 @@ import jwt from 'jsonwebtoken' import CONFIG from './../../config' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { loginMutation } from '../../graphql/userManagement' import { createTestClient } from 'apollo-server-testing' import createServer, { context } from '../../server' diff --git a/backend/src/schema/resolvers/users.spec.js b/backend/src/schema/resolvers/users.spec.js index 9b7699dc1..f256c6363 100644 --- a/backend/src/schema/resolvers/users.spec.js +++ b/backend/src/schema/resolvers/users.spec.js @@ -1,5 +1,5 @@ import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/users/location.spec.js b/backend/src/schema/resolvers/users/location.spec.js index 73938c41a..7097002da 100644 --- a/backend/src/schema/resolvers/users/location.spec.js +++ b/backend/src/schema/resolvers/users/location.spec.js @@ -1,4 +1,4 @@ -import { gql } from '../../../helpers/jest' +import gql from 'graphql-tag' import Factory, { cleanDatabase } from '../../../db/factories' import { getNeode, getDriver } from '../../../db/neo4j' import { createTestClient } from 'apollo-server-testing' diff --git a/backend/src/schema/resolvers/users/mutedUsers.spec.js b/backend/src/schema/resolvers/users/mutedUsers.spec.js index 5c1a7dd5d..20e37f627 100644 --- a/backend/src/schema/resolvers/users/mutedUsers.spec.js +++ b/backend/src/schema/resolvers/users/mutedUsers.spec.js @@ -1,7 +1,7 @@ import { createTestClient } from 'apollo-server-testing' import createServer from '../../../server' import { cleanDatabase } from '../../../db/factories' -import { gql } from '../../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../../db/neo4j' const driver = getDriver() diff --git a/backend/src/schema/resolvers/viewedTeaserCount.spec.js b/backend/src/schema/resolvers/viewedTeaserCount.spec.js index d7437646b..ee90d1a08 100644 --- a/backend/src/schema/resolvers/viewedTeaserCount.spec.js +++ b/backend/src/schema/resolvers/viewedTeaserCount.spec.js @@ -1,6 +1,6 @@ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '../../db/factories' -import { gql } from '../../helpers/jest' +import gql from 'graphql-tag' import { getNeode, getDriver } from '../../db/neo4j' import createServer from '../../server' From ee4d6c5b2f0aa89faef77a79fe9ea7bfa012e879 Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 23 Feb 2023 10:02:21 +0100 Subject: [PATCH 19/99] Change the used nvm version. --- webapp/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/README.md b/webapp/README.md index 0f377521d..4c56dcc75 100644 --- a/webapp/README.md +++ b/webapp/README.md @@ -10,8 +10,8 @@ between different local Node versions: ```bash # install Node $ cd webapp -$ nvm install v16.19.0 -$ nvm use v16.19.0 +$ nvm install v19.4.0 +$ nvm use v19.4.0 ``` Install node dependencies with [yarn](https://yarnpkg.com/en/): From a810f9ba3908e34a68040f9e427ae8ce4cf91f3e Mon Sep 17 00:00:00 2001 From: elweyn Date: Thu, 23 Feb 2023 14:17:56 +0100 Subject: [PATCH 20/99] Change Benutzer to Nutzer. --- webapp/locales/de.json | 86 +++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/webapp/locales/de.json b/webapp/locales/de.json index 3e0e7369d..9ea733068 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -24,7 +24,7 @@ "posts": "Beiträge", "projects": "Projekte", "shouts": "Empfehlungen", - "users": "Benutzer" + "users": "Nutzer" }, "donations": { "goal": "Monatlich benötigte Spenden", @@ -38,11 +38,11 @@ "nameOfHashtag": "Name", "number": "Nr.", "tagCount": "Beiträge", - "tagCountUnique": "Benutzer" + "tagCountUnique": "Nutzer" }, "invites": { "description": "Einladungen sind eine wunderbare Möglichkeit, Deine Freunde in Deinem Netzwerk zu haben …", - "name": "Benutzer einladen", + "name": "Nutzer einladen", "title": "Leute einladen" }, "name": "Systemverwaltung", @@ -59,11 +59,11 @@ "name": "Einstellungen" }, "users": { - "empty": "Keine Benutzer gefunden", + "empty": "Keine Nutzer gefunden", "form": { "placeholder": "E-Mail, Name oder Beschreibung" }, - "name": "Benutzer", + "name": "Nutzer", "roleChanged": "Rolle erfolgreich geändert!", "table": { "columns": { @@ -111,7 +111,7 @@ "shout": "Empfehlung ::: Empfehlungen", "tag": "Schlagwort ::: Schlagwörter", "takeAction": "Aktiv werden", - "user": "Benutzer ::: Benutzer", + "user": "Nutzer ::: Nutzer", "validations": { "categories": "es müssen eine bis drei Themen ausgewählt werden", "email": "muss eine gültige E-Mail-Adresse sein", @@ -138,12 +138,12 @@ "registration": { "create-user-account": { "buttonTitle": "Erstellen", - "error": "Es konnte kein Benutzerkonto erstellt werden!", + "error": "Es konnte kein Nutzerkonto erstellt werden!", "help": "Vielleicht war der Bestätigungscode falsch oder abgelaufen? Wenn das Problem weiterhin besteht, schicke uns gerne eine E-Mail an:", "recieveCommunicationAsEmailsEtcConfirmed": "Ich stimme auch dem Erhalt von E-Mails und anderen Formen der Kommunikation (z.B. Push-Benachrichtigungen) zu.", - "success": "Dein Benutzerkonto wurde erstellt!", + "success": "Dein Nutzerkonto wurde erstellt!", "termsAndCondsEtcConfirmed": "Ich habe folgendes gelesen, verstanden und stimme zu:", - "title": "Benutzerkonto anlegen" + "title": "Nutzerkonto anlegen" }, "email": { "buttonTitle": { @@ -197,14 +197,14 @@ "data-privacy": "Ich habe die Datenschutzerklärung gelesen und verstanden.", "description": "Um loszulegen, kannst Du Dich hier kostenfrei registrieren:", "errors": { - "email-exists": "Es gibt schon ein Benutzerkonto mit dieser E-Mail-Adresse!" + "email-exists": "Es gibt schon ein Nutzerkonto mit dieser E-Mail-Adresse!" }, "submit": "Konto erstellen", "success": "Eine E-Mail mit einem Link zum Abschließen Deiner Registrierung wurde an {email} geschickt", "terms-and-condition": "Ich stimme den Nutzungsbedingungen zu." }, "title": "Mach mit bei {APPLICATION_NAME}!", - "unavailable": "Leider ist die öffentliche Registrierung von Benutzerkonten auf diesem Server derzeit nicht möglich." + "unavailable": "Leider ist die öffentliche Registrierung von Nutzerkonten auf diesem Server derzeit nicht möglich." } } }, @@ -267,9 +267,9 @@ "happy": "Glücklich", "surprised": "Erstaunt" }, - "filterFollow": "Beiträge von Benutzern filtern, denen ich folge", + "filterFollow": "Beiträge von Nutzern filtern, denen ich folge", "filterMasonryGrid": { - "myFriends": "Benutzer denen ich folge", + "myFriends": "Nutzer denen ich folge", "myTopics": "Meine Themen", "noFilter": "Beiträge filtern" }, @@ -356,7 +356,7 @@ "unorderedList": "Ungeordnete Liste" }, "mention": { - "noUsersFound": "Keine Benutzer gefunden" + "noUsersFound": "Keine Nutzer gefunden" }, "placeholder": "Schreib etwas Inspirierendes …" }, @@ -378,7 +378,7 @@ "deleteFilter": "Filter löschen", "emotions": "Emotionen", "filter-by": "Filtern nach ...", - "following": "Benutzer denen ich folge", + "following": "Nutzer denen ich folge", "languages": "Sprachen", "order": { "newest": { @@ -411,9 +411,9 @@ "actionRadius": "Aktionsradius der Gruppe", "addMemberToGroup": "Zur Gruppe hinzufügen", "addMemberToGroupSuccess": "„{name}“ wurde der Gruppe mit der Rolle „{role}“ hinzugefügt!", - "addUser": "Benutzer hinzufügen", + "addUser": "Nutzer hinzufügen", "addUserNoOptions": "Keine Nutzer gefunden!", - "addUserPlaceholder": "Benutzername", + "addUserPlaceholder": "Nutzername", "allGroups": "Alle Gruppen", "button": { "tooltip": "Gruppen anzeigen" @@ -434,7 +434,7 @@ "title": "Meine Gruppe ändern" }, "errors": { - "userAlreadyMember": "Benutzer „{name}“ ist bereits Mitglied!" + "userAlreadyMember": "Nutzer „{name}“ ist bereits Mitglied!" }, "follow": "Folge", "foundation": "Gründung", @@ -525,10 +525,10 @@ "logout": "Abmelden", "moreInfo": "Was ist {APPLICATION_NAME}?", "moreInfoHint": "zur Präsentationsseite", - "no-account": "Du hast noch kein Benutzerkonto?", + "no-account": "Du hast noch kein Nutzerkonto?", "no-cookie": "Es kann kein Cookie angelegt werden. Du must Cookies akzeptieren.", "password": "Dein Passwort", - "register": "Benutzerkonto erstellen", + "register": "Nutzerkonto erstellen", "success": "Du bist eingeloggt!" }, "maintenance": { @@ -544,7 +544,7 @@ "markerTypes": { "group": "Gruppe", "theUser": "deine Position", - "user": "Benutzer" + "user": "Nutzer" }, "pageTitle": "Landkarte", "styles": { @@ -591,12 +591,12 @@ "submit": "Bestätige Entscheidung", "User": { "disable": { - "message": "Möchtest Du den Benutzer „{name}“ wirklich gesperrt lassen?", - "title": "Sperre den Benutzer abschließend" + "message": "Möchtest Du den Nutzer „{name}“ wirklich gesperrt lassen?", + "title": "Sperre den Nutzer abschließend" }, "enable": { - "message": "Möchtest Du den Benutzer „{name}“ wirklich entsperrt lassen?", - "title": "Entsperre den Benutzer abschließend" + "message": "Möchtest Du den Nutzer „{name}“ wirklich entsperrt lassen?", + "title": "Entsperre den Nutzer abschließend" } } }, @@ -644,12 +644,12 @@ "mentioned_in_post": "Hat Dich in einem Beitrag erwähnt …" }, "title": "Benachrichtigungen", - "user": "Benutzer" + "user": "Nutzer" }, "position": { "group": "Gruppe", "my": "Meine Position", - "user": "Benutzer" + "user": "Nutzer" }, "post": { "comment": { @@ -740,7 +740,7 @@ "submit": "freigeben", "success": "Erfolgreich freigegeben!", "user": { - "error": "Den Benutzer hast Du schon gemeldet!", + "error": "Den Nutzer hast Du schon gemeldet!", "message": "Bist Du sicher, dass Du den Nutzer „{name}“ freigeben möchtest?", "title": "Nutzer freigeben", "type": "Nutzer" @@ -784,7 +784,7 @@ "submit": "Meldung senden", "success": "Vielen Dank für diese Meldung!", "user": { - "error": "Du hast den Benutzer bereits gemeldet!", + "error": "Du hast den Nutzer bereits gemeldet!", "message": "Bist Du sicher, dass Du den Nutzer „{name}“ melden möchtest?", "title": "Nutzer melden", "type": "Nutzer" @@ -797,7 +797,7 @@ "Group": "Gruppe ::: Gruppen", "Post": "Beitrag ::: Beiträge", "Tag": "Hashtag ::: Hashtags", - "User": "Benutzer ::: Benutzer" + "User": "Nutzer ::: Nutzer" }, "hint": "Wonach suchst Du? Nutze !… für Beiträge, @… für Mitglieder, &… für Gruppen, #… für Hashtags", "no-results": "Keine Ergebnisse für \"{search}\" gefunden. Versuch' es mit einem anderen Begriff!", @@ -816,16 +816,16 @@ }, "empty": "Bislang hast Du niemanden blockiert.", "explanation": { - "closing": "Das sollte fürs Erste genügen, damit blockierte Benutzer Dich nicht mehr länger belästigen können.", + "closing": "Das sollte fürs Erste genügen, damit blockierte Nutzer Dich nicht mehr länger belästigen können.", "commenting-disabled": "Du kannst den Beitrag derzeit nicht kommentieren.", "commenting-explanation": "Dafür kann es mehrere Gründe geben, bitte schau in unsere ", - "intro": "Wenn ein anderer Benutzer durch Dich blockiert wurde, dann passiert Folgendes:", - "notifications": "Von Dir blockierte Benutzer werden keine Benachrichtigungen mehr erhalten, falls sie in Deinen Beiträgen erwähnt werden.", + "intro": "Wenn ein anderer Nutzer durch Dich blockiert wurde, dann passiert Folgendes:", + "notifications": "Von Dir blockierte Nutzer werden keine Benachrichtigungen mehr erhalten, falls sie in Deinen Beiträgen erwähnt werden.", "their-perspective": "Umgekehrt das gleiche: Die blockierte Person bekommt auch in ihren Benachrichtigungen Deine Beiträge nicht mehr zu sehen.", "your-perspective": "In Deinen Benachrichtigungen tauchen keine Beiträge der blockierten Person mehr auf." }, - "how-to": "Du kannst andere Benutzer auf deren Profilseite über das Inhaltsmenü blockieren.", - "name": "Blockierte Benutzer", + "how-to": "Du kannst andere Nutzer auf deren Profilseite über das Inhaltsmenü blockieren.", + "name": "Blockierte Nutzer", "unblock": "Blockierten Nutzer freigeben", "unblocked": "{name} ist wieder entsperrt" }, @@ -834,7 +834,7 @@ "labelCity": "Deine Stadt oder Region", "labelCityHint": "(zeigt ungefähre Position auf der Landkarte)", "labelName": "Dein Name", - "labelSlug": "Dein eindeutiger Benutzername", + "labelSlug": "Dein eindeutiger Nutzername", "name": "Deine Daten", "namePlaceholder": "Petra Lustig", "success": "Deine Daten wurden erfolgreich aktualisiert!" @@ -843,12 +843,12 @@ "accountDescription": "Sei dir bewusst, dass deine Beiträge und Kommentare für unsere Community wichtig sind. Wenn du sie trotzdem löschen möchtest, musst du sie unten markieren.", "accountWarning": "Dein Konto, deine Beiträge oder Kommentare kannst du nach dem Löschen WEDER VERWALTEN NOCH WIEDERHERSTELLEN!", "accountWarningAdmin": "Das Konto, die Beiträge oder Kommentare können nach dem Löschen WEDER VERWALTET NOCH WIEDERHERGESTELLT WERDEN!", - "accountWarningIsAdmin": "Achtung! Du löschst jetzt ein Benutzerkonto!", + "accountWarningIsAdmin": "Achtung! Du löschst jetzt ein Nutzerkonto!", "commentedCount": "Meinen {count} Kommentar löschen ::: Meine {count} Kommentare löschen", - "confirmDeleting": "Benutzerkonto jetzt löschen", + "confirmDeleting": "Nutzerkonto jetzt löschen", "contributionsCount": "Meinen {count} Beitrag löschen ::: Meine {count} Beiträge löschen", "infoAdmin": "Alle Beiträge und Kommentare des Users werden zusätzlich gelöscht!", - "name": "Benutzerkonto löschen", + "name": "Nutzerkonto löschen", "pleaseConfirm": "Zerstörerische Aktion! Gib „{confirm}“ ein, um zu bestätigen.", "success": "Konto erfolgreich gelöscht!" }, @@ -908,13 +908,13 @@ }, "empty": "Bislang hast du niemanden stummgeschaltet.", "explanation": { - "intro": "Wenn ein anderer Benutzer von dir stummgeschaltet wurde, dann passiert folgendes:", + "intro": "Wenn ein anderer Nutzer von dir stummgeschaltet wurde, dann passiert folgendes:", "search": "Die Beiträge von stummgeschalteten Personen verschwinden aus deinen Suchergebnissen.", "your-perspective": "In deiner Beitragsübersicht tauchen keine Beiträge der stummgeschalteten Person mehr auf." }, - "how-to": "Du kannst andere Benutzer auf deren Profilseite über das Inhaltsmenü stummschalten.", + "how-to": "Du kannst andere Nutzer auf deren Profilseite über das Inhaltsmenü stummschalten.", "mute": "Stumm schalten", - "name": "Stummgeschaltete Benutzer", + "name": "Stummgeschaltete Nutzer", "unmute": "Stummschaltung aufheben", "unmuted": "{name} ist nicht mehr stummgeschaltet" }, @@ -969,7 +969,7 @@ }, "validation": { "slug": { - "alreadyTaken": "Dieser Benutzername ist schon vergeben.", + "alreadyTaken": "Dieser Nutzername ist schon vergeben.", "regex": "Es sind nur Kleinbuchstaben, Zahlen, Unterstriche oder Bindestriche erlaubt." } } From b75c7c69776ff82f6fa7b11529d98fd69d7001e5 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 23 Feb 2023 18:13:19 +0100 Subject: [PATCH 21/99] hack MapboxGeocoder in unit tests by simply stubbing the import --- webapp/jest.config.js | 4 ++-- webapp/pages/map.spec.js | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/webapp/jest.config.js b/webapp/jest.config.js index 1b3f4d03e..42110ba3b 100644 --- a/webapp/jest.config.js +++ b/webapp/jest.config.js @@ -20,16 +20,16 @@ module.exports = { transform: { '.*\\.(vue)$': 'vue-jest', '^.+\\.js$': 'babel-jest', - '/node_modules/@mapbox/mapbox-gl-geocoder/dist/*': 'babel-jest', }, testMatch: ['**/?(*.)+(spec|test).js?(x)'], modulePathIgnorePatterns: ['/build/'], moduleNameMapper: { '\\.(svg)$': '/test/fileMock.js', '\\.(css|less)$': 'identity-obj-proxy', + '@mapbox/mapbox-gl-geocoder': 'identity-obj-proxy', '^@/(.*)$': '/src/$1', '^~/(.*)$': '/$1', }, moduleFileExtensions: ['js', 'json', 'vue'], - testEnvironment: 'jsdom', + testEnvironment: 'jest-environment-jsdom', } diff --git a/webapp/pages/map.spec.js b/webapp/pages/map.spec.js index 5dbb34cf8..a9e21c876 100644 --- a/webapp/pages/map.spec.js +++ b/webapp/pages/map.spec.js @@ -4,8 +4,11 @@ import { mount } from '@vue/test-utils' import VueMeta from 'vue-meta' import Vuex from 'vuex' import Map from './map' +import MapboxGeocoder from '@mapbox/mapbox-gl-geocoder' -jest.mock('@mapbox/mapbox-gl-geocoder') +jest.mock('@mapbox/mapbox-gl-geocoder', () => { + return jest.fn().mockImplementation(jest.fn()) +}) jest.mock('mapbox-gl', () => { return { @@ -70,6 +73,7 @@ describe('map', () => { let mocks beforeEach(() => { + MapboxGeocoder.mockClear() mocks = { $t: (t) => t, $env: { @@ -97,7 +101,7 @@ describe('map', () => { }) it('renders', () => { - expect(wrapper.is('div')).toBeTruthy() + expect(wrapper.element.tagName).toBe('DIV') }) it('has correct content', () => { From 119d4c4e82fb6c66fd48f9fc3c6d526509c4bc56 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 23 Feb 2023 18:13:47 +0100 Subject: [PATCH 22/99] coverage webapp to 83% --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4b310a20b..660ee56ea 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -269,7 +269,7 @@ jobs: report_name: Coverage Webapp type: lcov result_path: ./coverage/lcov.info - min_coverage: 63 + min_coverage: 83 token: ${{ github.token }} ############################################################################## From e8ca65c040cdbe249fc3375c187234b60dd11136 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 23 Feb 2023 21:13:18 +0100 Subject: [PATCH 23/99] remove comments --- webapp/pages/admin/donations.spec.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/webapp/pages/admin/donations.spec.js b/webapp/pages/admin/donations.spec.js index 4a85590a9..37a20393f 100644 --- a/webapp/pages/admin/donations.spec.js +++ b/webapp/pages/admin/donations.spec.js @@ -88,15 +88,13 @@ describe('donations.vue', () => { describe('form component click', () => { it('on #showDonations checkbox changes "showDonations" to true', async () => { - // starts with false - await wrapper.find('#showDonations').setChecked(true) // set to true + await wrapper.find('#showDonations').setChecked(true) expect(wrapper.vm.showDonations).toBe(true) }) it('on #showDonations checkbox twice changes "showDonations" back to false', async () => { - // starts with false - await wrapper.find('#showDonations').setChecked(true) // set to true - await wrapper.find('#showDonations').setChecked(false) // set to true + await wrapper.find('#showDonations').setChecked(true) + await wrapper.find('#showDonations').setChecked(false) expect(wrapper.vm.showDonations).toBe(false) }) @@ -137,7 +135,7 @@ describe('donations.vue', () => { }) it('calls mutation with input values once', async () => { - wrapper.find('#showDonations').setChecked(true) // set to true + wrapper.find('#showDonations').setChecked(true) await wrapper.vm.$nextTick() wrapper.find('#donations-goal').setValue('20000') await wrapper.vm.$nextTick() From d284f7b122e3a3a79d22cad2adcf6272658cbe81 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 00:20:32 +0100 Subject: [PATCH 24/99] override command for intermediate containers to prevent execution of the container if command is defined --- deployment/docker-compose.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/deployment/docker-compose.yml b/deployment/docker-compose.yml index 0653d58f3..1fdfd9086 100644 --- a/deployment/docker-compose.yml +++ b/deployment/docker-compose.yml @@ -7,6 +7,7 @@ services: dockerfile: ../webapp/Dockerfile context: ../webapp target: base + command: sleep 0 webapp-code: image: ocelotsocialnetwork/webapp:local-code @@ -14,6 +15,7 @@ services: dockerfile: ../webapp/Dockerfile context: ../webapp target: code + command: sleep 0 webapp: image: ocelotsocialnetwork/webapp-branded:local-${CONFIGURATION} @@ -51,6 +53,7 @@ services: dockerfile: ../backend/Dockerfile context: ../backend target: base + command: sleep 0 backend-code: image: ocelotsocialnetwork/backend:local-code @@ -58,6 +61,7 @@ services: dockerfile: ../backend/Dockerfile context: ../backend target: code + command: sleep 0 backend: image: ocelotsocialnetwork/backend-branded:local-${CONFIGURATION} @@ -106,6 +110,7 @@ services: dockerfile: ../webapp/Dockerfile.maintenance context: ../webapp target: base + command: sleep 0 maintenance-code: image: ocelotsocialnetwork/maintenance:local-code @@ -113,6 +118,7 @@ services: dockerfile: ../webapp/Dockerfile.maintenance context: ../webapp target: code + command: sleep 0 maintenance: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there From 31e7be8ac97cd77184d03c00eec94d5e409e7663 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 01:00:41 +0100 Subject: [PATCH 25/99] conflict with container naming in main docker-compose --- deployment/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deployment/docker-compose.yml b/deployment/docker-compose.yml index 1fdfd9086..a0dda4dc0 100644 --- a/deployment/docker-compose.yml +++ b/deployment/docker-compose.yml @@ -19,7 +19,7 @@ services: webapp: image: ocelotsocialnetwork/webapp-branded:local-${CONFIGURATION} - container_name: webapp + container_name: webapp-branded build: dockerfile: src/docker/webapp.Dockerfile target: branded @@ -68,7 +68,7 @@ services: container_name: backend build: dockerfile: src/docker/backend.Dockerfile - target: branded + target: branded-branded context: . args: - CONFIGURATION=$CONFIGURATION @@ -123,7 +123,7 @@ services: maintenance: # name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there image: ocelotsocialnetwork/maintenance-branded:local-${CONFIGURATION} - container_name: maintenance + container_name: maintenance-branded build: # TODO: Separate from webapp, this must be independent dockerfile: src/docker/maintenance.Dockerfile @@ -158,7 +158,7 @@ services: mailserver: image: djfarrelly/maildev - container_name: mailserver + container_name: mailserver-branded ports: - 1080:80 networks: From 8082bb0188be0128982afce59a9bc4b794e09558 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 01:00:54 +0100 Subject: [PATCH 26/99] fix broken maintenance translation --- deployment/src/docker/maintenance.Dockerfile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/deployment/src/docker/maintenance.Dockerfile b/deployment/src/docker/maintenance.Dockerfile index 1df6c551b..4ce817ae3 100644 --- a/deployment/src/docker/maintenance.Dockerfile +++ b/deployment/src/docker/maintenance.Dockerfile @@ -11,10 +11,17 @@ FROM $APP_IMAGE_CODE as code ARG CONFIGURATION=example +COPY src/tools/ tools/ + # copy public constants into the Docker image to brand it COPY configurations/${CONFIGURATION}/branding/static/ static/ COPY configurations/${CONFIGURATION}/branding/constants/ constants/ -COPY configurations/${CONFIGURATION}/branding/locales/ locales/ +COPY configurations/${CONFIGURATION}/branding/locales/*.json locales/tmp/ +# COPY configurations/${CONFIGURATION}/branding/locales/ locales/ + +RUN apk add --no-cache bash jq + +RUN tools/merge-locales.sh ################################################################################## # BUILD ########################################################################## From 18ccddeaf8f3d501b5e80810bfb7d8e65fc8aa40 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 01:16:59 +0100 Subject: [PATCH 27/99] fix translatability of maintenance page --- webapp/plugins/i18n.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/plugins/i18n.js b/webapp/plugins/i18n.js index f162408f6..1382c2728 100644 --- a/webapp/plugins/i18n.js +++ b/webapp/plugins/i18n.js @@ -36,7 +36,7 @@ export default ({ app, req, cookie, store }) => { } const expires = new Date() - expires.setDate(expires.getDate() + app.$env.COOKIE_EXPIRE_TIME) + expires.setDate(expires.getDate() + app.$env && app.$env.COOKIE_EXPIRE_TIME) app.$cookies.set(key, localeInStore, { expires, // maxAge: app.$env.COOKIE_EXPIRE_TIME * 60 * 60 * 24, // days to seconds From ea3ac6f24dd5aeda4db99ce82b19f90a7e3b2ce5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 01:19:21 +0100 Subject: [PATCH 28/99] order file dockerfile commands correctly --- deployment/src/docker/maintenance.Dockerfile | 8 +++----- deployment/src/docker/webapp.Dockerfile | 7 +++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/deployment/src/docker/maintenance.Dockerfile b/deployment/src/docker/maintenance.Dockerfile index 4ce817ae3..b699e7f20 100644 --- a/deployment/src/docker/maintenance.Dockerfile +++ b/deployment/src/docker/maintenance.Dockerfile @@ -11,16 +11,14 @@ FROM $APP_IMAGE_CODE as code ARG CONFIGURATION=example -COPY src/tools/ tools/ - # copy public constants into the Docker image to brand it COPY configurations/${CONFIGURATION}/branding/static/ static/ COPY configurations/${CONFIGURATION}/branding/constants/ constants/ + +# locales COPY configurations/${CONFIGURATION}/branding/locales/*.json locales/tmp/ -# COPY configurations/${CONFIGURATION}/branding/locales/ locales/ - +COPY src/tools/ tools/ RUN apk add --no-cache bash jq - RUN tools/merge-locales.sh ################################################################################## diff --git a/deployment/src/docker/webapp.Dockerfile b/deployment/src/docker/webapp.Dockerfile index ad5b7c769..f0c75e392 100644 --- a/deployment/src/docker/webapp.Dockerfile +++ b/deployment/src/docker/webapp.Dockerfile @@ -12,17 +12,16 @@ FROM $APP_IMAGE_CODE as code ARG CONFIGURATION=example # copy public constants into the Docker image to brand it -COPY src/tools/ tools/ COPY configurations/${CONFIGURATION}/branding/static/ static/ COPY configurations/${CONFIGURATION}/branding/constants/ constants/ COPY configurations/${CONFIGURATION}/branding/locales/html/ locales/html/ -# COPY configurations/${CONFIGURATION}/branding/locales/index.js locales/index.js -COPY configurations/${CONFIGURATION}/branding/locales/*.json locales/tmp/ COPY configurations/${CONFIGURATION}/branding/assets/styles/imports/ assets/styles/imports/ COPY configurations/${CONFIGURATION}/branding/assets/fonts/ assets/fonts/ +# locales +COPY configurations/${CONFIGURATION}/branding/locales/*.json locales/tmp/ +COPY src/tools/ tools/ RUN apk add --no-cache bash jq - RUN tools/merge-locales.sh ################################################################################## From 9c6511bf3622774df24f24d78f4a57379a64394e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 10:40:30 +0100 Subject: [PATCH 29/99] security write permission - in hope this fixes the dependabot issues --- .github/workflows/test.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 96aaf53a1..e15313549 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -168,6 +168,8 @@ jobs: name: Unit tests - backend runs-on: ubuntu-latest needs: [build_test_neo4j,build_test_backend] + permissions: + security-events: write steps: ########################################################################## # CHECKOUT CODE ########################################################## @@ -225,6 +227,8 @@ jobs: name: Unit tests - webapp runs-on: ubuntu-latest needs: [build_test_webapp] + permissions: + security-events: write steps: ########################################################################## # CHECKOUT CODE ########################################################## From 3ce739f68fe7df1d34fb2442de4f53cbdc415e2e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 10:48:16 +0100 Subject: [PATCH 30/99] dependabot schedule & remove ignores --- .github/dependabot.yml | 198 +++++++++-------------------------------- 1 file changed, 42 insertions(+), 156 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c5433c921..585710358 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,177 +3,63 @@ updates: - package-ecosystem: npm directory: "/" schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 - ignore: - - dependency-name: cypress - versions: - - 6.3.0 - - 6.4.0 - - 6.5.0 - - 6.6.0 - - 6.7.1 - - 6.8.0 - - 7.0.0 - - 7.0.1 - - 7.1.0 - - dependency-name: cypress-cucumber-preprocessor - versions: - - 4.0.0 - - 4.0.1 - - 4.0.3 - - dependency-name: date-fns - versions: - - 2.16.1 - - 2.17.0 - - 2.18.0 - - 2.19.0 - - 2.20.0 - - 2.20.1 - - 2.20.2 - - 2.20.3 - - 2.21.0 - - dependency-name: cypress-file-upload - versions: - - 5.0.2 - - 5.0.3 - - 5.0.4 - - 5.0.5 - - dependency-name: neo4j-driver - versions: - - 4.2.2 + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" + # open-pull-requests-limit: 10 + # ignore: - package-ecosystem: npm directory: "/backend" schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 - ignore: - - dependency-name: y18n - versions: - - 4.0.1 - - 4.0.2 - - dependency-name: metascraper-publisher - versions: - - 5.16.16 - - 5.18.1 - - 5.18.12 - - 5.18.2 - - 5.18.4 - - 5.18.5 - - 5.18.6 - - 5.18.9 - - 5.20.0 - - 5.21.0 - - 5.21.2 - - 5.21.3 - - 5.21.4 - - 5.21.5 - - dependency-name: metascraper-author - versions: - - 5.16.16 - - 5.18.1 - - 5.18.12 - - 5.18.2 - - 5.18.4 - - 5.18.5 - - 5.18.6 - - 5.18.9 - - 5.20.0 - - 5.21.0 - - 5.21.2 - - 5.21.3 - - 5.21.4 - - 5.21.5 - - dependency-name: neo4j-driver - versions: - - 4.2.2 - - dependency-name: neo4j-graphql-js - versions: - - 2.19.1 - - dependency-name: mustache - versions: - - 4.1.0 + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" + # open-pull-requests-limit: 10 + # ignore: - package-ecosystem: npm directory: "/webapp" schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 - ignore: - - dependency-name: nuxt - versions: - - 2.14.12 - - 2.15.0 - - 2.15.1 - - 2.15.2 - - 2.15.3 - - dependency-name: v-tooltip - versions: - - 2.1.2 - - dependency-name: "@vue/server-test-utils" - versions: - - 1.1.2 - - 1.1.3 - - dependency-name: node-notifier - versions: - - 8.0.1 + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" + # open-pull-requests-limit: 10 + # ignore: - package-ecosystem: docker directory: "/webapp" schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 - ignore: - - dependency-name: node - versions: - - ">= 15.5.a, < 15.6" - - dependency-name: node - versions: - - 15.10.0.pre.alpine3.10 - - 15.11.0.pre.alpine3.10 - - 15.12.0.pre.alpine3.10 - - 15.13.0.pre.alpine3.10 - - 15.7.0.pre.alpine3.10 - - 15.8.0.pre.alpine3.10 - - 15.9.0.pre.alpine3.10 + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" + # open-pull-requests-limit: 10 + # ignore: - package-ecosystem: docker directory: "/backend" schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 - ignore: - - dependency-name: node - versions: - - ">= 15.4.a, < 15.5" - - dependency-name: node - versions: - - ">= 15.5.a, < 15.6" - - dependency-name: node - versions: - - 15.10.0.pre.alpine3.10 - - 15.11.0.pre.alpine3.10 - - 15.12.0.pre.alpine3.10 - - 15.13.0.pre.alpine3.10 - - 15.7.0.pre.alpine3.10 - - 15.8.0.pre.alpine3.10 - - 15.9.0.pre.alpine3.10 + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" + # open-pull-requests-limit: 10 + # ignore: - package-ecosystem: docker directory: "/neo4j" schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 - ignore: - - dependency-name: neo4j - versions: - - 4.2.3 - - 4.2.4 + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" + # open-pull-requests-limit: 10 + # ignore: - package-ecosystem: docker directory: "/deployment/legacy-migration/maintenance-worker" schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" + # open-pull-requests-limit: 10 + # ignore: From 9a0b9a34c3ca117493bdc7b8bf63dc682430df19 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 11:33:29 +0100 Subject: [PATCH 31/99] fix dependabot configuration --- .github/dependabot.yml | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 585710358..085fedb18 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,6 +1,6 @@ version: 2 updates: -- package-ecosystem: npm +- package-ecosystem: "github-actions" directory: "/" schedule: interval: weekly @@ -9,6 +9,14 @@ updates: time: "03:00" # open-pull-requests-limit: 10 # ignore: + +- package-ecosystem: npm + directory: "/" + schedule: + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" - package-ecosystem: npm directory: "/backend" schedule: @@ -16,8 +24,6 @@ updates: day: "saturday" timezone: "Europe/Berlin" time: "03:00" - # open-pull-requests-limit: 10 - # ignore: - package-ecosystem: npm directory: "/webapp" schedule: @@ -25,17 +31,7 @@ updates: day: "saturday" timezone: "Europe/Berlin" time: "03:00" - # open-pull-requests-limit: 10 - # ignore: -- package-ecosystem: docker - directory: "/webapp" - schedule: - interval: weekly - day: "saturday" - timezone: "Europe/Berlin" - time: "03:00" - # open-pull-requests-limit: 10 - # ignore: + - package-ecosystem: docker directory: "/backend" schedule: @@ -43,8 +39,13 @@ updates: day: "saturday" timezone: "Europe/Berlin" time: "03:00" - # open-pull-requests-limit: 10 - # ignore: +- package-ecosystem: docker + directory: "/webapp" + schedule: + interval: weekly + day: "saturday" + timezone: "Europe/Berlin" + time: "03:00" - package-ecosystem: docker directory: "/neo4j" schedule: @@ -52,14 +53,10 @@ updates: day: "saturday" timezone: "Europe/Berlin" time: "03:00" - # open-pull-requests-limit: 10 - # ignore: - package-ecosystem: docker - directory: "/deployment/legacy-migration/maintenance-worker" + directory: "/deployment/src/docker" schedule: interval: weekly day: "saturday" timezone: "Europe/Berlin" time: "03:00" - # open-pull-requests-limit: 10 - # ignore: From 9cf32201feff43734206b18c89420194bfc2fe2e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 12:37:24 +0100 Subject: [PATCH 32/99] allow write-all --- .github/workflows/test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e15313549..ea298bc11 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -168,8 +168,8 @@ jobs: name: Unit tests - backend runs-on: ubuntu-latest needs: [build_test_neo4j,build_test_backend] - permissions: - security-events: write + permissions: write-all + # security-events: write steps: ########################################################################## # CHECKOUT CODE ########################################################## @@ -227,8 +227,8 @@ jobs: name: Unit tests - webapp runs-on: ubuntu-latest needs: [build_test_webapp] - permissions: - security-events: write + permissions: write-all + # security-events: write steps: ########################################################################## # CHECKOUT CODE ########################################################## From f95d6d63f953461788b35c406356d2906f46d62f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Fri, 24 Feb 2023 12:45:47 +0100 Subject: [PATCH 33/99] remove unused package, ignore dist for unit tests --- webapp/jest.config.js | 2 +- webapp/package.json | 1 - webapp/yarn.lock | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/webapp/jest.config.js b/webapp/jest.config.js index 42110ba3b..538f72bc7 100644 --- a/webapp/jest.config.js +++ b/webapp/jest.config.js @@ -22,7 +22,7 @@ module.exports = { '^.+\\.js$': 'babel-jest', }, testMatch: ['**/?(*.)+(spec|test).js?(x)'], - modulePathIgnorePatterns: ['/build/'], + modulePathIgnorePatterns: ['/dist/'], moduleNameMapper: { '\\.(svg)$': '/test/fileMock.js', '\\.(css|less)$': 'identity-obj-proxy', diff --git a/webapp/package.json b/webapp/package.json index 40cacbae7..9b9dbdf72 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -67,7 +67,6 @@ "devDependencies": { "@babel/core": "~7.12.3", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.20.11", "@babel/preset-env": "^7.20.2", "@faker-js/faker": "5.1.0", "@nuxtjs/composition-api": "0.32.0", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index f7ac510f5..8ee3e501f 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -1980,7 +1980,7 @@ "@babel/helper-simple-access" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.19.6", "@babel/plugin-transform-modules-commonjs@^7.20.11": +"@babel/plugin-transform-modules-commonjs@^7.19.6": version "7.20.11" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607" integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw== From f3a95120bb9691ea113d05be71f0895f4574a042 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 13:01:49 +0100 Subject: [PATCH 34/99] try limit permissions to statusses --- .github/workflows/test.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ea298bc11..f4f1e141e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -168,7 +168,8 @@ jobs: name: Unit tests - backend runs-on: ubuntu-latest needs: [build_test_neo4j,build_test_backend] - permissions: write-all + permissions: + statuses: write # security-events: write steps: ########################################################################## @@ -227,7 +228,8 @@ jobs: name: Unit tests - webapp runs-on: ubuntu-latest needs: [build_test_webapp] - permissions: write-all + permissions: + statuses: write # security-events: write steps: ########################################################################## From 2b30527ef0225c5da3e118db94156ba278033369 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 13:23:04 +0100 Subject: [PATCH 35/99] try checks permission --- .github/workflows/test.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f4f1e141e..824b519d7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -169,7 +169,8 @@ jobs: runs-on: ubuntu-latest needs: [build_test_neo4j,build_test_backend] permissions: - statuses: write + #statuses: write + checks: write # security-events: write steps: ########################################################################## @@ -229,7 +230,9 @@ jobs: runs-on: ubuntu-latest needs: [build_test_webapp] permissions: - statuses: write + #statuses: write + #actions: write + checks: write # security-events: write steps: ########################################################################## From 6016a8b85a5c07a0912cef6edfd3e747965f85f7 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Fri, 24 Feb 2023 13:45:43 +0100 Subject: [PATCH 36/99] remove comments, checks permissions are working --- .github/workflows/test.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 824b519d7..8560aef0b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -169,9 +169,7 @@ jobs: runs-on: ubuntu-latest needs: [build_test_neo4j,build_test_backend] permissions: - #statuses: write checks: write - # security-events: write steps: ########################################################################## # CHECKOUT CODE ########################################################## @@ -230,10 +228,7 @@ jobs: runs-on: ubuntu-latest needs: [build_test_webapp] permissions: - #statuses: write - #actions: write checks: write - # security-events: write steps: ########################################################################## # CHECKOUT CODE ########################################################## From b5bbf5164d2220eb9697bd3d54b39e4939b7817d Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 27 Feb 2023 10:52:34 +0100 Subject: [PATCH 37/99] script to set a cluster in maintenance mode --- deployment/scripts/cluster.maintenance.sh | 22 +++++++++++++++++++ .../patch.ingress.maintenance.off.yaml | 12 ++++++++++ .../patches/patch.ingress.maintenance.on.yaml | 12 ++++++++++ 3 files changed, 46 insertions(+) create mode 100755 deployment/scripts/cluster.maintenance.sh create mode 100644 deployment/src/kubernetes/patches/patch.ingress.maintenance.off.yaml create mode 100644 deployment/src/kubernetes/patches/patch.ingress.maintenance.on.yaml diff --git a/deployment/scripts/cluster.maintenance.sh b/deployment/scripts/cluster.maintenance.sh new file mode 100755 index 000000000..3a558d7bb --- /dev/null +++ b/deployment/scripts/cluster.maintenance.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# base setup +SCRIPT_PATH=$(realpath $0) +SCRIPT_DIR=$(dirname $SCRIPT_PATH) + +# configuration +CONFIGURATION=${CONFIGURATION:-"example"} +KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeconfig.yaml} + +case $1 in + on) + kubectl --kubeconfig=${KUBECONFIG} patch ingress ingress-ocelot-webapp --type merge --patch-file ${SCRIPT_DIR}/../src/kubernetes/patches/patch.ingress.maintenance.on.yaml + ;; + off) + kubectl --kubeconfig=${KUBECONFIG} patch ingress ingress-ocelot-webapp --type merge --patch-file ${SCRIPT_DIR}/../src/kubernetes/patches/patch.ingress.maintenance.off.yaml + ;; + *) + echo -e "Run this script with first argument either 'on' or 'off'" + exit + ;; +esac diff --git a/deployment/src/kubernetes/patches/patch.ingress.maintenance.off.yaml b/deployment/src/kubernetes/patches/patch.ingress.maintenance.off.yaml new file mode 100644 index 000000000..c01745d0a --- /dev/null +++ b/deployment/src/kubernetes/patches/patch.ingress.maintenance.off.yaml @@ -0,0 +1,12 @@ +spec: + rules: + - host: + http: + paths: + - path: / + pathType: ImplementationSpecific + backend: + service: + name: ocelot-webapp + port: + number: 3000 \ No newline at end of file diff --git a/deployment/src/kubernetes/patches/patch.ingress.maintenance.on.yaml b/deployment/src/kubernetes/patches/patch.ingress.maintenance.on.yaml new file mode 100644 index 000000000..8a2c5d45f --- /dev/null +++ b/deployment/src/kubernetes/patches/patch.ingress.maintenance.on.yaml @@ -0,0 +1,12 @@ +spec: + rules: + - host: + http: + paths: + - path: / + pathType: ImplementationSpecific + backend: + service: + name: ocelot-maintenance + port: + number: 80 \ No newline at end of file From 51f6469119e46ca82c52b6c972880f8f3538f2dd Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 27 Feb 2023 12:49:36 +0100 Subject: [PATCH 38/99] backup script working - initial commit --- deployment/scripts/cluster.backup.sh | 45 ++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 deployment/scripts/cluster.backup.sh diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh new file mode 100755 index 000000000..a09b6d65f --- /dev/null +++ b/deployment/scripts/cluster.backup.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# base setup +SCRIPT_PATH=$(realpath $0) +SCRIPT_DIR=$(dirname $SCRIPT_PATH) + +# configuration +CONFIGURATION=${CONFIGURATION:-"example"} +KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeconfig.yaml} +BACKUP_DATE=$(date "+%F_%H-%M-%S") +BACKUP_FOLDER=${BACKUP_FOLDER:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/backup/${BACKUP_DATE}} + +# create backup fodler +mkdir -p ${BACKUP_FOLDER} + +# maintenance mode on +# TODO +# ${SCRIPT_DIR}/cluster.maintenance.sh on + +# shutdown database +kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ + | jq '.spec.template.spec.containers[] += {"command": ["tail", "-f", "/dev/null"]}' \ + | kubectl --kubeconfig=${KUBECONFIG} apply -f - + +# wait for the container to restart +sleep 60 + +# database backup +kubectl --kubeconfig=${KUBECONFIG} -n default exec -it $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') -- neo4j-admin dump --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump +# copy neo4j backup to local drive +kubectl --kubeconfig=${KUBECONFIG} cp default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j |awk '{ print $1 }'):/var/lib/neo4j/$BACKUP_DATE-neo4j-dump $BACKUP_FOLDER/neo4j-dump +# copy image data +kubectl --kubeconfig=${KUBECONFIG} cp default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend |awk '{ print $1 }'):/app/public/uploads $BACKUP_FOLDER/public-uploads + +# restart database +kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ + | jq 'del(.spec.template.spec.containers[].command)' \ + | kubectl --kubeconfig=${KUBECONFIG} apply -f - + +# wait for the container to restart +sleep 60 + +# maintenance mode off +# TODO +# ${SCRIPT_DIR}/cluster.maintenance.sh on \ No newline at end of file From 799ea1fbe64659734d973917f67ce1c84d2543ef Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 27 Feb 2023 13:01:27 +0100 Subject: [PATCH 39/99] finish backup script --- deployment/scripts/cluster.backup.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh index a09b6d65f..b83bab198 100755 --- a/deployment/scripts/cluster.backup.sh +++ b/deployment/scripts/cluster.backup.sh @@ -14,8 +14,7 @@ BACKUP_FOLDER=${BACKUP_FOLDER:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/ mkdir -p ${BACKUP_FOLDER} # maintenance mode on -# TODO -# ${SCRIPT_DIR}/cluster.maintenance.sh on +${SCRIPT_DIR}/cluster.maintenance.sh on # shutdown database kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ @@ -26,11 +25,15 @@ kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ sleep 60 # database backup -kubectl --kubeconfig=${KUBECONFIG} -n default exec -it $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') -- neo4j-admin dump --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump +kubectl --kubeconfig=${KUBECONFIG} -n default exec -it \ + $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') \ + -- neo4j-admin dump --to=/var/lib/neo4j/$BACKUP_DATE-neo4j-dump # copy neo4j backup to local drive -kubectl --kubeconfig=${KUBECONFIG} cp default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j |awk '{ print $1 }'):/var/lib/neo4j/$BACKUP_DATE-neo4j-dump $BACKUP_FOLDER/neo4j-dump +kubectl --kubeconfig=${KUBECONFIG} cp \ + default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-neo4j |awk '{ print $1 }'):/var/lib/neo4j/$BACKUP_DATE-neo4j-dump $BACKUP_FOLDER/neo4j-dump # copy image data -kubectl --kubeconfig=${KUBECONFIG} cp default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend |awk '{ print $1 }'):/app/public/uploads $BACKUP_FOLDER/public-uploads +kubectl --kubeconfig=${KUBECONFIG} cp \ + default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend |awk '{ print $1 }'):/app/public/uploads $BACKUP_FOLDER/public-uploads # restart database kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ @@ -41,5 +44,4 @@ kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \ sleep 60 # maintenance mode off -# TODO -# ${SCRIPT_DIR}/cluster.maintenance.sh on \ No newline at end of file +${SCRIPT_DIR}/cluster.maintenance.sh off \ No newline at end of file From 58f1aee660d6fc24b74012bd8b4897a48690381a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 27 Feb 2023 16:45:06 +0100 Subject: [PATCH 40/99] Remove Apple M1 Docker overrides and reduce information about its usage in the readmes --- CONTRIBUTING.md | 25 ++----------- backend/README.md | 12 +++++-- deployment/DOCKER_MORE_CLOSELY.md | 28 ++------------- .../docker-compose.apple-m1.override.yml | 36 ------------------- docker-compose.apple-m1.override.yml | 34 ------------------ 5 files changed, 14 insertions(+), 121 deletions(-) delete mode 100644 deployment/docker-compose.apple-m1.override.yml delete mode 100644 docker-compose.apple-m1.override.yml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 83a63b36a..b2c8a7dbb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -174,34 +174,15 @@ Please copy and paste the following quotes for the languages: #### Environment Variable For Apple M1 Platform -To set the Docker platform environment variable in your terminal tab, run: +To set the following environment variable seems not be needed anymore, probably because Docker knows in its newest version on which CPU it runs and sets that to default. +But we leave this command here to keep the knowledge about how to set the platform: ```bash # set env variable for your shell $ export DOCKER_DEFAULT_PLATFORM=linux/amd64 ``` -#### Docker Compose Override File For Apple M1 Platform - -For Docker compose `up` or `build` commands, you can use our Apple M1 override file that specifies the M1 platform: - -```bash -# in main folder - -# for development -$ docker compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.apple-m1.override.yml up -# only once: init admin user and create indexes and contraints in Neo4j database -$ docker compose exec backend yarn prod:migrate init -# clean db -$ docker compose exec backend yarn db:reset -# seed db -$ docker compose exec backend yarn db:seed - -# for production -$ docker compose -f docker-compose.yml -f docker-compose.apple-m1.override.yml up -# only once: init admin user and create indexes and contraints in Neo4j database -$ docker compose exec backend /bin/sh -c "yarn prod:migrate init" -``` +Or alternatively use a `YAML` docker compose overwrite file with `platform: linux/amd64`. ### Analyzing Docker Builds diff --git a/backend/README.md b/backend/README.md index 4ce74dc40..03724ce54 100644 --- a/backend/README.md +++ b/backend/README.md @@ -79,9 +79,9 @@ More details about our GraphQL playground and how to use it with ocelot.social c ![GraphQL Playground](../.gitbook/assets/graphql-playground.png) -### Database Indices and Constraints +### Database Indexes and Constraints -Database indices and constraints need to be created when the database and the +Database indexes and constraints need to be created when the database and the backend is running: {% tabs %} @@ -90,6 +90,12 @@ backend is running: ```bash # in main folder while docker-compose is running $ docker exec backend yarn run db:migrate init + +# only once: init admin user and create indexes and constraints in Neo4j database +# for development +$ docker compose exec backend yarn prod:migrate init +# in production mode use command +$ docker compose exec backend /bin/sh -c "yarn prod:migrate init" ``` {% endtab %} @@ -126,7 +132,7 @@ To reset the database run: $ docker exec backend yarn run db:reset # you could also wipe out your neo4j database and delete all volumes with: $ docker-compose down -v -# if container is not running, run this command to set up your database indeces and contstraints +# if container is not running, run this command to set up your database indexes and constraints $ docker exec backend yarn run db:migrate init ``` diff --git a/deployment/DOCKER_MORE_CLOSELY.md b/deployment/DOCKER_MORE_CLOSELY.md index 113e3a4da..2bf213a33 100644 --- a/deployment/DOCKER_MORE_CLOSELY.md +++ b/deployment/DOCKER_MORE_CLOSELY.md @@ -2,32 +2,8 @@ ## Apple M1 Platform -***Attention:** For using Docker commands in Apple M1 environments!* - -```bash -# set env variable for your shell -$ export DOCKER_DEFAULT_PLATFORM=linux/amd64 -``` - -For even more informations, see [Docker More Closely](#docker-more-closely) - -### Docker Compose Override File For Apple M1 Platform - -For Docker compose `up` or `build` commands, you can use our Apple M1 override file that specifies the M1 platform: - -```bash -# in main folder - -# for production -$ docker compose -f docker-compose.yml -f docker-compose.apple-m1.override.yml up - -# for production testing Docker images from DockerHub -$ docker compose -f docker-compose.ocelotsocial-branded.yml -f docker-compose.apple-m1.override.yml up - -# only once: init admin user and create indexes and contraints in Neo4j database -$ docker compose exec backend /bin/sh -c "yarn prod:migrate init" -``` +To get more information about the Apple M1 platform you find our documentation in our main code, [here](/CONTRIBUTING.md#docker-more-closely). ## Docker More Closely In Main Code -To get more informations about the Apple M1 platform and to analyze the Docker builds etc. you find our documentation in our main code, [here](https://github.com/Ocelot-Social-Community/Ocelot-Social/blob/master/DOCKER_MORE_CLOSELY.md). +To get more information about how to analyze the Docker builds etc. you find our documentation in our main code, [here](/CONTRIBUTING.md#docker-more-closely). diff --git a/deployment/docker-compose.apple-m1.override.yml b/deployment/docker-compose.apple-m1.override.yml deleted file mode 100644 index 80344e49f..000000000 --- a/deployment/docker-compose.apple-m1.override.yml +++ /dev/null @@ -1,36 +0,0 @@ -# This docker-compose file is just here for testing - -version: "3.4" - -services: - - ######################################################## - # WEBAPP ############################################### - ######################################################## - webapp: - platform: linux/amd64 - - ######################################################## - # BACKEND ############################################## - ######################################################## - backend: - platform: linux/amd64 - - ######################################################## - # MAINTENANCE ########################################## - ######################################################## - maintenance: - platform: linux/amd64 - - ######################################################## - # NEO4J ################################################ - ######################################################## - neo4j: - platform: linux/amd64 - - ######################################################## - # MAILSERVER TO FAKE SMTP ############################## - ######################################################## - # commented out, because otherwise override of production would error. and it seems unnecessary - # mailserver: - # platform: linux/amd64 diff --git a/docker-compose.apple-m1.override.yml b/docker-compose.apple-m1.override.yml deleted file mode 100644 index cbb041c51..000000000 --- a/docker-compose.apple-m1.override.yml +++ /dev/null @@ -1,34 +0,0 @@ -version: "3.4" - -services: - - ######################################################## - # WEBAPP ############################################### - ######################################################## - webapp: - platform: linux/amd64 - - ######################################################## - # BACKEND ############################################## - ######################################################## - backend: - platform: linux/amd64 - - ######################################################## - # MAINTENANCE ########################################## - ######################################################## - maintenance: - platform: linux/amd64 - - ######################################################## - # NEO4J ################################################ - ######################################################## - neo4j: - platform: linux/amd64 - - ######################################################## - # MAILSERVER TO FAKE SMTP ############################## - ######################################################## - # commented out, because otherwise override of production would error. and it seems unnecessary - # mailserver: - # platform: linux/amd64 From b45e4b5990dc418ecc1712a95f79d70679819372 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 28 Feb 2023 09:55:34 +0100 Subject: [PATCH 41/99] Refactor create user with defined about --- backend/src/db/factories.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/backend/src/db/factories.js b/backend/src/db/factories.js index 3e164d51b..ecc792736 100644 --- a/backend/src/db/factories.js +++ b/backend/src/db/factories.js @@ -65,7 +65,6 @@ Factory.define('basicUser') name: faker.name.findName, password: '1234', role: 'user', - about: faker.lorem.paragraph, termsAndConditionsAgreedVersion: '0.0.1', termsAndConditionsAgreedAt: '2019-08-01T10:47:19.212Z', allowEmbedIframes: false, @@ -82,12 +81,28 @@ Factory.define('basicUser') Factory.define('userWithoutEmailAddress') .extend('basicUser') + .option('about', faker.lorem.paragraph) + .after(async (buildObject, options) => { + return neode.create('User', buildObject) + }) + +Factory.define('userWithAboutNull') + .extend('basicUser') + .option('about', null) + .after(async (buildObject, options) => { + return neode.create('User', buildObject) + }) + +Factory.define('userWithAboutEmpty') + .extend('basicUser') + .option('about', '') .after(async (buildObject, options) => { return neode.create('User', buildObject) }) Factory.define('user') .extend('basicUser') + .option('about', faker.lorem.paragraph) .option('email', faker.internet.exampleEmail) .option('avatar', () => Factory.build('image', { From 71820a94f5c6aa8d7961bff92358171571265dcd Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 28 Feb 2023 13:14:18 +0100 Subject: [PATCH 42/99] Change gql tag in cypress. --- .../somebody_reported_the_following_posts.js | 2 +- cypress/support/commands.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cypress/integration/Moderation.ReportContent/somebody_reported_the_following_posts.js b/cypress/integration/Moderation.ReportContent/somebody_reported_the_following_posts.js index ce876a081..e10c0675f 100644 --- a/cypress/integration/Moderation.ReportContent/somebody_reported_the_following_posts.js +++ b/cypress/integration/Moderation.ReportContent/somebody_reported_the_following_posts.js @@ -1,5 +1,5 @@ import { Given } from "cypress-cucumber-preprocessor/steps"; -import { gql } from '../../../backend/src/helpers/jest' +import gql from 'graphql-tag' Given('somebody reported the following posts:', table => { table.hashes().forEach(({ submitterEmail, resourceId, reasonCategory, reasonDescription }) => { diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 335e00390..de09834e5 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -15,7 +15,7 @@ /* globals Cypress cy */ import "cypress-file-upload"; import { GraphQLClient, request } from 'graphql-request' -import { gql } from '../../backend/src/helpers/jest' +import gql from 'graphql-tag' import config from '../../backend/src/config' const authenticatedHeaders = (variables) => { From 2635907ac71320b64a33121c412267662d5e9eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Feb 2023 19:42:12 +0100 Subject: [PATCH 43/99] Set Yunite rebranding --- .../fonts/Overpass-VariableFont_wght.ttf | Bin 0 -> 315752 bytes webapp/assets/styles/imports/_branding.scss | 107 +++++++++++++++++- webapp/constants/donation.js | 2 +- webapp/constants/emails.js | 8 +- webapp/constants/groups.js | 4 +- webapp/constants/headerMenu.js | 27 +++-- webapp/constants/links.js | 69 ++++++----- webapp/constants/logos.js | 16 +-- webapp/constants/metadata.js | 12 +- webapp/locales/de.json | 12 ++ webapp/locales/en.json | 12 ++ webapp/static/favicon.ico | Bin 5558 -> 5558 bytes webapp/static/icon.png | Bin 19173 -> 7958 bytes webapp/static/img/custom/logo-horizontal.svg | 64 ++--------- webapp/static/img/custom/logo-squared.svg | 70 ++---------- 15 files changed, 224 insertions(+), 179 deletions(-) create mode 100644 webapp/assets/fonts/Overpass-VariableFont_wght.ttf diff --git a/webapp/assets/fonts/Overpass-VariableFont_wght.ttf b/webapp/assets/fonts/Overpass-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1cf730a5ad8e270f9b4a0cbcc4659b302f2eaef0 GIT binary patch literal 315752 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 z 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

UbDYh%;BnK&MU7iNZo|0$ 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 a(qWnG4Sv5N5dyCTL0+tI0X2f*W&Z(O?keH{ literal 0 HcmV?d00001 diff --git a/webapp/assets/styles/imports/_branding.scss b/webapp/assets/styles/imports/_branding.scss index 75058595d..6522dc207 100644 --- a/webapp/assets/styles/imports/_branding.scss +++ b/webapp/assets/styles/imports/_branding.scss @@ -2,4 +2,109 @@ * * Here, all SCSS variables and classes can be adapted to your custom design. * -*/ \ No newline at end of file +*/ + +@font-face { + font-family: Overpass; + src: url('~@/assets/fonts/Overpass-VariableFont_wght.ttf'); +} + +$color-primary: #6e8b87; +$color-primary-yunite: #a6ff00; +/* +$color-primary-light: #fff; +$color-primary-active: hsla(0,0%,100%,.8); +*/ + +$font-family-heading: 'Overpass',Helvetica,Arial,Lucida,sans-serif; +$font-family-text: 'Overpass',Helvetica,Arial,Lucida,sans-serif; + +$color-header-background: $color-primary; +$color-footer-background: $color-primary-yunite; + +$color-locale-menu: $color-primary-yunite; + +.main-navigation a { + color: #fff; + text-transform: uppercase; + font-size: 16px; + font-weight: 500; +} +.main-navigation a:hover { + color: hsla(0,0%,100%,.8); +} +.main-navigation .router-link-exact-active { + color: #A6FF00!important; +} + +.main-navigation .locale-menu { + color: #fff; +} + +.main-navigation .base-button { + color: #fff; +} + +#nav-search-box .hc-hashtag a{ + color: #17b53f; +} + +#footer { + background-color: $color-primary-yunite; +} + +#footer a { + color: $color-primary; +} + +.avatar-menu .profile-avatar { + color: $color-primary; +} + +.profile-avatar .initials { + color: $color-primary; +} + +.branding-menu .ds-text { + font-family: 'Overpass',Helvetica,Arial,Lucida,sans-serif; + font-weight: 500; + text-transform: uppercase; + font-size: 16px; +} + +/* avoid uppercase for user slug */ +span.slug { + text-transform: none; +} + +.ds-footer { + font-family: 'Overpass',Helvetica,Arial,Lucida,sans-serif; + text-transform: uppercase; + font-size: 16px; + font-weight: 300; + } + +/* chips on group teaser */ +a.group-teaser footer .ds-chip-primary { + background-color: #6e8b87; +} + +/* number count color */ +div.ds-number > p.ds-number-count { + color: #6e8b87; +} + +/* active tab border bottom color */ +div.tab-navigation li.Tabs__tab { + border-bottom-color: #6e8b87; +} + +/* submit button color group form */ +form.group-form button.ds-button-primary { + background-color: #6e8b87; +} + +/* color of active filter tags in post teaser */ +span.category-tag.filterActive { + background-color: #6e8b87; +} diff --git a/webapp/constants/donation.js b/webapp/constants/donation.js index 3e36ae9a8..12582bcef 100644 --- a/webapp/constants/donation.js +++ b/webapp/constants/donation.js @@ -1 +1 @@ -export const PROGRESS_BAR_COLOR_TYPE = 'gradient' // 'uni' is the other option +export const PROGRESS_BAR_COLOR_TYPE = 'uni' // 'gradient' is the other option diff --git a/webapp/constants/emails.js b/webapp/constants/emails.js index 34daaecb0..d64a9e772 100644 --- a/webapp/constants/emails.js +++ b/webapp/constants/emails.js @@ -1,8 +1,8 @@ // this file is duplicated in `backend/src/config/` and `webapp/constants/` and replaced on rebranding by https://github.com/Ocelot-Social-Community/Ocelot-Social-Deploy-Rebranding/tree/master/branding/constants/ export default { - SUPPORT_EMAIL: 'devops@ocelot.social', - MODERATION_EMAIL: 'devops@ocelot.social', + SUPPORT_EMAIL: 'support@yunite.org', + MODERATION_EMAIL: 'hello@yunite.org', // ATTENTION: the following links have to be defined even for internal pages with full URLs as example like 'https://staging.ocelot.social/support', because they are used in e-mails! - ORGANIZATION_LINK: 'https://ocelot.social', - SUPPORT_LINK: 'https://ocelot.social', + ORGANIZATION_LINK: 'https://yunite.org', + SUPPORT_LINK: 'https://yunite.org', } diff --git a/webapp/constants/groups.js b/webapp/constants/groups.js index a634425a4..f54a3bc08 100644 --- a/webapp/constants/groups.js +++ b/webapp/constants/groups.js @@ -1,5 +1,5 @@ // this file is duplicated in `backend/src/constants/group.js` and `webapp/constants/group.js` export const NAME_LENGTH_MIN = 3 export const NAME_LENGTH_MAX = 50 -export const DESCRIPTION_WITHOUT_HTML_LENGTH_MIN = 50 // with removed HTML tags -export const SHOW_GROUP_BUTTON_IN_HEADER = true +export const DESCRIPTION_WITHOUT_HTML_LENGTH_MIN = 100 // with removed HTML tags +export const SHOW_GROUP_BUTTON_IN_HEADER = false diff --git a/webapp/constants/headerMenu.js b/webapp/constants/headerMenu.js index aa87a598c..7bd827e54 100644 --- a/webapp/constants/headerMenu.js +++ b/webapp/constants/headerMenu.js @@ -1,13 +1,22 @@ export default { MENU: [ - // { - // nameIdent: 'nameIdent', - // path: '/', - // }, - // { - // nameIdent: 'nameIdent', - // url: 'https://ocelot.social', - // target: '_blank', - // }, + { + nameIdent: 'yuniteRebranding.header.newsFeed', + path: '/', + }, + { + nameIdent: 'yuniteRebranding.header.groups', + path: '/groups', + }, + { + nameIdent: 'yuniteRebranding.header.topics', + url: 'https://yunite.org/themen/', + target: '', + }, + { + nameIdent: 'yuniteRebranding.header.about', + url: 'https://yunite.org', + target: '', + }, ], } diff --git a/webapp/constants/links.js b/webapp/constants/links.js index 3af64d374..04d68300b 100644 --- a/webapp/constants/links.js +++ b/webapp/constants/links.js @@ -5,8 +5,8 @@ import { defaultPageParamsPages } from '~/components/utils/InternalPages.js' const ORGANIZATION = defaultPageParamsPages.ORGANIZATION.overwrite({ // if defined it's dominating externalLink: { - url: 'https://ocelot.social', - target: '_blank', + url: 'https://yunite.org', + target: '', }, internalPage: { @@ -22,9 +22,8 @@ const ORGANIZATION = defaultPageParamsPages.ORGANIZATION.overwrite({ const DONATE = defaultPageParamsPages.DONATE.overwrite({ // if defined it's dominating externalLink: { - // we use 'ocelot-social.herokuapp.com' at the moment, because redirections of 'ocelot.social' subpages are not working correctly - url: 'https://ocelot-social.herokuapp.com/donations', - target: '_blank', + url: 'https://yunite.org/spenden/', + target: '', }, internalPage: { @@ -34,24 +33,24 @@ const DONATE = defaultPageParamsPages.DONATE.overwrite({ hasContainer: true, hasBaseCard: true, hasLoginInHeader: true, - // in case internal page content is here 'webapp/locales/html/' + // in case internal page content is here 'branding/locales/html/' }, }) const IMPRINT = defaultPageParamsPages.IMPRINT.overwrite({ + // if defined it's dominating externalLink: { - // we use 'ocelot-social.herokuapp.com' at the moment, because redirections of 'ocelot.social' subpages are not working correctly - url: 'https://ocelot-social.herokuapp.com/imprint', - target: '_blank', + url: 'https://yunite.org/impressum/', + target: '', }, internalPage: { - // footerIdent: 'site.imprint', // localized string identifier, if undefined default is used + footerIdent: 'yuniteRebranding.footer.imprint', // localized string identifier, if undefined default is used // headTitleIdent: 'site.imprint', // localized string identifier, if undefined default is used // headlineIdent: 'site.imprint', // localized string identifier, on null it's hidden, if undefined default is used hasContainer: true, hasBaseCard: true, hasLoginInHeader: true, - // in case internal page content is here 'webapp/locales/html/' + // in case internal page content is here 'branding/locales/html/' }, }) const TERMS_AND_CONDITIONS = defaultPageParamsPages.TERMS_AND_CONDITIONS.overwrite({ @@ -64,11 +63,15 @@ const TERMS_AND_CONDITIONS = defaultPageParamsPages.TERMS_AND_CONDITIONS.overwri hasContainer: true, hasBaseCard: true, hasLoginInHeader: true, - // in case internal page content is here 'webapp/locales/html/' + // in case internal page content is here 'branding/locales/html/' }, }) const CODE_OF_CONDUCT = defaultPageParamsPages.CODE_OF_CONDUCT.overwrite({ - // externalLink: null, // if defined it's dominating + // if defined it's dominating + externalLink: { + url: 'https://yunite.org/ueber-yunite/unsere-werte/', + target: '', + }, internalPage: { // footerIdent: 'site.code-of-conduct', // localized string identifier, if undefined default is used @@ -77,24 +80,32 @@ const CODE_OF_CONDUCT = defaultPageParamsPages.CODE_OF_CONDUCT.overwrite({ hasContainer: true, hasBaseCard: true, hasLoginInHeader: true, - // in case internal page content is here 'webapp/locales/html/' + // in case internal page content is here 'branding/locales/html/' }, }) const DATA_PRIVACY = defaultPageParamsPages.DATA_PRIVACY.overwrite({ - // externalLink: null, // if defined it's dominating + // if defined it's dominating + externalLink: { + url: 'https://yunite.org/datenschutz/', + target: '', + }, internalPage: { - // footerIdent: 'site.data-privacy', // localized string identifier, if undefined default is used + footerIdent: 'yuniteRebranding.footer.dataPrivacy', // localized string identifier, if undefined default is used // headTitleIdent: 'site.data-privacy', // localized string identifier, if undefined default is used // headlineIdent: 'site.data-privacy', // localized string identifier, on null it's hidden, if undefined default is used hasContainer: true, hasBaseCard: true, hasLoginInHeader: true, - // in case internal page content is here 'webapp/locales/html/' + // in case internal page content is here 'branding/locales/html/' }, }) const FAQ = defaultPageParamsPages.FAQ.overwrite({ - // externalLink: null, // if defined it's dominating + // if defined it's dominating + externalLink: { + url: 'https://yunite.org/ueber-yunite/faq-hilfe/', + target: '', + }, internalPage: { // footerIdent: 'site.faq', // localized string identifier, if undefined default is used @@ -103,14 +114,14 @@ const FAQ = defaultPageParamsPages.FAQ.overwrite({ hasContainer: true, hasBaseCard: true, hasLoginInHeader: true, - // in case internal page content is here 'webapp/locales/html/' + // in case internal page content is here 'branding/locales/html/' }, }) const SUPPORT = defaultPageParamsPages.SUPPORT.overwrite({ // if defined it's dominating externalLink: { - url: 'https://ocelot.social', - target: '_blank', + url: 'https://yunite.org/ueber-yunite/faq-hilfe/', + target: '', }, internalPage: { @@ -120,7 +131,7 @@ const SUPPORT = defaultPageParamsPages.SUPPORT.overwrite({ hasContainer: true, hasBaseCard: true, hasLoginInHeader: true, - // in case internal page content is here 'webapp/locales/html/' + // in case internal page content is here 'branding/locales/html/' }, }) @@ -139,13 +150,13 @@ export default { SUPPORT, FOOTER_LINK_LIST: [ - ORGANIZATION, - TERMS_AND_CONDITIONS, - CODE_OF_CONDUCT, + // ORGANIZATION, + // TERMS_AND_CONDITIONS, + // CODE_OF_CONDUCT, DATA_PRIVACY, - FAQ, - DONATE, - SUPPORT, + // FAQ, + // DONATE, + // SUPPORT, IMPRINT, ], -} +} \ No newline at end of file diff --git a/webapp/constants/logos.js b/webapp/constants/logos.js index 714e78a2c..45e7831af 100644 --- a/webapp/constants/logos.js +++ b/webapp/constants/logos.js @@ -2,19 +2,13 @@ // this are the paths in the webapp export default { LOGO_HEADER_PATH: '/img/custom/logo-horizontal.svg', - LOGO_HEADER_WIDTH: '130px', + LOGO_HEADER_WIDTH: '47px', LOGO_HEADER_CLICK: { - // externalLink: { - // url: 'https://ocelot.social', - // target: '_blank', - // }, - externalLink: null, - internalPath: { - to: { - name: 'index', - }, - scrollTo: '.main-navigation', + externalLink: { + url: 'https://yunite.org', + target: '', }, + internalPath: null, }, LOGO_SIGNUP_PATH: '/img/custom/logo-squared.svg', LOGO_WELCOME_PATH: '/img/custom/logo-squared.svg', diff --git a/webapp/constants/metadata.js b/webapp/constants/metadata.js index da313c7fb..62162bd94 100644 --- a/webapp/constants/metadata.js +++ b/webapp/constants/metadata.js @@ -1,9 +1,9 @@ // this file is duplicated in `backend/src/config/metadata.js` and `webapp/constants/metadata.js` and replaced on rebranding export default { - APPLICATION_NAME: 'ocelot.social', - APPLICATION_SHORT_NAME: 'ocelot.social', - APPLICATION_DESCRIPTION: 'ocelot.social Community Network', - COOKIE_NAME: 'ocelot-social-token', - ORGANIZATION_NAME: 'ocelot.social Community', - ORGANIZATION_JURISDICTION: 'City of Angels', + APPLICATION_NAME: 'yunite.me', + APPLICATION_SHORT_NAME: 'yunite.me', + APPLICATION_DESCRIPTION: 'yunite.me – Alternatives Netzwerk für eine freie und bunte Zukunft', + COOKIE_NAME: 'yunite-me-token', + ORGANIZATION_NAME: 'yunite – Verein für Vernetzung und Kooperation', + ORGANIZATION_JURISDICTION: 'Switzerland', } diff --git a/webapp/locales/de.json b/webapp/locales/de.json index 3e0e7369d..a44e36974 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -1002,5 +1002,17 @@ "newTermsAndConditions": "Neue Nutzungsbedingungen", "termsAndConditionsNewConfirm": "Ich habe die neuen Nutzungsbedingungen durchgelesen und stimme zu.", "termsAndConditionsNewConfirmText": "Bitte lies Dir die neuen Nutzungsbedingungen jetzt durch!" + }, + "yuniteRebranding": { + "header": { + "about": "Über Yunite", + "groups": "Gruppen", + "newsFeed": "Beiträge", + "topics": "Themen" + }, + "footer": { + "dataPrivacy": "Datenschutz", + "imprint": "Impressum" + } } } diff --git a/webapp/locales/en.json b/webapp/locales/en.json index 9e45396b8..d6f122b7a 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -1002,5 +1002,17 @@ "newTermsAndConditions": "New Terms and Conditions", "termsAndConditionsNewConfirm": "I have read and agree to the new terms of conditions.", "termsAndConditionsNewConfirmText": "Please read the new terms of use now!" + }, + "yuniteRebranding": { + "header": { + "about": "About Yunite", + "groups": "Groups", + "newsFeed": "News Feed", + "topics": "Topics" + }, + "footer": { + "dataPrivacy": "Data privacy", + "imprint": "Imprint" + } } } diff --git a/webapp/static/favicon.ico b/webapp/static/favicon.ico index b535a3db8c4f259b421d370c3b319d43ed2130b7..0f8dc3ea6fe96277c031128c682cfdcbe9d67a60 100644 GIT binary patch literal 5558 zcmds5X=oi)6rL<%^;gnG1%DV7Bxn^}sy`H$KWbG3e~1>5RuDC7+t?&+>e7;zzASAP zu}N(bmtri1wxP}P-po^DQ&3!fsI4GM!3CwbRuHVz_Zk`!9x!mcsUGU>vr@{t+~7$-837gh%8#$2H1O7CQ4CGO-A@YAs2f zaIuKv5DS#dAkJ~k_(dJ+!p2;NB(4MQQA^%~%~S?fCU(&O)KOj7fUSInB<=&|PwqPh z+2$PI*H2+`+#}k8%_u|cm5~1vv4dW)&7!GnhfXN}r#h{aJ?Fz><@6PA^@mVK{No?L5_LN&o z&K17aEnu2^OyfbHB9JYMe?KT&yVpx=do8F&w)E6V$sfberQIktD5G}??#<*A`Q#qY z$c@JaWP7|y;vKb0y$*vG%S6k?-*Q zDS%A&cQ?83)gQ%=Qhyy;_UnFW?p&wmjyZqLSFbCP=UHs-S|>|>I{^G#IgnX@quf6! zxdrzf-?bI{9mBpa1r~`pz`5;MTk&~+jy(vtf7}@4xPKjae7Hr=9rJHP|3%}>xJm z#n6lL=NYW{h(@(z+*1gkcp)@!=2DU5Bv_!=cGsEImb1~1P!svQCp5#as;xD6yUpy zwTMLCtvk8~8OZvFi+kMPZ=QE%3^lt!iTv!{&AMSzcGeF`z%SaKtuIAW<8s#rFDsGv zueq|&;gCZYV-58;{ca*=-9VGn4K_(SJ~31lI@GlvaAP%#O)Tm(?rPNjuQ<(rBgdFh z*RDDH`_`7yQ^VTJv!4&{;dx(DH%LDvHyj_-o`8Kpa1TDCAK-sVR*l3ZhMtD>XkZU* z{LhS^t^MwEJ2%Lh12IsuY~ER)(F6P9r+eVvKS!?kZb-Uf6>|GWy-Hp9Jt4h^l#5Osl*@kDE5&EVmB=r{ez@m>Ii8Wf h)aP*XnCHj)jfycQnY%8_`Ef0{f9HCB{Wc=<{{nFHQI7xs literal 5558 zcmeHLc~F$+8UOZV?}NQpj%9&miQoZ2KoJxH6%Z6}$Ail&DxwmMQ9wkDS0ruIWa^}i zO>=aNGfne{b=qi~w3#*?8+F>;X;Q0+F(e+b$=G%>zdp~qEH1d9v8I3Zoq1-z{odz& z?(6*|NhZl9pHHG+pA@u8Qb3X?I(`(gN8td!P($b2hwRKolSBFiT zTCu#b5w!O;@h|$8WQZfW$715LVNA?{QZ8X!au#w^?u9~HhHKU5|Uu5 zJ_v8e7earIL-qs5oae!dA}+lhS7Dy}3`Qg*W81cNah7Q?Eu#58@ps>b40ZYWAvk57F zKki8hAh1abM}Y=u%_i7#B$&z$g#6y;1C9f8)st`*NC>Po!Z9HRsq3{!OY|c>m=3*8 zgVK`HaK5Y^hJTsLok{h}E%Mh?{R8N;8(~PX!W58TPM4rb84uTncSO8}^=DtW@BbTg zqbgwvN-(BM(EF`aGgiPn=P4*D7v*{f)Nwg1L(?$)gE2`(*X@nRMSbJgX0X@)nsnX^ zbH!t@Ejt>D|3UG`Ibg4UiG1@U;XNwOgwJ!nI##?4O|X*rR}8~HN#)J@Qp7ja*na)! zc|_+|h+Xg;>5@VHOE+W-#{khcjBkQmV}`5wje-6l9F7r7MGw^`#R=j=)6z|= zQe{3I(K{gEgiE4D84ca64x0y=2Zo&T& zV&^>#xi;sN7 z*0*1GibtlYFnS2@y}tMxLVv22+L1LJ1D$=$X?&BOF;3bNHD;KHcPqtK?Jq=cx6V04 zwaE*2%U^{IoC_R#Dpv+fr8{A*c|zoAv>qjBZKGN_eJ>=r;%VY5CkQGX>Hl(5>?L@P;4s0FzUPPNcZMWW9=B9~fA|<^ zyDVlG!k?CKf>(*lt-j!CIwdon{u(#tH_1WjCC(~VoW+O3Q(l-(7Y`PoKp11Q$m@9ieqw`^Z z%C#A@4)Zq*?z7(ZP;Iv@eNpspp4S{S_nS&OMco&@m}XwxsCmbThLYtlm33XXQKLT< z_igjkU48s{201{p=L;cvJU39^G?#T>rL){SQtA0h|Ljclo&BvFvsm;9qrM*K*)a?hQijfa;>FDlTvzE6PR|GX0rn{AATfe zBf=4L^L?+;yb`xqQff-XT+Fi>(J+^Got3o4e3EP6Qfej|C%2vBe$2YsYmY*TF_#jO zUYA{e(z*6eFicqgI{hCx@Zf-dnfm-Sr<`j}(zlpZC;4pOZZdtBSwheD0oc+1*cEyw M<0ePn{$_9g14$7TjsO4v diff --git a/webapp/static/icon.png b/webapp/static/icon.png index eca54133226e089f7f8ac6d4344fdd39f2012094..8a3da6f6014ab8e257a8b5d3a88618216e7eab3b 100644 GIT binary patch delta 6718 zcmZvhWmHsM+klaf5)kR3d*~XvYY>6Kp&Mxi2BZavk(3&cMjD13X?PG20SO7IK`DoB z5Tz7`P``QJcdhT&yUsd4&N}x#ckH$AxXw<_om{n7e0N-0_#Y6lOGxohaB*=3!Q9=I ztWDekpTdKKU{8HjdE})fq_WJ29JQszBo)P^rOl)zm82DwWaLF8rIjQl|FbI8$4|+~ zEy&5$Dac93DacKgM_N+)f5>ND5Z&CB5|@$`m(BV^%tZIUM1UmT#9t-AR#|x@oQP== z9Vq>Xx{P*|ys4;YZC(O{bM_*Tw_L!;CEKy^wMSHKm`u~Z9_oRZ17 zme3aL*}LEZKC(Sae3zvks+f>q?b#Fa^~!lV>O!$Qb{`!v$A5IB^|I(vJmQWU++#-eu0VN&&M$p|MC@5kkAYhu%*U>Z!E&5*U?N>PWdIZtrYXLXN6&p*E z@Ym9M@X((~f1gkc&f4M14Liu|SP~tKSik;iG>X_1O7StLV3Y)ytmDDa2D1L(zlCDVLk+ zE|tBaJxq|j9+XX~MS)j}M~a91Biu~+MB!wyZq9G?qH!DA_kjc>*r_s}Bn3$g;2Do+ z&QQpx!)QZ_m)l2W6QyU14NV8{FmnO1Z*dx0d*DB`Chz&Wd9${3%z}UgTDKd+Tlcnw{Y|x zHED3`?+n9uFVK`{{@c5uk*|Iavd!y{UI1kPauTdr&wrg-E6=s6W@?bY%mg`h*9n@a zTGc0%l}uYz$7!f)(rp2Y+j|hsx3ERGaMuS63; zXfLH@3v+yJ+IoGrmkXPr0%So#W&&f5FHV&4Z-@{^x95P8#tQuoUPUM&U@ob6s}FLz z#Z0@@n@vOAvv8Ir*X#3}uF+xvANTZAzc^GYyO6QUa%ZkbNTT)04&bUDA(H8(Q5&KV&}40((6SL z1UBOl-{^cul*>QVb2b2~z!RWjdVppJZ%#^K)wjj(TXIWj6Hju|>;+HBjo*J_e^eHb z6!6FX2QIGEde1k8{~Duzt-QE8Ez-&kow&dLBc$XR?W^yJBp|@%B+a6QoZ$8+a(S^* z_h+i5S>F;SS{wv1!*nlkJr8PSlLAifmm>bg3GSrb%wA&@PW(-Xv`59eT%+z6{*u`1=ULsi;pd)hBlEtQ&D>|) zYeAbdt;3xH_t?G-vZ;(ORNgzC3of@oG+7mHr1%gv#CPYBx8KEKyN{;yTjT;Y1*5W? z62h>Z0;#k6WSs9uERs?x*JTBV0QY{iA9UxlQFJ%Pzta`wAc|UDPLlbeM40+BRlm@k}+cAeWLwo|MWkPo0KAT%%Fhqt#_wP>JFBB8WB}%i7C{oyI zRdHOdWzR_0>*qc7wl85bcz=cgZ0z?SX-u|DE&)C6AiguggcZf5ndjiL4?G7h(=30q z%QT$;RHyEO$~x9`G4Dbav5UO(?wvJ@ji6;Q9NZRfNujF1ygMQz=q$g#sL&atr2m%` z-nQ;rbCP6JyAP~8A<5DeK-KLJsjrs`(6$}$YoL^ps5=ZCM?G|KI%3PF^#k`3Qz=Sj z$+*YkX~Hx{hs<7pr%&45n%Hj&rj%D)2&odna}SdS5U}S1jJq z(3%^jnfNiir=;3W>Q4zF-04Oy|EW-o20~O}re=1GW{^#E z_967&(@@J_Q(gyZq*vn?i|C|DDNVKEKg^~r#z8w6SQaIm7kMxri01oV(_5_ybz}!f zK~12v^L$h2+NOgdjacygod{AI#&bcS9f~Qek*^hj?P5e;7wG)pW%|sNZ2yI{QL%2R zJ~Ky%GV(}BARQhJD6ag=m(IA19!q4uKay}L2v#LgQII-h;Y2g->!W(wAXfpIdX&_< z47C_Y)MG7jxLB)@a7Y>HN&&Pc)lh12jD|A2<32JW>|MLbi*VL(w3p6&I1t{+^v>wm zyBo2N=AiYQ@f1IKBY8}J@?;gC0@=4V2yHSGtI2-^P<*2u1|Rctc!}q`sMKd&cKECU zR7WHXTE<^4Ds0YFP+X_)He^d1^oJT#(W^2)$M6AqGEUdc7C^T}Y+log}3a*)OchHWonIbCN5jleiK z2>T(n;C$ZUE?4p)>dP(>W4LQOJqi-YvU@^+7~9EG zgte!Pq@0fkl4#q+=L5N)<}ou>jP^_+ ze>+qJP@jvYoQm7}k9`xh6(N8}BrRE8c6a@wDFq5uIXsoc#tRsj*XI!2)NX$#2mxX# zJGY|fNFqYIv4p_HZOWolx%P4Wbx)xEE$D`{6$aAMlaL_)HS&N=#qq(RwPdD*^z*gO z*802GeD80c#-)jJj#gs=Z?)Rhb2ZkpeFN&?skYH*R@o_*3 zBsy$f-o^2jCd|ta>P;Yyw7dEtW=EpKCU%=N6s_V~$>;Qrvx#bVCQ0}|Vc*;vKAE!q|813m4(^Eh50IpPi!{@fjX?>OG zPlU!Ewy#qWUkw&&Aw4gdj865W3&d#ew+9py_@z_d{p`TTj!*ub@rx2|fqd5c8^c|c z$#GFwEM6Y;r4{SBU__8Uy(Qa%_Y$?#cv46q)HnT~$I^jPXn) za{jcFOA);zC~MSD!%-T*Z>*?$JxuQuV4glN*7AIbk#|NvF4W~3%YvM;Ker^CLVHGj zvgWSN)b6R3L4DY%D(G(sHJMXDVJM0asSsXx=drK$6W4Yg(rdn0p>Tam5Wqv_W~Jv0 zY(^}+6iXrGUIXi16wa*DjY~UVg;;`=KGwC4&6p6B^t*BAIE^F#cp?ox>d-r#$(AzM zBHwmT19!}XJe^Fmwkc;PeKg#TB9u-oUWW3C?Bpew?q%En;s|1@17F7PXEx=L&Y^D|L z=vv=56YINueH>jwUyqO+m21pCj@8Y_)E?^9vh_##=U>Vcq^3Ch0;L%&UZX_0^5_T^$b z*j&9Jd5A1~MQX0Oy@*a>H)Yn-oiS{%m167)3&FDI1WU*(BfRQMnXLB|zbIyc%+!@6 zS_R^T53@h!M41WZR#j@dnXE-jIX#cY*&vQ9x?hbUZHg4Ol>BXrk`1JqxeCO5|EN-l zz&Wj6De%h4&Ug&n&PAR87=p(&QWNpY3>|v$?ou^4|1i#D@#pCv-fCTG<}sh+b>DR) zGqWNbSx!R8xVN=D>|kXao-psQ!A!p__9`Swhs%p5zaD&_oI3TAJ$-h+=ZjbuzD~-b z%7<6XWxdQ_v5;~U7TYZOTG1PQj{Ov$1D}Yo!FYUtG#Cv!X&WZxo(&dpTT%Tyck;+c zSh-uf5v3OMNf|k1w`T(qK>O-kIgMxs^sP36lxPr;%lxLL#pbHoqZ+p)7aJ6sb20{F zo9#sjq713R*hz-A){+`p=jH&ZW#{)|{eS<(6C1>wqqNw#R#}~{v-cS2soSium_&Kk%?a{!O9+5(^ov_j~1#Mpr|xb z_Gw$YiRqdG(zAHxHw;<>@RKoBP1heFecO!RH4c6#(gyOX`8XoB+gR#XA6L|SULDYq`XM3)3*wT|8b&6rp9(cXm_vHndr!(?xD^C#g z$w4-|P`vrGGmXa?*=DW?oO%%9xV= zBm3#y66mn}eMY$M4eIekMMl$?0PS2FQNL&yNjmv2yr~{LS^!%O1S)v>XfI{+77BFV z*lQ$tih*_aY9xHPPrABuJRD}8IaFhZDt}>B_|KnDa^Y1A^?&b?9(JkTcreZbPsHE8 z3^jdaNiocD*!5e6&FaKO(Z1I4Lt4deC~(&Lbzx(`tmlh&U-W_TRz2_u|GF#}=Lbe& zCk)QkV=ju-UK6rm5Crd~JB_mteb-jG>S$iztzRQxuGxNCCjQ^u*;FbSQ|+>Xe7lCJ zt+T4$c5pR4Dr{-)`!++!of%>6f6hABd#6RtAV#3~6y`AT`#i0uzG>q??P5q0P2J-5 zn)!|Dv!BO9U*T6@ZWwBzq^q(j#S6Sw{DJiq2R2ce3%nG%2;n!OJ<0rGs+rFQFmk=$ zH$Fy`ng9uC$ z`{=P@%hSrNgn<%sGcL&Oo3Peq56UmKDg9n0!bjG+B&`L4#W;Kye!@c~79lg58^dX7 zMy=VwD5EHfutNblLPEM=Vv8{q5B%ENi`VE)bz5qk9zPZ%)t#|QMpuv~nT@kPvSCP_Rv(z9^oy<1|tEH5BOCQfb*06^Nd=qMyEvu{FmRt;z%}v&HrN!>t zhUZS0BvWvY&hJDxmTBTg!{!E;w`eVkFkzM57AB07gi@bC(R-d{7GqH6_{CG z2ZhiO^Im9MnBs{&5~+_Z*8R4W)dEM}Pn`v>Z_NkaLP?B1vEu#zv%h7rRWN$99_2v1 z6hPGXV_j3*Rw^2Om{IlpWgM2?`!R+5NfAa5bpFoKk=f(w%Ky*gz6JemAiKKbM_%w- z=LB%HZ%E{*wo*=sZyS83d96Qim;Rx&J_4n|8J>PNr?9mPs*$8tPMJSd*Zd(>qj(OY zh*QLI*w&D}p0ChSfE?njoY6G_RD01gZ!FTv>2*DEM^QjKVJrP=TLXqHQno0K?DLmh z-q~9MZ{Gkj0gY>(R%L3G4?q-#Qhsq_+P8DJ)eP|)Te-iEq@3RbYTirT@c58~`0MUq zN_zDup37GL3}Hf?EQ%xy@$%iQno}v4tEf*+h?F&69Wod&mf6{e&2CZ4x&Jh(zXQm$ z(_NmQQi#VijG-01lH1<&`IUdQIrg`v|HFZ{OIR2A4#^u;I)rX_9RcmoRg}PHj1N!F1|Ny5`NwM1S3#d7M^kg`yEMV|gfqBo zu~*3YUpEm}5Y!9ECeL*7Hl9AX-IxgRoyT^ZJ(e09yf=^xFv7=DP`#(W$yM3pPy3m~ zo3H_|l|9h>oM)!wQ_d|c?H>Vb#@Wyy(mQN^b78Wf5vm~=lIDmg*&Jc8Vj5Rq3$;AO znQ(}gCB}?pzW`?${tM~M-E&koK&MFATRjFNJX1@`#CT?EI;cU_cpFZ_5_ACTjmnEcutxtm47F ztudT){%vqQ;>Q92qX*?%Y<-H$0@Iz5Edk$m3AYyzeQJ|3pn!TYUz4{k{~J*A2cs$n$;(;|0TSvjY__!ZFSMg zk;^uUdmls|qUwfND9`7)nrNC4`Pxe4OB`*%RQEb3L-};Z<9WBSI6!A?r<5X zn+rbze$GS&a6|aO_$%sHpLOP)uhy<3Tm4zLPtQ1gZE6?}Dq3{j0*$m`W&}#73cQxT ol-z5s(c<1B01r18w!btftjUb;1#5rd{|*r7>q2xIwVuTM9|gzg?f?J) delta 18035 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 QLjV8(07*qoM6N<$g4*&k2LJ#7 diff --git a/webapp/static/img/custom/logo-horizontal.svg b/webapp/static/img/custom/logo-horizontal.svg index 4121fa08e..e85e839c0 100644 --- a/webapp/static/img/custom/logo-horizontal.svg +++ b/webapp/static/img/custom/logo-horizontal.svg @@ -1,63 +1,15 @@ - - - - - - - - - - + + + - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/webapp/static/img/custom/logo-squared.svg b/webapp/static/img/custom/logo-squared.svg index 2a926f0a9..6c12acd28 100644 --- a/webapp/static/img/custom/logo-squared.svg +++ b/webapp/static/img/custom/logo-squared.svg @@ -1,65 +1,15 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + From 1e742dd42c9c885d06b51da74289275ad9ddca6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Feb 2023 20:48:23 +0100 Subject: [PATCH 44/99] Fix linting --- webapp/constants/links.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/constants/links.js b/webapp/constants/links.js index 04d68300b..9bf27a86f 100644 --- a/webapp/constants/links.js +++ b/webapp/constants/links.js @@ -159,4 +159,4 @@ export default { // SUPPORT, IMPRINT, ], -} \ No newline at end of file +} From 58fd233e7042c0f5d7c4f65f2794928ff743a09d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Feb 2023 20:49:50 +0100 Subject: [PATCH 45/99] Make branding color setting possible or better for donation bar and toaster --- webapp/assets/_new/styles/tokens.scss | 19 +++++++++++++++++- webapp/assets/styles/imports/_toast.scss | 20 +++++++++---------- webapp/components/ProgressBar/ProgressBar.vue | 12 +++++------ 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/webapp/assets/_new/styles/tokens.scss b/webapp/assets/_new/styles/tokens.scss index 770a1a9c9..66bd03ecc 100644 --- a/webapp/assets/_new/styles/tokens.scss +++ b/webapp/assets/_new/styles/tokens.scss @@ -375,4 +375,21 @@ $color-footer-link: $color-primary; * @tokens Locale Menu Color */ -$color-locale-menu: $text-color-soft; \ No newline at end of file +$color-locale-menu: $text-color-soft; + +/** + * @tokens Donation Bar Color + */ + +$color-donation-bar: $color-primary; +$color-donation-bar-light: $color-primary-light; + +/** + * @tokens Toast Color + */ + +$color-toast-red: $color-danger; +$color-toast-orange: $color-warning; +$color-toast-yellow: $color-yellow; +$color-toast-blue: $color-secondary; +$color-toast-green: $color-success; diff --git a/webapp/assets/styles/imports/_toast.scss b/webapp/assets/styles/imports/_toast.scss index 0ef81a5b2..eb593dd6a 100644 --- a/webapp/assets/styles/imports/_toast.scss +++ b/webapp/assets/styles/imports/_toast.scss @@ -11,22 +11,22 @@ } .iziToast.iziToast-color-red { - background: $color-danger !important; - border-color: $color-danger !important; + background: $color-toast-red !important; + border-color: $color-toast-red !important; } .iziToast.iziToast-color-orange { - background: $color-warning !important; - border-color: $color-warning !important; + background: $color-toast-orange !important; + border-color: $color-toast-orange !important; } .iziToast.iziToast-color-yellow { - background: $color-yellow !important; - border-color: $color-yellow !important; + background: $color-toast-yellow !important; + border-color: $color-toast-yellow !important; } .iziToast.iziToast-color-blue { - background: $color-secondary !important; - border-color: $color-secondary !important; + background: $color-toast-blue !important; + border-color: $color-toast-blue !important; } .iziToast.iziToast-color-green { - background: $color-success !important; - border-color: $color-success !important; + background: $color-toast-green !important; + border-color: $color-toast-green !important; } diff --git a/webapp/components/ProgressBar/ProgressBar.vue b/webapp/components/ProgressBar/ProgressBar.vue index 41183b798..09fb4b3a2 100644 --- a/webapp/components/ProgressBar/ProgressBar.vue +++ b/webapp/components/ProgressBar/ProgressBar.vue @@ -79,17 +79,17 @@ export default { border-radius: $border-radius-base; &.color-uni { - background: $color-primary-light; + background: $color-donation-bar; } &.color-repeating-linear-gradient { background: repeating-linear-gradient( 120deg, - $color-primary 0px, - $color-primary 30px, - $color-primary-light 50px, - $color-primary-light 75px, - $color-primary 95px + $color-donation-bar 0px, + $color-donation-bar 30px, + $color-donation-bar-light 50px, + $color-donation-bar-light 75px, + $color-donation-bar 95px ); } } From 7278adb09d6474bd0104cbb474fd155aa8537dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 28 Feb 2023 20:51:21 +0100 Subject: [PATCH 46/99] Set primary and secondary color correctly for Yunite incl. donation bar and toast --- webapp/assets/styles/imports/_branding.scss | 85 ++++++++++++--------- 1 file changed, 47 insertions(+), 38 deletions(-) diff --git a/webapp/assets/styles/imports/_branding.scss b/webapp/assets/styles/imports/_branding.scss index 6522dc207..c3e58bc5d 100644 --- a/webapp/assets/styles/imports/_branding.scss +++ b/webapp/assets/styles/imports/_branding.scss @@ -5,106 +5,115 @@ */ @font-face { - font-family: Overpass; - src: url('~@/assets/fonts/Overpass-VariableFont_wght.ttf'); + font-family: Overpass; + src: url('~@/assets/fonts/Overpass-VariableFont_wght.ttf'); } -$color-primary: #6e8b87; -$color-primary-yunite: #a6ff00; -/* -$color-primary-light: #fff; -$color-primary-active: hsla(0,0%,100%,.8); -*/ +$color-primary: rgb(110, 139, 135); +$color-primary-light: rgb(161, 179, 177); +$color-primary-dark: rgb(81, 99, 97); +$color-primary-active: rgb(123, 160, 149); +$color-primary-inverse: rgb(241, 248, 243); + +$color-secondary: rgb(166, 255, 0); +$color-secondary-active: rgb(188, 255, 130); +$color-secondary-inverse: rgb(241, 255, 225); $font-family-heading: 'Overpass',Helvetica,Arial,Lucida,sans-serif; $font-family-text: 'Overpass',Helvetica,Arial,Lucida,sans-serif; $color-header-background: $color-primary; -$color-footer-background: $color-primary-yunite; +$color-footer-background: $color-secondary; + +$color-locale-menu: $color-secondary; + +$color-donation-bar: $color-secondary; + +$color-toast-blue: rgb(0, 142, 230); +$color-toast-green: $color-primary; -$color-locale-menu: $color-primary-yunite; .main-navigation a { - color: #fff; - text-transform: uppercase; - font-size: 16px; - font-weight: 500; + color: #fff; + text-transform: uppercase; + font-size: 16px; + font-weight: 500; } .main-navigation a:hover { - color: hsla(0,0%,100%,.8); + color: hsla(0,0%,100%,.8); } .main-navigation .router-link-exact-active { - color: #A6FF00!important; + color: #A6FF00!important; } .main-navigation .locale-menu { - color: #fff; + color: #fff; } .main-navigation .base-button { - color: #fff; + color: #fff; } #nav-search-box .hc-hashtag a{ - color: #17b53f; + color: #17b53f; } #footer { - background-color: $color-primary-yunite; + background-color: $color-secondary; } #footer a { - color: $color-primary; + color: $color-primary; } .avatar-menu .profile-avatar { - color: $color-primary; + color: $color-primary; } .profile-avatar .initials { - color: $color-primary; + color: $color-primary; } .branding-menu .ds-text { - font-family: 'Overpass',Helvetica,Arial,Lucida,sans-serif; - font-weight: 500; - text-transform: uppercase; - font-size: 16px; + font-family: 'Overpass',Helvetica,Arial,Lucida,sans-serif; + font-weight: 500; + text-transform: uppercase; + font-size: 16px; } /* avoid uppercase for user slug */ span.slug { - text-transform: none; + text-transform: none; } .ds-footer { - font-family: 'Overpass',Helvetica,Arial,Lucida,sans-serif; - text-transform: uppercase; - font-size: 16px; - font-weight: 300; - } + font-family: 'Overpass',Helvetica,Arial,Lucida,sans-serif; + text-transform: uppercase; + font-size: 16px; + font-weight: 300; +} /* chips on group teaser */ a.group-teaser footer .ds-chip-primary { - background-color: #6e8b87; + background-color: #6e8b87; } /* number count color */ div.ds-number > p.ds-number-count { - color: #6e8b87; + color: #6e8b87; } /* active tab border bottom color */ div.tab-navigation li.Tabs__tab { - border-bottom-color: #6e8b87; + border-bottom-color: #6e8b87; } /* submit button color group form */ form.group-form button.ds-button-primary { - background-color: #6e8b87; + background-color: #6e8b87; } /* color of active filter tags in post teaser */ span.category-tag.filterActive { - background-color: #6e8b87; + background-color: #6e8b87; } From ecff8476cf4f7cfa322736353f060ac9424f34bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 1 Mar 2023 07:39:03 +0100 Subject: [PATCH 47/99] Replace devision line by pure space --- webapp/components/PageFooter/PageFooter.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/webapp/components/PageFooter/PageFooter.vue b/webapp/components/PageFooter/PageFooter.vue index c71fc4b5c..d043a9690 100644 --- a/webapp/components/PageFooter/PageFooter.vue +++ b/webapp/components/PageFooter/PageFooter.vue @@ -5,7 +5,7 @@ {{ $t(pageParams.internalPage.footerIdent) }} - - +   From e719ae23c960b448a26b93329a562ab8807061f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 1 Mar 2023 07:55:41 +0100 Subject: [PATCH 48/99] Adjust ds-chips background color on group teaser and group profile --- webapp/assets/styles/imports/_branding.scss | 6 +++++- webapp/pages/group/_id/_slug.vue | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/webapp/assets/styles/imports/_branding.scss b/webapp/assets/styles/imports/_branding.scss index c3e58bc5d..b1b9ca652 100644 --- a/webapp/assets/styles/imports/_branding.scss +++ b/webapp/assets/styles/imports/_branding.scss @@ -95,7 +95,11 @@ span.slug { /* chips on group teaser */ a.group-teaser footer .ds-chip-primary { - background-color: #6e8b87; + background-color: $color-primary; +} +/* chips on group profile */ +.group-profile .ds-chip-primary { + background-color: $color-primary; } /* number count color */ diff --git a/webapp/pages/group/_id/_slug.vue b/webapp/pages/group/_id/_slug.vue index 1b6d66033..641b8802e 100644 --- a/webapp/pages/group/_id/_slug.vue +++ b/webapp/pages/group/_id/_slug.vue @@ -1,5 +1,5 @@ - - - +

From e298a29d8b7b141a249acb729e426ea253d3ee9b Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Fri, 3 Mar 2023 18:38:41 +0100 Subject: [PATCH 63/99] test remove user from group --- webapp/components/Group/GroupMember.spec.js | 162 +++++++++++++++++++- 1 file changed, 158 insertions(+), 4 deletions(-) diff --git a/webapp/components/Group/GroupMember.spec.js b/webapp/components/Group/GroupMember.spec.js index 0c0b46e43..ef8b96568 100644 --- a/webapp/components/Group/GroupMember.spec.js +++ b/webapp/components/Group/GroupMember.spec.js @@ -1,26 +1,65 @@ import { mount } from '@vue/test-utils' import GroupMember from './GroupMember.vue' +import { changeGroupMemberRoleMutation, removeUserFromGroupMutation } from '~/graphql/groups.js' const localVue = global.localVue const propsData = { - groupId: '', - groupMembers: [], + groupId: 'group-id', + groupMembers: [ + { + slug: 'owner', + id: 'owner', + myRoleInGroup: 'owner', + }, + { + slug: 'user', + id: 'user', + myRoleInGroup: 'usual', + }, + ], } +const stubs = { + 'nuxt-link': true, +} + +const apolloMock = jest + .fn() + .mockRejectedValueOnce({ message: 'Oh no!' }) + .mockResolvedValue({ + data: { + ChangeGroupMemberRole: { + slug: 'user', + id: 'user', + myRoleInGroup: 'admin', + }, + }, + }) + +const toastErrorMock = jest.fn() +const toastSuccessMock = jest.fn() + describe('GroupMember', () => { let wrapper let mocks beforeEach(() => { mocks = { - $t: jest.fn(), + $t: jest.fn((t) => t), + $apollo: { + mutate: apolloMock, + }, + $toast: { + error: toastErrorMock, + success: toastSuccessMock, + }, } }) describe('mount', () => { const Wrapper = () => { - return mount(GroupMember, { propsData, mocks, localVue }) + return mount(GroupMember, { propsData, mocks, localVue, stubs }) } beforeEach(() => { @@ -30,5 +69,120 @@ describe('GroupMember', () => { it('renders', () => { expect(wrapper.findAll('.group-member')).toHaveLength(1) }) + + it('has two users in table', () => { + expect(wrapper.find('tbody').findAll('tr')).toHaveLength(2) + }) + + it('has no modal', () => { + expect(wrapper.find('div.ds-modal-wrapper').exists()).toBe(false) + }) + + describe('change user role', () => { + beforeEach(() => { + jest.clearAllMocks() + wrapper + .find('tbody') + .findAll('tr') + .at(1) + .find('select') + .findAll('option') + .at(2) + .setSelected() + wrapper.find('tbody').findAll('tr').at(1).find('select').trigger('change') + }) + + describe('with server error', () => { + it('toasts an error message', () => { + expect(toastErrorMock).toBeCalledWith('Oh no!') + }) + }) + + describe('with server success', () => { + it('calls the API', () => { + expect(apolloMock).toBeCalledWith({ + mutation: changeGroupMemberRoleMutation(), + variables: { groupId: 'group-id', userId: 'user', roleInGroup: 'admin' }, + }) + }) + + it('toasts a success message', () => { + expect(toastSuccessMock).toBeCalledWith('group.changeMemberRole') + }) + }) + }) + + describe('click remove user', () => { + beforeAll(() => { + apolloMock.mockRejectedValueOnce({ message: 'Oh no!!' }).mockResolvedValue({ + data: { + RemoveUserFromGroup: { + slug: 'user', + id: 'user', + myRoleInGroup: null, + }, + }, + }) + }) + + beforeEach(() => { + wrapper = Wrapper() + wrapper.find('tbody').findAll('tr').at(1).find('button').trigger('click') + }) + + it('opens the modal', () => { + expect(wrapper.find('div.ds-modal-wrapper').isVisible()).toBe(true) + }) + + describe('click on cancel', () => { + beforeEach(() => { + wrapper.find('div.ds-modal-wrapper').find('button.ds-button-ghost').trigger('click') + }) + + it('closes the modal', () => { + expect(wrapper.find('div.ds-modal-wrapper').exists()).toBe(false) + }) + }) + + describe('click on confirm with server error', () => { + beforeEach(() => { + wrapper.find('div.ds-modal-wrapper').find('button.ds-button-primary').trigger('click') + }) + + it('toasts an error message', () => { + expect(toastErrorMock).toBeCalledWith('Oh no!!') + }) + + it('closes the modal', () => { + expect(wrapper.find('div.ds-modal-wrapper').exists()).toBe(false) + }) + }) + + describe('click on confirm with success', () => { + beforeEach(() => { + jest.clearAllMocks() + wrapper.find('div.ds-modal-wrapper').find('button.ds-button-primary').trigger('click') + }) + + it('calls the API', () => { + expect(apolloMock).toBeCalledWith({ + mutation: removeUserFromGroupMutation(), + variables: { groupId: 'group-id', userId: 'user' }, + }) + }) + + it('emits load group members', () => { + expect(wrapper.emitted('loadGroupMembers')).toBeTruthy() + }) + + it('toasts a success message', () => { + expect(toastSuccessMock).toBeCalledWith('group.memberRemoved') + }) + + it('closes the modal', () => { + expect(wrapper.find('div.ds-modal-wrapper').exists()).toBe(false) + }) + }) + }) }) }) From a09960aa541842f125af33fbed81c769e3eb564f Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 3 Mar 2023 20:40:16 +0100 Subject: [PATCH 64/99] Remove gql tag of cypress code. --- .../somebody_reported_the_following_posts.js | 3 +-- cypress/support/commands.js | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/cypress/integration/Moderation.ReportContent/somebody_reported_the_following_posts.js b/cypress/integration/Moderation.ReportContent/somebody_reported_the_following_posts.js index e10c0675f..3ca39e6e6 100644 --- a/cypress/integration/Moderation.ReportContent/somebody_reported_the_following_posts.js +++ b/cypress/integration/Moderation.ReportContent/somebody_reported_the_following_posts.js @@ -1,5 +1,4 @@ import { Given } from "cypress-cucumber-preprocessor/steps"; -import gql from 'graphql-tag' Given('somebody reported the following posts:', table => { table.hashes().forEach(({ submitterEmail, resourceId, reasonCategory, reasonDescription }) => { @@ -10,7 +9,7 @@ Given('somebody reported the following posts:', table => { cy.factory() .build('user', {}, submitter) .authenticateAs(submitter) - .mutate(gql`mutation($resourceId: ID!, $reasonCategory: ReasonCategory!, $reasonDescription: String!) { + .mutate(`mutation($resourceId: ID!, $reasonCategory: ReasonCategory!, $reasonDescription: String!) { fileReport(resourceId: $resourceId, reasonCategory: $reasonCategory, reasonDescription: $reasonDescription) { reportId } diff --git a/cypress/support/commands.js b/cypress/support/commands.js index de09834e5..7d3738a3d 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -15,11 +15,10 @@ /* globals Cypress cy */ import "cypress-file-upload"; import { GraphQLClient, request } from 'graphql-request' -import gql from 'graphql-tag' import config from '../../backend/src/config' const authenticatedHeaders = (variables) => { - const mutation = gql` + const mutation = ` mutation($email: String!, $password: String!) { login(email: $email, password: $password) } From a724fec8812c374a0c6f91d6c47fc55ac23ef832 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 3 Mar 2023 21:28:49 +0100 Subject: [PATCH 65/99] Remove unused graphql packages from cypress modul. --- package.json | 5 +---- yarn.lock | 17 ----------------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/package.json b/package.json index fad9e207d..ba1e67eec 100644 --- a/package.json +++ b/package.json @@ -51,8 +51,5 @@ "set-value": "^2.0.1", "nan": "2.17.0" }, - "dependencies": { - "graphql": "^16.6.0", - "graphql-tag": "^2.12.6" - } + "dependencies": {} } diff --git a/yarn.lock b/yarn.lock index 149f583f9..51e44fa78 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3317,18 +3317,6 @@ graphql-request@^2.0.0: resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-2.0.0.tgz#8dd12cf1eb2ce0c80f4114fd851741e091134862" integrity sha512-Ww3Ax+G3l2d+mPT8w7HC9LfrKjutnCKtnDq7ZZp2ghVk5IQDjwAk3/arRF1ix17Ky15rm0hrSKVKxRhIVlSuoQ== -graphql-tag@^2.12.6: - version "2.12.6" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" - integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== - dependencies: - tslib "^2.1.0" - -graphql@^16.6.0: - version "16.6.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.6.0.tgz#c2dcffa4649db149f6282af726c8c83f1c7c5fdb" - integrity sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw== - handlebars@^4.7.3: version "4.7.3" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" @@ -5937,11 +5925,6 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslib@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - tty-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" From 99601963f1499ec5f1f06666559e6ee59aa1075e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 5 Mar 2023 14:51:04 +0100 Subject: [PATCH 66/99] cleanup publish workflow for non-branded version --- .github/workflows/publish.yml | 451 ++++++++++++++++------------------ 1 file changed, 207 insertions(+), 244 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 32198dd62..404493d93 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,61 +4,34 @@ on: push: branches: - master - # - 5059-epic-groups # for testing while developing - # template branches in repo - # - template--separate-branch-auto-deployment--5059-epic-groups + - new-ocelot-workflows-publish-deploy jobs: - ############################################################################## - # JOB: PREPARE ############################################################### - ############################################################################## - prepare: - name: Prepare - runs-on: ubuntu-latest - # needs: [nothing] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v3 - ########################################################################## - # TODO: DO STUFF ??? ##################################################### - ########################################################################## - - name: Check translation files - run: | - scripts/translations/sort.sh - scripts/translations/missing-keys.sh - ############################################################################## # JOB: DOCKER BUILD COMMUNITY NEO4J ########################################## ############################################################################## build_production_neo4j: name: Docker Build Production - Neo4J runs-on: ubuntu-latest - needs: [prepare] steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - name: Checkout code uses: actions/checkout@v3 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # NEO4J ################################################################## - ########################################################################## + - name: Setup env + run: | + echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - name: Neo4J | Build `community` image - run: docker build --target community -t "ocelotsocialnetwork/neo4j-community:latest" -t "ocelotsocialnetwork/neo4j-community:${VERSION}" -t "ocelotsocialnetwork/neo4j-community:${BUILD_VERSION}" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT neo4j/ + run: | + docker build --target community \ + -t "ocelotsocialnetwork/neo4j-community:latest" \ + -t "ocelotsocialnetwork/neo4j-community:${VERSION}" \ + -t "ocelotsocialnetwork/neo4j-community:${BUILD_VERSION}" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + neo4j/ - name: Neo4J | Save docker image run: docker save "ocelotsocialnetwork/neo4j-community" > /tmp/neo4j.tar - name: Upload Artifact @@ -73,32 +46,41 @@ jobs: build_production_backend: name: Docker Build Production - Backend runs-on: ubuntu-latest - needs: [prepare] steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - name: Checkout code uses: actions/checkout@v3 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # BUILD BACKEND DOCKER IMAGE (production) ################################ - ########################################################################## + - name: Setup env + run: | + echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - name: Backend | Build `production` image run: | - docker build --target base -t "ocelotsocialnetwork/backend:latest-base" -t "ocelotsocialnetwork/backend:${VERSION}-base" -t "ocelotsocialnetwork/backend:${BUILD_VERSION}-base" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT backend/ - docker build --target code -t "ocelotsocialnetwork/backend:latest-code" -t "ocelotsocialnetwork/backend:${VERSION}-code" -t "ocelotsocialnetwork/backend:${BUILD_VERSION}-code" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT backend/ - docker build --target production -t "ocelotsocialnetwork/backend:latest" -t "ocelotsocialnetwork/backend:${VERSION}" -t "ocelotsocialnetwork/backend:${BUILD_VERSION}" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT backend/ + docker build --target base \ + -t "ocelotsocialnetwork/backend:latest-base" \ + -t "ocelotsocialnetwork/backend:${VERSION}-base" \ + -t "ocelotsocialnetwork/backend:${BUILD_VERSION}-base" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + backend/ + docker build --target code \ + -t "ocelotsocialnetwork/backend:latest-code" \ + -t "ocelotsocialnetwork/backend:${VERSION}-code" \ + -t "ocelotsocialnetwork/backend:${BUILD_VERSION}-code" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + backend/ + docker build --target production \ + -t "ocelotsocialnetwork/backend:latest" \ + -t "ocelotsocialnetwork/backend:${VERSION}" \ + -t "ocelotsocialnetwork/backend:${BUILD_VERSION}" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + backend/ - name: Backend | Save docker image run: docker save "ocelotsocialnetwork/backend" > /tmp/backend.tar - name: Upload Artifact @@ -113,32 +95,41 @@ jobs: build_production_webapp: name: Docker Build Production - WebApp runs-on: ubuntu-latest - needs: [prepare] steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - name: Checkout code uses: actions/checkout@v3 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # BUILD WEBAPP DOCKER IMAGE (build) ###################################### - ########################################################################## + - name: Setup env + run: | + echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - name: Webapp | Build `production` image run: | - docker build --target base -t "ocelotsocialnetwork/webapp:latest-base" -t "ocelotsocialnetwork/webapp:${VERSION}-base" -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}-base" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/ - docker build --target code -t "ocelotsocialnetwork/webapp:latest-code" -t "ocelotsocialnetwork/webapp:${VERSION}-code" -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}-code" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/ - docker build --target production -t "ocelotsocialnetwork/webapp:latest" -t "ocelotsocialnetwork/webapp:${VERSION}" -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/ + docker build --target base \ + -t "ocelotsocialnetwork/webapp:latest-base" \ + -t "ocelotsocialnetwork/webapp:${VERSION}-base" \ + -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}-base" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + webapp/ + docker build --target code \ + -t "ocelotsocialnetwork/webapp:latest-code" \ + -t "ocelotsocialnetwork/webapp:${VERSION}-code" \ + -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}-code" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + webapp/ + docker build --target production \ + -t "ocelotsocialnetwork/webapp:latest" \ + -t "ocelotsocialnetwork/webapp:${VERSION}" \ + -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + webapp/ - name: Webapp | Save docker image run: docker save "ocelotsocialnetwork/webapp" > /tmp/webapp.tar - name: Upload Artifact @@ -153,32 +144,44 @@ jobs: build_production_maintenance: name: Docker Build Production - Maintenance runs-on: ubuntu-latest - needs: [prepare] steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - name: Checkout code uses: actions/checkout@v3 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # BUILD MAINTENANCE DOCKER IMAGE (build) ################################# - ########################################################################## + - name: Setup env + run: | + echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - name: Maintenance | Build `production` image run: | - docker build --target base -t "ocelotsocialnetwork/maintenance:latest-base" -t "ocelotsocialnetwork/maintenance:${VERSION}-base" -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-base" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/ -f webapp/Dockerfile.maintenance - docker build --target code -t "ocelotsocialnetwork/maintenance:latest-code" -t "ocelotsocialnetwork/maintenance:${VERSION}-code" -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-code" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/ -f webapp/Dockerfile.maintenance - docker build --target production -t "ocelotsocialnetwork/maintenance:latest" -t "ocelotsocialnetwork/maintenance:${VERSION}" -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/ -f webapp/Dockerfile.maintenance + docker build --target base \ + -t "ocelotsocialnetwork/maintenance:latest-base" \ + -t "ocelotsocialnetwork/maintenance:${VERSION}-base" \ + -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-base" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + -f webapp/Dockerfile.maintenance \ + webapp/ + docker build --target code \ + -t "ocelotsocialnetwork/maintenance:latest-code" \ + -t "ocelotsocialnetwork/maintenance:${VERSION}-code" \ + -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-code" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + -f webapp/Dockerfile.maintenance \ + webapp/ + docker build --target production \ + -t "ocelotsocialnetwork/maintenance:latest" \ + -t "ocelotsocialnetwork/maintenance:${VERSION}" \ + -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}" \ + --build-arg BBUILD_DATE=$BUILD_DATE \ + --build-arg BBUILD_VERSION=$BUILD_VERSION \ + --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ + -f webapp/Dockerfile.maintenance \ + webapp/ - name: Maintenance | Save docker image run: docker save "ocelotsocialnetwork/maintenance" > /tmp/maintenance.tar - name: Upload Artifact @@ -198,130 +201,39 @@ jobs: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v3 - ########################################################################## - # DOWNLOAD DOCKER IMAGES ################################################# - ########################################################################## - name: Download Docker Image (Neo4J) uses: actions/download-artifact@v3 with: name: docker-neo4j-community path: /tmp - - name: Load Docker Image - run: docker load < /tmp/neo4j.tar + - run: docker load < /tmp/neo4j.tar - name: Download Docker Image (Backend) uses: actions/download-artifact@v3 with: name: docker-backend-production path: /tmp - - name: Load Docker Image - run: docker load < /tmp/backend.tar + - run: docker load < /tmp/backend.tar - name: Download Docker Image (WebApp) uses: actions/download-artifact@v3 with: name: docker-webapp-production path: /tmp - - name: Load Docker Image - run: docker load < /tmp/webapp.tar + - run: docker load < /tmp/webapp.tar - name: Download Docker Image (Maintenance) uses: actions/download-artifact@v3 with: name: docker-maintenance-production path: /tmp - - name: Load Docker Image - run: docker load < /tmp/maintenance.tar - ########################################################################## - # Upload ################################################################# - ########################################################################## + - run: docker load < /tmp/maintenance.tar + - name: login to dockerhub run: echo "${DOCKERHUB_TOKEN}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin - - name: Push neo4j - run: docker push --all-tags ocelotsocialnetwork/neo4j-community - - name: Push backend - run: docker push --all-tags ocelotsocialnetwork/backend - - name: Push webapp - run: docker push --all-tags ocelotsocialnetwork/webapp - - name: Push maintenance - run: docker push --all-tags ocelotsocialnetwork/maintenance - - ############################################################################## - # JOB: KUBERNETES DEPLOY ACTUAL/LATEST VERSION ###################################### - ############################################################################## - kubernetes_deploy: - # see example https://github.com/do-community/example-doctl-action - # see example https://github.com/do-community/example-doctl-action/blob/main/.github/workflows/workflow.yaml - name: Kubernetes deploy of latest version to stage.ocelot.social cluster at DigitalOcean - runs-on: ubuntu-latest - needs: [upload_to_dockerhub] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v3 - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - ########################################################################## - # Install DigitalOceans doctl and set kubeconfig ######################### - ########################################################################## - - name: Install doctl - uses: digitalocean/action-doctl@v2 - with: - token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} - - name: Save DigitalOcean kubeconfig with short-lived credentials - run: doctl kubernetes cluster kubeconfig save --expiry-seconds 600 cluster-stage-ocelot-social - ########################################################################## - # Deploy new Docker images to DigitalOcean Kubernetes cluster ############ - ########################################################################## - # - name: Deploy 'latest' to DigitalOcean Kubernetes - # run: | - # kubectl -n default set image deployment/ocelot-webapp container-ocelot-webapp=ocelotsocialnetwork/webapp:latest - # kubectl -n default rollout restart deployment/ocelot-webapp - # kubectl -n default set image deployment/ocelot-backend container-ocelot-backend=ocelotsocialnetwork/backend:latest - # kubectl -n default rollout restart deployment/ocelot-backend - # kubectl -n default set image deployment/ocelot-maintenance container-ocelot-maintenance=ocelotsocialnetwork/maintenance:latest - # kubectl -n default rollout restart deployment/ocelot-maintenance - # kubectl -n default set image deployment/ocelot-neo4j container-ocelot-neo4j=ocelotsocialnetwork/neo4j-community:latest - # kubectl -n default rollout restart deployment/ocelot-neo4j - - name: Deploy actual version '$BUILD_VERSION' to DigitalOcean Kubernetes + - name: Push images run: | - kubectl -n default set image deployment/ocelot-webapp container-ocelot-webapp=ocelotsocialnetwork/webapp:$BUILD_VERSION - kubectl -n default rollout restart deployment/ocelot-webapp - kubectl -n default set image deployment/ocelot-backend container-ocelot-backend=ocelotsocialnetwork/backend:$BUILD_VERSION - kubectl -n default rollout restart deployment/ocelot-backend - kubectl -n default set image deployment/ocelot-maintenance container-ocelot-maintenance=ocelotsocialnetwork/maintenance:$BUILD_VERSION - kubectl -n default rollout restart deployment/ocelot-maintenance - kubectl -n default set image deployment/ocelot-neo4j container-ocelot-neo4j=ocelotsocialnetwork/neo4j-community:$BUILD_VERSION - kubectl -n default rollout restart deployment/ocelot-neo4j - # because this step 'kubectl -n default rollout status deployment/* --timeout=600s' does not work as expected - # and we need the pods to be up again for cleaning and seeding the Neo4j database and the backend. - # !!! this is not a perfect solution !!! - # deployments are regularly up again after 3 minutes and 10 seconds - - name: Sleep for 4 minutes, means 240 seconds - run: sleep 240s - shell: bash - - name: Verify deployment and wait for the pods of each deployment to get ready for cleaning and seeding of the database - run: | - kubectl -n default rollout status deployment/ocelot-backend --timeout=600s - kubectl -n default rollout status deployment/ocelot-neo4j --timeout=600s - kubectl -n default rollout status deployment/ocelot-maintenance --timeout=600s - kubectl -n default rollout status deployment/ocelot-webapp --timeout=600s - - name: Run migrations for Neo4j database via backend for staging - run: | - kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "yarn prod:migrate up" - - name: Reset and seed Neo4j database via backend for staging - # db cleaning and seeding is only possible in production if env 'PRODUCTION_DB_CLEAN_ALLOW=true' is set in deployment - run: | - kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "node --experimental-repl-await dist/db/clean.js && node --experimental-repl-await dist/db/seed.js" + docker push --all-tags ocelotsocialnetwork/neo4j-community + docker push --all-tags ocelotsocialnetwork/backend + docker push --all-tags ocelotsocialnetwork/webapp + docker push --all-tags ocelotsocialnetwork/maintenance ############################################################################## # JOB: GITHUB TAG LATEST VERSION ############################################# @@ -331,39 +243,16 @@ jobs: runs-on: ubuntu-latest needs: [upload_to_dockerhub] steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - name: Checkout code uses: actions/checkout@v3 with: fetch-depth: 0 # Fetch full History for changelog - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # Push version tag to GitHub ############################################# - ########################################################################## - # TODO: this will error on duplicate - #- name: package-version-to-git-tag - # uses: pkgdeps/git-tag-action@v2 - # with: - # github_token: ${{ secrets.GITHUB_TOKEN }} - # github_repo: ${{ github.repository }} - # version: ${{ env.VERSION }} - # git_commit_sha: ${{ github.sha }} - # git_tag_prefix: "v" - ########################################################################## - # Push build tag to GitHub ############################################### - ########################################################################## + - name: Setup env + run: | + echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - name: package-version-to-git-tag + build number uses: pkgdeps/git-tag-action@v2 with: @@ -371,14 +260,13 @@ jobs: github_repo: ${{ github.repository }} version: ${{ env.BUILD_VERSION }} git_commit_sha: ${{ github.sha }} - git_tag_prefix: "b" - ########################################################################## - # Push release tag to GitHub ############################################# - ########################################################################## - - name: yarn install - run: yarn install - - name: generate changelog - run: yarn auto-changelog --latest-version ${{ env.VERSION }} --unreleased-only + #git_tag_prefix: "b" + # TODO + git_tag_prefix: "test" + - name: Generate changelog + run: | + yarn install + yarn auto-changelog --latest-version ${{ env.VERSION }} --unreleased-only - name: package-version-to-git-release continue-on-error: true # Will fail if tag exists id: create_release @@ -391,3 +279,78 @@ jobs: body_path: ./CHANGELOG.md draft: false prerelease: false + + # ############################################################################## + # # JOB: KUBERNETES DEPLOY ACTUAL/LATEST VERSION ###################################### + # ############################################################################## + # kubernetes_deploy: + # # see example https://github.com/do-community/example-doctl-action + # # see example https://github.com/do-community/example-doctl-action/blob/main/.github/workflows/workflow.yaml + # name: Kubernetes deploy of latest version to stage.ocelot.social cluster at DigitalOcean + # runs-on: ubuntu-latest + # needs: [upload_to_dockerhub] + # steps: + # ########################################################################## + # # CHECKOUT CODE ########################################################## + # ########################################################################## + # - name: Checkout code + # uses: actions/checkout@v3 + # ########################################################################## + # # SET ENVS ############################################################### + # ########################################################################## + # - name: ENV - VERSION + # run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + # - name: ENV - BUILD_VERSION + # run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + # ########################################################################## + # # Install DigitalOceans doctl and set kubeconfig ######################### + # ########################################################################## + # - name: Install doctl + # uses: digitalocean/action-doctl@v2 + # with: + # token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} + # - name: Save DigitalOcean kubeconfig with short-lived credentials + # run: doctl kubernetes cluster kubeconfig save --expiry-seconds 600 cluster-stage-ocelot-social + # ########################################################################## + # # Deploy new Docker images to DigitalOcean Kubernetes cluster ############ + # ########################################################################## + # # - name: Deploy 'latest' to DigitalOcean Kubernetes + # # run: | + # # kubectl -n default set image deployment/ocelot-webapp container-ocelot-webapp=ocelotsocialnetwork/webapp:latest + # # kubectl -n default rollout restart deployment/ocelot-webapp + # # kubectl -n default set image deployment/ocelot-backend container-ocelot-backend=ocelotsocialnetwork/backend:latest + # # kubectl -n default rollout restart deployment/ocelot-backend + # # kubectl -n default set image deployment/ocelot-maintenance container-ocelot-maintenance=ocelotsocialnetwork/maintenance:latest + # # kubectl -n default rollout restart deployment/ocelot-maintenance + # # kubectl -n default set image deployment/ocelot-neo4j container-ocelot-neo4j=ocelotsocialnetwork/neo4j-community:latest + # # kubectl -n default rollout restart deployment/ocelot-neo4j + # - name: Deploy actual version '$BUILD_VERSION' to DigitalOcean Kubernetes + # run: | + # kubectl -n default set image deployment/ocelot-webapp container-ocelot-webapp=ocelotsocialnetwork/webapp:$BUILD_VERSION + # kubectl -n default rollout restart deployment/ocelot-webapp + # kubectl -n default set image deployment/ocelot-backend container-ocelot-backend=ocelotsocialnetwork/backend:$BUILD_VERSION + # kubectl -n default rollout restart deployment/ocelot-backend + # kubectl -n default set image deployment/ocelot-maintenance container-ocelot-maintenance=ocelotsocialnetwork/maintenance:$BUILD_VERSION + # kubectl -n default rollout restart deployment/ocelot-maintenance + # kubectl -n default set image deployment/ocelot-neo4j container-ocelot-neo4j=ocelotsocialnetwork/neo4j-community:$BUILD_VERSION + # kubectl -n default rollout restart deployment/ocelot-neo4j + # # because this step 'kubectl -n default rollout status deployment/* --timeout=600s' does not work as expected + # # and we need the pods to be up again for cleaning and seeding the Neo4j database and the backend. + # # !!! this is not a perfect solution !!! + # # deployments are regularly up again after 3 minutes and 10 seconds + # - name: Sleep for 4 minutes, means 240 seconds + # run: sleep 240s + # shell: bash + # - name: Verify deployment and wait for the pods of each deployment to get ready for cleaning and seeding of the database + # run: | + # kubectl -n default rollout status deployment/ocelot-backend --timeout=600s + # kubectl -n default rollout status deployment/ocelot-neo4j --timeout=600s + # kubectl -n default rollout status deployment/ocelot-maintenance --timeout=600s + # kubectl -n default rollout status deployment/ocelot-webapp --timeout=600s + # - name: Run migrations for Neo4j database via backend for staging + # run: | + # kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "yarn prod:migrate up" + # - name: Reset and seed Neo4j database via backend for staging + # # db cleaning and seeding is only possible in production if env 'PRODUCTION_DB_CLEAN_ALLOW=true' is set in deployment + # run: | + # kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "node --experimental-repl-await dist/db/clean.js && node --experimental-repl-await dist/db/seed.js" \ No newline at end of file From d271ff37604be4a306e65774124cc086fbe85625 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 5 Mar 2023 15:00:10 +0100 Subject: [PATCH 67/99] use long version of docker build flags --- .github/workflows/publish.yml | 60 +++++++++++++++++------------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 404493d93..519875507 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,9 +25,9 @@ jobs: - name: Neo4J | Build `community` image run: | docker build --target community \ - -t "ocelotsocialnetwork/neo4j-community:latest" \ - -t "ocelotsocialnetwork/neo4j-community:${VERSION}" \ - -t "ocelotsocialnetwork/neo4j-community:${BUILD_VERSION}" \ + --tag "ocelotsocialnetwork/neo4j-community:latest" \ + --tag "ocelotsocialnetwork/neo4j-community:${VERSION}" \ + --tag "ocelotsocialnetwork/neo4j-community:${BUILD_VERSION}" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ @@ -58,25 +58,25 @@ jobs: - name: Backend | Build `production` image run: | docker build --target base \ - -t "ocelotsocialnetwork/backend:latest-base" \ - -t "ocelotsocialnetwork/backend:${VERSION}-base" \ - -t "ocelotsocialnetwork/backend:${BUILD_VERSION}-base" \ + --tag "ocelotsocialnetwork/backend:latest-base" \ + --tag "ocelotsocialnetwork/backend:${VERSION}-base" \ + --tag "ocelotsocialnetwork/backend:${BUILD_VERSION}-base" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ backend/ docker build --target code \ - -t "ocelotsocialnetwork/backend:latest-code" \ - -t "ocelotsocialnetwork/backend:${VERSION}-code" \ - -t "ocelotsocialnetwork/backend:${BUILD_VERSION}-code" \ + --tag "ocelotsocialnetwork/backend:latest-code" \ + --tag "ocelotsocialnetwork/backend:${VERSION}-code" \ + --tag "ocelotsocialnetwork/backend:${BUILD_VERSION}-code" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ backend/ docker build --target production \ - -t "ocelotsocialnetwork/backend:latest" \ - -t "ocelotsocialnetwork/backend:${VERSION}" \ - -t "ocelotsocialnetwork/backend:${BUILD_VERSION}" \ + --tag "ocelotsocialnetwork/backend:latest" \ + --tag "ocelotsocialnetwork/backend:${VERSION}" \ + --tag "ocelotsocialnetwork/backend:${BUILD_VERSION}" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ @@ -107,25 +107,25 @@ jobs: - name: Webapp | Build `production` image run: | docker build --target base \ - -t "ocelotsocialnetwork/webapp:latest-base" \ - -t "ocelotsocialnetwork/webapp:${VERSION}-base" \ - -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}-base" \ + --tag "ocelotsocialnetwork/webapp:latest-base" \ + --tag "ocelotsocialnetwork/webapp:${VERSION}-base" \ + --tag "ocelotsocialnetwork/webapp:${BUILD_VERSION}-base" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ webapp/ docker build --target code \ - -t "ocelotsocialnetwork/webapp:latest-code" \ - -t "ocelotsocialnetwork/webapp:${VERSION}-code" \ - -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}-code" \ + --tag "ocelotsocialnetwork/webapp:latest-code" \ + --tag "ocelotsocialnetwork/webapp:${VERSION}-code" \ + --tag "ocelotsocialnetwork/webapp:${BUILD_VERSION}-code" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ webapp/ docker build --target production \ - -t "ocelotsocialnetwork/webapp:latest" \ - -t "ocelotsocialnetwork/webapp:${VERSION}" \ - -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}" \ + --tag "ocelotsocialnetwork/webapp:latest" \ + --tag "ocelotsocialnetwork/webapp:${VERSION}" \ + --tag "ocelotsocialnetwork/webapp:${BUILD_VERSION}" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ @@ -156,27 +156,27 @@ jobs: - name: Maintenance | Build `production` image run: | docker build --target base \ - -t "ocelotsocialnetwork/maintenance:latest-base" \ - -t "ocelotsocialnetwork/maintenance:${VERSION}-base" \ - -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-base" \ + --tag "ocelotsocialnetwork/maintenance:latest-base" \ + --tag "ocelotsocialnetwork/maintenance:${VERSION}-base" \ + --tag "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-base" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ -f webapp/Dockerfile.maintenance \ webapp/ docker build --target code \ - -t "ocelotsocialnetwork/maintenance:latest-code" \ - -t "ocelotsocialnetwork/maintenance:${VERSION}-code" \ - -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-code" \ + --tag "ocelotsocialnetwork/maintenance:latest-code" \ + --tag "ocelotsocialnetwork/maintenance:${VERSION}-code" \ + --tag "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-code" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ -f webapp/Dockerfile.maintenance \ webapp/ docker build --target production \ - -t "ocelotsocialnetwork/maintenance:latest" \ - -t "ocelotsocialnetwork/maintenance:${VERSION}" \ - -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}" \ + --tag "ocelotsocialnetwork/maintenance:latest" \ + --tag "ocelotsocialnetwork/maintenance:${VERSION}" \ + --tag "ocelotsocialnetwork/maintenance:${BUILD_VERSION}" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ From 71dc31d926a561f928c74ac9146963412053a885 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 5 Mar 2023 15:02:10 +0100 Subject: [PATCH 68/99] try different quotations --- .github/workflows/publish.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 519875507..3660d3b5a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,9 +25,9 @@ jobs: - name: Neo4J | Build `community` image run: | docker build --target community \ - --tag "ocelotsocialnetwork/neo4j-community:latest" \ - --tag "ocelotsocialnetwork/neo4j-community:${VERSION}" \ - --tag "ocelotsocialnetwork/neo4j-community:${BUILD_VERSION}" \ + --tag 'ocelotsocialnetwork/neo4j-community:latest' \ + --tag 'ocelotsocialnetwork/neo4j-community:${VERSION}'' \ + --tag 'ocelotsocialnetwork/neo4j-community:${BUILD_VERSION}'' \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ From 62e3b3042790b41ee16dc40b1aac168188e58aee Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 5 Mar 2023 15:03:57 +0100 Subject: [PATCH 69/99] no quotations --- .github/workflows/publish.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3660d3b5a..9d10bbbbd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,9 +25,9 @@ jobs: - name: Neo4J | Build `community` image run: | docker build --target community \ - --tag 'ocelotsocialnetwork/neo4j-community:latest' \ - --tag 'ocelotsocialnetwork/neo4j-community:${VERSION}'' \ - --tag 'ocelotsocialnetwork/neo4j-community:${BUILD_VERSION}'' \ + --tag ocelotsocialnetwork/neo4j-community:latest \ + --tag ocelotsocialnetwork/neo4j-community:${VERSION} \ + --tag ocelotsocialnetwork/neo4j-community:${BUILD_VERSION} \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ From 540c3bd9c40c3b42267baa9b6f4601a2d1066367 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sun, 5 Mar 2023 15:07:32 +0100 Subject: [PATCH 70/99] referencing envs in a second step --- .github/workflows/publish.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9d10bbbbd..3b7fdaf60 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -20,14 +20,14 @@ jobs: run: | echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - name: Neo4J | Build `community` image run: | docker build --target community \ - --tag ocelotsocialnetwork/neo4j-community:latest \ - --tag ocelotsocialnetwork/neo4j-community:${VERSION} \ - --tag ocelotsocialnetwork/neo4j-community:${BUILD_VERSION} \ + --tag "ocelotsocialnetwork/neo4j-community:latest" \ + --tag "ocelotsocialnetwork/neo4j-community:${VERSION}" \ + --tag "ocelotsocialnetwork/neo4j-community:${BUILD_VERSION}" \ --build-arg BBUILD_DATE=$BUILD_DATE \ --build-arg BBUILD_VERSION=$BUILD_VERSION \ --build-arg BBUILD_COMMIT=$BUILD_COMMIT \ @@ -53,8 +53,8 @@ jobs: run: | echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - name: Backend | Build `production` image run: | docker build --target base \ @@ -102,8 +102,8 @@ jobs: run: | echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - name: Webapp | Build `production` image run: | docker build --target base \ @@ -151,8 +151,8 @@ jobs: run: | echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - name: Maintenance | Build `production` image run: | docker build --target base \ @@ -251,8 +251,8 @@ jobs: run: | echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - name: package-version-to-git-tag + build number uses: pkgdeps/git-tag-action@v2 with: From baedff2f9475514d181612757450891db813cebf Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 6 Mar 2023 10:53:23 +0100 Subject: [PATCH 71/99] use trigger to call other workflow --- .github/workflows/publish-branded.yml | 25 ++++++------------------- .github/workflows/publish.yml | 22 +++++++++++++++++++++- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/.github/workflows/publish-branded.yml b/.github/workflows/publish-branded.yml index 2877aa213..e9dc62751 100644 --- a/.github/workflows/publish-branded.yml +++ b/.github/workflows/publish-branded.yml @@ -1,9 +1,7 @@ -name: ocelot.social publish branded CI - +name: publish-branded on: - push: - branches: - - master + repository_dispatch: + types: [trigger_build_success] jobs: build_branded: name: Docker Build Branded @@ -11,7 +9,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v2 - + with: + ref: ${{ github.event.client_payload.ref }} - name: Build branded images run: | deployment/scripts/branded-images.build.sh @@ -45,9 +44,6 @@ jobs: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Download Docker Image (Backend) uses: actions/download-artifact@v2 with: @@ -73,13 +69,4 @@ jobs: run: docker load < /tmp/maintenance-branded.tar - name: Upload to dockerhub - run: deployment/scripts/branded-images.upload.sh -# - name: login to dockerhub -# run: echo "${DOCKERHUB_TOKEN}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin -# -# - name: Push Backend -# run: docker push --all-tags ocelotsocialnetwork/backend-branded -# - name: Push Webapp -# run: docker push --all-tags ocelotsocialnetwork/webapp-branded -# - name: Push Maintenance -# run: docker push --all-tags ocelotsocialnetwork/maintenance-branded \ No newline at end of file + run: deployment/scripts/branded-images.upload.sh \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3b7fdaf60..f9d3f0ecb 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: ocelot.social publish CI +name: publish on: push: @@ -280,6 +280,26 @@ jobs: draft: false prerelease: false + build_trigger: + name: Trigger successful build + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 # Fetch full History for changelog + - name: Setup env + run: | + echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV + - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV + - name: Repository Dispatch + uses: peter-evans/repository-dispatch@v1 + with: + event-type: trigger_build_success + client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "VERSION": "${VERSION}", "BUILD_DATE": "${BUILD_DATE}", "BUILD_COMMIT": "${BUILD_COMMIT}", "BUILD_VERSION": "${BUILD_VERSION}"}' + # ############################################################################## # # JOB: KUBERNETES DEPLOY ACTUAL/LATEST VERSION ###################################### # ############################################################################## From 8e407917736d3b75cc1786abb49a6015e46cbe3c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 6 Mar 2023 11:01:25 +0100 Subject: [PATCH 72/99] pat token, dependance on compylete publish --- .github/workflows/publish.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f9d3f0ecb..28b39ad62 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -283,6 +283,7 @@ jobs: build_trigger: name: Trigger successful build runs-on: ubuntu-latest + needs: [github_tag] steps: - name: Checkout code uses: actions/checkout@v3 @@ -297,6 +298,7 @@ jobs: - name: Repository Dispatch uses: peter-evans/repository-dispatch@v1 with: + token: ${{ secrets.PAT }} event-type: trigger_build_success client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "VERSION": "${VERSION}", "BUILD_DATE": "${BUILD_DATE}", "BUILD_COMMIT": "${BUILD_COMMIT}", "BUILD_VERSION": "${BUILD_VERSION}"}' From 0f4e609667a23860f1d08d11774869c22c14a94c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 6 Mar 2023 11:06:08 +0100 Subject: [PATCH 73/99] exclude dependabot from pr title linting --- .github/workflows/lint_pr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/lint_pr.yml b/.github/workflows/lint_pr.yml index 8ef9750a4..5a06f9144 100644 --- a/.github/workflows/lint_pr.yml +++ b/.github/workflows/lint_pr.yml @@ -12,6 +12,7 @@ jobs: main: name: Validate PR title runs-on: ubuntu-latest + if: ${{ github.actor != 'dependabot[bot]' }} steps: - uses: amannn/action-semantic-pull-request@v5 env: From 9bc95908aec377fa9a52cc5ad309bb708d787a62 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 6 Mar 2023 11:39:39 +0100 Subject: [PATCH 74/99] use github token explicitly, use explicit ocelot version in brad --- .github/workflows/publish-branded.yml | 2 ++ .github/workflows/publish.yml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-branded.yml b/.github/workflows/publish-branded.yml index e9dc62751..90bd0607e 100644 --- a/.github/workflows/publish-branded.yml +++ b/.github/workflows/publish-branded.yml @@ -11,6 +11,8 @@ jobs: uses: actions/checkout@v2 with: ref: ${{ github.event.client_payload.ref }} + - name: Setup env + run: echo "OCELOT_VERSION=${{ github.event.client_payload.BUILD_VERSION }}" >> $GITHUB_ENV - name: Build branded images run: | deployment/scripts/branded-images.build.sh diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 28b39ad62..67ae4d527 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -298,7 +298,7 @@ jobs: - name: Repository Dispatch uses: peter-evans/repository-dispatch@v1 with: - token: ${{ secrets.PAT }} + token: ${{ github.token }} event-type: trigger_build_success client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "VERSION": "${VERSION}", "BUILD_DATE": "${BUILD_DATE}", "BUILD_COMMIT": "${BUILD_COMMIT}", "BUILD_VERSION": "${BUILD_VERSION}"}' From 4bfba1983f81e6e0a7dfcfc4ba7a49728568d5c5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 6 Mar 2023 12:37:20 +0100 Subject: [PATCH 75/99] define repo and refacor event name --- .github/workflows/publish-branded.yml | 2 +- .github/workflows/publish.yml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-branded.yml b/.github/workflows/publish-branded.yml index 90bd0607e..a404453e6 100644 --- a/.github/workflows/publish-branded.yml +++ b/.github/workflows/publish-branded.yml @@ -1,7 +1,7 @@ name: publish-branded on: repository_dispatch: - types: [trigger_build_success] + types: [trigger-build-success] jobs: build_branded: name: Docker Build Branded diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 67ae4d527..0fa7ef040 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -299,7 +299,8 @@ jobs: uses: peter-evans/repository-dispatch@v1 with: token: ${{ github.token }} - event-type: trigger_build_success + event-type: trigger-build-success + repository: ${{ github.repository }} client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "VERSION": "${VERSION}", "BUILD_DATE": "${BUILD_DATE}", "BUILD_COMMIT": "${BUILD_COMMIT}", "BUILD_VERSION": "${BUILD_VERSION}"}' # ############################################################################## From 63e519428c2298e52024bb96a193b5e9764ecece Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 6 Mar 2023 12:38:17 +0100 Subject: [PATCH 76/99] publish only on master & build tag prefix --- .github/workflows/publish.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0fa7ef040..01256d719 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,7 +4,6 @@ on: push: branches: - master - - new-ocelot-workflows-publish-deploy jobs: ############################################################################## @@ -260,9 +259,7 @@ jobs: github_repo: ${{ github.repository }} version: ${{ env.BUILD_VERSION }} git_commit_sha: ${{ github.sha }} - #git_tag_prefix: "b" - # TODO - git_tag_prefix: "test" + git_tag_prefix: "b" - name: Generate changelog run: | yarn install From 682a7d9d50acf517ffd07211b4c2a62c88cdcaa0 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 6 Mar 2023 13:26:50 +0100 Subject: [PATCH 77/99] lint pr only when there is a pullrequest not on every push --- .github/workflows/lint_pr.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/lint_pr.yml b/.github/workflows/lint_pr.yml index 5a06f9144..5a8bb662f 100644 --- a/.github/workflows/lint_pr.yml +++ b/.github/workflows/lint_pr.yml @@ -1,7 +1,6 @@ name: "ocelot.social lint pull request CI" on: - pull_request: pull_request_target: types: - opened From 6d09dbcf08c4d6be28bb7eae443eb64389dfbe4d Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 13:47:14 +0100 Subject: [PATCH 78/99] Update webapp/locales/de.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Wolfgang Huß --- webapp/locales/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/locales/de.json b/webapp/locales/de.json index aebf8d5cd..67ba5aaa4 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -452,7 +452,7 @@ "message": "Eine Gruppe zu verlassen ist möglicherweise nicht rückgängig zu machen!
Gruppe „{name}“ verlassen!", "title": "Möchtest du wirklich die Gruppe verlassen?" }, - "memberRemoved": "Nutzer „{name}“ wurde aus der Gruppe entfernt", + "memberRemoved": "Nutzer „{name}“ wurde aus der Gruppe entfernt!", "members": "Mitglieder", "membersAdministrationList": { "avatar": "Avatar", From eb0bc971ecbe6129dc945ae7d6ce99073b77e521 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 13:47:28 +0100 Subject: [PATCH 79/99] Update webapp/locales/en.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Wolfgang Huß --- webapp/locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/locales/en.json b/webapp/locales/en.json index 8f82b4578..31784ac2e 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -452,7 +452,7 @@ "message": "Leaving a group may be irreversible!
Leave group “{name}”!", "title": "Do you really want to leave the group?" }, - "memberRemoved": "User “{name}” was removed from group", + "memberRemoved": "User “{name}” was removed from group!", "members": "Members", "membersAdministrationList": { "avatar": "Avatar", From db8ad8897e542aad48a461fc26baa5645f6495e4 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 14:11:55 +0100 Subject: [PATCH 80/99] same cypher for removeUserFromGroup and leaveGroup, adjust tests, admin cannot remove users fro group --- .../src/middleware/permissionsMiddleware.js | 5 +- backend/src/schema/resolvers/groups.js | 65 ++++++++----------- backend/src/schema/resolvers/groups.spec.js | 21 ++++++ .../schema/resolvers/postsInGroups.spec.js | 32 +++++++-- 4 files changed, 74 insertions(+), 49 deletions(-) diff --git a/backend/src/middleware/permissionsMiddleware.js b/backend/src/middleware/permissionsMiddleware.js index 2e04dd4a0..00a34f9ab 100644 --- a/backend/src/middleware/permissionsMiddleware.js +++ b/backend/src/middleware/permissionsMiddleware.js @@ -280,10 +280,7 @@ const canRemoveUserFromGroup = rule({ try { const { currentUserRole, userRole } = await readTxPromise return ( - currentUserRole && - ['admin', 'owner'].includes(currentUserRole) && - userRole && - userRole !== 'owner' + currentUserRole && ['owner'].includes(currentUserRole) && userRole && userRole !== 'owner' ) } catch (error) { throw new Error(error) diff --git a/backend/src/schema/resolvers/groups.js b/backend/src/schema/resolvers/groups.js index 8ec0e9a4b..4a13dcc88 100644 --- a/backend/src/schema/resolvers/groups.js +++ b/backend/src/schema/resolvers/groups.js @@ -295,25 +295,8 @@ export default { LeaveGroup: async (_parent, params, context, _resolveInfo) => { const { groupId, userId } = params const session = context.driver.session() - const writeTxResultPromise = session.writeTransaction(async (transaction) => { - const leaveGroupCypher = ` - MATCH (member:User {id: $userId})-[membership:MEMBER_OF]->(group:Group {id: $groupId}) - DELETE membership - WITH member, group - OPTIONAL MATCH (p:Post)-[:IN]->(group) - WHERE NOT group.groupType = 'public' - WITH member, group, collect(p) AS posts - FOREACH (post IN posts | - MERGE (member)-[:CANNOT_SEE]->(post)) - RETURN member {.*, myRoleInGroup: NULL} - ` - - const transactionResponse = await transaction.run(leaveGroupCypher, { groupId, userId }) - const [member] = await transactionResponse.records.map((record) => record.get('member')) - return member - }) try { - return await writeTxResultPromise + return await removeUserFromGroupWriteTxResultPromise(session, groupId, userId) } catch (error) { throw new Error(error) } finally { @@ -371,28 +354,8 @@ export default { RemoveUserFromGroup: async (_parent, params, context, _resolveInfo) => { const { groupId, userId } = params const session = context.driver.session() - const writeTxResultPromise = session.writeTransaction(async (transaction) => { - const removeUserFromGroupCypher = ` - MATCH (member:User {id: $userId})-[membership:MEMBER_OF]->(group:Group {id: $groupId}) - DELETE membership - WITH member AS user, group - OPTIONAL MATCH (u:User)-[:WROTE]->(p:Post)-[:IN]->(group) - WHERE NOT u.id = $userId - WITH user, collect(p) AS posts - FOREACH (post IN posts | - MERGE (user)-[:CANNOT_SEE]->(post)) - RETURN user {.*, myRoleInGroup: null}` - - const transactionResponse = await transaction.run(removeUserFromGroupCypher, { - groupId, - userId, - }) - - const [user] = await transactionResponse.records.map((record) => record.get('user')) - return user - }) try { - return await writeTxResultPromise + return await removeUserFromGroupWriteTxResultPromise(session, groupId, userId) } catch (error) { throw new Error(error) } finally { @@ -414,3 +377,27 @@ export default { }), }, } + +const removeUserFromGroupWriteTxResultPromise = async (session, groupId, userId) => { + return session.writeTransaction(async (transaction) => { + const removeUserFromGroupCypher = ` + MATCH (user:User {id: $userId})-[membership:MEMBER_OF]->(group:Group {id: $groupId}) + DELETE membership + WITH user, group + OPTIONAL MATCH (author:User)-[:WROTE]->(p:Post)-[:IN]->(group) + WHERE NOT group.groupType = 'public' + AND NOT author.id = $userId + WITH user, collect(p) AS posts + FOREACH (post IN posts | + MERGE (user)-[:CANNOT_SEE]->(post)) + RETURN user {.*, myRoleInGroup: NULL} + ` + + const transactionResponse = await transaction.run(removeUserFromGroupCypher, { + groupId, + userId, + }) + const [user] = await transactionResponse.records.map((record) => record.get('user')) + return user + }) +} diff --git a/backend/src/schema/resolvers/groups.spec.js b/backend/src/schema/resolvers/groups.spec.js index 1142b0b32..13291383d 100644 --- a/backend/src/schema/resolvers/groups.spec.js +++ b/backend/src/schema/resolvers/groups.spec.js @@ -3076,6 +3076,26 @@ describe('in mode', () => { }) }) + it('throws an error', async () => { + authenticatedUser = await usualMemberUser.toJson() + await expect( + mutate({ + mutation: removeUserFromGroupMutation(), + variables: { + groupId: 'hidden-group', + userId: 'admin-member-user', + }, + }), + ).resolves.toMatchObject({ + errors: expect.arrayContaining([ + expect.objectContaining({ + message: 'Not Authorized!', + }), + ]), + }) + }) + + /* it('removes the user from the group', async () => { await expect( mutate({ @@ -3131,6 +3151,7 @@ describe('in mode', () => { ]), }) }) + */ }) }) }) diff --git a/backend/src/schema/resolvers/postsInGroups.spec.js b/backend/src/schema/resolvers/postsInGroups.spec.js index 5bf5820f0..404c3f25f 100644 --- a/backend/src/schema/resolvers/postsInGroups.spec.js +++ b/backend/src/schema/resolvers/postsInGroups.spec.js @@ -1524,9 +1524,9 @@ describe('Posts in Groups', () => { }) }) - it('does not show the posts of the closed group anymore', async () => { + it('stil shows the posts of the closed group', async () => { const result = await query({ query: filterPosts(), variables: {} }) - expect(result.data.Post).toHaveLength(3) + expect(result.data.Post).toHaveLength(4) expect(result).toMatchObject({ data: { Post: expect.arrayContaining([ @@ -1540,6 +1540,11 @@ describe('Posts in Groups', () => { title: 'A post without a group', content: 'I am a user who does not belong to a group yet.', }, + { + id: 'post-to-closed-group', + title: 'A post to a closed group', + content: 'I am posting into a closed group as a member of the group', + }, { id: 'post-to-hidden-group', title: 'A post to a hidden group', @@ -1564,9 +1569,9 @@ describe('Posts in Groups', () => { }) }) - it('does only show the public posts', async () => { + it('still shows the post of the hidden group', async () => { const result = await query({ query: filterPosts(), variables: {} }) - expect(result.data.Post).toHaveLength(2) + expect(result.data.Post).toHaveLength(4) expect(result).toMatchObject({ data: { Post: expect.arrayContaining([ @@ -1580,6 +1585,16 @@ describe('Posts in Groups', () => { title: 'A post without a group', content: 'I am a user who does not belong to a group yet.', }, + { + id: 'post-to-closed-group', + title: 'A post to a closed group', + content: 'I am posting into a closed group as a member of the group', + }, + { + id: 'post-to-hidden-group', + title: 'A post to a hidden group', + content: 'I am posting into a hidden group as a member of the group', + }, ]), }, errors: undefined, @@ -1603,9 +1618,9 @@ describe('Posts in Groups', () => { authenticatedUser = await allGroupsUser.toJson() }) - it('does not show the posts of the closed group', async () => { + it('shows the posts of the closed group', async () => { const result = await query({ query: filterPosts(), variables: {} }) - expect(result.data.Post).toHaveLength(3) + expect(result.data.Post).toHaveLength(4) expect(result).toMatchObject({ data: { Post: expect.arrayContaining([ @@ -1624,6 +1639,11 @@ describe('Posts in Groups', () => { title: 'A post to a closed group', content: 'I am posting into a closed group as a member of the group', }, + { + id: 'post-to-hidden-group', + title: 'A post to a hidden group', + content: 'I am posting into a hidden group as a member of the group', + }, ]), }, errors: undefined, From 57f9b0d49015404da2e1066cb131d7060e03afaa Mon Sep 17 00:00:00 2001 From: sushidave Date: Mon, 6 Mar 2023 14:59:09 +0100 Subject: [PATCH 81/99] Update README.md Add general information --- README.md | 93 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 76 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index f0688f820..8d483dc79 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,71 @@ At the same time, it should be possible in the future to link these networks wit In other words, we are interested in a network of networks and in keeping the data as close as possible to the user and the operator they trusts. -## Introduction +## Features + +Ocelot.social networks feature: +* user accounts +* user roles +* posts and comments +* groups +* maps +* search +* filters +* ...and more. + +Check out the [full feature list](/wiki/en:FAQ#what-are-the-features). + +## Screenshots + +Post feed + +Check out more screenshots [here](/wiki/en:Screenshots). + +## User Guide and Frequently Asked Questions + +In the [wiki](/wiki) you can find more information. + +* [User Guide](/wiki/en:User-Guide) +* [Frequently Asked Questions](/wiki/en:FAQ) + +## Demo + +Try out our live demo network, see [here](#live-demo-and-developer-logins). + +## Help us + +If you're wondering how could you help, there are plenty of ways, e.g.: + +* Spread the good word about ocelot.social to make it more popular: + * Add the link [ocelot.social](https://ocelot.social) to your website. + * Give ocelot.social a Like at https://alternativeto.net/software/ocelot-social/. + * Star our project on GitHub at https://github.com/Ocelot-Social-Community/Ocelot-Social/. + * Promote it on your social networks. + * Tell your friends about it by word-of-mouth. + * Write a press article on ocelot.social or contact the editorial office of your local newspage or radio station. +* Take a [good first issue](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or issues that need help. Make sure to read [CONTRIBUTING.md](/CONTRIBUTING.md) first though. +* Testing and [reporting](/issues/new/choose) bugs. +* Translating: Please [contact us](#contact). +* Reviewing and testing pull requests. + +## Donate + +Your donation is very welcome and helps to enhance and improve the network. This software is mostly developped and maintained by the association [busFaktor() e.V.](https://www.busfaktor.org/en). Please support us with a [donation](https://www.busfaktor.org/en/donations) to busFaktor() e.V.. Thanks a lot! ❤️ + +## Contact + +Are you interested in operating your own ocelot.social network or becoming a user? Please contact us here: +* [hello@ocelot.social](mailto:hello@ocelot.social) +* [Discord](https://discord.com/invite/DFSjPaX) + +## For Developers and Contributors + +### Introduction Have a look into our short video: [ocelot.social - GitHub - Developer Welcome - Tutorial (english)](https://www.youtube.com/watch?v=gZSL6KvBIiY&list=PLFMD5liPP01kbuReHxYXxv_1fI5rIgS1f&index=1) -## Directory Layout +### Directory Layout There are three important directories: @@ -41,9 +100,9 @@ There are two approaches: 1. [Local](#local-installation) installation, which means you have to take care of dependencies yourself. 2. **Or** Install everything through [Docker](#docker-installation) which takes care of dependencies for you. -## Installation +### Installation -### Clone the Repository +#### Clone the Repository Clone the repository, this will create a new folder called `Ocelot-Social`: @@ -65,7 +124,7 @@ Change into the new folder. $ cd Ocelot-Social ``` -## Live Demo And Developer Logins +### Live Demo And Developer Logins **Try out our deployed [development environment](https://stage.ocelot.social).** @@ -74,7 +133,7 @@ Visit our staging networks: * central staging network: [stage.ocelot.social](https://stage.ocelot.social) -### Login +#### Login Logins for the live demos and developers (local developers after the following installations) in the browser: @@ -84,11 +143,11 @@ Logins for the live demos and developers (local developers after the following i | `moderator@example.org` | 1234 | moderator | | `admin@example.org` | 1234 | admin | -### Docker Installation +#### Docker Installation Docker is a software development container tool that combines software and its dependencies into one standardized unit that contains everything needed to run it. This helps us to avoid problems with dependencies and makes installation easier. -#### General Installation of Docker +##### General Installation of Docker There are [several ways to install Docker CE](https://docs.docker.com/install/) on your computer or server. @@ -105,7 +164,7 @@ $ docker-compose --version docker-compose version 1.23.2 ``` -#### Start Ocelot-Social via Docker-Compose +##### Start Ocelot-Social via Docker-Compose Prepare ENVs once beforehand: @@ -152,11 +211,11 @@ $ docker-compose exec backend yarn run db:seed For a closer description see [backend README.md](./backend/README.md). For a full documentation see [SUMMARY](./SUMMARY.md). -### Local Installation +#### Local Installation For a full documentation see [SUMMARY](./SUMMARY.md). -## Contributing +### Contributing Choose an issue (consider our label [good-first-issue](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)) and leave a comment there. We will then invite you to join our volunteers team. To have the necessary permission to push directly to this repository, please accept our invitation to join our volunteers team, you will receive via the email, Github will send you, once invited. If we did not invite you yet, please request an invitation via Discord. @@ -182,7 +241,7 @@ $ yarn test Check out our [contribution guideline](./CONTRIBUTING.md), too! -### Developer Chat +#### Developer Chat Join our friendly open-source community on [Discord](https://discord.gg/AJSX9DCSUA) :heart_eyes_cat: Just introduce yourself at `#introduce-yourself` and mention a mentor or `@@Mentors` to get you onboard :neckbeard: @@ -190,13 +249,13 @@ Just introduce yourself at `#introduce-yourself` and mention a mentor or `@@Ment We give write permissions to every developer who asks for it. Just text us on [Discord](https://discord.gg/AJSX9DCSUA). -## Deployment +### Deployment Deployment methods can be found in the [Ocelot-Social-Deploy-Rebranding](https://github.com/Ocelot-Social-Community/Ocelot-Social-Deploy-Rebranding) repository. The only deployment method in this repository for development purposes as described above is `docker-compose`. -## Technology Stack +### Technology Stack * [VueJS](https://vuejs.org/) * [NuxtJS](https://nuxtjs.org/) @@ -204,7 +263,7 @@ The only deployment method in this repository for development purposes as descri * [NodeJS](https://nodejs.org/en/) * [Neo4J](https://neo4j.com/) -### For Testing +#### For Testing * [Cypress](https://docs.cypress.io/) * [Storybook](https://storybook.js.org/) @@ -212,7 +271,7 @@ The only deployment method in this repository for development purposes as descri * [Vue Test Utils](https://vue-test-utils.vuejs.org/) * [ESLint](https://eslint.org/) -## Attributions +### Attributions Locale Icons made by [Freepik](http://www.freepik.com/) from [www.flaticon.com](https://www.flaticon.com/) is licensed by [CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/). @@ -220,6 +279,6 @@ Browser compatibility testing with [BrowserStack](https://www.browserstack.com/) BrowserStack Logo -## License +### License See the [LICENSE](LICENSE.md) file for license rights and limitations (MIT). From d41b99b9135625c0d94053b612f5292f77caf87c Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 15:00:52 +0100 Subject: [PATCH 82/99] feat(backend): filter posts of my groups --- .../helpers/filterPostsOfMyGroups.js | 40 +++++++++++++++++++ backend/src/schema/resolvers/posts.js | 3 ++ backend/src/schema/types/type/Post.gql | 1 + 3 files changed, 44 insertions(+) create mode 100644 backend/src/schema/resolvers/helpers/filterPostsOfMyGroups.js diff --git a/backend/src/schema/resolvers/helpers/filterPostsOfMyGroups.js b/backend/src/schema/resolvers/helpers/filterPostsOfMyGroups.js new file mode 100644 index 000000000..a808a5582 --- /dev/null +++ b/backend/src/schema/resolvers/helpers/filterPostsOfMyGroups.js @@ -0,0 +1,40 @@ +import { mergeWith, isArray } from 'lodash' + +const getMyGroupIds = async (context) => { + const { user } = context + if (!(user && user.id)) return [] + const session = context.driver.session() + + const readTxResultPromise = await session.readTransaction(async (transaction) => { + const cypher = ` + MATCH (group:Group)<-[membership:MEMBER_OF]-(:User { id: $userId }) + WHERE membership.role IN ['usual', 'admin', 'owner'] + RETURN collect(group.id) AS myGroupIds` + const getMyGroupIdsResponse = await transaction.run(cypher, { userId: user.id }) + return getMyGroupIdsResponse.records.map((record) => record.get('myGroupIds')) + }) + try { + const [myGroupIds] = readTxResultPromise + return myGroupIds + } finally { + session.close() + } +} + +export const filterPostsOfMyGroups = async (params, context) => { + if (!(params.filter && params.filter.postsInMyGroups)) return params + delete params.filter.postsInMyGroups + const myGroupIds = await getMyGroupIds(context) + params.filter = mergeWith( + params.filter, + { + group: { id_in: myGroupIds }, + }, + (objValue, srcValue) => { + if (isArray(objValue)) { + return objValue.concat(srcValue) + } + }, + ) + return params +} diff --git a/backend/src/schema/resolvers/posts.js b/backend/src/schema/resolvers/posts.js index 78515e641..d806f3803 100644 --- a/backend/src/schema/resolvers/posts.js +++ b/backend/src/schema/resolvers/posts.js @@ -6,6 +6,7 @@ import { mergeImage, deleteImage } from './images/images' import Resolver from './helpers/Resolver' import { filterForMutedUsers } from './helpers/filterForMutedUsers' import { filterInvisiblePosts } from './helpers/filterInvisiblePosts' +import { filterPostsOfMyGroups } from './helpers/filterPostsOfMyGroups' import CONFIG from '../../config' const maintainPinnedPosts = (params) => { @@ -21,12 +22,14 @@ const maintainPinnedPosts = (params) => { export default { Query: { Post: async (object, params, context, resolveInfo) => { + params = await filterPostsOfMyGroups(params, context) params = await filterInvisiblePosts(params, context) params = await filterForMutedUsers(params, context) params = await maintainPinnedPosts(params) return neo4jgraphql(object, params, context, resolveInfo) }, profilePagePosts: async (object, params, context, resolveInfo) => { + params = await filterPostsOfMyGroups(params, context) params = await filterInvisiblePosts(params, context) params = await filterForMutedUsers(params, context) return neo4jgraphql(object, params, context, resolveInfo) diff --git a/backend/src/schema/types/type/Post.gql b/backend/src/schema/types/type/Post.gql index 9eac00b0b..6fc7a3215 100644 --- a/backend/src/schema/types/type/Post.gql +++ b/backend/src/schema/types/type/Post.gql @@ -82,6 +82,7 @@ input _PostFilter { emotions_single: _PostEMOTEDFilter emotions_every: _PostEMOTEDFilter group: _GroupFilter + postsInMyGroups: Boolean } enum _PostOrdering { From 11a7dc28816fbf803d28e39ad562b1a7b6497c5f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 15:28:43 +0100 Subject: [PATCH 83/99] test filter posts in my groups --- .../schema/resolvers/postsInGroups.spec.js | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/backend/src/schema/resolvers/postsInGroups.spec.js b/backend/src/schema/resolvers/postsInGroups.spec.js index 5bf5820f0..02c7311a7 100644 --- a/backend/src/schema/resolvers/postsInGroups.spec.js +++ b/backend/src/schema/resolvers/postsInGroups.spec.js @@ -60,7 +60,7 @@ beforeAll(async () => { }) afterAll(async () => { - await cleanDatabase() + // await cleanDatabase() driver.close() }) @@ -1678,5 +1678,59 @@ describe('Posts in Groups', () => { }) }) }) + + describe('filter posts in my groups', () => { + describe('without any posts in groups', () => { + beforeAll(async () => { + authenticatedUser = await anyUser.toJson() + }) + + it('finds no posts', async () => { + const result = await query({ + query: filterPosts(), + variables: { filter: { postsInMyGroups: true } }, + }) + expect(result.data.Post).toHaveLength(0) + expect(result).toMatchObject({ + data: { + Post: [], + }, + errors: undefined, + }) + }) + }) + + describe('with posts in groups', () => { + beforeAll(async () => { + // member of hidden-group and closed-group + authenticatedUser = await allGroupsUser.toJson() + }) + + it('finds two posts', async () => { + const result = await query({ + query: filterPosts(), + variables: { filter: { postsInMyGroups: true } }, + }) + expect(result.data.Post).toHaveLength(2) + expect(result).toMatchObject({ + data: { + Post: expect.arrayContaining([ + { + id: 'post-to-closed-group', + title: 'A post to a closed group', + content: 'I am posting into a closed group as a member of the group', + }, + { + id: 'post-to-hidden-group', + title: 'A post to a hidden group', + content: 'I am posting into a hidden group as a member of the group', + }, + ]), + }, + errors: undefined, + }) + }) + }) + }) }) }) From 77ca09ed04170828fc66ad120070a17beb7d791b Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 15:32:29 +0100 Subject: [PATCH 84/99] after all clean DB --- backend/src/schema/resolvers/postsInGroups.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/schema/resolvers/postsInGroups.spec.js b/backend/src/schema/resolvers/postsInGroups.spec.js index 02c7311a7..1eaf7a708 100644 --- a/backend/src/schema/resolvers/postsInGroups.spec.js +++ b/backend/src/schema/resolvers/postsInGroups.spec.js @@ -60,7 +60,7 @@ beforeAll(async () => { }) afterAll(async () => { - // await cleanDatabase() + await cleanDatabase() driver.close() }) From d2462c34f1eb2beffc15babae243ff52dc068028 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 16:00:50 +0100 Subject: [PATCH 85/99] add filter by posts in my groups to store and test it --- webapp/store/posts.js | 16 +++++++++++++++ webapp/store/posts.spec.js | 41 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/webapp/store/posts.js b/webapp/store/posts.js index 5d9891eff..e8602bb13 100644 --- a/webapp/store/posts.js +++ b/webapp/store/posts.js @@ -30,6 +30,19 @@ export const mutations = { } } }, + TOGGLE_FILTER_BY_MY_GROUPS(state) { + const filter = clone(state.filter) + const status = get(filter, 'postsInMyGroups') + if (status) { + delete filter.postsInMyGroups + state.filter = filter + } else { + state.filter = { + ...filter, + postsInMyGroups: true, + } + } + }, RESET_CATEGORIES(state) { const filter = clone(state.filter) delete filter.categories_some @@ -84,6 +97,9 @@ export const getters = { filteredByUsersFollowed(state) { return !!get(state.filter, 'author.followedBy_some.id') }, + filteredByPostsInMyGroups(state) { + return !!get(state.filter, 'postsInMyGroups') + }, filteredByEmotions(state) { return get(state.filter, 'emotions_some.emotion_in') || [] }, diff --git a/webapp/store/posts.spec.js b/webapp/store/posts.spec.js index ed728bdd8..665b147ae 100644 --- a/webapp/store/posts.spec.js +++ b/webapp/store/posts.spec.js @@ -56,6 +56,18 @@ describe('getters', () => { }) }) + describe('filteredByPostsInMyGroups', () => { + it('returns true if filter is set', () => { + state = { filter: { postsInMyGroups: true } } + expect(getters.filteredByPostsInMyGroups(state)).toBe(true) + }) + + it('returns false if filter is not set', () => { + state = { filter: { categories_some: { id_in: [23] } } } + expect(getters.filteredByUsersFollowed(state)).toBe(false) + }) + }) + describe('filteredByEmotions', () => { it('returns an emotions array if filter is set', () => { state = { filter: { emotions_some: { emotion_in: ['sad'] } } } @@ -230,6 +242,35 @@ describe('mutations', () => { }) }) + describe('TOGGLE_FILTER_BY_MY_GROUPS', () => { + beforeEach(() => { + testMutation = () => { + mutations.TOGGLE_FILTER_BY_MY_GROUPS(state) + return getters.filter(state) + } + }) + + describe('given empty filter', () => { + beforeEach(() => { + state = { filter: {} } + }) + + it('sets postsInMyGroups filter to true', () => { + expect(testMutation()).toEqual({ postsInMyGroups: true }) + }) + }) + + describe('already filtered', () => { + beforeEach(() => { + state = { filter: { postsInMyGroups: true } } + }) + + it('removes postsInMyGroups filter', () => { + expect(testMutation()).toEqual({}) + }) + }) + }) + describe('TOGGLE_ORDER', () => { beforeEach(() => { testMutation = (key) => { From b63ade8da1e5392fe84117b9375b61f7c9c2c121 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 16:05:15 +0100 Subject: [PATCH 86/99] add filter posts by my groups --- webapp/components/FilterMenu/FilterMenuSection.vue | 5 +++-- webapp/components/FilterMenu/FollowingFilter.vue | 11 +++++++++++ webapp/locales/de.json | 2 ++ webapp/locales/en.json | 2 ++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/webapp/components/FilterMenu/FilterMenuSection.vue b/webapp/components/FilterMenu/FilterMenuSection.vue index 921bafff0..39c819563 100644 --- a/webapp/components/FilterMenu/FilterMenuSection.vue +++ b/webapp/components/FilterMenu/FilterMenuSection.vue @@ -4,13 +4,14 @@
    +
+ + -->
    diff --git a/webapp/components/FilterMenu/FollowingFilter.vue b/webapp/components/FilterMenu/FollowingFilter.vue index 7c2c2a282..93f0c05b4 100644 --- a/webapp/components/FilterMenu/FollowingFilter.vue +++ b/webapp/components/FilterMenu/FollowingFilter.vue @@ -10,6 +10,15 @@ @click="toggleFilteredByFollowed(currentUser.id)" /> +
  • + +
  • @@ -28,12 +37,14 @@ export default { computed: { ...mapGetters({ filteredByUsersFollowed: 'posts/filteredByUsersFollowed', + filteredByPostsInMyGroups: 'posts/filteredByPostsInMyGroups', currentUser: 'auth/user', }), }, methods: { ...mapMutations({ toggleFilteredByFollowed: 'posts/TOGGLE_FILTER_BY_FOLLOWED', + toggleFilteredByMyGroups: 'posts/TOGGLE_FILTER_BY_MY_GROUPS', }), }, } diff --git a/webapp/locales/de.json b/webapp/locales/de.json index 9ea733068..2c7d84354 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -273,6 +273,7 @@ "myTopics": "Meine Themen", "noFilter": "Beiträge filtern" }, + "filterMyGroups": "Beiträge in meinen Gruppen", "inappropriatePicture": "Dieses Bild kann für einige Menschen unangemessen sein.", "languageSelectLabel": "Sprache Deines Beitrags", "languageSelectText": "Sprache wählen", @@ -380,6 +381,7 @@ "filter-by": "Filtern nach ...", "following": "Nutzer denen ich folge", "languages": "Sprachen", + "my-groups": "Meinen Gruppen", "order": { "newest": { "hint": "Sortiere die Neuesten nach vorn", diff --git a/webapp/locales/en.json b/webapp/locales/en.json index 9e45396b8..87e7318c7 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -273,6 +273,7 @@ "myTopics": "My topics", "noFilter": "Filter posts" }, + "filterMyGroups": "Contributions in my groups", "inappropriatePicture": "This image may be inappropriate for some people.", "languageSelectLabel": "Language of your contribution", "languageSelectText": "Select Language", @@ -380,6 +381,7 @@ "filter-by": "Filter by ...", "following": "Users I follow", "languages": "Languages", + "my-groups": "My groups", "order": { "newest": { "hint": "Sort posts by the newest first", From a784b0f86000e9ccae1832f0fbbe992ef8c4a9b5 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 16:11:17 +0100 Subject: [PATCH 87/99] test filter by posts in my groups --- .../FilterMenu/FollowingFilter.spec.js | 17 +++++++++++++++++ .../components/FilterMenu/FollowingFilter.vue | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/webapp/components/FilterMenu/FollowingFilter.spec.js b/webapp/components/FilterMenu/FollowingFilter.spec.js index 4d4a827e5..0f51b305c 100644 --- a/webapp/components/FilterMenu/FollowingFilter.spec.js +++ b/webapp/components/FilterMenu/FollowingFilter.spec.js @@ -9,12 +9,14 @@ let wrapper describe('FollowingFilter', () => { const mutations = { 'posts/TOGGLE_FILTER_BY_FOLLOWED': jest.fn(), + 'posts/TOGGLE_FILTER_BY_MY_GROUPS': jest.fn(), } const getters = { 'auth/user': () => { return { id: 'u34' } }, 'posts/filteredByUsersFollowed': jest.fn(), + 'posts/filteredByPostsInMyGroups': jest.fn(), } const mocks = { @@ -34,12 +36,18 @@ describe('FollowingFilter', () => { describe('mount', () => { it('sets "filter-by-followed" button attribute `filled`', () => { getters['posts/filteredByUsersFollowed'] = jest.fn(() => true) + getters['posts/filteredByPostsInMyGroups'] = jest.fn(() => true) const wrapper = Wrapper() expect( wrapper .find('.following-filter .filter-list .follower-item .base-button') .classes('--filled'), ).toBe(true) + expect( + wrapper + .find('.following-filter .filter-list .posts-in-my-groups-item .base-button') + .classes('--filled'), + ).toBe(true) }) describe('click "filter-by-followed" button', () => { @@ -48,5 +56,14 @@ describe('FollowingFilter', () => { expect(mutations['posts/TOGGLE_FILTER_BY_FOLLOWED']).toHaveBeenCalledWith({}, 'u34') }) }) + + describe('click "filter-by-my-groups" button', () => { + it('calls TOGGLE_FILTER_BY_MY_GROUPS', () => { + wrapper + .find('.following-filter .filter-list .posts-in-my-groups-item .base-button') + .trigger('click') + expect(mutations['posts/TOGGLE_FILTER_BY_MY_GROUPS']).toHaveBeenCalled() + }) + }) }) }) diff --git a/webapp/components/FilterMenu/FollowingFilter.vue b/webapp/components/FilterMenu/FollowingFilter.vue index 93f0c05b4..9a488acd6 100644 --- a/webapp/components/FilterMenu/FollowingFilter.vue +++ b/webapp/components/FilterMenu/FollowingFilter.vue @@ -16,7 +16,7 @@ :label="$t('filter-menu.my-groups')" :filled="filteredByPostsInMyGroups" :title="$t('contribution.filterMyGroups')" - @click="toggleFilteredByMyGroups(currentUser.id)" + @click="toggleFilteredByMyGroups()" /> From 1575ee97652bb4b31d16f2cae508221a43394c60 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 16:20:45 +0100 Subject: [PATCH 88/99] =?UTF-8?q?Ebertsche=20Kn=C3=B6pfe=20for=20filter=20?= =?UTF-8?q?by=20posts=20in=20my=20groups?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/locales/de.json | 1 + webapp/locales/en.json | 1 + webapp/pages/index.vue | 21 ++++++++++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/webapp/locales/de.json b/webapp/locales/de.json index 2c7d84354..1db5a3dcd 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -270,6 +270,7 @@ "filterFollow": "Beiträge von Nutzern filtern, denen ich folge", "filterMasonryGrid": { "myFriends": "Nutzer denen ich folge", + "myGroups": "Meine Gruppen", "myTopics": "Meine Themen", "noFilter": "Beiträge filtern" }, diff --git a/webapp/locales/en.json b/webapp/locales/en.json index 87e7318c7..f7a7a54ad 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -270,6 +270,7 @@ "filterFollow": "Filter contributions from users I follow", "filterMasonryGrid": { "myFriends": "Users I follow", + "myGroups": "My groups", "myTopics": "My topics", "noFilter": "Filter posts" }, diff --git a/webapp/pages/index.vue b/webapp/pages/index.vue index d5f1ac3d0..ddadec9a8 100644 --- a/webapp/pages/index.vue +++ b/webapp/pages/index.vue @@ -30,7 +30,11 @@
    + + + {{ $t('contribution.filterMasonryGrid.myGroups') }} + + + +
    @@ -203,6 +221,7 @@ export default { methods: { ...mapMutations({ resetByFollowed: 'posts/TOGGLE_FILTER_BY_FOLLOWED', + resetByGroups: 'posts/TOGGLE_FILTER_BY_MY_GROUPS', resetCategories: 'posts/RESET_CATEGORIES', toggleCategory: 'posts/TOGGLE_CATEGORY', }), From 1fa883111057dc46ffb38adc7c2e386d364d6ba4 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 16:25:45 +0100 Subject: [PATCH 89/99] undo changes to filter menu section --- webapp/components/FilterMenu/FilterMenuSection.vue | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/webapp/components/FilterMenu/FilterMenuSection.vue b/webapp/components/FilterMenu/FilterMenuSection.vue index 39c819563..921bafff0 100644 --- a/webapp/components/FilterMenu/FilterMenuSection.vue +++ b/webapp/components/FilterMenu/FilterMenuSection.vue @@ -4,14 +4,13 @@
      -
    + + -->
      From 32aa5892a67e4dedc74b4f6c733cb231941128af Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 6 Mar 2023 16:29:35 +0100 Subject: [PATCH 90/99] improve code --- webapp/store/posts.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/webapp/store/posts.js b/webapp/store/posts.js index e8602bb13..587867b0e 100644 --- a/webapp/store/posts.js +++ b/webapp/store/posts.js @@ -32,8 +32,7 @@ export const mutations = { }, TOGGLE_FILTER_BY_MY_GROUPS(state) { const filter = clone(state.filter) - const status = get(filter, 'postsInMyGroups') - if (status) { + if (get(filter, 'postsInMyGroups')) { delete filter.postsInMyGroups state.filter = filter } else { From 1b27c17779039e9167ae6d354ff30237c1b6ef17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 6 Mar 2023 18:30:56 +0100 Subject: [PATCH 91/99] Remove `deployment/DOCKER_MORE_CLOSELY.md` --- deployment/DOCKER_MORE_CLOSELY.md | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 deployment/DOCKER_MORE_CLOSELY.md diff --git a/deployment/DOCKER_MORE_CLOSELY.md b/deployment/DOCKER_MORE_CLOSELY.md deleted file mode 100644 index 2bf213a33..000000000 --- a/deployment/DOCKER_MORE_CLOSELY.md +++ /dev/null @@ -1,9 +0,0 @@ -# Docker - -## Apple M1 Platform - -To get more information about the Apple M1 platform you find our documentation in our main code, [here](/CONTRIBUTING.md#docker-more-closely). - -## Docker More Closely In Main Code - -To get more information about how to analyze the Docker builds etc. you find our documentation in our main code, [here](/CONTRIBUTING.md#docker-more-closely). From cd498a17f0cfa3af6183c055a53b3c1f4b1f1ec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 6 Mar 2023 18:31:56 +0100 Subject: [PATCH 92/99] Replace docu text by Ulf's suggestion Co-Authored-By: Ulf Gebhardt --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b2c8a7dbb..a677f39bb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -175,7 +175,7 @@ Please copy and paste the following quotes for the languages: #### Environment Variable For Apple M1 Platform To set the following environment variable seems not be needed anymore, probably because Docker knows in its newest version on which CPU it runs and sets that to default. -But we leave this command here to keep the knowledge about how to set the platform: +If you encounter trouble building the docker containers on an Apple M1 chip you can try to explicitly define the target platform docker builds and pulls images for: ```bash # set env variable for your shell From fa7927a379ed8705ffecd313fb27c45f635bf60e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 6 Mar 2023 18:34:27 +0100 Subject: [PATCH 93/99] Replace docu text by Ulf's suggestion Co-Authored-By: Ulf Gebhardt --- CONTRIBUTING.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a677f39bb..650785331 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -174,7 +174,6 @@ Please copy and paste the following quotes for the languages: #### Environment Variable For Apple M1 Platform -To set the following environment variable seems not be needed anymore, probably because Docker knows in its newest version on which CPU it runs and sets that to default. If you encounter trouble building the docker containers on an Apple M1 chip you can try to explicitly define the target platform docker builds and pulls images for: ```bash From 9bb770ae8e1510f0cdd788ca81f1baaf68568b5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Mon, 6 Mar 2023 18:50:26 +0100 Subject: [PATCH 94/99] Fix spelling of README.md Co-authored-by: Moriz Wahl --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8d483dc79..35af4ce80 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Try out our live demo network, see [here](#live-demo-and-developer-logins). ## Help us -If you're wondering how could you help, there are plenty of ways, e.g.: +If you're wondering how you could help, there are plenty of ways, e.g.: * Spread the good word about ocelot.social to make it more popular: * Add the link [ocelot.social](https://ocelot.social) to your website. From ec77da7ad3cc8cbedec1fdc080e8622cdc89c1f0 Mon Sep 17 00:00:00 2001 From: sushidave Date: Mon, 6 Mar 2023 19:06:28 +0100 Subject: [PATCH 95/99] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Wolfgang Huß --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 35af4ce80..1fa2ffa2f 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Ocelot.social networks feature: * maps * search * filters -* ...and more. +* and more … Check out the [full feature list](/wiki/en:FAQ#what-are-the-features). From aba74cd5c68c66b342ccdbc2d69cd017b92606ae Mon Sep 17 00:00:00 2001 From: sushidave Date: Mon, 6 Mar 2023 19:08:29 +0100 Subject: [PATCH 96/99] Change order of sections --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1fa2ffa2f..8ddf97fe5 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,12 @@ At the same time, it should be possible in the future to link these networks wit In other words, we are interested in a network of networks and in keeping the data as close as possible to the user and the operator they trusts. +## Screenshots + +Post feed + +Check out more screenshots [here](/wiki/en:Screenshots). + ## Features Ocelot.social networks feature: @@ -34,12 +40,6 @@ Ocelot.social networks feature: Check out the [full feature list](/wiki/en:FAQ#what-are-the-features). -## Screenshots - -Post feed - -Check out more screenshots [here](/wiki/en:Screenshots). - ## User Guide and Frequently Asked Questions In the [wiki](/wiki) you can find more information. From ace8b8637ffb81172ad048f0e3e2cdaa8f19fcf5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 7 Mar 2023 16:08:32 +0100 Subject: [PATCH 97/99] dont rebase automatically to avoid workflow slots beeing used --- .github/dependabot.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 085fedb18..ac1dfa858 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -2,16 +2,16 @@ version: 2 updates: - package-ecosystem: "github-actions" directory: "/" + rebase-strategy: "disabled" schedule: interval: weekly day: "saturday" timezone: "Europe/Berlin" time: "03:00" - # open-pull-requests-limit: 10 - # ignore: - package-ecosystem: npm directory: "/" + rebase-strategy: "disabled" schedule: interval: weekly day: "saturday" @@ -19,6 +19,7 @@ updates: time: "03:00" - package-ecosystem: npm directory: "/backend" + rebase-strategy: "disabled" schedule: interval: weekly day: "saturday" @@ -26,6 +27,7 @@ updates: time: "03:00" - package-ecosystem: npm directory: "/webapp" + rebase-strategy: "disabled" schedule: interval: weekly day: "saturday" @@ -34,6 +36,7 @@ updates: - package-ecosystem: docker directory: "/backend" + rebase-strategy: "disabled" schedule: interval: weekly day: "saturday" @@ -41,6 +44,7 @@ updates: time: "03:00" - package-ecosystem: docker directory: "/webapp" + rebase-strategy: "disabled" schedule: interval: weekly day: "saturday" @@ -48,6 +52,7 @@ updates: time: "03:00" - package-ecosystem: docker directory: "/neo4j" + rebase-strategy: "disabled" schedule: interval: weekly day: "saturday" @@ -55,6 +60,7 @@ updates: time: "03:00" - package-ecosystem: docker directory: "/deployment/src/docker" + rebase-strategy: "disabled" schedule: interval: weekly day: "saturday" From 7fcb9a0ff6c9aec01858d90420aeea48e7faed93 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 7 Mar 2023 22:33:14 +0100 Subject: [PATCH 98/99] use base button --- webapp/components/Group/GroupMember.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/components/Group/GroupMember.vue b/webapp/components/Group/GroupMember.vue index c0cdc67ea..d6c09746e 100644 --- a/webapp/components/Group/GroupMember.vue +++ b/webapp/components/Group/GroupMember.vue @@ -53,7 +53,7 @@ Date: Wed, 8 Mar 2023 09:21:44 +0100 Subject: [PATCH 99/99] fix deploy branded --- .github/workflows/publish-branded.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/publish-branded.yml b/.github/workflows/publish-branded.yml index a404453e6..869eb6302 100644 --- a/.github/workflows/publish-branded.yml +++ b/.github/workflows/publish-branded.yml @@ -46,6 +46,11 @@ jobs: DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + ref: ${{ github.event.client_payload.ref }} + - name: Download Docker Image (Backend) uses: actions/download-artifact@v2 with: