From fe25de5aeba8e3e7275626af7c4aa29f8066036d Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sat, 22 May 2021 20:26:03 +0200 Subject: [PATCH 01/45] chore: upgrade deps --- yarn.lock | 2880 +++++++++++++++++++++++++++++------------------------ 1 file changed, 1560 insertions(+), 1320 deletions(-) diff --git a/yarn.lock b/yarn.lock index de9426f..ec1537b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@arcanis/slice-ansi@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@arcanis/slice-ansi/-/slice-ansi-1.0.2.tgz#35331e41a1062e3c53c01ad2ec1555c5c1959d8f" + integrity sha512-lDL63z0W/L/WTgqrwVOuNyMAsTv+pvjybd21z9SWdStmQoXT59E/iVWwat3gYjcdTNBf6oHAMoyFm8dtjpXEYw== + dependencies: + grapheme-splitter "^1.0.4" + "@babel/code-frame@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" @@ -23,10 +30,10 @@ dependencies: "@babel/highlight" "^7.12.13" -"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.12", "@babel/compat-data@^7.13.8": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" - integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" + integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== "@babel/core@7.12.3": version "7.12.3" @@ -50,34 +57,33 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.8.4": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.13.tgz#bc44c4a2be2288ec4ddf56b66fc718019c76ac29" - integrity sha512-1xEs9jZAyKIouOoCmpsgk/I26PoKyvzQ2ixdRpRzfbcp1fL+ozw7TUgdDgwonbTovqRaTfRh50IXuw4QrWO0GA== +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.7.5", "@babel/core@^7.8.4": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38" + integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-compilation-targets" "^7.13.13" - "@babel/helper-module-transforms" "^7.13.12" - "@babel/helpers" "^7.13.10" - "@babel/parser" "^7.13.13" + "@babel/generator" "^7.14.3" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.14.2" + "@babel/helpers" "^7.14.0" + "@babel/parser" "^7.14.3" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.13" - "@babel/types" "^7.13.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.1.2" - lodash "^4.17.19" semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.12.1", "@babel/generator@^7.13.9": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" - integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== +"@babel/generator@^7.12.1", "@babel/generator@^7.14.2", "@babel/generator@^7.14.3": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91" + integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA== dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.14.2" jsesc "^2.5.1" source-map "^0.5.0" @@ -96,39 +102,40 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.10", "@babel/helper-compilation-targets@^7.13.13", "@babel/helper-compilation-targets@^7.13.8": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5" - integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ== +"@babel/helper-compilation-targets@^7.12.1", "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== dependencies: - "@babel/compat-data" "^7.13.12" + "@babel/compat-data" "^7.13.15" "@babel/helper-validator-option" "^7.12.17" browserslist "^4.14.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.13.0": - version "7.13.11" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" - integrity sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw== +"@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.3": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz#832111bcf4f57ca57a4c5b1a000fc125abc6554a" + integrity sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-member-expression-to-functions" "^7.13.12" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-replace-supers" "^7.14.3" "@babel/helper-split-export-declaration" "^7.12.13" "@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" - integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz#149aa6d78c016e318c43e2409a0ae9c136a86688" + integrity sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" - integrity sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== +"@babel/helper-define-polyfill-provider@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.1.tgz#e6f5f4a6edc3722152c21359190de67fc6cf664d" + integrity sha512-x3AUTVZNPunaw1opRTa5OwVA5N0YxGlIad9xQ5QflK1uIS7PnAGGU5O2Dj/G183fR//N8AzTq+Q8+oiu9m0VFg== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -146,14 +153,14 @@ dependencies: "@babel/types" "^7.13.0" -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== +"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" + integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== dependencies: "@babel/helper-get-function-arity" "^7.12.13" "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/types" "^7.14.2" "@babel/helper-get-function-arity@^7.12.13": version "7.12.13" @@ -163,14 +170,14 @@ "@babel/types" "^7.12.13" "@babel/helper-hoist-variables@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" - integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" + integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== dependencies: - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" -"@babel/helper-member-expression-to-functions@^7.13.0", "@babel/helper-member-expression-to-functions@^7.13.12": +"@babel/helper-member-expression-to-functions@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== @@ -184,19 +191,19 @@ dependencies: "@babel/types" "^7.13.12" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz#600e58350490828d82282631a1422268e982ba96" - integrity sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" + integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== dependencies: "@babel/helper-module-imports" "^7.13.12" "@babel/helper-replace-supers" "^7.13.12" "@babel/helper-simple-access" "^7.13.12" "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-validator-identifier" "^7.14.0" "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" @@ -219,17 +226,17 @@ "@babel/helper-wrap-function" "^7.13.0" "@babel/types" "^7.13.0" -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" - integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12", "@babel/helper-replace-supers@^7.14.3": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz#ca17b318b859d107f0e9b722d58cf12d94436600" + integrity sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA== dependencies: "@babel/helper-member-expression-to-functions" "^7.13.12" "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" -"@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.13.12": +"@babel/helper-simple-access@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== @@ -250,10 +257,10 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" + integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== "@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.17": version "7.12.17" @@ -270,28 +277,28 @@ "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.0" -"@babel/helpers@^7.12.1", "@babel/helpers@^7.13.10": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" - integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== +"@babel/helpers@^7.12.1", "@babel/helpers@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" + integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== dependencies: "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" - integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" + integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-validator-identifier" "^7.14.0" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.10.2", "@babel/parser@^7.12.13", "@babel/parser@^7.12.3", "@babel/parser@^7.13.13", "@babel/parser@^7.7.0": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" - integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== +"@babel/parser@^7.1.0", "@babel/parser@^7.10.2", "@babel/parser@^7.12.13", "@babel/parser@^7.12.3", "@babel/parser@^7.13.16", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3", "@babel/parser@^7.7.0": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.3.tgz#9b530eecb071fd0c93519df25c5ff9f14759f298" + integrity sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ== "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": version "7.13.12" @@ -302,10 +309,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-proposal-optional-chaining" "^7.13.12" -"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" - integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== +"@babel/plugin-proposal-async-generator-functions@^7.12.1", "@babel/plugin-proposal-async-generator-functions@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz#3a2085abbf5d5f962d480dbc81347385ed62eb1e" + integrity sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-remap-async-to-generator" "^7.13.0" @@ -319,7 +326,7 @@ "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.13.0": +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== @@ -327,6 +334,15 @@ "@babel/helper-create-class-features-plugin" "^7.13.0" "@babel/helper-plugin-utils" "^7.13.0" +"@babel/plugin-proposal-class-static-block@^7.13.11": + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz#5a527e2cae4a4753119c3a3e7f64ecae8ccf1360" + integrity sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.3" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/plugin-proposal-decorators@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.12.1.tgz#59271439fed4145456c41067450543aee332d15f" @@ -336,34 +352,34 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-decorators" "^7.12.1" -"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" - integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== +"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz#01ebabd7c381cff231fa43e302939a9de5be9d9f" + integrity sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" - integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== +"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz#62542f94aa9ce8f6dba79eec698af22112253791" + integrity sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" - integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== +"@babel/plugin-proposal-json-strings@^7.12.1", "@babel/plugin-proposal-json-strings@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" + integrity sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" - integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz#222348c080a1678e0e74ea63fe76f275882d1fd7" + integrity sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -376,10 +392,10 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" - integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz#425b11dc62fc26939a2ab42cbba680bdf5734546" + integrity sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -392,29 +408,29 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" - integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== +"@babel/plugin-proposal-numeric-separator@^7.12.1", "@babel/plugin-proposal-numeric-separator@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz#82b4cc06571143faf50626104b335dd71baa4f9e" + integrity sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz#e17d418f81cc103fedd4ce037e181c8056225abc" + integrity sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw== dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" + "@babel/compat-data" "^7.14.0" + "@babel/helper-compilation-targets" "^7.13.16" "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-parameters" "^7.14.2" -"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" - integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== +"@babel/plugin-proposal-optional-catch-binding@^7.12.1", "@babel/plugin-proposal-optional-catch-binding@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz#150d4e58e525b16a9a1431bd5326c4eed870d717" + integrity sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" @@ -428,10 +444,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" - integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== +"@babel/plugin-proposal-optional-chaining@^7.12.1", "@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz#df8171a8b9c43ebf4c1dabe6311b432d83e1b34e" + integrity sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA== dependencies: "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" @@ -445,6 +461,16 @@ "@babel/helper-create-class-features-plugin" "^7.13.0" "@babel/helper-plugin-utils" "^7.13.0" +"@babel/plugin-proposal-private-property-in-object@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" + integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.14.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-private-property-in-object" "^7.14.0" + "@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" @@ -474,6 +500,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-class-static-block@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" + integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-syntax-decorators@^7.12.1": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.13.tgz#fac829bf3c7ef4a1bc916257b403e58c6bdaf648" @@ -565,6 +598,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-private-property-in-object@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" + integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.12.13", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" @@ -602,23 +642,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== +"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz#761cb12ab5a88d640ad4af4aa81f820e6b5fdf5c" + integrity sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz#3f1196c5709f064c252ad056207d87b7aeb2d03d" + integrity sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" + "@babel/helper-function-name" "^7.14.2" "@babel/helper-optimise-call-expression" "^7.12.13" "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-replace-supers" "^7.13.12" "@babel/helper-split-export-declaration" "^7.12.13" globals "^11.1.0" @@ -629,10 +669,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.13.0" -"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" - integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.13.17": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" + integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== dependencies: "@babel/helper-plugin-utils" "^7.13.0" @@ -704,23 +744,23 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" - integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== +"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz#6622806fe1a7c07a1388444222ef9535f2ca17b0" + integrity sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw== dependencies: - "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.2" "@babel/helper-plugin-utils" "^7.13.0" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" - integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== +"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" + integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== dependencies: - "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.0" "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-simple-access" "^7.13.12" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.13.8": @@ -734,12 +774,12 @@ "@babel/helper-validator-identifier" "^7.12.11" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" - integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" + integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== dependencies: - "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-module-transforms" "^7.14.0" "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": @@ -764,10 +804,10 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/helper-replace-supers" "^7.12.13" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.14.2": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz#e4290f72e0e9e831000d066427c4667098decc31" + integrity sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A== dependencies: "@babel/helper-plugin-utils" "^7.13.0" @@ -793,11 +833,11 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-react-display-name@^7.12.1", "@babel/plugin-transform-react-display-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" - integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.2.tgz#2e854544d42ab3bb9c21f84e153d62e800fbd593" + integrity sha512-zCubvP+jjahpnFJvPaHPiGVfuVUjXHhFvJKQdNnsmSsiU9kR/rCZ41jHc++tERD2zV+p7Hr6is+t5b6iWTCqSw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-react-jsx-development@^7.12.1", "@babel/plugin-transform-react-jsx-development@^7.12.17": version "7.12.17" @@ -814,22 +854,22 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-react-jsx-source@^7.12.1": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz#051d76126bee5c9a6aa3ba37be2f6c1698856bcb" - integrity sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q== + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.2.tgz#2620b57e7de775c0687f65d464026d15812941da" + integrity sha512-OMorspVyjxghAjzgeAWc6O7W7vHbJhV69NeTGdl9Mxgz6PaweAuo7ffB9T5A1OQ9dGcw0As4SYMUhyNC4u7mVg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-react-jsx@^7.12.1", "@babel/plugin-transform-react-jsx@^7.12.17", "@babel/plugin-transform-react-jsx@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" - integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.3.tgz#0e26597805cf0862da735f264550933c38babb66" + integrity sha512-uuxuoUNVhdgYzERiHHFkE4dWoJx+UFVyuAl0aqN8P2/AKFHwqgUC5w2+4/PjpKXJsFgBlYAFXlUmDQ3k3DUkXw== dependencies: "@babel/helper-annotate-as-pure" "^7.12.13" "@babel/helper-module-imports" "^7.13.12" "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.13.12" + "@babel/types" "^7.14.2" "@babel/plugin-transform-react-pure-annotations@^7.12.1": version "7.12.1" @@ -839,10 +879,10 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" - integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.13.15": + version "7.13.15" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" + integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== dependencies: regenerator-transform "^0.14.2" @@ -900,11 +940,11 @@ "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-transform-typescript@^7.12.1", "@babel/plugin-transform-typescript@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" - integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== + version "7.14.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.3.tgz#44f67f725a60cccee33d9d6fee5e4f338258f34f" + integrity sha512-G5Bb5pY6tJRTC4ag1visSgiDoGgJ1u1fMUgmc2ijLkcIdzP83Q1qyZX4ggFQ/SkR+PNOatkaYC+nKcTlpsX4ag== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.14.3" "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-syntax-typescript" "^7.12.13" @@ -996,30 +1036,33 @@ semver "^5.5.0" "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.8.4": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.12.tgz#6dff470478290582ac282fb77780eadf32480237" - integrity sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA== + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.2.tgz#e80612965da73579c84ad2f963c2359c71524ed5" + integrity sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ== dependencies: - "@babel/compat-data" "^7.13.12" - "@babel/helper-compilation-targets" "^7.13.10" + "@babel/compat-data" "^7.14.0" + "@babel/helper-compilation-targets" "^7.13.16" "@babel/helper-plugin-utils" "^7.13.0" "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.13.8" + "@babel/plugin-proposal-async-generator-functions" "^7.14.2" "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-dynamic-import" "^7.13.8" - "@babel/plugin-proposal-export-namespace-from" "^7.12.13" - "@babel/plugin-proposal-json-strings" "^7.13.8" - "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" - "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.13.8" - "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-class-static-block" "^7.13.11" + "@babel/plugin-proposal-dynamic-import" "^7.14.2" + "@babel/plugin-proposal-export-namespace-from" "^7.14.2" + "@babel/plugin-proposal-json-strings" "^7.14.2" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" + "@babel/plugin-proposal-numeric-separator" "^7.14.2" + "@babel/plugin-proposal-object-rest-spread" "^7.14.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" + "@babel/plugin-proposal-optional-chaining" "^7.14.2" "@babel/plugin-proposal-private-methods" "^7.13.0" + "@babel/plugin-proposal-private-property-in-object" "^7.14.0" "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.12.13" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.3" @@ -1029,14 +1072,15 @@ "@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.0" "@babel/plugin-syntax-top-level-await" "^7.12.13" "@babel/plugin-transform-arrow-functions" "^7.13.0" "@babel/plugin-transform-async-to-generator" "^7.13.0" "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.12.13" - "@babel/plugin-transform-classes" "^7.13.0" + "@babel/plugin-transform-block-scoping" "^7.14.2" + "@babel/plugin-transform-classes" "^7.14.2" "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.13.17" "@babel/plugin-transform-dotall-regex" "^7.12.13" "@babel/plugin-transform-duplicate-keys" "^7.12.13" "@babel/plugin-transform-exponentiation-operator" "^7.12.13" @@ -1044,16 +1088,16 @@ "@babel/plugin-transform-function-name" "^7.12.13" "@babel/plugin-transform-literals" "^7.12.13" "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.13.0" - "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/plugin-transform-modules-amd" "^7.14.2" + "@babel/plugin-transform-modules-commonjs" "^7.14.0" "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.13.0" + "@babel/plugin-transform-modules-umd" "^7.14.0" "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" "@babel/plugin-transform-new-target" "^7.12.13" "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-parameters" "^7.14.2" "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.13.15" "@babel/plugin-transform-reserved-words" "^7.12.13" "@babel/plugin-transform-shorthand-properties" "^7.12.13" "@babel/plugin-transform-spread" "^7.13.0" @@ -1063,14 +1107,14 @@ "@babel/plugin-transform-unicode-escapes" "^7.12.13" "@babel/plugin-transform-unicode-regex" "^7.12.13" "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.13.12" - babel-plugin-polyfill-corejs2 "^0.1.4" - babel-plugin-polyfill-corejs3 "^0.1.3" - babel-plugin-polyfill-regenerator "^0.1.2" + "@babel/types" "^7.14.2" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" core-js-compat "^3.9.0" semver "^6.3.0" -"@babel/preset-flow@^7.0.0": +"@babel/preset-flow@^7.13.13": version "7.13.13" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.13.13.tgz#a61a1c149b3f77589d795287744393444d5cdd9e" integrity sha512-MDtwtamMifqq3R2mC7l3A3uFalUb3NH5TIBQWjN/epEPlZktcLq4se3J+ivckKrLMGsR7H9LW8+pYuIUN9tsKg== @@ -1123,7 +1167,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-typescript" "^7.12.1" -"@babel/preset-typescript@^7.1.0": +"@babel/preset-typescript@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz#ab107e5f050609d806fbb039bec553b33462c60a" integrity sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw== @@ -1132,21 +1176,21 @@ "@babel/helper-validator-option" "^7.12.17" "@babel/plugin-transform-typescript" "^7.13.0" -"@babel/register@^7.0.0": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.8.tgz#d9051dc6820cb4e86375cc0e2d55a4862b31184f" - integrity sha512-yCVtABcmvQjRsX2elcZFUV5Q5kDDpHdtXKKku22hNDma60lYuhKmtp1ykZ/okRCPLT2bR5S+cA1kvtBdAFlDTQ== +"@babel/register@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.16.tgz#ae3ab0b55c8ec28763877383c454f01521d9a53d" + integrity sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg== dependencies: + clone-deep "^4.0.1" find-cache-dir "^2.0.0" - lodash "^4.17.19" make-dir "^2.1.0" pirates "^4.0.0" source-map-support "^0.5.16" "@babel/runtime-corejs3@^7.10.2": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz#14c3f4c85de22ba88e8e86685d13e8861a82fe86" - integrity sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg== + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz#6bf5fbc0b961f8e3202888cb2cd0fb7a0a9a3f66" + integrity sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg== dependencies: core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" @@ -1159,9 +1203,9 @@ regenerator-runtime "^0.13.4" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.7", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" - integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" + integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== dependencies: regenerator-runtime "^0.13.4" @@ -1174,27 +1218,26 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.7.0": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" - integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2", "@babel/traverse@^7.7.0": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" + integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.9" - "@babel/helper-function-name" "^7.12.13" + "@babel/generator" "^7.14.2" + "@babel/helper-function-name" "^7.14.2" "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.13.13" - "@babel/types" "^7.13.13" + "@babel/parser" "^7.14.2" + "@babel/types" "^7.14.2" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.13.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.13.tgz#dcd8b815b38f537a3697ce84c8e3cc62197df96f" - integrity sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w== +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.2.tgz#4208ae003107ef8a057ea8333e56eb64d2f6a2c3" + integrity sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" + "@babel/helper-validator-identifier" "^7.14.0" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1211,152 +1254,151 @@ minimist "^1.2.0" "@commitlint/cli@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-12.0.1.tgz#8960e34e8f1aed8b2ea50f223ee817fdf2264ffb" - integrity sha512-V+cMYNHJOr40XT9Kvz3Vrz1Eh7QE1rjQrUbifawDAqcOrBJFuoXwU2SAcRtYFCSqFy9EhbreQGhZFs8dYb90KA== - dependencies: - "@commitlint/format" "^12.0.1" - "@commitlint/lint" "^12.0.1" - "@commitlint/load" "^12.0.1" - "@commitlint/read" "^12.0.1" - "@commitlint/types" "^12.0.1" - get-stdin "8.0.0" + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-12.1.4.tgz#af4d9dd3c0122c7b39a61fa1cd2abbad0422dbe0" + integrity sha512-ZR1WjXLvqEffYyBPT0XdnSxtt3Ty1TMoujEtseW5o3vPnkA1UNashAMjQVg/oELqfaiAMnDw8SERPMN0e/0kLg== + dependencies: + "@commitlint/format" "^12.1.4" + "@commitlint/lint" "^12.1.4" + "@commitlint/load" "^12.1.4" + "@commitlint/read" "^12.1.4" + "@commitlint/types" "^12.1.4" lodash "^4.17.19" resolve-from "5.0.0" resolve-global "1.0.0" yargs "^16.2.0" -"@commitlint/config-angular-type-enum@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/config-angular-type-enum/-/config-angular-type-enum-12.0.1.tgz#46ad2dd5258dbb0eb2f26accf8f5849339d68f7b" - integrity sha512-0qETLi7f7BineQruIBjyzHFfvDfh9FTEbMs+oTAfl+cDKTLJYI5W6eKGjI3MPg5+8sxUtzh6pJ+Dp3LFOpawTQ== +"@commitlint/config-angular-type-enum@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/config-angular-type-enum/-/config-angular-type-enum-12.1.4.tgz#02f9fd83cb13d1b40b0b2308147059ee0eae1ab5" + integrity sha512-C/F4X0VN56qpVq4HqiY2DuynF3BLtIFxM8Zwf3xvSONHGYVqmYG1cM6qezMxKtTIuy7A5yKK5aeSnaptw+VQgw== "@commitlint/config-angular@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/config-angular/-/config-angular-12.0.1.tgz#080d96db84752f17ffed06bd81c46bb4bf7e3188" - integrity sha512-LuhglC8lh+5zdl+hjNunhH1b4Uj70w/TbdWna6CTvpuR59WSZSFZhIxutN2Fjuf1jlHGkx2bC9ZiOQW01YQNTA== + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/config-angular/-/config-angular-12.1.4.tgz#960e394994052201c4ded34713092ec4ea44ce97" + integrity sha512-ptJpRjsHe0Cmh6Bm5tnC/RbR9p3/YMsZFhOzLEiv1sn2pBPsTSGIka1eO26XquLcw/0srKCGBNnUFFLO84qGPQ== dependencies: - "@commitlint/config-angular-type-enum" "^12.0.1" + "@commitlint/config-angular-type-enum" "^12.1.4" -"@commitlint/ensure@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-12.0.1.tgz#0ed5e997026db25eb080559b6e67f55a21eea080" - integrity sha512-XdBq+q1YBBDxWIAEjE3Y1YMbzhUnUuSLAEWD8SU1xsvEpQXWRYwDlMBRkjO7funNWTdL0ZQSkZDzme70imYjbw== +"@commitlint/ensure@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-12.1.4.tgz#287ae2dcc5ccb086e749705b1bd9bdb99773056f" + integrity sha512-MxHIBuAG9M4xl33qUfIeMSasbv3ktK0W+iygldBxZOL4QSYC2Gn66pZAQMnV9o3V+sVFHoAK2XUKqBAYrgbEqw== dependencies: - "@commitlint/types" "^12.0.1" + "@commitlint/types" "^12.1.4" lodash "^4.17.19" -"@commitlint/execute-rule@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-12.0.1.tgz#5bb2eba929270cafb2bd8191799d8b451de7fb7e" - integrity sha512-JzyweYfZlFLtXpgP+btzSY3YAkGPg61TqUSYQqBr4+5IaVf1FruMm5v4D5eLu9dAJuNKUfHbM3AEfuEPiZ79pg== +"@commitlint/execute-rule@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-12.1.4.tgz#9973b02e9779adbf1522ae9ac207a4815ec73de1" + integrity sha512-h2S1j8SXyNeABb27q2Ok2vD1WfxJiXvOttKuRA9Or7LN6OQoC/KtT3844CIhhWNteNMu/wE0gkTqGxDVAnJiHg== -"@commitlint/format@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-12.0.1.tgz#5164e5a9e8592c1983482cbd71e7ea86a645ff1b" - integrity sha512-rF79ipAxR8yFzPzG5tRoEZ//MRkyxCXj4JhpEjtdaCMBAXMssI8uazn3e5D8z4UFgSDe9qOnL0OmQvql7HTMoA== +"@commitlint/format@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-12.1.4.tgz#db2d46418a6ae57c90e5f7f65dff46f0265d9f24" + integrity sha512-h28ucMaoRjVvvgS6Bdf85fa/+ZZ/iu1aeWGCpURnQV7/rrVjkhNSjZwGlCOUd5kDV1EnZ5XdI7L18SUpRjs26g== dependencies: - "@commitlint/types" "^12.0.1" + "@commitlint/types" "^12.1.4" chalk "^4.0.0" -"@commitlint/is-ignored@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-12.0.1.tgz#0e59b0524e16300b1d9d62f8c138f083f22ebf9a" - integrity sha512-AplfLn5mX/kWTIiSolcOhTYcgphuGLX8FUr+HmyHBEqUkO36jt0z9caysH47fqU71ePtH63v1DWm+RYQ5RPDjg== +"@commitlint/is-ignored@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-12.1.4.tgz#4c430bc3b361aa9be5cd4ddb252c1559870ea7bc" + integrity sha512-uTu2jQU2SKvtIRVLOzMQo3KxDtO+iJ1p0olmncwrqy4AfPLgwoyCP2CiULq5M7xpR3+dE3hBlZXbZTQbD7ycIw== dependencies: - "@commitlint/types" "^12.0.1" - semver "7.3.4" + "@commitlint/types" "^12.1.4" + semver "7.3.5" -"@commitlint/lint@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-12.0.1.tgz#a88b01c81cb6ca1867bd3d8fd288ba30017c2b7d" - integrity sha512-1lKyRCq4ahJrY+Xxo8LsqCbALeJkodtEfpmYHeA5HpPMnK7lRSplLqOLcTCjoPfd4vO+gl6aDEZN+ow3YGQBOg== +"@commitlint/lint@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-12.1.4.tgz#856b7fd2b2e6367b836cb84a12f1c1b3c0e40d22" + integrity sha512-1kZ8YDp4to47oIPFELUFGLiLumtPNKJigPFDuHt2+f3Q3IKdQ0uk53n3CPl4uoyso/Og/EZvb1mXjFR/Yce4cA== dependencies: - "@commitlint/is-ignored" "^12.0.1" - "@commitlint/parse" "^12.0.1" - "@commitlint/rules" "^12.0.1" - "@commitlint/types" "^12.0.1" + "@commitlint/is-ignored" "^12.1.4" + "@commitlint/parse" "^12.1.4" + "@commitlint/rules" "^12.1.4" + "@commitlint/types" "^12.1.4" -"@commitlint/load@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.0.1.tgz#4d180fc88e5b4cfcb476a245d899f85154137502" - integrity sha512-dX8KdCWn7w0bTkkk3zKQpe9X8vsTRa5EM+1ffF313wCX9b6tGa9vujhEHCkSzKAbbE2tFV64CHZygE7rtlHdIA== +"@commitlint/load@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-12.1.4.tgz#e3c2dbc0e7d8d928f57a6878bd7219909fc0acab" + integrity sha512-Keszi0IOjRzKfxT+qES/n+KZyLrxy79RQz8wWgssCboYjKEp+wC+fLCgbiMCYjI5k31CIzIOq/16J7Ycr0C0EA== dependencies: - "@commitlint/execute-rule" "^12.0.1" - "@commitlint/resolve-extends" "^12.0.1" - "@commitlint/types" "^12.0.1" + "@commitlint/execute-rule" "^12.1.4" + "@commitlint/resolve-extends" "^12.1.4" + "@commitlint/types" "^12.1.4" chalk "^4.0.0" cosmiconfig "^7.0.0" lodash "^4.17.19" resolve-from "^5.0.0" -"@commitlint/message@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-12.0.1.tgz#caff6743db78c30a063809501cf4b835c3ce7fa6" - integrity sha512-fXuoxRC+NT1wEQi6p8oHfT7wvWIRgTk+udlRJnWTjmMpiYzVnMmmZfasdShirWr4TtxQtMyL+5DVgh7Y98kURw== +"@commitlint/message@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-12.1.4.tgz#3895edcc0709deca5945f3d55f5ea95a9f1f446d" + integrity sha512-6QhalEKsKQ/Y16/cTk5NH4iByz26fqws2ub+AinHPtM7Io0jy4e3rym9iE+TkEqiqWZlUigZnTwbPvRJeSUBaA== -"@commitlint/parse@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-12.0.1.tgz#ba8641f53e15b523808ba2eaa48c1bf0129c91c4" - integrity sha512-7oEGASmzBnHir5jSIR7KephXrKh7rIi9a6RpH1tOT+CIENYvhe8EDtIy29qMt+RLa2LlaPF7YrAgaJRfzG0YDQ== +"@commitlint/parse@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-12.1.4.tgz#ba03d54d24ef84f6fd2ff31c5e9998b22d7d0aa1" + integrity sha512-yqKSAsK2V4X/HaLb/yYdrzs6oD/G48Ilt0EJ2Mp6RJeWYxG14w/Out6JrneWnr/cpzemyN5hExOg6+TB19H/Lw== dependencies: - "@commitlint/types" "^12.0.1" + "@commitlint/types" "^12.1.4" conventional-changelog-angular "^5.0.11" conventional-commits-parser "^3.0.0" -"@commitlint/read@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-12.0.1.tgz#41f3295ed9f451d4c65223cd37ddd59ef714bddb" - integrity sha512-baa0YeD4QOctEuthLpExQSi9xPiw0kDPfUVHqp8I88iuIXJECeS8S1+1GBiz89e8dLN9zmEE+sN9vtJHdAp9YA== +"@commitlint/read@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-12.1.4.tgz#552fda42ef185d5b578beb6f626a5f8b282de3a6" + integrity sha512-TnPQSJgD8Aod5Xeo9W4SaYKRZmIahukjcCWJ2s5zb3ZYSmj6C85YD9cR5vlRyrZjj78ItLUV/X4FMWWVIS38Jg== dependencies: - "@commitlint/top-level" "^12.0.1" - "@commitlint/types" "^12.0.1" + "@commitlint/top-level" "^12.1.4" + "@commitlint/types" "^12.1.4" fs-extra "^9.0.0" git-raw-commits "^2.0.0" -"@commitlint/resolve-extends@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-12.0.1.tgz#77509f386e08bd30262ec9a75c783d8f4f028fd2" - integrity sha512-Mvg0GDi/68Cqw893ha8uhxE8myHfPmiSSSi7d1x4VJNR4hoS37lBdX89kyx4i9NPmLfviY2cUJKTyK8ZrFznZw== +"@commitlint/resolve-extends@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-12.1.4.tgz#e758ed7dcdf942618b9f603a7c28a640f6a0802a" + integrity sha512-R9CoUtsXLd6KSCfsZly04grsH6JVnWFmVtWgWs1KdDpdV+G3TSs37tColMFqglpkx3dsWu8dsPD56+D9YnJfqg== dependencies: import-fresh "^3.0.0" lodash "^4.17.19" resolve-from "^5.0.0" resolve-global "^1.0.0" -"@commitlint/rules@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-12.0.1.tgz#1c81345f468597656141338a493d5e426e44dab9" - integrity sha512-A5O0ubNGugZR9WWxk5IVOLo07lpdUwhG5WkAW2lYpgZ7Z/2U4PLob9b4Ih1eHbQu+gnVeFr91k7F0DrpM7B8EQ== +"@commitlint/rules@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-12.1.4.tgz#0e141b08caa3d7bdc48aa784baa8baff3efd64db" + integrity sha512-W8m6ZSjg7RuIsIfzQiFHa48X5mcPXeKT9yjBxVmjHvYfS2FDBf1VxCQ7vO0JTVIdV4ohjZ0eKg/wxxUuZHJAZg== dependencies: - "@commitlint/ensure" "^12.0.1" - "@commitlint/message" "^12.0.1" - "@commitlint/to-lines" "^12.0.1" - "@commitlint/types" "^12.0.1" + "@commitlint/ensure" "^12.1.4" + "@commitlint/message" "^12.1.4" + "@commitlint/to-lines" "^12.1.4" + "@commitlint/types" "^12.1.4" -"@commitlint/to-lines@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-12.0.1.tgz#586d89b9f9ff99ef93b3c8aa3d77faffbe3ffedc" - integrity sha512-XwcJ1jY7x2fhudzbGMpNQkTSMVrxWrI8bRMbVe3Abuu7RfYpFf7VXAlhtnLfxBoagaK7RxjC2+eRidp/3txQBg== +"@commitlint/to-lines@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-12.1.4.tgz#caa582dbf121f377a0588bb64e25c4854843cd25" + integrity sha512-TParumvbi8bdx3EdLXz2MaX+e15ZgoCqNUgqHsRLwyqLUTRbqCVkzrfadG1UcMQk8/d5aMbb327ZKG3Q4BRorw== -"@commitlint/top-level@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-12.0.1.tgz#9c7efd319a4f8d29001f011ba8b0e21fad6044f6" - integrity sha512-rHdgt7U24GEau2/9i2vEAbksxkBRiVjHj5ECFL5dd0AJOIvaK++vMg4EF/ME0X/1yd9qVTHTNOl2Q4tTFK7VBQ== +"@commitlint/top-level@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-12.1.4.tgz#96d5c715bfc1bdf86dfcf11b67fc2cf7658c7a6e" + integrity sha512-d4lTJrOT/dXlpY+NIt4CUl77ciEzYeNVc0VFgUQ6VA+b1rqYD2/VWFjBlWVOrklxtSDeKyuEhs36RGrppEFAvg== dependencies: find-up "^5.0.0" -"@commitlint/types@^12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-12.0.1.tgz#04a0cbb8aa56b7c004f8939c2d1ef8892ec68327" - integrity sha512-FsNDMV0W7D19/ZbR412klpqAilXASx75Neqh7jPtK278IEwdukOg3vth1r5kTm+BjDScM7wMUEOwIW3NNfAtwg== +"@commitlint/types@^12.1.4": + version "12.1.4" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-12.1.4.tgz#9618a5dc8991fb58e6de6ed89d7bf712fa74ba7e" + integrity sha512-KRIjdnWNUx6ywz+SJvjmNCbQKcKP6KArhjZhY2l+CWKxak0d77SOjggkMwFTiSgLODOwmuLTbarR2ZfWPiPMlw== dependencies: chalk "^4.0.0" "@craco/craco@^6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-6.1.1.tgz#0233b28d6896b6560379f64b608d3c888874e9fa" - integrity sha512-4irfOM8RgYNhFJzAXyIuM8CZLju2Jh9GdOem8uqM2/cI2xPulQSxZKU/9q3uiSbFUJfQLi3pomVKii6KzWLu3Q== + version "6.1.2" + resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-6.1.2.tgz#30e45288e4609ac6b8cf828085b34acebdc60e69" + integrity sha512-GlQZn+g+yNlaDvIL5m6mcCoBGyFDwO4kkNx3fNFf98wuldkdWyBFoQbtOFOIb4gvkTh4VntOOxtJEoZfKs7XXw== dependencies: cross-spawn "^7.0.0" lodash "^4.17.15" @@ -1480,10 +1522,10 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@eslint/eslintrc@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" - integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== +"@eslint/eslintrc@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.1.tgz#442763b88cecbe3ee0ec7ca6d6dd6168550cbf14" + integrity sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -1731,9 +1773,9 @@ chalk "^4.0.0" "@loadable/component@^5.14.1": - version "5.14.1" - resolved "https://registry.yarnpkg.com/@loadable/component/-/component-5.14.1.tgz#cacd807162430bb85ae085945318027a600adc85" - integrity sha512-UQBZfZrp1FLTf8RNhljXNHFNY4QhAA1L2+GOEeABBFre9TD0aFyQh3Sai5QxcOfy+FTbjIfti5iHaNRR7yUzEQ== + version "5.15.0" + resolved "https://registry.yarnpkg.com/@loadable/component/-/component-5.15.0.tgz#48b9524237be553f48b158f8c9152593f3f3fded" + integrity sha512-g63rQzypPOZi0BeGsK4ST2MYhsFR+i7bhL8k/McUoWDNMDuTTdUlQ2GACKxqh5sI/dNC/6nVoPrycMnSylnAgQ== dependencies: "@babel/runtime" "^7.7.7" hoist-non-react-statics "^3.3.1" @@ -1833,20 +1875,20 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@sindresorhus/is@^2.0.0", "@sindresorhus/is@^2.1.1": +"@sindresorhus/is@^2.0.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.1.tgz#ceff6a28a5b4867c2dd4a1ba513de278ccbe8bb1" integrity sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg== "@sindresorhus/is@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" - integrity sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ== + version "4.0.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5" + integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g== "@sinonjs/commons@^1.7.0": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" - integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" @@ -1864,6 +1906,15 @@ dependencies: "@types/graphlib" "^2" +"@snyk/cloud-config-parser@^1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@snyk/cloud-config-parser/-/cloud-config-parser-1.9.2.tgz#e6c8e575db8527b33cf1ba766f86e1b3414cf6e1" + integrity sha512-m8Y2+3l4fxj96QMrTfiCEaXgCpDkCkJIX/5wv0V0RHuxpUiyh+KxC2yJ8Su4wybBj6v6hB9hB7h5/L+Gy4V4PA== + dependencies: + esprima "^4.0.1" + tslib "^1.10.0" + yaml-js "^0.3.0" + "@snyk/cocoapods-lockfile-parser@3.6.2": version "3.6.2" resolved "https://registry.yarnpkg.com/@snyk/cocoapods-lockfile-parser/-/cocoapods-lockfile-parser-3.6.2.tgz#803ae9466f408c48ba7c5a8ec51b9dbac6f633b3" @@ -1874,15 +1925,16 @@ js-yaml "^3.13.1" tslib "^1.10.0" -"@snyk/code-client@3.1.5": - version "3.1.5" - resolved "https://registry.yarnpkg.com/@snyk/code-client/-/code-client-3.1.5.tgz#019ef3b4d2f53f02f890d2df933fc7c2cf5cf4a5" - integrity sha512-bJb00zZ7956MzIjW/4DPaMolk2/r7eox+5Bvq0bpcu1NFUFYYQPZeEPsPgh5YzK4te2v6W5hZBtjUUNIY+AQYg== +"@snyk/code-client@3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@snyk/code-client/-/code-client-3.5.1.tgz#d61684ced448de53c4c15b3d9f4b7ab83d7a0483" + integrity sha512-hiDIs1tAuObQr8GwebUT1OH1S27odf23HArOHlcz/ddVHaZrRxreF64sflS4urdIxKVK39AYgMpc5M/QD0cgOg== dependencies: "@deepcode/dcignore" "^1.0.2" "@snyk/fast-glob" "^3.2.6-patch" "@types/flat-cache" "^2.0.0" "@types/lodash.chunk" "^4.2.6" + "@types/lodash.difference" "^4.5.6" "@types/lodash.omit" "^4.5.6" "@types/lodash.union" "^4.6.6" "@types/micromatch" "^4.0.1" @@ -1891,6 +1943,7 @@ axios "^0.21.1" ignore "^5.1.8" lodash.chunk "^4.2.0" + lodash.difference "^4.5.0" lodash.omit "^4.5.0" lodash.union "^4.6.0" micromatch "^4.0.2" @@ -1907,7 +1960,7 @@ lodash.invert "^4.3.0" lodash.isempty "^4.4.0" -"@snyk/dep-graph@^1.19.3", "@snyk/dep-graph@^1.21.0", "@snyk/dep-graph@^1.23.0", "@snyk/dep-graph@^1.23.1", "@snyk/dep-graph@^1.27.1": +"@snyk/dep-graph@^1.19.3", "@snyk/dep-graph@^1.21.0", "@snyk/dep-graph@^1.23.0", "@snyk/dep-graph@^1.23.1", "@snyk/dep-graph@^1.27.1", "@snyk/dep-graph@^1.28.0": version "1.28.0" resolved "https://registry.yarnpkg.com/@snyk/dep-graph/-/dep-graph-1.28.0.tgz#d68c0576cb3562c6e819ca8a8c7ac29ee11d9776" integrity sha512-Oup9nAvb558jdNvbZah/vaBtOtCcizkdeS+OBQeBIqIffyer4mc4juSn4b1SFjCpu7AG7piio8Lj8k1B9ps6Tg== @@ -1953,6 +2006,34 @@ micromatch "^4.0.2" picomatch "^2.2.1" +"@snyk/fix-pipenv-pipfile@0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@snyk/fix-pipenv-pipfile/-/fix-pipenv-pipfile-0.3.5.tgz#762d1d01f5dac95cad0ff39e7205aa09e3d19483" + integrity sha512-Kqe9wqUrSSGB0+QFrJjCy5ub7bNg10F5I/avJK95RY/2g9cXpQnkdkTexRmVdOl+IF5z3JBXRjBnIQb6buvp6w== + dependencies: + bottleneck "2.19.5" + debug "4.3.1" + source-map-support "^0.5.16" + tslib "^1.10.0" + +"@snyk/fix@1.601.0": + version "1.601.0" + resolved "https://registry.yarnpkg.com/@snyk/fix/-/fix-1.601.0.tgz#ff16c67e7e5643be16c6ac092d9de1ba162ce7f3" + integrity sha512-0Fz0nC547Qkg0FGpmvzDIPrrXvisQN6c07JM0RReM8Xb47p1o51O/MPsWdHIFJasIT5HkshyOaV5rjGQmfwHtQ== + dependencies: + "@snyk/dep-graph" "^1.21.0" + "@snyk/fix-pipenv-pipfile" "0.3.5" + bottleneck "2.19.5" + chalk "4.1.0" + child_process "1.0.2" + debug "^4.3.1" + lodash.groupby "4.6.0" + lodash.orderby "^4.6.0" + lodash.sortby "^4.7.0" + ora "5.4.0" + p-map "^4.0.0" + strip-ansi "6.0.0" + "@snyk/gemfile@1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@snyk/gemfile/-/gemfile-1.2.0.tgz#919857944973cce74c650e5428aaf11bcd5c0457" @@ -2023,10 +2104,10 @@ strip-ansi "^6.0.0" through "^2.3.6" -"@snyk/java-call-graph-builder@1.19.1": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@snyk/java-call-graph-builder/-/java-call-graph-builder-1.19.1.tgz#1d579d782df3bb5f9d5171cc35180596cd90aa8b" - integrity sha512-bxjHef5Qm3pNc+BrFlxMudmSSbOjA395ZqBddc+dvsFHoHeyNbiY56Y1JSGUlTgjRM+PKNPBiCuELTSMaROeZg== +"@snyk/java-call-graph-builder@1.20.0": + version "1.20.0" + resolved "https://registry.yarnpkg.com/@snyk/java-call-graph-builder/-/java-call-graph-builder-1.20.0.tgz#ffca734cf7ce276a69277963149358190eaac3e5" + integrity sha512-NX8bpIu7oG5cuSSm6WvtxqcCuJs2gRjtKhtuSeF1p5TYXyESs3FXQ0nHjfY90LiyTTc+PW/UBq6SKbBA6bCBww== dependencies: "@snyk/graphlib" "2.1.9-patch.3" ci-info "^2.0.0" @@ -2042,10 +2123,10 @@ tslib "^1.9.3" xml-js "^1.6.11" -"@snyk/java-call-graph-builder@1.20.0": - version "1.20.0" - resolved "https://registry.yarnpkg.com/@snyk/java-call-graph-builder/-/java-call-graph-builder-1.20.0.tgz#ffca734cf7ce276a69277963149358190eaac3e5" - integrity sha512-NX8bpIu7oG5cuSSm6WvtxqcCuJs2gRjtKhtuSeF1p5TYXyESs3FXQ0nHjfY90LiyTTc+PW/UBq6SKbBA6bCBww== +"@snyk/java-call-graph-builder@1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@snyk/java-call-graph-builder/-/java-call-graph-builder-1.21.0.tgz#0b0b129c2547d54a3d8ab4d4b897e008033179b0" + integrity sha512-i0c4N0+pYjpXEgqAkFniM3Q9YANvy+RtbbkQMPIvdEw41+XJISfEHzZ968ZmGWcoi480cgo5t9oxZEadFuHzyg== dependencies: "@snyk/graphlib" "2.1.9-patch.3" ci-info "^2.0.0" @@ -2061,6 +2142,14 @@ tslib "^1.9.3" xml-js "^1.6.11" +"@snyk/mix-parser@^1.1.1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@snyk/mix-parser/-/mix-parser-1.3.2.tgz#930de1d9c3a91e20660751f78c3e6f6a88ac5b2b" + integrity sha512-0Aq9vcgmjH0d9Gk5q0k6l4ZOvSHPf6/BCQGDVOpKp0hwOkXWnpDOLLPxL+uBCktuH9zTYQFB0aTk91kQImZqmA== + dependencies: + "@snyk/dep-graph" "^1.28.0" + tslib "^2.0.0" + "@snyk/rpm-parser@^2.0.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@snyk/rpm-parser/-/rpm-parser-2.2.1.tgz#b61ccf5478684b203576bd2be68de434ccbb0069" @@ -2089,13 +2178,25 @@ tar-stream "^2.1.2" tmp "^0.1.0" +"@snyk/snyk-hex-plugin@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@snyk/snyk-hex-plugin/-/snyk-hex-plugin-1.1.4.tgz#4a5b1684cecc1a557ec1a9f5f8646683ae89f0da" + integrity sha512-kLfFGckSmyKe667UGPyWzR/H7/Trkt4fD8O/ktElOx1zWgmivpLm0Symb4RCfEmz9irWv+N6zIKRrfSNdytcPQ== + dependencies: + "@snyk/dep-graph" "^1.28.0" + "@snyk/mix-parser" "^1.1.1" + debug "^4.3.1" + tmp "^0.0.33" + tslib "^2.0.0" + upath "2.0.1" + "@sumup/circuit-ui@^2.2.2": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@sumup/circuit-ui/-/circuit-ui-2.4.0.tgz#4b318d8e8724102499f3a00839ba92a1826c31b4" - integrity sha512-Hf/Qg1CT/HIAx/pnmyTM03+q7hoM6qON+JG0LvAVbwTLp86t/AH6DQBDEk/dFUxhjkYNMYF+ctV1XjKvC/aQ8w== + version "2.5.0" + resolved "https://registry.yarnpkg.com/@sumup/circuit-ui/-/circuit-ui-2.5.0.tgz#7190737e8d5aa4071a341f83b551f44f19152d9a" + integrity sha512-tlC38C3demrWNKfYgDjGcSbnY9HQOPSvSZeQN09VW54OMa0JQK3XwB+nPZxykrjOLhFKN7dmYdtLXHsqGYSKvw== dependencies: cross-spawn "^7.0.3" - jscodeshift "^0.11.0" + jscodeshift "^0.12.0" lodash "^4.17.11" moment "^2.24.0" no-scroll "^2.1.1" @@ -2115,16 +2216,16 @@ tti-polyfill "^0.2.2" "@sumup/design-tokens@^2.0.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@sumup/design-tokens/-/design-tokens-2.1.1.tgz#72f278f721de4e4852fe60529b30c9d04d0cfc13" - integrity sha512-sUTJDm/WUQeXZUS77pFnE3ChwcXZhTA812ju3kjAmlsUw79SMbbWUzQuRzG7PSiqv4czHyT2TGBehe14KuPIpQ== + version "2.1.2" + resolved "https://registry.yarnpkg.com/@sumup/design-tokens/-/design-tokens-2.1.2.tgz#f9651b655b745a946a0c3859f7417948e17f75d2" + integrity sha512-gkv6ca2Szse/ER+zot/GWI8tNRv1wusA7GnH9t9QnzwGe2i7QGo0lOIX5d55kog8tkdxMXm95llISyTWqZOFBA== dependencies: prop-types "^15.7.2" "@sumup/icons@^1.2.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@sumup/icons/-/icons-1.6.0.tgz#4f6f867a79d65a3a8050220d012566a8fdbf832a" - integrity sha512-yK3M/vO2cDIxND8/rnixYofDaGPqWE9ICBaPGtjEOvYto8CRYkBuOmfq/2m/lGqc+awSwr5Jwolm4b3m40wQhQ== + version "1.6.2" + resolved "https://registry.yarnpkg.com/@sumup/icons/-/icons-1.6.2.tgz#f51d227e9af3af53013bce927039d1eca167e679" + integrity sha512-PlTy/GzyNUafNdXbed753q3zk22PpHuVHKAhfzqpAGYgNc0fPQoslT+7PJh+w29dV3ponvlUQi4qwjqJ8X+aDg== "@sumup/intl@^1.1.3": version "1.2.0" @@ -2259,9 +2360,9 @@ defer-to-connect "^2.0.0" "@testing-library/dom@^7.28.1": - version "7.30.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.30.1.tgz#07b6f3ccd7f1f1e34ab0406932073e2971817f3d" - integrity sha512-RQUvqqq2lxTCOffhSNxpX/9fCoR+nwuQPmG5uhuuEH5KBAzNf2bK3OzBoWjm5zKM78SLjnGRAKt8hRjQA4E46A== + version "7.31.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.0.tgz#938451abd3ca27e1b69bb395d4a40759fd7f5b3b" + integrity sha512-0X7ACg4YvTRDFMIuTOEj6B4NpN7i3F/4j5igOcTI5NC5J+N4TribNdErCHOZF1LBWhhcyfwxelVwvoYNMUXTOA== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -2273,9 +2374,9 @@ pretty-format "^26.6.2" "@testing-library/jest-dom@^5.11.5": - version "5.11.10" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.11.10.tgz#1cd90715023e1627f5ed26ab3b38e6f22d77046c" - integrity sha512-FuKiq5xuk44Fqm0000Z9w0hjOdwZRNzgx7xGGxQYepWFZy+OYUMOT/wPI4nLYXCaVltNVpU1W/qmD88wLWDsqQ== + version "5.12.0" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.12.0.tgz#6a5d340b092c44b7bce17a4791b47d9bc2c61443" + integrity sha512-N9Y82b2Z3j6wzIoAqajlKVF1Zt7sOH0pPee0sUHXHc5cv2Fdn23r+vpWm0MBBoGJtPOly5+Bdx1lnc3CD+A+ow== dependencies: "@babel/runtime" "^7.9.2" "@types/testing-library__jest-dom" "^5.9.1" @@ -2295,9 +2396,9 @@ "@types/testing-library__react-hooks" "^3.4.0" "@testing-library/react@^11.1.0": - version "11.2.5" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.5.tgz#ae1c36a66c7790ddb6662c416c27863d87818eb9" - integrity sha512-yEx7oIa/UWLe2F2dqK0FtMF9sJWNXD+2PPtp39BvE0Kh9MJ9Kl0HrZAgEuhUJR+Lx8Di6Xz+rKwSdEPY2UV8ZQ== + version "11.2.7" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-11.2.7.tgz#b29e2e95c6765c815786c0bc1d5aed9cb2bf7818" + integrity sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^7.28.1" @@ -2309,11 +2410,6 @@ dependencies: "@babel/runtime" "^7.12.5" -"@types/anymatch@*": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== - "@types/aria-query@^4.2.0": version "4.2.1" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" @@ -2353,9 +2449,9 @@ "@babel/types" "^7.3.0" "@types/bluebird@^3.5.32": - version "3.5.33" - resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.33.tgz#d79c020f283bd50bd76101d7d300313c107325fc" - integrity sha512-ndEo1xvnYeHxm7I/5sF6tBvnsA4Tdi3zj1keRKRs12SP+2ye2A27NDJ1B6PqkfMbGAcT+mqQVqbZRIrhfOp5PQ== + version "3.5.35" + resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.35.tgz#3964c48372bf62d60616d8673dd77a9719ebac9b" + integrity sha512-2WeeXK7BuQo7yPI4WGOBum90SzF/f8rqlvpaXx4rjeTmNssGRDHWf7fgDUH90xMB3sUOu716fUK5d+OVx0+ncQ== "@types/braces@*": version "3.0.0" @@ -2378,16 +2474,16 @@ "@types/responselike" "*" "@types/chart.js@^2.9.27": - version "2.9.31" - resolved "https://registry.yarnpkg.com/@types/chart.js/-/chart.js-2.9.31.tgz#e8ebc7ed18eb0e5114c69bd46ef8e0037c89d39d" - integrity sha512-hzS6phN/kx3jClk3iYqEHNnYIRSi4RZrIGJ8CDLjgatpHoftCezvC44uqB3o3OUm9ftU1m7sHG8+RLyPTlACrA== + version "2.9.32" + resolved "https://registry.yarnpkg.com/@types/chart.js/-/chart.js-2.9.32.tgz#b17d9a8c41ad348183a2ce041ebdeef892998251" + integrity sha512-d45JiRQwEOlZiKwukjqmqpbqbYzUX2yrXdH9qVn6kXpPDsTYCo6YbfFOlnUaJ8S/DhJwbBJiLsMjKpW5oP8B2A== dependencies: moment "^2.10.2" "@types/cheerio@*", "@types/cheerio@^0.22.22": - version "0.22.28" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.28.tgz#90808aabb44fec40fa2950f4c72351e3e4eb065b" - integrity sha512-ehUMGSW5IeDxJjbru4awKYMlKGmo1wSSGUVqXtYwlgmUM8X1a0PZttEIm6yEY7vHsY/hh6iPnklF213G0UColw== + version "0.22.29" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.29.tgz#7115e9688bfc9e2f2730327c674b3d6a7e753e09" + integrity sha512-rNX1PsrDPxiNiyLnRKiW2NXHJFHqx0Fl3J2WsZq0MTBspa/FgwlqhXJE2crIcc+/2IglLHtSWw7g053oUR8fOg== dependencies: "@types/node" "*" @@ -2396,6 +2492,11 @@ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== +"@types/emscripten@^1.38.0": + version "1.39.4" + resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.4.tgz#d61990c0cee72c4e475de737a140b51fe925a2c8" + integrity sha512-k3LLVMFrdNA9UCvMDPWMbFrGPNb+GcPyw29ktJTo1RCN7RmxFG5XzPZcPKRlnLuLT/FRm8wp4ohvDwNY7GlROQ== + "@types/enzyme-adapter-react-16@^1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.6.tgz#8aca7ae2fd6c7137d869b6616e696d21bb8b0cec" @@ -2412,9 +2513,9 @@ "@types/react" "*" "@types/eslint@^7.2.6": - version "7.2.7" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.7.tgz#f7ef1cf0dceab0ae6f9a976a0a9af14ab1baca26" - integrity sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q== + version "7.2.11" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.11.tgz#180b58f5bb7d7376e39d22496e2b08901aa52fd2" + integrity sha512-WYhv//5K8kQtsSc9F1Kn2vHzhYor6KpwPbARH7hwYe3C3ETD0EVx/3P5qQybUoaBEuUa9f/02JjBiXFWalYUmw== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2489,9 +2590,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@*", "@types/jest@^26.0.15": - version "26.0.22" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.22.tgz#8308a1debdf1b807aa47be2838acdcd91e88fbe6" - integrity sha512-eeWwWjlqxvBxc4oQdkueW5OF/gtfSceKk4OnOAGlUSwS/liBRtZppbJuz1YkgbrbfGOoeBHun9fOvXnjNwrSOw== + version "26.0.23" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.23.tgz#a1b7eab3c503b80451d019efb588ec63522ee4e7" + integrity sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA== dependencies: jest-diff "^26.0.0" pretty-format "^26.0.0" @@ -2539,6 +2640,13 @@ dependencies: "@types/lodash" "*" +"@types/lodash.difference@^4.5.6": + version "4.5.6" + resolved "https://registry.yarnpkg.com/@types/lodash.difference/-/lodash.difference-4.5.6.tgz#41ec5c4e684eeacf543848a9a1b2a4856ccf9853" + integrity sha512-wXH53r+uoUCrKhmh7S5Gf6zo3vpsx/zH2R4pvkmDlmopmMTCROAUXDpPMXATGCWkCjE6ik3VZzZUxBgMjZho9Q== + dependencies: + "@types/lodash" "*" + "@types/lodash.omit@^4.5.6": version "4.5.6" resolved "https://registry.yarnpkg.com/@types/lodash.omit/-/lodash.omit-4.5.6.tgz#f2a9518259e481a48ff7ec423420fa8fd58933e2" @@ -2554,9 +2662,9 @@ "@types/lodash" "*" "@types/lodash@*": - version "4.14.168" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" - integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + version "4.14.170" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6" + integrity sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q== "@types/micromatch@^4.0.1": version "4.0.1" @@ -2576,14 +2684,19 @@ integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== "@types/node@*": - version "14.14.37" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" - integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== + version "15.6.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.6.0.tgz#f0ddca5a61e52627c9dcb771a6039d44694597bc" + integrity sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A== "@types/node@^12.0.0": - version "12.20.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" - integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== + version "12.20.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.13.tgz#e743bae112bd779ac9650f907197dd2caa7f0364" + integrity sha512-1x8W5OpxPq+T85OUsHRP6BqXeosKmeXRtjoF39STcdf/UWLqUsoehstZKOi0CunhVqHG17AyZgpj20eRVooK6A== + +"@types/node@^13.7.0": + version "13.13.52" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.52.tgz#03c13be70b9031baaed79481c0c0cfb0045e53f7" + integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -2618,9 +2731,9 @@ "@types/react" "*" "@types/react-dom@^17.0.3": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.3.tgz#7fdf37b8af9d6d40127137865bb3fff8871d7ee1" - integrity sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w== + version "17.0.5" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.5.tgz#df44eed5b8d9e0b13bb0cd38e0ea6572a1231227" + integrity sha512-ikqukEhH4H9gr4iJCmQVNzTB307kROe3XFfHAOTxOXPOw7lAoEXnM5KWTkzeANGL5Ce6ABfiMl/zJBYNi7ObmQ== dependencies: "@types/react" "*" @@ -2634,9 +2747,9 @@ "@types/react-router" "*" "@types/react-router@*": - version "5.1.13" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.13.tgz#051c0d229bd48ad90558a1db500708127cc512f7" - integrity sha512-ZIuaO9Yrln54X6elg8q2Ivp6iK6p4syPsefEYAhRDAoqNh48C8VYUmB9RkXjKSQAJSJV0mbIFCX7I4vZDcHrjg== + version "5.1.14" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.14.tgz#e0442f4eb4c446541ad7435d44a97f8fe6df40da" + integrity sha512-LAJpqYUaCTMT2anZheoidiIymt8MuX286zoVFPM3DVb23aQBH0mAkFvzpd4LKqiolV8bBtZWT5Qp7hClCNDENw== dependencies: "@types/history" "*" "@types/react" "*" @@ -2664,9 +2777,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^17.0.3": - version "17.0.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" - integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== + version "17.0.6" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.6.tgz#0ec564566302c562bf497d73219797a5e0297013" + integrity sha512-u/TtPoF/hrvb63LdukET6ncaplYsvCvmkceasx8oG84/ZCsoLxz9Z/raPBP4lTAiWW1Jb889Y9svHmv8R26dWw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2696,10 +2809,10 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== -"@types/semver@^7.3.4": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" - integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== +"@types/semver@^7.1.0", "@types/semver@^7.3.4": + version "7.3.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.6.tgz#e9831776f4512a7ba6da53e71c26e5fb67882d63" + integrity sha512-0caWDWmpCp0uifxFh+FaqK3CuZ2SkRR/ZRxAV5+zNdC3QVUi6wyOJnefhPvtNt8NQWXB5OA93BUvZsXpWat2Xw== "@types/source-list-map@*": version "0.1.2" @@ -2730,6 +2843,11 @@ dependencies: "@types/react-test-renderer" "*" +"@types/treeify@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/treeify/-/treeify-1.0.0.tgz#f04743cb91fc38254e8585d692bd92503782011c" + integrity sha512-ONpcZAEYlbPx4EtJwfTyCDQJGUpKf4sEcuySdCVjK5Fj/3vHp5HII1fqa1/+qrsLnpYELCQTfVW/awsGJePoIg== + "@types/uglify-js@*": version "3.13.0" resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124" @@ -2752,15 +2870,15 @@ source-map "^0.7.3" "@types/webpack@^4.41.8": - version "4.41.27" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.27.tgz#f47da488c8037e7f1b2dbf2714fbbacb61ec0ffc" - integrity sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA== + version "4.41.29" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.29.tgz#2e66c1de8223c440366469415c50a47d97625773" + integrity sha512-6pLaORaVNZxiB3FSHbyBiWM7QdazAWda1zvAq4SbZObZqHSDbWLi62iFdblVea6SK9eyBIVp5yHhKt/yNQdR7Q== dependencies: - "@types/anymatch" "*" "@types/node" "*" "@types/tapable" "^1" "@types/uglify-js" "*" "@types/webpack-sources" "*" + anymatch "^3.0.0" source-map "^0.6.0" "@types/yargs-parser@*": @@ -2776,12 +2894,12 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^4.5.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.19.0.tgz#56f8da9ee118fe9763af34d6a526967234f6a7f0" - integrity sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw== + version "4.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.24.0.tgz#03801ffc25b2af9d08f3dc9bccfc0b7ce3780d0f" + integrity sha512-qbCgkPM7DWTsYQGjx9RTuQGswi+bEt0isqDBeo+CKV0953zqI0Tp7CZ7Fi9ipgFA6mcQqF4NOVNwS/f2r6xShw== dependencies: - "@typescript-eslint/experimental-utils" "4.19.0" - "@typescript-eslint/scope-manager" "4.19.0" + "@typescript-eslint/experimental-utils" "4.24.0" + "@typescript-eslint/scope-manager" "4.24.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -2789,15 +2907,15 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.19.0", "@typescript-eslint/experimental-utils@^4.0.1": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.19.0.tgz#9ca379919906dc72cb0fcd817d6cb5aa2d2054c6" - integrity sha512-9/23F1nnyzbHKuoTqFN1iXwN3bvOm/PRIXSBR3qFAYotK/0LveEOHr5JT1WZSzcD6BESl8kPOG3OoDRKO84bHA== +"@typescript-eslint/experimental-utils@4.24.0", "@typescript-eslint/experimental-utils@^4.0.1": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.24.0.tgz#c23ead9de44b99c3a5fd925c33a106b00165e172" + integrity sha512-IwTT2VNDKH1h8RZseMH4CcYBz6lTvRoOLDuuqNZZoThvfHEhOiZPQCow+5El3PtyxJ1iDr6UXZwYtE3yZQjhcw== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.19.0" - "@typescript-eslint/types" "4.19.0" - "@typescript-eslint/typescript-estree" "4.19.0" + "@typescript-eslint/scope-manager" "4.24.0" + "@typescript-eslint/types" "4.24.0" + "@typescript-eslint/typescript-estree" "4.24.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" @@ -2813,32 +2931,32 @@ eslint-utils "^2.0.0" "@typescript-eslint/parser@^4.5.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.19.0.tgz#4ae77513b39f164f1751f21f348d2e6cb2d11128" - integrity sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA== + version "4.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.24.0.tgz#2e5f1cc78ffefe43bfac7e5659309a92b09a51bd" + integrity sha512-dj1ZIh/4QKeECLb2f/QjRwMmDArcwc2WorWPRlB8UNTZlY1KpTVsbX7e3ZZdphfRw29aTFUSNuGB8w9X5sS97w== dependencies: - "@typescript-eslint/scope-manager" "4.19.0" - "@typescript-eslint/types" "4.19.0" - "@typescript-eslint/typescript-estree" "4.19.0" + "@typescript-eslint/scope-manager" "4.24.0" + "@typescript-eslint/types" "4.24.0" + "@typescript-eslint/typescript-estree" "4.24.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.19.0.tgz#5e0b49eca4df7684205d957c9856f4e720717a4f" - integrity sha512-GGy4Ba/hLXwJXygkXqMzduqOMc+Na6LrJTZXJWVhRrSuZeXmu8TAnniQVKgj8uTRKe4igO2ysYzH+Np879G75g== +"@typescript-eslint/scope-manager@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.24.0.tgz#38088216f0eaf235fa30ed8cabf6948ec734f359" + integrity sha512-9+WYJGDnuC9VtYLqBhcSuM7du75fyCS/ypC8c5g7Sdw7pGL4NDTbeH38eJPfzIydCHZDoOgjloxSAA3+4l/zsA== dependencies: - "@typescript-eslint/types" "4.19.0" - "@typescript-eslint/visitor-keys" "4.19.0" + "@typescript-eslint/types" "4.24.0" + "@typescript-eslint/visitor-keys" "4.24.0" "@typescript-eslint/types@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== -"@typescript-eslint/types@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.19.0.tgz#5181d5d2afd02e5b8f149ebb37ffc8bd7b07a568" - integrity sha512-A4iAlexVvd4IBsSTNxdvdepW0D4uR/fwxDrKUa+iEY9UWvGREu2ZyB8ylTENM1SH8F7bVC9ac9+si3LWNxcBuA== +"@typescript-eslint/types@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.24.0.tgz#6d0cca2048cbda4e265e0c4db9c2a62aaad8228c" + integrity sha512-tkZUBgDQKdvfs8L47LaqxojKDE+mIUmOzdz7r+u+U54l3GDkTpEbQ1Jp3cNqqAU9vMUCBA1fitsIhm7yN0vx9Q== "@typescript-eslint/typescript-estree@3.10.1": version "3.10.1" @@ -2854,13 +2972,13 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/typescript-estree@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.19.0.tgz#8a709ffa400284ab72df33376df085e2e2f61147" - integrity sha512-3xqArJ/A62smaQYRv2ZFyTA+XxGGWmlDYrsfZG68zJeNbeqRScnhf81rUVa6QG4UgzHnXw5VnMT5cg75dQGDkA== +"@typescript-eslint/typescript-estree@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.24.0.tgz#b49249679a98014d8b03e8d4b70864b950e3c90f" + integrity sha512-kBDitL/by/HK7g8CYLT7aKpAwlR8doshfWz8d71j97n5kUa5caHWvY0RvEUEanL/EqBJoANev8Xc/mQ6LLwXGA== dependencies: - "@typescript-eslint/types" "4.19.0" - "@typescript-eslint/visitor-keys" "4.19.0" + "@typescript-eslint/types" "4.24.0" + "@typescript-eslint/visitor-keys" "4.24.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" @@ -2874,12 +2992,12 @@ dependencies: eslint-visitor-keys "^1.1.0" -"@typescript-eslint/visitor-keys@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.19.0.tgz#cbea35109cbd9b26e597644556be4546465d8f7f" - integrity sha512-aGPS6kz//j7XLSlgpzU2SeTqHPsmRYxFztj2vPuMMFJXZudpRSehE3WCV+BaxwZFvfAqMoSd86TEuM0PQ59E/A== +"@typescript-eslint/visitor-keys@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.24.0.tgz#a8fafdc76cad4e04a681a945fbbac4e35e98e297" + integrity sha512-4ox1sjmGHIxjEDBnMCtWFFhErXtKA1Ec0sBpuz0fqf3P+g3JFGyTxxbF06byw0FRsPnnbq44cKivH7Ks1/0s6g== dependencies: - "@typescript-eslint/types" "4.19.0" + "@typescript-eslint/types" "4.24.0" eslint-visitor-keys "^2.0.0" "@webassemblyjs/ast@1.9.0": @@ -3037,11 +3155,103 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +"@yarnpkg/core@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-2.4.0.tgz#b5d8cc7ee2ddb022816c7afa3f83c3ee3d317c80" + integrity sha512-FYjcPNTfDfMKLFafQPt49EY28jnYC82Z2S7oMwLPUh144BL8v8YXzb4aCnFyi5nFC5h2kcrJfZh7+Pm/qvCqGw== + dependencies: + "@arcanis/slice-ansi" "^1.0.2" + "@types/semver" "^7.1.0" + "@types/treeify" "^1.0.0" + "@yarnpkg/fslib" "^2.4.0" + "@yarnpkg/json-proxy" "^2.1.0" + "@yarnpkg/libzip" "^2.2.1" + "@yarnpkg/parsers" "^2.3.0" + "@yarnpkg/pnp" "^2.3.2" + "@yarnpkg/shell" "^2.4.1" + binjumper "^0.1.4" + camelcase "^5.3.1" + chalk "^3.0.0" + ci-info "^2.0.0" + clipanion "^2.6.2" + cross-spawn "7.0.3" + diff "^4.0.1" + globby "^11.0.1" + got "^11.7.0" + json-file-plus "^3.3.1" + lodash "^4.17.15" + micromatch "^4.0.2" + mkdirp "^0.5.1" + p-limit "^2.2.0" + pluralize "^7.0.0" + pretty-bytes "^5.1.0" + semver "^7.1.2" + stream-to-promise "^2.2.0" + tar-stream "^2.0.1" + treeify "^1.1.0" + tslib "^1.13.0" + tunnel "^0.0.6" + +"@yarnpkg/fslib@^2.1.0", "@yarnpkg/fslib@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/fslib/-/fslib-2.4.0.tgz#a265b737cd089ef293ad964e06c143f5efd411a9" + integrity sha512-CwffYY9owtl3uImNOn1K4jl5iIb/L16a9UZ9Q3lkBARk6tlUsPrNFX00eoUlFcLn49TTfd3zdN6higloGCyncw== + dependencies: + "@yarnpkg/libzip" "^2.2.1" + tslib "^1.13.0" + +"@yarnpkg/json-proxy@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/json-proxy/-/json-proxy-2.1.0.tgz#362a161678cd7dda74b47b4fc848a2f1730d16cd" + integrity sha512-rOgCg2DkyviLgr80mUMTt9vzdf5RGOujQB26yPiXjlz4WNePLBshKlTNG9rKSoKQSOYEQcw6cUmosfOKDatrCw== + dependencies: + "@yarnpkg/fslib" "^2.1.0" + tslib "^1.13.0" + +"@yarnpkg/libzip@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@yarnpkg/libzip/-/libzip-2.2.1.tgz#61c9b8b2499ee6bd9c4fcbf8248f68e07bd89948" + integrity sha512-AYDJXrkzayoDd3ZlVgFJ+LyDX+Zj/cki3vxIpcYxejtgkl3aquVWOxlC0DD9WboBWsJFIP1MjrUbchLyh++/7A== + dependencies: + "@types/emscripten" "^1.38.0" + tslib "^1.13.0" + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== +"@yarnpkg/parsers@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-2.3.0.tgz#7b9564c6df02f4921d5cfe8287c4b648e93ea84b" + integrity sha512-qgz0QUgOvnhtF92kaluIhIIKBUHlYlHUBQxqh5v9+sxEQvUeF6G6PKiFlzo3E6O99XwvNEGpVu1xZPoSGyGscQ== + dependencies: + js-yaml "^3.10.0" + tslib "^1.13.0" + +"@yarnpkg/pnp@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@yarnpkg/pnp/-/pnp-2.3.2.tgz#9a052a06bf09c9f0b7c31e0867a7e725cb6401ed" + integrity sha512-JdwHu1WBCISqJEhIwx6Hbpe8MYsYbkGMxoxolkDiAeJ9IGEe08mQcbX1YmUDV1ozSWlm9JZE90nMylcDsXRFpA== + dependencies: + "@types/node" "^13.7.0" + "@yarnpkg/fslib" "^2.4.0" + tslib "^1.13.0" + +"@yarnpkg/shell@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@yarnpkg/shell/-/shell-2.4.1.tgz#abc557f8924987c9c382703e897433a82780265d" + integrity sha512-oNNJkH8ZI5uwu0dMkJf737yMSY1WXn9gp55DqSA5wAOhKvV5DJTXFETxkVgBQhO6Bow9tMGSpvowTMD/oAW/9g== + dependencies: + "@yarnpkg/fslib" "^2.4.0" + "@yarnpkg/parsers" "^2.3.0" + clipanion "^2.6.2" + cross-spawn "7.0.3" + fast-glob "^3.2.2" + micromatch "^4.0.2" + stream-buffers "^3.0.2" + tslib "^1.13.0" + JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -3106,9 +3316,9 @@ acorn@^7.0.0, acorn@^7.1.0, acorn@^7.1.1, acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" - integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== + version "8.2.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.2.4.tgz#caba24b08185c3b56e3168e97d15ed17f4d31fd0" + integrity sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg== address@1.1.2, address@^1.0.1: version "1.1.2" @@ -3123,20 +3333,6 @@ adjust-sourcemap-loader@3.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3181,9 +3377,9 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.0.1.tgz#dac101898a87f8ebb57fea69617e8096523c628c" - integrity sha512-46ZA4TalFcLLqX1dEU3dhdY38wAtDydJ4e7QQTVekLUTzXkb1LfqU6VOBXC/a9wiv4T094WURqJH6ZitF92Kqw== + version "8.5.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.5.0.tgz#695528274bcb5afc865446aa275484049a18ae4b" + integrity sha512-Y2l399Tt1AguU3BPRP9Fn4eN+Or+StUGWCUpbnFyXSo8NZ9S4uj+AG2pjs5apK+ZMOwYOz1+a+VKvKH7CudXgQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -3288,6 +3484,11 @@ any-observable@^0.5.1: resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.5.1.tgz#ab7d49ff64ebe6dd3ae26760a3f5a881e8db791e" integrity sha512-8zv01bgDOp9PTmRTNCAHTw64TFP2rvlX4LvtNJLachaXY+AjmIvLT47fABNPCiIe89hKiSCo2n5zmPqI9CElPA== +any-promise@^1.1.0, any-promise@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -3296,10 +3497,10 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3, 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== +anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -3329,6 +3530,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + aria-query@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -3357,11 +3563,6 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= - array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -3415,6 +3616,17 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.0.tgz#24d63e38983cdc6bf023a3c574b2f2a3f384c301" + integrity sha512-TfO1gz+tLm+Bswq0FBOXPqAchtCr2Rn48T8dLJoRFl8NoEosjZmzptmuo1X8aZBzZcqsR1W8U761tjACJtngTQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.5" + array.prototype.find@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.1.tgz#3baca26108ca7affb08db06bf0be6cb3115a969c" @@ -3423,7 +3635,7 @@ array.prototype.find@^2.1.1: define-properties "^1.1.3" es-abstract "^1.17.4" -array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3: +array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== @@ -3497,7 +3709,7 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -ast-types@0.14.2, ast-types@0.x.x: +ast-types@0.14.2: version "0.14.2" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== @@ -3580,9 +3792,9 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axe-core@^4.0.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.3.tgz#64a4c85509e0991f5168340edc4bedd1ceea6966" - integrity sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ== + version "4.2.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.2.1.tgz#2e50bcf10ee5b819014f6e342e41e45096239e34" + integrity sha512-evY7DN8qSIbsW2H/TWQ1bX3sXN1d4MNb5Vb4n7BzPuCwRHdkZ1H2eNLuSh73EoQqkGKUtju2G2HCcjCfhvZIAA== axios@^0.21.0, axios@^0.21.1: version "0.21.1" @@ -3703,29 +3915,29 @@ babel-plugin-named-asset-import@^0.3.7: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== -babel-plugin-polyfill-corejs2@^0.1.4: - version "0.1.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz#a2c5c245f56c0cac3dbddbf0726a46b24f0f81d1" - integrity sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA== +babel-plugin-polyfill-corejs2@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.1.tgz#ae2cf6d6f1aa7c0edcf04a25180e8856a6d1184f" + integrity sha512-hXGSPbr6IbjeMyGew+3uGIAkRjBFSOJ9FLDZNOfHuyJZCcoia4nd/72J0bSgvfytcVfUcP/dxEVcUhVJuQRtSw== dependencies: - "@babel/compat-data" "^7.13.0" - "@babel/helper-define-polyfill-provider" "^0.1.5" + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.1" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.1.3: - version "0.1.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" - integrity sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== +babel-plugin-polyfill-corejs3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.1.tgz#786f40218040030f0edecfd48e6e59f1ee9bef53" + integrity sha512-WZCqF3DLUhdTD/P381MDJfuP18hdCZ+iqJ+wHtzhWENpsiof284JJ1tMQg1CE+hfCWyG48F7e5gDMk2c3Laz7w== dependencies: - "@babel/helper-define-polyfill-provider" "^0.1.5" - core-js-compat "^3.8.1" + "@babel/helper-define-polyfill-provider" "^0.2.1" + core-js-compat "^3.9.1" -babel-plugin-polyfill-regenerator@^0.1.2: - version "0.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz#0fe06a026fe0faa628ccc8ba3302da0a6ce02f3f" - integrity sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg== +babel-plugin-polyfill-regenerator@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.1.tgz#ca9595d7d5f3afefec2d83126148b90db751a091" + integrity sha512-T3bYyL3Sll2EtC94v3f+fA8M28q7YPTOZdB++SRHjvYZTvtd+WorMUq3tDTD4Q7Kjk1LG0gGromslKjcO5p2TA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.1.5" + "@babel/helper-define-polyfill-provider" "^0.2.1" babel-plugin-syntax-jsx@^6.18.0: version "6.18.0" @@ -3811,9 +4023,9 @@ babylon@^6.18.0: integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== 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== base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" @@ -3877,7 +4089,12 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.0.3: +binjumper@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/binjumper/-/binjumper-0.1.4.tgz#4acc0566832714bd6508af6d666bd9e5e21fc7f8" + integrity sha512-Gdxhj+U295tIM6cO4bJO1jsvSjBVHNpj2o/OwW7pqDEtaqF6KdOxjtbo93jMMKAkP7+u09+bV8DhSqjIv4qR3w== + +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -3934,24 +4151,20 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" +boolean@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.4.tgz#aa1df8749af41d7211b66b4eee584722ff428c27" + integrity sha512-5pyOr+w2LNN72F2mAq6J0ckHUfJYSgRKma7e/wlcMMhgOLV9OI0ERhERYXxUqo+dPyVxcbXKy9n+wg13+LpNnA== + +bottleneck@2.19.5: + version "2.19.5" + resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== boxen@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.0.tgz#64fe9b16066af815f51057adcc800c3730120854" - integrity sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b" + integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA== dependencies: ansi-align "^3.0.0" camelcase "^6.2.0" @@ -4086,16 +4299,16 @@ browserslist@4.14.2: escalade "^3.0.2" node-releases "^1.1.61" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.6.2, browserslist@^4.6.4: - version "4.16.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" - integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.6.2, browserslist@^4.6.4: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== dependencies: - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - electron-to-chromium "^1.3.649" + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" escalade "^3.1.1" - node-releases "^1.1.70" + node-releases "^1.1.71" bs-logger@0.x: version "0.2.6" @@ -4190,9 +4403,9 @@ cacache@^12.0.2: y18n "^4.0.0" cacache@^15.0.5: - version "15.0.6" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.6.tgz#65a8c580fda15b59150fb76bf3f3a8e45d583099" - integrity sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w== + version "15.1.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.1.0.tgz#164c2f857ee606e4cc793c63018fefd0ea5eba7b" + integrity sha512-mfx0C+mCfWjD1PnwQ9yaOrwG1ou9FkKnx0SvzUHWdFt7r7GaRtzT+9M8HAvLu62zIHtnpQ/1m93nWNDCckJGXQ== dependencies: "@npmcli/move-file" "^1.0.1" chownr "^2.0.0" @@ -4353,10 +4566,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001181: - version "1.0.30001204" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz#256c85709a348ec4d175e847a3b515c66e79f2aa" - integrity sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001219: + version "1.0.30001228" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" + integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== capture-exit@^2.0.0: version "2.0.0" @@ -4384,6 +4597,14 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -4403,10 +4624,10 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -"chalk@^3.0.0 || ^4.0.0", chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +"chalk@^3.0.0 || ^4.0.0", chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -4449,35 +4670,40 @@ check-types@^11.1.1: resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== -cheerio-select-tmp@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646" - integrity sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ== +cheerio-select@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.4.0.tgz#3a16f21e37a2ef0f211d6d1aa4eff054bb22cdc9" + integrity sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew== dependencies: - css-select "^3.1.2" - css-what "^4.0.0" - domelementtype "^2.1.0" - domhandler "^4.0.0" - domutils "^2.4.4" + css-select "^4.1.2" + css-what "^5.0.0" + domelementtype "^2.2.0" + domhandler "^4.2.0" + domutils "^2.6.0" cheerio@^1.0.0-rc.3: - version "1.0.0-rc.5" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.5.tgz#88907e1828674e8f9fee375188b27dadd4f0fa2f" - integrity sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw== - dependencies: - cheerio-select-tmp "^0.1.0" - dom-serializer "~1.2.0" - domhandler "^4.0.0" - entities "~2.1.0" - htmlparser2 "^6.0.0" - parse5 "^6.0.0" - parse5-htmlparser2-tree-adapter "^6.0.0" + version "1.0.0-rc.9" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.9.tgz#a3ae6b7ce7af80675302ff836f628e7cb786a67f" + integrity sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng== + dependencies: + cheerio-select "^1.4.0" + dom-serializer "^1.3.1" + domhandler "^4.2.0" + htmlparser2 "^6.1.0" + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter "^6.0.1" + tslib "^2.2.0" child-process@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/child-process/-/child-process-1.0.2.tgz#98974dc7ed1ee4c6229f8e305fa7313a6885a7f2" integrity sha1-mJdNx+0e5MYin44wX6cxOmiFp/I= +child_process@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/child_process/-/child_process-1.0.2.tgz#b1f7e7fc73d25e7fd1d455adc94e143830182b5a" + integrity sha1-sffn/HPSXn/R1FWtyU4UODAYK1o= + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -4523,11 +4749,9 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^2.0.0: version "2.0.0" @@ -4574,7 +4798,7 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.0, cli-boxes@^2.2.1: +cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== @@ -4598,6 +4822,11 @@ cli-spinner@0.2.10: resolved "https://registry.yarnpkg.com/cli-spinner/-/cli-spinner-0.2.10.tgz#f7d617a36f5c47a7bc6353c697fc9338ff782a47" integrity sha512-U0sSQ+JJvSLi1pAYuJykwiA8Dsr15uHEy85iCJ6A+0DjVxivr3d+N2Wjvodeg89uP5K6TswFkKBfAD7B3YSn/Q== +cli-spinners@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -4624,6 +4853,11 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +clipanion@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/clipanion/-/clipanion-2.6.2.tgz#820e7440812052442455b248f927b187ed732f71" + integrity sha512-0tOHJNMF9+4R3qcbBL+4IxLErpaYSYvzs10aXuECDbZdJOuJHdagJMAqvLdeaUQTI/o2uSCDRpet6ywDiKOAYw== + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -4651,6 +4885,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -4658,6 +4901,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + clsx@^1.0.4, clsx@^1.1.0, clsx@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" @@ -4683,9 +4931,9 @@ code-point-at@^1.0.0: integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= codemirror@^5.58.2: - version "5.60.0" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.60.0.tgz#00a8cfd287d5d8737ceb73987f04aee2fe5860da" - integrity sha512-AEL7LhFOlxPlCL8IdTcJDblJm8yrAGib7I+DErJPdZd4l6imx8IMgKK3RblVgBQqz3TZJR4oknQ03bz+uNjBYA== + version "5.61.1" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.61.1.tgz#ccfc8a43b8fcfb8b12e8e75b5ffde48d541406e0" + integrity sha512-+D1NZjAucuzE93vJGbAaXzvoBHwp9nJZWWWF9utjv25+5AZUiah6CIlfb4ikG4MoDsFsCG8niiJH5++OO2LgIQ== collect-v8-coverage@^1.0.0: version "1.0.1" @@ -4884,11 +5132,6 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -4961,18 +5204,18 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.6.2, core-js-compat@^3.8.1, core-js-compat@^3.9.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.1.tgz#4e572acfe90aff69d76d8c37759d21a5c59bb455" - integrity sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== +core-js-compat@^3.6.2, core-js-compat@^3.9.0, core-js-compat@^3.9.1: + version "3.12.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.12.1.tgz#2c302c4708505fa7072b0adb5156d26f7801a18b" + integrity sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ== dependencies: - browserslist "^4.16.3" + browserslist "^4.16.6" semver "7.0.0" core-js-pure@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.1.tgz#677b322267172bd490e4464696f790cbc355bec5" - integrity sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A== + version "3.12.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.12.1.tgz#934da8b9b7221e2a2443dc71dfa5bd77a7ea00b8" + integrity sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ== core-js@^2.4.0: version "2.6.12" @@ -4980,9 +5223,9 @@ core-js@^2.4.0: integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-js@^3.6.5: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.1.tgz#cec8de593db8eb2a85ffb0dbdeb312cb6e5460ae" - integrity sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg== + version "3.12.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.1.tgz#6b5af4ff55616c08a44d386f1f510917ff204112" + integrity sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -5167,15 +5410,15 @@ css-select@^2.0.0, css-select@^2.0.2: domutils "^1.7.0" nth-check "^1.0.2" -css-select@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8" - integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== +css-select@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.2.tgz#8b52b6714ed3a80d8221ec971c543f3b12653286" + integrity sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw== dependencies: boolbase "^1.0.0" - css-what "^4.0.0" - domhandler "^4.0.0" - domutils "^2.4.3" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" nth-check "^2.0.0" css-tree@1.0.0-alpha.37: @@ -5187,9 +5430,9 @@ css-tree@1.0.0-alpha.37: source-map "^0.6.1" css-tree@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" - integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== dependencies: mdn-data "2.0.14" source-map "^0.6.1" @@ -5204,10 +5447,10 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== -css-what@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" - integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== +css-what@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.0.tgz#f0bf4f8bac07582722346ab243f6a35b512cfc47" + integrity sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA== css.escape@^1.5.1: version "1.5.1" @@ -5248,10 +5491,10 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" - integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== +cssnano-preset-default@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" + integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== dependencies: css-declaration-sorter "^4.0.1" cssnano-util-raw-cache "^4.0.1" @@ -5281,7 +5524,7 @@ cssnano-preset-default@^4.0.7: postcss-ordered-values "^4.1.2" postcss-reduce-initial "^4.0.3" postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.2" + postcss-svgo "^4.0.3" postcss-unique-selectors "^4.0.1" cssnano-util-get-arguments@^4.0.0: @@ -5307,12 +5550,12 @@ cssnano-util-same-parent@^4.0.0: integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== cssnano@^4.1.10: - version "4.1.10" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" - integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + version "4.1.11" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" + integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== dependencies: cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.7" + cssnano-preset-default "^4.0.8" is-resolvable "^1.0.0" postcss "^7.0.0" @@ -5341,14 +5584,14 @@ cssstyle@^2.3.0: cssom "~0.3.6" csstype@^2.5.7: - version "2.6.16" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.16.tgz#544d69f547013b85a40d15bff75db38f34fe9c39" - integrity sha512-61FBWoDHp/gRtsoDkq/B1nWrCUG/ok1E3tUrcNbZjsE9Cxd9yzUirjS3+nAATB8U4cTtaQmAHbNndoFz5L6C9Q== + version "2.6.17" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.17.tgz#4cf30eb87e1d1a005d8b6510f95292413f6a1c0e" + integrity sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A== csstype@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" - integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== + version "3.0.8" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" + integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== currently-unhandled@^0.4.1: version "0.4.1" @@ -5371,9 +5614,9 @@ d@1, d@^1.0.1: type "^1.0.1" damerau-levenshtein@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" - integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + version "1.0.7" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz#64368003512a1a6992593741a09a9d31a836f55d" + integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== dargs@^7.0.0: version "7.0.0" @@ -5387,11 +5630,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -5411,28 +5649,21 @@ dayjs@^1.9.4: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2" integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw== -debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: +debug@4.3.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" -debug@^3.0.1, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: +debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -5528,6 +5759,13 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" @@ -5572,15 +5810,6 @@ defined@^1.0.0: resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= - dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" - del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -5623,6 +5852,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +dequal@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" + integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -5642,9 +5876,9 @@ detect-newline@^3.0.0: integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detect-node@^2.0.4: - version "2.0.5" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" - integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== detect-port-alt@1.1.6: version "1.1.6" @@ -5741,14 +5975,6 @@ dockerfile-ast@0.2.0: dependencies: vscode-languageserver-types "^3.16.0" -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -5783,9 +6009,9 @@ dom-converter@^0.2: utila "~0.4" dom-helpers@^5.1.3: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b" - integrity sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ== + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: "@babel/runtime" "^7.8.7" csstype "^3.0.2" @@ -5798,13 +6024,13 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1, dom-serializer@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" - integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== +dom-serializer@^1.0.1, dom-serializer@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== dependencies: domelementtype "^2.0.1" - domhandler "^4.0.0" + domhandler "^4.2.0" entities "^2.0.0" domain-browser@^1.1.1: @@ -5817,10 +6043,10 @@ domelementtype@1, domelementtype@^1.3.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1, domelementtype@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" - integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== domexception@^2.0.1: version "2.0.1" @@ -5836,12 +6062,12 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" - integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA== +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== dependencies: - domelementtype "^2.1.0" + domelementtype "^2.2.0" domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" @@ -5851,14 +6077,14 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.4.3, domutils@^2.4.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.5.0.tgz#42f49cffdabb92ad243278b331fd761c1c2d3039" - integrity sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg== +domutils@^2.5.2, domutils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" + integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== dependencies: dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^4.0.0" + domelementtype "^2.2.0" + domhandler "^4.2.0" dot-case@^3.0.4: version "3.0.4" @@ -5947,10 +6173,10 @@ ejs@^2.6.1: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.649: - version "1.3.701" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz#5e796ed7ce88cd77bc7bf831cf311ef6b067c389" - integrity sha512-Zd9ofdIMYHYhG1gvnejQDvC/kqSeXQvtXF0yRURGxgwGqDZm9F9Fm3dYFnm5gyuA7xpXfBlzVLN1sz0FjxpKfw== +electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.723: + version "1.3.735" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.735.tgz#fa1a8660f2790662291cb2136f0e446a444cdfdc" + integrity sha512-cp7MWzC3NseUJV2FJFgaiesdrS+A8ZUjX5fLAxdRlcaPDkaPGFplX930S5vf84yqDp4LjuLdKouWuVOTwUfqHQ== elegant-spinner@^1.0.1: version "1.0.1" @@ -6033,6 +6259,13 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +end-of-stream@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.1.0.tgz#e9353258baa9108965efc41cb0ef8ade2f3cfb07" + integrity sha1-6TUyWLqpEIll78QcsO+K3i88+wc= + dependencies: + once "~1.3.0" + endian-reader@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/endian-reader/-/endian-reader-0.3.0.tgz#84eca436b80aed0d0639c47291338b932efe50a0" @@ -6064,11 +6297,6 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -6111,12 +6339,12 @@ enzyme-shallow-equal@^1.0.0, enzyme-shallow-equal@^1.0.1, enzyme-shallow-equal@^ object-is "^1.1.2" enzyme-to-json@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.6.1.tgz#d60740950bc7ca6384dfe6fe405494ec5df996bc" - integrity sha512-15tXuONeq5ORoZjV/bUo2gbtZrN2IH+Z6DvL35QmZyKHgbY1ahn6wcnLd9Xv9OjiwbAXiiP8MRZwbZrCv1wYNg== + version "3.6.2" + resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz#94f85c413bcae8ab67be53b0a94b69a560e27823" + integrity sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg== dependencies: "@types/cheerio" "^0.22.22" - lodash "^4.17.15" + lodash "^4.17.21" react-is "^16.12.0" enzyme@^3.11.0: @@ -6168,7 +6396,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: +es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.18.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: version "1.18.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== @@ -6190,6 +6418,11 @@ es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.18.0-next.1, es-abstrac string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.0" +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -6208,6 +6441,11 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: es6-symbol "~3.1.3" next-tick "~1.0.0" +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + es6-iterator@2.0.3, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" @@ -6217,18 +6455,6 @@ es6-iterator@2.0.3, es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - es6-symbol@^3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" @@ -6272,18 +6498,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@1.x.x: - 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@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -6297,9 +6511,9 @@ escodegen@^2.0.0: source-map "~0.6.1" eslint-config-prettier@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz#4ef1eaf97afe5176e6a75ddfb57c335121abc5a6" - integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== eslint-config-react-app@^6.0.0: version "6.0.0" @@ -6316,45 +6530,47 @@ eslint-import-resolver-node@^0.3.4: debug "^2.6.9" resolve "^1.13.1" -eslint-module-utils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" - integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== +eslint-module-utils@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz#b51be1e473dd0de1c5ea638e22429c2490ea8233" + integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== dependencies: - debug "^2.6.9" + debug "^3.2.7" pkg-dir "^2.0.0" eslint-plugin-flowtype@^5.2.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.4.0.tgz#a559526e56403cb97b470b524957fc526e2485fe" - integrity sha512-O0s0iTT5UxYuoOpHMLSIO2qZMyvrb9shhk1EM5INNGtJ2CffrfUmsnh6TVsnoT41fkXIEndP630WNovhoO87xQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.7.2.tgz#482a42fe5d15ee614652ed256d37543d584d7bc0" + integrity sha512-7Oq/N0+3nijBnYWQYzz/Mp/7ZCpwxYvClRyW/PLAmimY9uLCBvoXsNsERcJdkKceyOjgRbFhhxs058KTrne9Mg== dependencies: lodash "^4.17.15" string-natural-compare "^3.0.1" eslint-plugin-import@^2.22.1: - version "2.22.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" - integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + version "2.23.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.23.3.tgz#8a1b073289fff03c4af0f04b6df956b7d463e191" + integrity sha512-wDxdYbSB55F7T5CC7ucDjY641VvKmlRwT0Vxh7PkY1mI4rclVRFWYfsrjDgZvwYYDZ5ee0ZtfFKXowWjqvEoRQ== dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" + array-includes "^3.1.3" + array.prototype.flat "^1.2.4" debug "^2.6.9" - doctrine "1.5.0" + doctrine "^2.1.0" eslint-import-resolver-node "^0.3.4" - eslint-module-utils "^2.6.0" + eslint-module-utils "^2.6.1" + find-up "^2.0.0" has "^1.0.3" + is-core-module "^2.4.0" minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" + object.values "^1.1.3" + pkg-up "^2.0.0" + read-pkg-up "^3.0.0" + resolve "^1.20.0" tsconfig-paths "^3.9.0" eslint-plugin-jest@^24.1.0: - version "24.3.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.3.2.tgz#30a8b2dea6278d0da1d6fb9d6cd530aaf58050a1" - integrity sha512-cicWDr+RvTAOKS3Q/k03+Z3odt3VCiWamNUHWd6QWbVQWcYJyYgUTu8x0mx9GfeDEimawU5kQC+nQ3MFxIM6bw== + version "24.3.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.3.6.tgz#5f0ca019183c3188c5ad3af8e80b41de6c8e9173" + integrity sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg== dependencies: "@typescript-eslint/experimental-utils" "^4.0.1" @@ -6376,9 +6592,9 @@ eslint-plugin-jsx-a11y@^6.3.1: language-tags "^1.0.5" eslint-plugin-prettier@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz#7079cfa2497078905011e6f82e8dd8453d1371b7" - integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" + integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== dependencies: prettier-linter-helpers "^1.0.0" @@ -6388,9 +6604,9 @@ eslint-plugin-react-hooks@^4.2.0: integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== eslint-plugin-react@^7.21.5: - version "7.23.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz#f1a2e844c0d1967c822388204a8bc4dee8415b11" - integrity sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ== + version "7.23.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.23.2.tgz#2d2291b0f95c03728b55869f01102290e792d494" + integrity sha512-AfjgFQB+nYszudkxRkTFu0UR1zEQig0ArVMPloKhxwlwkzaw/fBiH0QWcBBhZONlXqQC51+nfqFrkn4EzHcGBw== dependencies: array-includes "^3.1.3" array.prototype.flatmap "^1.2.4" @@ -6441,40 +6657,43 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3 integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== eslint-webpack-plugin@^2.5.2: - version "2.5.3" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.3.tgz#a125585a1d8bb9c939f2a920a9bc9be4a21cdb58" - integrity sha512-LewNevZf9ghDCxCGT6QltNWVi8KIYWc4LKcin8K9Azh1hypG7YAmobUDIU67fAPa+eMjRnU4rjEkLbYI1w5/UA== + version "2.5.4" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.4.tgz#473b84932f1a8e2c2b8e66a402d0497bf440b986" + integrity sha512-7rYh0m76KyKSDE+B+2PUQrlNS4HJ51t3WKpkJg6vo2jFMbEPTG99cBV0Dm7LXSHucN4WGCG65wQcRiTFrj7iWw== dependencies: "@types/eslint" "^7.2.6" arrify "^2.0.1" jest-worker "^26.6.2" micromatch "^4.0.2" + normalize-path "^3.0.0" schema-utils "^3.0.0" eslint@^7.11.0, eslint@^7.12.0: - version "7.23.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.23.0.tgz#8d029d252f6e8cf45894b4bee08f5493f8e94325" - integrity sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q== + version "7.27.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.27.0.tgz#665a1506d8f95655c9274d84bd78f7166b07e9c7" + integrity sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.0" + "@eslint/eslintrc" "^0.4.1" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" enquirer "^2.3.5" + escape-string-regexp "^4.0.0" eslint-scope "^5.1.1" eslint-utils "^2.1.0" eslint-visitor-keys "^2.0.0" espree "^7.3.1" esquery "^1.4.0" esutils "^2.0.2" + fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" @@ -6486,7 +6705,7 @@ eslint@^7.11.0, eslint@^7.12.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.21" + lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -6495,7 +6714,7 @@ eslint@^7.11.0, eslint@^7.12.0: semver "^7.2.1" strip-ansi "^6.0.0" strip-json-comments "^3.1.0" - table "^6.0.4" + table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -6508,11 +6727,6 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@3.x.x: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -6532,7 +6746,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -6773,7 +6987,7 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -6783,7 +6997,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.1.1: +fast-glob@^3.1.1, fast-glob@^3.2.2: version "3.2.5" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== @@ -6873,7 +7087,7 @@ file-loader@6.1.1: loader-utils "^2.0.0" schema-utils "^3.0.0" -file-uri-to-path@1, file-uri-to-path@1.0.0: +file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== @@ -6993,9 +7207,9 @@ flatten@^1.0.2: integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== flow-parser@0.*: - version "0.147.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.147.0.tgz#747f67611e731c89927dd5d368bf7f616d1e51be" - integrity sha512-z+b/pgp2QLvsWJkzhKXU8yC5TmaNyXGRmHac3x0Swmn9uQESRXhNIJq9TPHKPPeWgFym33OLO+5BlIdy/tXRCQ== + version "0.151.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.151.0.tgz#e1656a8bbc5979d3e624224dcc72e3fc8da58cdc" + integrity sha512-jDcpO8IFfVs29jlYsh/cDDZ4yQcl8ed0RZP+oQ2Hoo7OrI3xffTYnYa1lg84SB51iIbXLDhS3uwQdXgqKZWb5g== flush-write-stream@^1.0.0: version "1.1.1" @@ -7006,9 +7220,9 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" follow-redirects@^1.0.0, follow-redirects@^1.10.0: - version "1.13.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" - integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + version "1.14.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== for-in@^1.0.2: version "1.0.2" @@ -7135,14 +7349,6 @@ fsevents@^2.1.2, fsevents@^2.1.3, fsevents@~2.3.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -7218,11 +7424,6 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stdin@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -7243,21 +7444,9 @@ get-stream@^5.0.0, get-stream@^5.1.0: pump "^3.0.0" get-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" - integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== - -get-uri@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" - integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "~3.0.2" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" @@ -7303,9 +7492,9 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: is-glob "^4.0.1" glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, 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== + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -7314,6 +7503,19 @@ glob@^7.0.0, glob@^7.0.3, 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" +global-agent@^2.1.12: + version "2.2.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.2.0.tgz#566331b0646e6bf79429a16877685c4a1fbf76dc" + integrity sha512-+20KpaW6DDLqhG7JDiJpD1JvNvb8ts+TNl7BPOYcURqCrXqnN1Vf+XVOrkKJAFPqfX+oEhsdzOj1hLWkBTdNJg== + dependencies: + boolean "^3.0.1" + core-js "^3.6.5" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + global-cache@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/global-cache/-/global-cache-1.2.1.tgz#39ca020d3dd7b3f0934c52b75363f8d53312c16d" @@ -7372,12 +7574,19 @@ globals@^12.1.0: type-fest "^0.8.1" globals@^13.6.0: - version "13.7.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.7.0.tgz#aed3bcefd80ad3ec0f0be2cf0c895110c0591795" - integrity sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA== + version "13.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" + integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== dependencies: type-fest "^0.20.2" +globalthis@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b" + integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== + dependencies: + define-properties "^1.1.3" + globby@11.0.1: version "11.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" @@ -7422,19 +7631,19 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" -got@11.4.0: - version "11.4.0" - resolved "https://registry.yarnpkg.com/got/-/got-11.4.0.tgz#1f0910310572af4efcc6890e1dacd7affb710b39" - integrity sha512-XysJZuZNVpaQ37Oo2LV90MIkPeYITehyy1A0QzO1JwOXm8EWuEf9eeGk2XuHePvLEGnm9AVOI37bHwD6KYyBtg== +got@11.8.2, got@^11.7.0: + version "11.8.2" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" + integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== dependencies: - "@sindresorhus/is" "^2.1.1" + "@sindresorhus/is" "^4.0.0" "@szmarczak/http-timer" "^4.0.5" "@types/cacheable-request" "^6.0.1" "@types/responselike" "^1.0.0" cacheable-lookup "^5.0.3" cacheable-request "^7.0.1" decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.4.5" + http2-wrapper "^1.0.0-beta.5.2" lowercase-keys "^2.0.0" p-cancelable "^2.0.0" responselike "^2.0.0" @@ -7482,6 +7691,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -7536,9 +7750,9 @@ hard-rejection@^2.1.0: integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== harmony-reflect@^1.4.6: - version "1.6.1" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" - integrity sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA== + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== has-ansi@^2.0.0: version "2.0.0" @@ -7632,15 +7846,6 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hcl-to-json@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/hcl-to-json/-/hcl-to-json-0.1.1.tgz#39674aa2a5a4d2b4c2b6762c8196af4af4f12903" - integrity sha512-sj1RPsdgX/ilBGZGnyjbSHQbRe20hyA6VDXYBGJedHSCdwSWkr/7tr85N7FGeM7KvBjIQX7Gl897bo0Ug73Z/A== - dependencies: - debug "^3.0.1" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -7685,9 +7890,9 @@ hoopy@^0.1.4: integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^3.0.4, hosted-git-info@^3.0.7: version "3.0.8" @@ -7696,7 +7901,7 @@ hosted-git-info@^3.0.4, hosted-git-info@^3.0.7: dependencies: lru-cache "^6.0.0" -hosted-git-info@^4.0.1: +hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== @@ -7723,17 +7928,12 @@ hsla-regex@^1.0.0: resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - html-element-map@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.3.0.tgz#fcf226985d7111e6c2b958169312ec750d02f0d3" - integrity sha512-AqCt/m9YaiMwaaAyOPdq4Ga0cM+jdDWWGueUMkdROZcTeClaGpN0AQeyGchZhTegQoABmc6+IqH7oCR/8vhQYg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.3.1.tgz#44b2cbcfa7be7aa4ff59779e47e51012e1c73c08" + integrity sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg== dependencies: - array-filter "^1.0.0" + array.prototype.filter "^1.0.0" call-bind "^1.0.2" html-encoding-sniffer@^2.0.1: @@ -7798,14 +7998,14 @@ htmlparser2@^3.10.1: inherits "^2.0.1" readable-stream "^3.1.1" -htmlparser2@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.1.tgz#422521231ef6d42e56bd411da8ba40aa36e91446" - integrity sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w== +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" domhandler "^4.0.0" - domutils "^2.4.4" + domutils "^2.5.2" entities "^2.0.0" http-cache-semantics@^4.0.0: @@ -7829,17 +8029,6 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@1.7.3, http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" @@ -7850,19 +8039,22 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-parser-js@>=0.5.1: version "0.5.3" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - 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" @@ -7891,7 +8083,7 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -http2-wrapper@^1.0.0-beta.4.5: +http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== @@ -7904,14 +8096,6 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" @@ -7959,9 +8143,9 @@ iferr@^0.1.5: integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== dependencies: minimatch "^3.0.4" @@ -8180,7 +8364,7 @@ ip-regex@^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, ip@^1.1.0, ip@^1.1.5: +ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -8232,9 +8416,9 @@ is-arrayish@^0.3.1: integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== is-binary-path@^1.0.0: version "1.0.1" @@ -8251,11 +8435,11 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" is-buffer@^1.1.5: version "1.1.6" @@ -8286,10 +8470,10 @@ is-color-stop@^1.0.0: rgb-regex "^1.0.1" rgba-regex "^1.0.0" -is-core-module@^2.0.0, is-core-module@^2.2.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== +is-core-module@^2.0.0, is-core-module@^2.2.0, is-core-module@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" + integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== dependencies: has "^1.0.3" @@ -8308,9 +8492,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" + integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== is-deflate@^1.0.0: version "1.0.0" @@ -8341,9 +8525,9 @@ is-directory@^0.3.1: integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" @@ -8408,7 +8592,7 @@ is-gzip@^1.0.0: resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" integrity sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM= -is-installed-globally@^0.3.1, is-installed-globally@^0.3.2: +is-installed-globally@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== @@ -8439,20 +8623,15 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - is-npm@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== is-number@^3.0.0: version "3.0.0" @@ -8520,9 +8699,9 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: isobject "^3.0.1" 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= + 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.1.0: version "2.2.2" @@ -8530,12 +8709,12 @@ is-promise@^2.1.0: integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.1" + has-symbols "^1.0.2" is-regexp@^1.0.0: version "1.0.0" @@ -8570,28 +8749,21 @@ is-stream@^2.0.0: integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== - dependencies: - html-comment-regex "^1.1.0" - is-symbol@^1.0.1, is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: - has-symbols "^1.0.1" + has-symbols "^1.0.2" is-text-path@^1.0.1: version "1.0.1" @@ -8647,6 +8819,11 @@ is-yarn-global@^0.3.0: resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== +is@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" + integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg== + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -9170,7 +9347,7 @@ js-base64@^2.1.8: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: +js-yaml@^3.10.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== @@ -9178,25 +9355,32 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jscodeshift@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.11.0.tgz#4f95039408f3f06b0e39bb4d53bc3139f5330e2f" - integrity sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g== - dependencies: - "@babel/core" "^7.1.6" - "@babel/parser" "^7.1.6" - "@babel/plugin-proposal-class-properties" "^7.1.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.1.0" - "@babel/plugin-proposal-optional-chaining" "^7.1.0" - "@babel/plugin-transform-modules-commonjs" "^7.1.0" - "@babel/preset-flow" "^7.0.0" - "@babel/preset-typescript" "^7.1.0" - "@babel/register" "^7.0.0" +jscodeshift@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.12.0.tgz#de7302f3d3e1f4b3b36f9e484f451ba4ab7cc1f4" + integrity sha512-LEgr+wklbtEQD6SptyVYox+YZ7v+4NQeWHgqASedxl2LxQ+/kSQs6Nhs/GX+ymVOu84Hsz9/C2hQfDY89dKZ6A== + dependencies: + "@babel/core" "^7.13.16" + "@babel/parser" "^7.13.16" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + "@babel/plugin-transform-modules-commonjs" "^7.13.8" + "@babel/preset-flow" "^7.13.13" + "@babel/preset-typescript" "^7.13.0" + "@babel/register" "^7.13.16" babel-core "^7.0.0-bridge.0" colors "^1.1.2" flow-parser "0.*" @@ -9204,14 +9388,14 @@ jscodeshift@^0.11.0: micromatch "^3.1.10" neo-async "^2.5.0" node-dir "^0.1.17" - recast "^0.20.3" + recast "^0.20.4" temp "^0.8.1" write-file-atomic "^2.3.0" jsdom@^16.4.0: - version "16.5.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.2.tgz#583fac89a0aea31dbf6237e7e4bedccd9beab472" - integrity sha512-JxNtPt9C1ut85boCbJmffaQ06NBnzkQY/MWO3YxPW8IWS38A26z+B1oBvA9LwKrytewdfymnhi4UNH3/RAgZrg== + version "16.5.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136" + integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA== dependencies: abab "^2.0.5" acorn "^8.1.0" @@ -9260,6 +9444,17 @@ json-buffer@3.0.1: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-file-plus@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/json-file-plus/-/json-file-plus-3.3.1.tgz#f4363806b82819ff8803d83d539d6a9edd2a5258" + integrity sha512-wo0q1UuiV5NsDPQDup1Km8IwEeqe+olr8tkWxeJq9Bjtcp7DZ0l+yrg28fSC3DEtrE311mhTZ54QGS6oiqnZEA== + dependencies: + is "^3.2.1" + node.extend "^2.0.0" + object.assign "^4.1.0" + promiseback "^2.0.2" + safer-buffer "^2.0.2" + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -9290,7 +9485,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -9446,7 +9641,7 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -latest-version@^5.0.0, latest-version@^5.1.0: +latest-version@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== @@ -9547,17 +9742,17 @@ listr-verbose-renderer@^0.5.0: figures "^2.0.0" listr2@^3.2.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.4.3.tgz#543bcf849d5ffc70602708b69d2daac73f751699" - integrity sha512-wZmkzNiuinOfwrGqAwTCcPw6aKQGTAMGXwG5xeU1WpDjJNeBA35jGBeWxR3OF+R6Yl5Y3dRG+3vE8t6PDcSNHA== + version "3.8.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.8.2.tgz#99b138ad1cfb08f1b0aacd422972e49b2d814b99" + integrity sha512-E28Fw7Zd3HQlCJKzb9a8C8M0HtFWQeucE+S8YrSrqZObuCLPRHMRrR8gNmYt65cU9orXYHwvN5agXC36lYt7VQ== dependencies: - chalk "^4.1.0" + chalk "^4.1.1" cli-truncate "^2.1.0" figures "^3.2.0" indent-string "^4.0.0" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.6" + rxjs "^6.6.7" through "^2.3.8" wrap-ansi "^7.0.0" @@ -9587,14 +9782,14 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" + parse-json "^4.0.0" + pify "^3.0.0" strip-bom "^3.0.0" loader-runner@^2.4.0: @@ -9714,10 +9909,10 @@ lodash.defaults@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= -lodash.endswith@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.endswith/-/lodash.endswith-4.2.1.tgz#fed59ac1738ed3e236edd7064ec456448b37bc09" - integrity sha1-/tWawXOO0+I27dcGTsRWRIs3vAk= +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= lodash.escape@^4.0.1: version "4.0.1" @@ -9769,7 +9964,7 @@ lodash.get@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= -lodash.groupby@^4.6.0: +lodash.groupby@4.6.0, lodash.groupby@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= @@ -9961,7 +10156,7 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" -log-symbols@^4.0.0: +log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -10109,9 +10304,9 @@ map-obj@^1.0.0, map-obj@^1.0.1: integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.0.tgz#0e8bc823e2aaca8a0942567d12ed14f389eec153" - integrity sha512-NAq0fCmZYGz9UFEQyndp7sisrow4GroyGeKluyKC/chuITZsPyOyC1UJZPJlVFImhXdROIP5xqouRLThT3BbpQ== + version "4.2.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.1.tgz#e4ea399dbc979ae735c83c863dd31bdf364277b7" + integrity sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ== map-visit@^1.0.0: version "1.0.0" @@ -10120,6 +10315,13 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -10226,7 +10428,7 @@ microevent.ts@~0.1.1: resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== -micromatch@4.0.2, micromatch@^4.0.2: +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== @@ -10253,6 +10455,14 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -10261,17 +10471,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.46.0, "mime-db@>= 1.43.0 < 2": - version "1.46.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" - integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== +mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": + version "1.47.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" + integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.29" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" - integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== + version "2.1.30" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" + integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== dependencies: - mime-db "1.46.0" + mime-db "1.47.0" mime@1.6.0: version "1.6.0" @@ -10440,9 +10650,9 @@ mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: minimist "^1.2.5" modern-normalize@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/modern-normalize/-/modern-normalize-1.0.0.tgz#539d84a1e141338b01b346f3e27396d0ed17601e" - integrity sha512-1lM+BMLGuDfsdwf3rsgBSrxJwAZHFIrQ8YR61xIqdHo0uNKI9M52wNpHSrliZATJp51On6JD0AfRxd4YGSU0lw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/modern-normalize/-/modern-normalize-1.1.0.tgz#da8e80140d9221426bd4f725c6e11283d34f90b7" + integrity sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA== moment@>=1.6.0, moment@^2.10.2, moment@^2.24.0: version "2.29.1" @@ -10514,10 +10724,10 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoid@^3.1.20: - version "3.1.22" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" - integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== +nanoid@^3.1.23: + version "3.1.23" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" + integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== nanomatch@^1.2.9: version "1.2.13" @@ -10577,11 +10787,6 @@ neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -netmask@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= - new-github-release-url@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/new-github-release-url/-/new-github-release-url-1.0.0.tgz#493847e6fecce39c247e9d89929be773d2e7f777" @@ -10698,10 +10903,10 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.61, node-releases@^1.1.70: - version "1.1.71" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" - integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +node-releases@^1.1.61, node-releases@^1.1.71: + version "1.1.72" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" + integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== node-sass@^5.0.0: version "5.0.0" @@ -10725,6 +10930,14 @@ node-sass@^5.0.0: stdout-stream "^1.4.0" "true-case-path" "^1.0.2" +node.extend@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-2.0.2.tgz#b4404525494acc99740f3703c496b7d5182cc6cc" + integrity sha512-pDT4Dchl94/+kkgdwyS2PauDFjZG0Hk0IcHIB+LkW27HLDtdoeMxHTxZh39DYbPP8UflWXWj9JcdDozF+YDOpQ== + dependencies: + has "^1.0.3" + is "^3.2.1" + nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" @@ -10795,9 +11008,9 @@ normalize.css@^8.0.1: integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== np@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/np/-/np-7.4.0.tgz#de33e07159c8d4065f42c280a7605deb88fcaf6a" - integrity sha512-woJn5Bodg0/VDyUWx5EHIsi+8QlKSows0AVRBt47PG++cJAVE6jQFXcXDFDBMqY5PueFc4w0SA3gxqPklk6oGg== + version "7.5.0" + resolved "https://registry.yarnpkg.com/np/-/np-7.5.0.tgz#03e3f8fb77ff0b8718dfd54b76cbd3c0f383a221" + integrity sha512-CdpgqtO6JpDKJjQ2gueY0jnbz6APWA9wFXSwPv5bXg4seSBibHqQ8JyWxYlS8YRfVbpeDtj582wcAWTlfy5qNA== dependencies: "@samverschueren/stream-to-observable" "^0.3.1" any-observable "^0.5.1" @@ -10937,9 +11150,9 @@ object-hash@^2.0.3: integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== object-inspect@^1.7.0, object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + version "1.10.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" + integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== object-is@^1.0.1, object-is@^1.0.2, object-is@^1.1.2: version "1.1.5" @@ -11046,6 +11259,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA= + dependencies: + wrappy "1" + onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -11107,6 +11327,21 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ora@5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.0.tgz#42eda4855835b9cd14d33864c97a3c95a3f56bf4" + integrity sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + org-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/org-regex/-/org-regex-1.0.0.tgz#67ebb9ab3cb124fea5841289d60b59434f041a59" @@ -11155,9 +11390,9 @@ p-cancelable@^1.0.0: integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== p-cancelable@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.0.tgz#4d51c3b91f483d02a0d300765321fca393d758dd" - integrity sha512-HAZyB3ZodPo+BDpb4/Iu7Jv4P6cSazBz9ZM0ChhEXp70scx834aWCEjQRwgt41UzzejUAPdbqqONfRWTPYrPAQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== p-defer@^1.0.0: version "1.0.0" @@ -11286,31 +11521,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pac-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" - integrity sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ== - dependencies: - agent-base "^4.2.0" - debug "^4.1.1" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - pac-resolver "^3.0.0" - raw-body "^2.2.0" - socks-proxy-agent "^4.0.1" - -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== - dependencies: - co "^4.6.0" - degenerator "^1.0.4" - ip "^1.1.5" - netmask "^1.0.6" - thunkify "^2.1.2" - package-json@^6.3.0: version "6.5.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" @@ -11398,14 +11608,14 @@ parse-link-header@^1.0.1: dependencies: xtend "~4.0.1" -parse5-htmlparser2-tree-adapter@^6.0.0: +parse5-htmlparser2-tree-adapter@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== dependencies: parse5 "^6.0.1" -parse5@6.0.1, parse5@^6.0.0, parse5@^6.0.1: +parse5@6.0.1, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -11501,12 +11711,12 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: - pify "^2.0.0" + pify "^3.0.0" path-type@^4.0.0: version "4.0.0" @@ -11514,9 +11724,9 @@ path-type@^4.0.0: integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -11538,16 +11748,21 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -11607,6 +11822,13 @@ pkg-up@3.1.0: dependencies: find-up "^3.0.0" +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -11614,6 +11836,11 @@ please-upgrade-node@^3.2.0: dependencies: semver-compare "^1.0.0" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== + pnp-webpack-plugin@1.6.4: version "1.6.4" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" @@ -11864,11 +12091,10 @@ postcss-import@^12.0.1: resolve "^1.1.7" postcss-initial@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.2.tgz#f018563694b3c16ae8eaabe3c585ac6319637b2d" - integrity sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" + integrity sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg== dependencies: - lodash.template "^4.5.0" postcss "^7.0.2" postcss-js@^2.0.0: @@ -12273,21 +12499,18 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: uniq "^1.0.1" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" util-deprecate "^1.0.2" -postcss-svgo@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" - integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" + integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== dependencies: - is-svg "^3.0.0" postcss "^7.0.0" postcss-value-parser "^3.0.0" svgo "^1.0.0" @@ -12357,13 +12580,13 @@ postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.11, postcss@^7.0.14, po supports-color "^6.1.0" postcss@^8.1.0: - version "8.2.8" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece" - integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw== + version "8.3.0" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.0.tgz#b1a713f6172ca427e3f05ef1303de8b65683325f" + integrity sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ== dependencies: colorette "^1.2.2" - nanoid "^3.1.20" - source-map "^0.6.1" + nanoid "^3.1.23" + source-map-js "^0.6.2" prelude-ls@^1.2.1: version "1.2.1" @@ -12393,11 +12616,11 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + version "2.3.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18" + integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== -pretty-bytes@^5.3.0: +pretty-bytes@^5.1.0, pretty-bytes@^5.3.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== @@ -12440,6 +12663,13 @@ progress@^2.0.0, progress@^2.0.3: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise-deferred@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/promise-deferred/-/promise-deferred-2.0.3.tgz#b99c9588820798501862a593d49cece51d06fd7f" + integrity sha512-n10XaoznCzLfyPFOlEE8iurezHpxrYzyjgq/1eW9Wk1gJwur/N7BdBmjJYJpqMeMcXK4wEbzo2EvZQcqjYcKUQ== + dependencies: + promise "^7.3.1" + promise-fs@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/promise-fs/-/promise-fs-2.1.1.tgz#0b725a592c165ff16157d1f13640ba390637e557" @@ -12457,7 +12687,7 @@ promise-queue@^2.2.5: resolved "https://registry.yarnpkg.com/promise-queue/-/promise-queue-2.2.5.tgz#2f6f5f7c0f6d08109e967659c79b88a9ed5e93b4" integrity sha1-L29ffA9tCBCelnZZx5uIqe1ek7Q= -"promise@>=3.2 <8": +"promise@>=3.2 <8", promise@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== @@ -12471,7 +12701,15 @@ promise@^8.1.0: dependencies: asap "~2.0.6" -prompts@2.4.0, prompts@^2.0.1: +promiseback@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/promiseback/-/promiseback-2.0.3.tgz#bd468d86930e8cd44bfc3292de9a6fbafb6378e6" + integrity sha512-VZXdCwS0ppVNTIRfNsCvVwJAaP2b+pxQF7lM8DMWfmpNWyTxB6O5YNbzs+8z0ki/KIBHKHk308NTIl4kJUem3w== + dependencies: + is-callable "^1.1.5" + promise-deferred "^2.0.3" + +prompts@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== @@ -12479,6 +12717,14 @@ prompts@2.4.0, prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" +prompts@^2.0.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" + integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + prop-types-exact@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" @@ -12505,20 +12751,6 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.1" -proxy-agent@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" - integrity sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw== - dependencies: - agent-base "^4.2.0" - debug "4" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^3.0.1" - proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" - proxy-from-env@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -12591,7 +12823,7 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.0.1, pupa@^2.1.1: +pupa@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== @@ -12723,16 +12955,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== - dependencies: - bytes "3.1.0" - http-errors "1.7.3" - iconv-lite "0.4.24" - unpipe "1.0.0" - raw.macro@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/raw.macro/-/raw.macro-0.4.2.tgz#1954f9a36465d9400a76b8b68438e4ec8582acd6" @@ -12865,9 +13087,9 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4: integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== react-modal@^3.8.1: - version "3.12.1" - resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.12.1.tgz#38c33f70d81c33d02ff1ed115530443a3dc2afd3" - integrity sha512-WGuXn7Fq31PbFJwtWmOk+jFtGC7E9tJVbFX0lts8ZoS5EPi9+WWylUJWLKKVm3H4GlQ7ZxY7R6tLlbSIBQ5oZA== + version "3.13.1" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.13.1.tgz#a02dce63bbfee7582936f1e9835d518ef8f56453" + integrity sha512-m6yXK7I4YKssQnsjHK7xITSXy2O81BSOHOsg0/uWAsdKtuT9HF2tdoYhRuxNNQg2V+LgepsoHUPJKS8m6no+eg== dependencies: exenv "^1.2.0" prop-types "^15.5.10" @@ -12882,9 +13104,9 @@ react-moment-proptypes@^1.6.0: moment ">=1.6.0" react-number-format@^4.4.1: - version "4.5.2" - resolved "https://registry.yarnpkg.com/react-number-format/-/react-number-format-4.5.2.tgz#5363e2a97ddb0e08fa2b7dd24b8319b6fb83519a" - integrity sha512-5pE0q6Q3pw0phFPpKWjyqRPCaajroggB8L43goMQzBEFyAi7LF+OpZH+uB9Wxg+rTOt/Ydi5H5Q2O5pmHvGzrg== + version "4.5.5" + resolved "https://registry.yarnpkg.com/react-number-format/-/react-number-format-4.5.5.tgz#563807ee142a03857111115806d39767bc698797" + integrity sha512-3NGqgSbMUwRwgJ4852RH24UFkW89yx/e0P78Hwmf3TajLMKCOJ7DPJCcl/6z+2+HpJ8AG7je/J8na3ykWx8acg== dependencies: prop-types "^15.7.2" @@ -13025,9 +13247,9 @@ react-scroll-to@^3.0.0-beta.6: integrity sha512-uAx77bPqqYL7UIga0d+tcVXHpVmBzmBUGuy1AaiRUgNC7InzE/4qNxg0d4cxhlCh8ok6zBCQ82LzzmTcYIte/w== react-tabs@^3.1.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.2.1.tgz#b0ce1e8b9f68bca82292ddecfb6480c9042bcb48" - integrity sha512-M7ERQvJgBVLTyojFmC3G4tpaJuMmUtsnYenVQm2oA1NjDrGXq1UuzHgxhVTDwimkJcKEbzgWCybXFSHQ/+2bsA== + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.2.2.tgz#07bdc3cdb17bdffedd02627f32a93cd4b3d6e4d0" + integrity sha512-/o52eGKxFHRa+ssuTEgSM8qORnV4+k7ibW+aNQzKe+5gifeVz8nLxCrsI9xdRhfb0wCLdgIambIpb1qCxaMN+A== dependencies: clsx "^1.1.0" prop-types "^15.5.0" @@ -13043,9 +13265,9 @@ react-test-renderer@^16.0.0-0: scheduler "^0.19.1" react-toastify@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-7.0.3.tgz#93804c777ecf918872ba3b5be9c654db14547f85" - integrity sha512-cxZ5rfurC8LzcZQMTYc8RHIkQTs+BFur18Pzk6Loz6uS8OXUWm6nXVlH/wqglz4Z7UAE8xxcF5mRjfE13487uQ== + version "7.0.4" + resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-7.0.4.tgz#7d0b743f2b96f65754264ca6eae31911a82378db" + integrity sha512-Rol7+Cn39hZp5hQ/k6CbMNE2CKYV9E5OQdC/hBLtIQU2xz7DdAm7xil4NITQTHR6zEbE5RVFbpgSwTD7xRGLeQ== dependencies: clsx "^1.1.1" @@ -13084,9 +13306,9 @@ react-with-styles-interface-css@^6.0.0: global-cache "^1.2.1" react-with-styles@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/react-with-styles/-/react-with-styles-4.1.0.tgz#4bfc2daa92dd72033fc19fd861b90225a682a640" - integrity sha512-zp05fyA6XFetqr07ox/a0bCFyEj//gUozI9cC1GW59zaGJ38STnxYvzotutgpzMyHOd7TFW9ZiZeBKjsYaS+RQ== + version "4.2.0" + resolved "https://registry.yarnpkg.com/react-with-styles/-/react-with-styles-4.2.0.tgz#0b8a8e5d94d082518b9f564f6fcf6103e28096c5" + integrity sha512-tZCTY27KriRNhwHIbg1NkSdTTOSfXDg6Z7s+Q37mtz0Ym7Sc7IOr3PzVt4qJhJMW6Nkvfi3g34FuhtiGAJCBQA== dependencies: airbnb-prop-types "^2.14.0" hoist-non-react-statics "^3.2.1" @@ -13117,13 +13339,13 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" - read-pkg "^2.0.0" + read-pkg "^3.0.0" read-pkg-up@^7.0.1: version "7.0.1" @@ -13143,14 +13365,14 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: - load-json-file "^2.0.0" + load-json-file "^4.0.0" normalize-package-data "^2.3.2" - path-type "^2.0.0" + path-type "^3.0.0" read-pkg@^5.2.0: version "5.2.0" @@ -13162,7 +13384,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -13175,16 +13397,6 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.1.x: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -13210,7 +13422,7 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" -recast@^0.20.3: +recast@^0.20.4: version "0.20.4" resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.4.tgz#db55983eac70c46b3fff96c8e467d65ffb4a7abc" integrity sha512-6qLIBGGRcwjrTZGIiBpJVC/NeuXpogXNyRQpqU1zWPUigCphvApoCs9KIwDYh1eDuJ6dAFlQoi/QUyE5KQ6RBQ== @@ -13371,9 +13583,9 @@ renderkid@^2.0.4: strip-ansi "^3.0.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.6.1: version "1.6.1" @@ -13450,9 +13662,9 @@ requires-port@^1.0.0: integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= resolve-alpn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.0.0.tgz#745ad60b3d6aff4b4a48e01b8c0bdc70959e0e8c" - integrity sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.1.2.tgz#30b60cfbb0c0b8dc897940fe13fe255afcdd4d28" + integrity sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA== resolve-cwd@^2.0.0: version "2.0.0" @@ -13496,9 +13708,9 @@ resolve-pathname@^3.0.0: integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve-url-loader@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz#235e2c28e22e3e432ba7a5d4e305c59a58edfc08" - integrity sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ== + version "3.1.3" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz#49ec68340f67d8d2ab6b401948d5def3ab2d0367" + integrity sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA== dependencies: adjust-sourcemap-loader "3.0.0" camelcase "5.3.1" @@ -13637,6 +13849,18 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + rollup-plugin-babel@^4.3.3: version "4.4.0" resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" @@ -13704,7 +13928,7 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.3, rxjs@^6.6.0, rxjs@^6.6.3, rxjs@^6.6.6: +rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.3, rxjs@^6.6.0, rxjs@^6.6.3, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -13764,9 +13988,9 @@ sass-graph@2.2.5: yargs "^13.3.2" sass-loader@^10.0.5: - version "10.1.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" - integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== + version "10.2.0" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.0.tgz#3d64c1590f911013b3fa48a0b22a83d5e1494716" + integrity sha512-kUceLzC1gIHz0zNJPpqRsJyisWatGYNFRmv2CKZK2/ngMJgLqxTbXwe/hJ85luyvZkgqU3VlJ33UVF2T/0g6mw== dependencies: klona "^2.0.4" loader-utils "^2.0.0" @@ -13848,9 +14072,9 @@ select-hose@^2.0.0: integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= selfsigned@^1.10.8: - version "1.10.8" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" - integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + version "1.10.11" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.11.tgz#24929cd906fe0f44b6d01fb23999a739537acbe9" + integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== dependencies: node-forge "^0.10.0" @@ -13881,14 +14105,7 @@ semver@7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@7.x, semver@^7.0.0, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: +semver@7.3.5, semver@7.x, semver@^7.0.0, semver@^7.1.2, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -13919,6 +14136,13 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -13999,6 +14223,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -14087,11 +14318,6 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - smoothscroll-polyfill@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.4.tgz#3a259131dc6930e6ca80003e1cb03b603b69abf8" @@ -14148,12 +14374,12 @@ snyk-cpp-plugin@2.2.1: hosted-git-info "^3.0.7" tslib "^2.0.0" -snyk-docker-plugin@4.19.3: - version "4.19.3" - resolved "https://registry.yarnpkg.com/snyk-docker-plugin/-/snyk-docker-plugin-4.19.3.tgz#14569f25c52a3fc71a20f80f5beac4ccdc326c11" - integrity sha512-5WkXyT7uY5NrTOvEqxeMqb6dDcskT3c/gbHUTOyPuvE6tMut+OOYK8RRXbwZFeLzpS8asq4e1R7U7syYG3VXwg== +snyk-docker-plugin@4.20.2: + version "4.20.2" + resolved "https://registry.yarnpkg.com/snyk-docker-plugin/-/snyk-docker-plugin-4.20.2.tgz#6375eb262ae85cdcbccad5088b1836c686ab6462" + integrity sha512-cxRU6lNybAJgOs1RPDTk3fJh7rS0BkXSAw/8/GFGTeJlQ+dNhEnCWni7PKmaZT9phFNOqLQcDd8+oOZZB5UQnw== dependencies: - "@snyk/dep-graph" "^1.21.0" + "@snyk/dep-graph" "^1.28.0" "@snyk/rpm-parser" "^2.0.0" "@snyk/snyk-docker-pull" "3.2.3" chalk "^2.4.2" @@ -14165,7 +14391,7 @@ snyk-docker-plugin@4.19.3: gunzip-maybe "^1.4.2" mkdirp "^1.0.4" semver "^7.3.4" - snyk-nodejs-lockfile-parser "1.30.2" + snyk-nodejs-lockfile-parser "1.33.0" tar-stream "^2.1.0" tmp "^0.2.1" tslib "^1" @@ -14191,13 +14417,13 @@ snyk-go-plugin@1.17.0: tmp "0.2.1" tslib "^1.10.0" -snyk-gradle-plugin@3.13.2: - version "3.13.2" - resolved "https://registry.yarnpkg.com/snyk-gradle-plugin/-/snyk-gradle-plugin-3.13.2.tgz#c5166f6a9416702cf024cc11e3b88acf198111c8" - integrity sha512-t7lBFgWwS3KU7SgmAeTJnTR44Wew84/IvNbNZ2fF0f+lXd1kZxMG1Ty2brETvxpl+U2JxC8ISILohGXsET+ySg== +snyk-gradle-plugin@3.14.5: + version "3.14.5" + resolved "https://registry.yarnpkg.com/snyk-gradle-plugin/-/snyk-gradle-plugin-3.14.5.tgz#f2c1c370c811515a0c2c9b75f9bb97a2c55cbdb2" + integrity sha512-dOT4KZUC7AIR08xMUOAMNC5um5nlqjwLJCNz7AAgZHzJfNe93nbMcTN8Y5TiItCkAqNlJ/V4eI3uzVZJvOQoLw== dependencies: "@snyk/cli-interface" "2.11.0" - "@snyk/dep-graph" "^1.23.1" + "@snyk/dep-graph" "^1.28.0" "@snyk/java-call-graph-builder" "1.20.0" "@types/debug" "^4.1.4" chalk "^3.0.0" @@ -14205,7 +14431,7 @@ snyk-gradle-plugin@3.13.2: tmp "0.2.1" tslib "^2.0.0" -snyk-module@3.1.0, snyk-module@^3.0.0, snyk-module@^3.1.0: +snyk-module@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/snyk-module/-/snyk-module-3.1.0.tgz#3e088ff473ddf0d4e253a46ea6749d76d8e6e7ba" integrity sha512-HHuOYEAACpUpkFgU8HT57mmxmonaJ4O3YADoSkVhnhkmJ+AowqZyJOau703dYHNrq2DvQ7qYw81H7yyxS1Nfjw== @@ -14213,29 +14439,38 @@ snyk-module@3.1.0, snyk-module@^3.0.0, snyk-module@^3.1.0: debug "^4.1.1" hosted-git-info "^3.0.4" -snyk-mvn-plugin@2.25.3: - version "2.25.3" - resolved "https://registry.yarnpkg.com/snyk-mvn-plugin/-/snyk-mvn-plugin-2.25.3.tgz#fb7f6fa1d565b9f07c032e8b34e6308c310b2a27" - integrity sha512-JAxOThX51JDbgMMjp3gQDVi07G9VgTYSF06QC7f5LNA0zoXNr743e2rm78RGw5bqE3JRjZxEghiLHPPuvS5DDg== +snyk-module@^3.0.0, snyk-module@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/snyk-module/-/snyk-module-3.2.0.tgz#11876c46c79fb1bae71f56e16f2c53ce62dd0db6" + integrity sha512-6MLJyi4OMOZtCWTzGgRMEEw9qQ1fAwKoj5XYXfKOjIsohi3ubKsVfvSoScj0IovtiKowm2iCZ+VIRPJab6nCxA== + dependencies: + debug "^4.1.1" + hosted-git-info "^4.0.2" + +snyk-mvn-plugin@2.26.0: + version "2.26.0" + resolved "https://registry.yarnpkg.com/snyk-mvn-plugin/-/snyk-mvn-plugin-2.26.0.tgz#a4ce4aecf6b6f20f0b9797f2a7680982fa1fe5b5" + integrity sha512-LxYNWXPJxcwbkCK+vE7t437RttEDcbsS2KJJYzFtrr6u7g26c51u9aMHYPCDAEmwjI1A28zSrh7Wp45JW4YOqg== dependencies: "@snyk/cli-interface" "2.11.0" "@snyk/dep-graph" "^1.23.1" - "@snyk/java-call-graph-builder" "1.19.1" + "@snyk/java-call-graph-builder" "1.21.0" debug "^4.1.1" glob "^7.1.6" needle "^2.5.0" tmp "^0.1.0" tslib "1.11.1" -snyk-nodejs-lockfile-parser@1.30.2: - version "1.30.2" - resolved "https://registry.yarnpkg.com/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.30.2.tgz#8dbb64c42382aeaf4488c36e48c1e48eb75a1584" - integrity sha512-wI3VXVYO/ok0uaQm5i+Koo4rKBNilYC/QRIQFlyGbZXf+WBdRcTBKVDfTy8uNfUhMRSGzd84lNclMnetU9Y+vw== +snyk-nodejs-lockfile-parser@1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.33.0.tgz#1d426e78edbfe275a04a6b103bd4a57d922cbb97" + integrity sha512-pgzTBwYa02M25LLuGwmkxAtbdj3ByFlVZonsgOAYnFOXZb1CrQNF3Z9RWW0sXD9n2pxjqYXy9hdp5CMpwa/6jg== dependencies: "@snyk/graphlib" "2.1.9-patch.3" + "@yarnpkg/core" "^2.4.0" "@yarnpkg/lockfile" "^1.1.0" event-loop-spinner "^2.0.0" - got "11.4.0" + got "11.8.2" lodash.clonedeep "^4.5.0" lodash.flatmap "^4.5.0" lodash.isempty "^4.4.0" @@ -14247,15 +14482,17 @@ snyk-nodejs-lockfile-parser@1.30.2: uuid "^8.3.0" yaml "^1.9.2" -snyk-nodejs-lockfile-parser@1.31.1: - version "1.31.1" - resolved "https://registry.yarnpkg.com/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.31.1.tgz#badd9fbf8f58f0bd090e5378997cbe4548033664" - integrity sha512-MU1V2zS5ziLGMUL6PXxPvJuZ281wvawjQQ1c8TW697Jjkhd8hPZcW4IzMu52ok0zsmQcVZh8sVniBEHIePCfLQ== +snyk-nodejs-lockfile-parser@1.34.2: + version "1.34.2" + resolved "https://registry.yarnpkg.com/snyk-nodejs-lockfile-parser/-/snyk-nodejs-lockfile-parser-1.34.2.tgz#31328b10c028c57caf538d860175b106c47e5f68" + integrity sha512-evLJmX+ZOs5fw0LTVXFkzxfUnI1GcFSBYEXgbD3AbWBpo5Qqsxr33rKlPvbpJ98sOXHfv1vPkY1WloGVTNF84w== dependencies: "@snyk/graphlib" "2.1.9-patch.3" + "@yarnpkg/core" "^2.4.0" "@yarnpkg/lockfile" "^1.1.0" event-loop-spinner "^2.0.0" - got "11.4.0" + got "11.8.2" + js-yaml "^4.1.0" lodash.clonedeep "^4.5.0" lodash.flatmap "^4.5.0" lodash.isempty "^4.4.0" @@ -14265,12 +14502,11 @@ snyk-nodejs-lockfile-parser@1.31.1: snyk-config "^4.0.0-rc.2" tslib "^1.9.3" uuid "^8.3.0" - yaml "^1.9.2" -snyk-nuget-plugin@1.21.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/snyk-nuget-plugin/-/snyk-nuget-plugin-1.21.0.tgz#d9d3976cf0b4572ae97c47f758f84fc43040216f" - integrity sha512-c/JYF3sZzMN/lYz171zrEkVcPqDVcUTVgKIKHiL8nhhuFKxZQ1gzqOgk+lnfN31TLoTNQsZ3DhW/WY+4zEALvw== +snyk-nuget-plugin@1.21.1: + version "1.21.1" + resolved "https://registry.yarnpkg.com/snyk-nuget-plugin/-/snyk-nuget-plugin-1.21.1.tgz#a79bbc65456823a1148119873226afb0e4907ec8" + integrity sha512-nRtedIvrow5ODqOKkQWolKrxn8ZoNL3iNJGuW0jNhwv+/9K0XE1UORM5F1ENAsd+nzCSO/kiYAXCc5CNK8HWEw== dependencies: debug "^4.1.1" dotnet-deps-parser "5.0.0" @@ -14321,10 +14557,10 @@ snyk-policy@1.19.0: snyk-resolve "^1.1.0" snyk-try-require "^2.0.0" -snyk-python-plugin@1.19.7: - version "1.19.7" - resolved "https://registry.yarnpkg.com/snyk-python-plugin/-/snyk-python-plugin-1.19.7.tgz#d7e536694a481fd48e7d0cc8e7753c3f15a9c8be" - integrity sha512-twAGoIgJVSLVzMkuT/n5l9ZDvhMbWH7De6flWiHQB/grthfl3vJDzLCxiTa+6H/IEEYNSv6F/nSrfNh9UbW5/A== +snyk-python-plugin@1.19.9: + version "1.19.9" + resolved "https://registry.yarnpkg.com/snyk-python-plugin/-/snyk-python-plugin-1.19.9.tgz#9cab88b72b07752bb5331d15e3a0c388038ab602" + integrity sha512-vkqBJP+wOtrBKpqrFRP5EfAs5wZ/fGNI14Mb+EMnmu+ebP1ze9AnHxfiqMl/+ITzeYElZ2H5DX9sXXiqpJRhRg== dependencies: "@snyk/cli-interface" "^2.0.3" snyk-poetry-lockfile-parser "^1.1.6" @@ -14397,18 +14633,21 @@ snyk-try-require@^2.0.0: lru-cache "^5.1.1" snyk@^1.511.0: - version "1.511.0" - resolved "https://registry.yarnpkg.com/snyk/-/snyk-1.511.0.tgz#e67e050e2171cbb0665aa7a48e406f667c320175" - integrity sha512-3fOXci3Qitz3cLC73S99Tp3r0TeqLkNGduY733vQaOTt40RMH1PgjuOJPVPNPgiBxPgmqNlxfDl/MwNK2zpT0g== + version "1.605.0" + resolved "https://registry.yarnpkg.com/snyk/-/snyk-1.605.0.tgz#1aff8975214e2a2f8b5f5d1cb62f948e97d00f35" + integrity sha512-Z7WXI/U4oa/vWzHcuNYXOwJgRyJ0Xzn2c4fZsbb64dYmmcaROBVPCO99XpyKixcnfqlodNw90CjvTTo4grYtXw== dependencies: "@open-policy-agent/opa-wasm" "^1.2.0" "@snyk/cli-interface" "2.11.0" - "@snyk/code-client" "3.1.5" + "@snyk/cloud-config-parser" "^1.9.2" + "@snyk/code-client" "3.5.1" "@snyk/dep-graph" "^1.27.1" + "@snyk/fix" "1.601.0" "@snyk/gemfile" "1.2.0" "@snyk/graphlib" "^2.1.9-patch.3" "@snyk/inquirer" "^7.3.3-patch" "@snyk/snyk-cocoapods-plugin" "2.5.2" + "@snyk/snyk-hex-plugin" "1.1.4" abbrev "^1.1.1" ansi-escapes "3.2.0" chalk "^2.4.2" @@ -14416,11 +14655,10 @@ snyk@^1.511.0: configstore "^5.0.1" debug "^4.1.1" diff "^4.0.1" - hcl-to-json "^0.1.1" + global-agent "^2.1.12" lodash.assign "^4.2.0" lodash.camelcase "^4.3.0" lodash.clonedeep "^4.5.0" - lodash.endswith "^4.2.1" lodash.flatten "^4.4.0" lodash.flattendeep "^4.4.0" lodash.get "^4.4.2" @@ -14437,24 +14675,24 @@ snyk@^1.511.0: micromatch "4.0.2" needle "2.6.0" open "^7.0.3" + ora "5.4.0" os-name "^3.0.0" promise-queue "^2.2.5" - proxy-agent "^3.1.1" proxy-from-env "^1.0.0" rimraf "^2.6.3" semver "^6.0.0" snyk-config "4.0.0" snyk-cpp-plugin "2.2.1" - snyk-docker-plugin "4.19.3" + snyk-docker-plugin "4.20.2" snyk-go-plugin "1.17.0" - snyk-gradle-plugin "3.13.2" + snyk-gradle-plugin "3.14.5" snyk-module "3.1.0" - snyk-mvn-plugin "2.25.3" - snyk-nodejs-lockfile-parser "1.31.1" - snyk-nuget-plugin "1.21.0" + snyk-mvn-plugin "2.26.0" + snyk-nodejs-lockfile-parser "1.34.2" + snyk-nuget-plugin "1.21.1" snyk-php-plugin "1.9.2" snyk-policy "1.19.0" - snyk-python-plugin "1.19.7" + snyk-python-plugin "1.19.9" snyk-resolve "1.1.0" snyk-resolve-deps "4.7.2" snyk-sbt-plugin "2.11.0" @@ -14464,7 +14702,7 @@ snyk@^1.511.0: strip-ansi "^5.2.0" tar "^6.1.0" tempfile "^2.0.0" - update-notifier "^4.1.0" + update-notifier "^5.1.0" uuid "^3.3.2" wrap-ansi "^5.1.0" @@ -14489,22 +14727,6 @@ sockjs@^0.3.21: uuid "^3.4.0" websocket-driver "^0.7.4" -socks-proxy-agent@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== - dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" - sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -14517,6 +14739,11 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +source-map-js@^0.6.2: + version "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: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -14598,9 +14825,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + version "3.0.9" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" + integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== spdy-transport@^3.0.0: version "3.0.0" @@ -14693,9 +14920,9 @@ sshpk@^1.7.0: tweetnacl "~0.14.0" ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" @@ -14761,6 +14988,11 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-buffers@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-3.0.2.tgz#5249005a8d5c2d00b3a32e6e0a6ea209dc4f3521" + integrity sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ== + stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -14785,6 +15017,22 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +stream-to-array@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353" + integrity sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M= + dependencies: + any-promise "^1.1.0" + +stream-to-promise@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-to-promise/-/stream-to-promise-2.2.0.tgz#b1edb2e1c8cb11289d1b503c08d3f2aef51e650f" + integrity sha1-se2y4cjLESidG1A8CNPyrvUeZQ8= + dependencies: + any-promise "~1.3.0" + end-of-stream "~1.1.0" + stream-to-array "~2.3.0" + streamsearch@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" @@ -14898,11 +15146,6 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -15050,9 +15293,9 @@ supports-color@^7.0.0, supports-color@^7.1.0: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -15082,9 +15325,11 @@ svgo@^1.0.0, svgo@^1.2.2: util.promisify "~1.0.0" swr@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/swr/-/swr-0.5.4.tgz#9516af6ffd84ba2c23a804ff771be2eb83ba8d46" - integrity sha512-TUSxxuC8uP/4JKV22ml91WQ0tbif+9HVhm683xm8KYfwZIW5ogwcnU634dg3x6N7azpIDIOLokoIi+z5vCz/yA== + version "0.5.6" + resolved "https://registry.yarnpkg.com/swr/-/swr-0.5.6.tgz#70bfe9bc9d7ac49a064be4a0f4acf57982e55a31" + integrity sha512-Bmx3L4geMZjYT5S2Z6EE6/5Cx6v1Ka0LhqZKq8d6WL2eu9y6gHWz3dUzfIK/ymZVHVfwT/EweFXiYGgfifei3w== + dependencies: + dequal "2.0.2" symbol-observable@^1.1.0: version "1.2.0" @@ -15101,20 +15346,17 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.4: - version "6.0.8" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.8.tgz#b63f35af8d90601de282a3292226007a9429644f" - integrity sha512-OBAdezyozae8IvjHGXBDHByVkLCcsmffXUSj8LXkNb0SluRd4ug3GFCjk6JynZONIPhOkyr0Nnvbq1rlIspXyQ== +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== dependencies: ajv "^8.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" lodash.clonedeep "^4.5.0" - lodash.flatten "^4.4.0" lodash.truncate "^4.4.2" slice-ansi "^4.0.0" string-width "^4.2.0" + strip-ansi "^6.0.0" tailwindcss@^1.9.6: version "1.9.6" @@ -15149,7 +15391,7 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar-stream@^2.1.0, tar-stream@^2.1.2: +tar-stream@^2.0.1, tar-stream@^2.1.0, tar-stream@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -15206,11 +15448,6 @@ tempy@^0.3.0: type-fest "^0.3.1" unique-string "^1.0.0" -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - terminal-link@^2.0.0, terminal-link@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -15259,9 +15496,9 @@ terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: source-map-support "~0.5.12" terser@^5.3.4: - version "5.6.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.1.tgz#a48eeac5300c0a09b36854bf90d9c26fb201973c" - integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== + version "5.7.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" + integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -15318,11 +15555,6 @@ through@2, "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= - thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -15456,9 +15688,9 @@ tough-cookie@^4.0.0: universalify "^0.1.2" 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== + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== dependencies: punycode "^2.1.1" @@ -15467,6 +15699,11 @@ tree-kill@^1.2.2: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== +treeify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -15495,9 +15732,9 @@ tryer@^1.0.1: integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== ts-jest@^26.4.2: - version "26.5.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.4.tgz#207f4c114812a9c6d5746dd4d1cdf899eafc9686" - integrity sha512-I5Qsddo+VTm94SukBJ4cPimOoFZsYTeElR2xy6H2TOVs+NsvgYglW8KuQgKoApOKuaU/Ix/vrF9ebFZlb5D2Pg== + version "26.5.6" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" + integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== dependencies: bs-logger "0.x" buffer-from "1.x" @@ -15535,10 +15772,10 @@ tslib@^1, tslib@^1.10.0, tslib@^1.11.2, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9. resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" + integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== tsutils@^3.17.1: version "3.21.0" @@ -15564,6 +15801,11 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -15610,6 +15852,11 @@ type-fest@^0.10.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" integrity sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw== +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + type-fest@^0.18.0: version "0.18.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" @@ -15681,9 +15928,9 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@^4.0.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" - integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== + version "4.2.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" + integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== unbox-primitive@^1.0.0: version "1.0.1" @@ -15794,31 +16041,17 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +upath@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + upath@^1.1.1, upath@^1.1.2, upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-notifier@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -update-notifier@^5.0.1: +update-notifier@^5.0.1, update-notifier@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== @@ -15962,9 +16195,9 @@ v8-compile-cache@^2.0.3: integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" - integrity sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g== + version "7.1.2" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" + integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -16077,6 +16310,13 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -16529,9 +16769,9 @@ ws@^6.2.1: async-limiter "~1.0.0" ws@^7.4.4: - version "7.4.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" - integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== + version "7.4.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" + integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== xdg-basedir@^4.0.0: version "4.0.0" @@ -16568,25 +16808,20 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + 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" @@ -16603,6 +16838,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml-js@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/yaml-js/-/yaml-js-0.3.0.tgz#ad0893d9de881a93fd6bf936e8d89cdde309e848" + integrity sha512-JbTUdsPiCkOyz+JOSqAVc19omTnUBnBQglhuclYov5HpWbEOz8y+ftqWjiMa9Pe/eF/dmCUeNgVs/VWg53GlgQ== + yaml@^1.10.0, yaml@^1.7.2, yaml@^1.9.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" From ad95f180a1222072804aeb871fd5f9c5eec174d8 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sat, 22 May 2021 21:03:56 +0200 Subject: [PATCH 02/45] fix: eslint error --- src/components/NetworkErrorModal.tsx | 2 +- src/pages/Landing/index.tsx | 7 ++----- src/pages/Requests/components/RequestModal.tsx | 2 +- src/pages/Requests/index.tsx | 6 +++++- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/components/NetworkErrorModal.tsx b/src/components/NetworkErrorModal.tsx index c4d1fb8..fce0840 100644 --- a/src/components/NetworkErrorModal.tsx +++ b/src/components/NetworkErrorModal.tsx @@ -14,7 +14,7 @@ import css from '@emotion/css/macro' import tw from 'twin.macro' interface NetworkErrorModalProps { - onClose: (event: MouseEvent | KeyboardEvent) => void + onClose: (event?: MouseEvent | KeyboardEvent) => void isOpen: boolean } diff --git a/src/pages/Landing/index.tsx b/src/pages/Landing/index.tsx index 2c0f0f0..89e6262 100644 --- a/src/pages/Landing/index.tsx +++ b/src/pages/Landing/index.tsx @@ -30,11 +30,8 @@ const Page: React.FC = () => { const [port, setPort] = useState('') const [key, setKey] = useState('') const [useTls, setUseTls] = useState(() => protocol === 'https:') - const [ - existingProfiles, - setExistingProfiles, - getExistingProfiles, - ] = useSetState>([]) + const [existingProfiles, setExistingProfiles, getExistingProfiles] = + useSetState>([]) const [hasError, setHasError] = useState(false) const [isLoading, setIsLoading] = useState(false) diff --git a/src/pages/Requests/components/RequestModal.tsx b/src/pages/Requests/components/RequestModal.tsx index cad0e02..61af15e 100644 --- a/src/pages/Requests/components/RequestModal.tsx +++ b/src/pages/Requests/components/RequestModal.tsx @@ -38,7 +38,7 @@ const TabsWrapper = styled.div` interface RequestModalProps { req: RequestItem - onClose: (event: MouseEvent | KeyboardEvent) => void + onClose: (event?: MouseEvent | KeyboardEvent) => void } const RequestModal: React.FC = ({ req, onClose }) => { diff --git a/src/pages/Requests/index.tsx b/src/pages/Requests/index.tsx index 6db575c..0d0db5c 100644 --- a/src/pages/Requests/index.tsx +++ b/src/pages/Requests/index.tsx @@ -106,7 +106,11 @@ const Page: React.FC = () => { (setModal: (modal: ModalProps) => void, req: RequestItem) => { setModal({ children({ onClose }) { - return + return onClose ? ( + + ) : ( + + ) }, onClose() { // noop From 7440001640fde411b0d917ebc816a62a863acece Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 23 May 2021 21:28:45 +0200 Subject: [PATCH 03/45] chore: use node 14 --- .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 2 +- .nvmrc | 2 +- package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c772e9d..684eeeb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node-version: [12] + node-version: [14] steps: - uses: actions/checkout@v1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 19e6111..88be23d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - node-version: [12] + node-version: [14] steps: - uses: actions/checkout@v1 diff --git a/.nvmrc b/.nvmrc index 3cacc0b..da2d398 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -12 \ No newline at end of file +14 \ No newline at end of file diff --git a/package.json b/package.json index f438608..a6da801 100644 --- a/package.json +++ b/package.json @@ -130,7 +130,7 @@ "*.{js,jsx,ts,tsx}": "eslint --ext .js,.jsx,.ts,.tsx" }, "engines": { - "node": ">=12.0.0" + "node": "^14" }, "snyk": true } From 77e2cd5f350af93c6baf3c4251330b2ad57cc5e3 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 23 May 2021 22:06:55 +0200 Subject: [PATCH 04/45] chore: add build script --- .github/workflows/release.yml | 2 +- package.json | 13 +++++++----- scripts/build.mjs | 38 +++++++++++++++++++++++++++++++++++ yarn.lock | 33 ++++++++++++++++++++++++------ 4 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 scripts/build.mjs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 88be23d..a8677bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,7 +37,7 @@ jobs: REACT_APP_HASH_ROUTER: true run: | yarn install - CI=false yarn build + CI=false yarn build:release sed -i 's/"\/home"/"\/#home"/g' build/manifest.json sed -i 's/ YASD - Yet Another Surge Dashboard From 1b6202d4c55987cfc78ed02bba8ea1bb0cea025d Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 23 May 2021 23:49:14 +0200 Subject: [PATCH 07/45] chore: add build script --- package.json | 2 ++ scripts/build.mjs | 46 ++++++++++++++++++++++++++++++++++++++++++---- yarn.lock | 16 ++++++++++++++++ 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 8fbba5f..2e8c1b5 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@types/chart.js": "^2.9.27", "@types/enzyme": "^3.10.7", "@types/enzyme-adapter-react-16": "^1.0.6", + "@types/fs-extra": "^9.0.11", "@types/jest": "^26.0.15", "@types/loadable__component": "^5.13.0", "@types/lodash-es": "^4.17.3", @@ -72,6 +73,7 @@ "eslint-plugin-prettier": "^3.3.1", "eslint-plugin-react": "^7.21.5", "eslint-plugin-react-hooks": "^4.2.0", + "fs-extra": "^10.0.0", "husky": "^5.2.0", "identity-obj-proxy": "^3.0.0", "lint-staged": "^10.4.0", diff --git a/scripts/build.mjs b/scripts/build.mjs index 9838c4a..b06b3f4 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -1,7 +1,6 @@ -const envs = { - REACT_APP_SHOW_AD: 'REACT_APP_SHOW_AD', - REACT_APP_HASH_ROUTER: 'REACT_APP_HASH_ROUTER', -} +/* global $ */ + +import fs from 'fs-extra' await (async () => { const { argv } = process @@ -23,7 +22,11 @@ await (async () => { process.env.NODE_ENV = 'production' process.env.REACT_APP_SHOW_AD = 'true' process.env.REACT_APP_HASH_ROUTER = 'true' + process.env.PUBLIC_URL = getUrlPathPrefix() await $`craco build` + await changeManifest({ + start_url: `${getUrlPathPrefix()}/#/home`, + }) break @@ -31,8 +34,43 @@ await (async () => { process.env.NODE_ENV = 'production' process.env.REACT_APP_HASH_ROUTER = 'true' process.env.REACT_APP_RUN_IN_SURGE = 'true' + process.env.REACT_APP_URL_PATH_PREFIX = '/web' + process.env.PUBLIC_URL = getUrlPathPrefix() await $`craco build` + await changeManifest({ + start_url: `${getUrlPathPrefix()}/#/home`, + }) break + + default: + process.env.NODE_ENV = 'production' + process.env.PUBLIC_URL = getUrlPathPrefix() + await $`craco build` + + if ('REACT_APP_HASH_ROUTER' in process.env) { + await changeManifest({ + start_url: `${getUrlPathPrefix()}/#/home`, + }) + } } })() + +async function changeManifest(obj = {}) { + const manifest = await fs.readJson('build/manifest.json') + + await fs.writeJSON( + 'build/manifest.json', + { + ...manifest, + ...obj, + }, + { spaces: 2 }, + ) +} + +function getUrlPathPrefix() { + return 'REACT_APP_URL_PATH_PREFIX' in process.env + ? process.env.REACT_APP_URL_PATH_PREFIX + : '' +} diff --git a/yarn.lock b/yarn.lock index 31b957d..3883567 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2535,6 +2535,13 @@ resolved "https://registry.yarnpkg.com/@types/flat-cache/-/flat-cache-2.0.0.tgz#64e5d3b426c392b603a208a55bdcc7d920ce6e57" integrity sha512-fHeEsm9hvmZ+QHpw6Fkvf19KIhuqnYLU6vtWLjd5BsMd/qVi7iTkMioDZl0mQmfNRA1A6NwvhrSRNr9hGYZGww== +"@types/fs-extra@^9.0.11": + version "9.0.11" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.11.tgz#8cc99e103499eab9f347dbc6ca4e99fb8d2c2b87" + integrity sha512-mZsifGG4QeQ7hlkhO56u7zt/ycBgGxSVsFI/6lGTU34VtwkiqrrSDgw0+ygs8kFGWcXnFQWMrzF2h7TtDFNixA== + dependencies: + "@types/node" "*" + "@types/glob@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" @@ -7286,6 +7293,15 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" From 0afad09afd8a6c3033aa2b624570493ef82ebb22 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 24 May 2021 15:16:04 +0200 Subject: [PATCH 08/45] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E4=B8=A4?= =?UTF-8?q?=E7=A7=8D=E5=9C=BA=E6=99=AF=E7=9A=84=E7=99=BB=E5=85=A5=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Index/menu.tsx | 10 +- src/pages/Landing/Regular.tsx | 315 ++++++++++++++++++++++++++++++++++ src/pages/Landing/Surge.tsx | 194 +++++++++++++++++++++ src/pages/Landing/hooks.ts | 34 ++++ src/pages/Landing/index.tsx | 281 +----------------------------- 5 files changed, 552 insertions(+), 282 deletions(-) create mode 100644 src/pages/Landing/Regular.tsx create mode 100644 src/pages/Landing/Surge.tsx create mode 100644 src/pages/Landing/hooks.ts diff --git a/src/pages/Index/menu.tsx b/src/pages/Index/menu.tsx index fed1754..8030f44 100644 --- a/src/pages/Index/menu.tsx +++ b/src/pages/Index/menu.tsx @@ -3,6 +3,7 @@ import { jsx } from '@emotion/core' import React from 'react' import tw, { TwStyle } from 'twin.macro' +import { isRunInSurge } from '../../utils' import CapabilityTile from './components/CapabilityTile' export interface MenuItem { @@ -61,11 +62,14 @@ const menu: Array = [ title: 'Rewrite', component: , }, - { +] + +if (!isRunInSurge()) { + menu.push({ title: 'GitHub', subTitle: '🌟', link: 'https://github.com/geekdada/yasd', - }, -] + }) +} export default menu diff --git a/src/pages/Landing/Regular.tsx b/src/pages/Landing/Regular.tsx new file mode 100644 index 0000000..095ba48 --- /dev/null +++ b/src/pages/Landing/Regular.tsx @@ -0,0 +1,315 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import axios from 'axios' +import React, { + FormEventHandler, + useCallback, + useEffect, + useState, +} from 'react' +import { Heading, Input, LoadingButton, Checkbox } from '@sumup/circuit-ui' +import { CircleWarning } from '@sumup/icons' +import css from '@emotion/css/macro' +import tw from 'twin.macro' +import store from 'store2' +import { v4 as uuid } from 'uuid' +import { find } from 'lodash-es' +import { useHistory } from 'react-router-dom' + +import ProfileCell from '../../components/ProfileCell' +import Ad from '../../components/Ad' +import useSetState from '../../hooks/use-set-state' +import { Profile } from '../../types' +import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' +import { useAuthData } from './hooks' + +const Page: React.FC = () => { + const history = useHistory() + const protocol = window.location.protocol + const { + data, + setData, + hasError, + setHasError, + isLoading, + setIsLoading, + keepCredential, + setKeepCredential, + } = useAuthData() + const [existingProfiles, setExistingProfiles, getExistingProfiles] = + useSetState>([]) + + const addProfile = (config: Omit): Profile => { + const profile: Profile = { + ...config, + id: uuid(), + } + const newProfiles = [profile, ...existingProfiles] + setExistingProfiles(newProfiles) + + if (keepCredential) { + store.set(ExistingProfiles, newProfiles) + store.set(LastUsedProfile, profile.id) + } + + return profile + } + + const selectProfile = useCallback( + (id: string) => { + getExistingProfiles().then((profiles) => { + const profile = find(profiles, { id }) + + if (profile) { + if (keepCredential) { + store.set(LastUsedProfile, profile.id) + } + history.replace('/home') + } + }) + }, + [getExistingProfiles, history, keepCredential], + ) + + const deleteProfile = useCallback( + (id: string) => { + const profiles = existingProfiles.filter((item) => item.id !== id) + + setExistingProfiles(profiles) + store.set(ExistingProfiles, profiles) + }, + [setExistingProfiles, existingProfiles], + ) + + const resetFields = () => { + setData((prev) => ({ + ...prev, + name: '', + host: '', + port: '', + key: '', + useTls: protocol === 'https:', + })) + } + + const onSubmit: FormEventHandler = (e) => { + e.preventDefault() + + if (!data.name || !data.host || !data.port || !data.key) { + return + } + + setIsLoading(true) + + axios + .request({ + url: `${data.useTls ? 'https' : 'http'}://${data.host}:${ + data.port + }/v1/outbound`, + method: 'GET', + timeout: 3000, + headers: { + 'x-key': data.key, + }, + }) + .then((res) => { + setHasError(false) + + const newProfile = addProfile({ + name: data.name, + host: data.host, + port: Number(data.port), + key: data.key, + platform: res.headers['x-system']?.includes('macOS') + ? 'macos' + : 'ios', + platformVersion: res.headers['x-surge-version'] || '', + platformBuild: res.headers['x-surge-build'] || '', + tls: data.useTls, + }) + + resetFields() + setIsLoading(false) + selectProfile(newProfile.id) + }) + .catch((err) => { + setHasError(err.message) + console.error(err) + setIsLoading(false) + }) + } + + useEffect(() => { + const storedExistingProfiles = store.get(ExistingProfiles) + + if (storedExistingProfiles) { + setExistingProfiles(storedExistingProfiles) + } + }, [setExistingProfiles]) + + return ( +
+ + YASD + + {`v${process.env.REACT_APP_VERSION}`} + + + +
+ 添加 Surge + +
+

+ 该功能仅 Surge iOS 4.4.0 和 Surge Mac 4.0.0 以上版本支持。 +

+

+ + 🔗 开启方式 + +

+

+ Surge Mac v4.0.6 (1280) 开始已支持开启 HTTPS API,故不再支持使用 + yasd-helper。 +

+
+ +
+ + setData((prev) => ({ + ...prev, + name: (target as HTMLInputElement).value, + })) + } + /> + + setData((prev) => ({ + ...prev, + host: (target as HTMLInputElement).value, + })) + } + /> + + setData((prev) => ({ + ...prev, + port: (target as HTMLInputElement).value, + })) + } + /> + + setData((prev) => ({ + ...prev, + key: (target as HTMLInputElement).value, + })) + } + /> + +
+ + setData((prev) => ({ + ...prev, + useTls: !prev.useTls, + })) + }> + HTTPS(请确保开启 http-api-tls) + + setKeepCredential((prev) => !prev)}> + 保存到浏览器 + +
+ +
+ + Done + +
+ + {typeof hasError === 'string' && ( +
+ + {hasError} +
+ )} +
+
+ + {existingProfiles.length > 0 && ( +
+ History + +
+ {existingProfiles.map((profile) => { + return ( +
+ selectProfile(profile.id)} + onDelete={() => deleteProfile(profile.id)} + /> +
+ ) + })} +
+
+ )} + +
+ +
+
+ ) +} + +export default Page diff --git a/src/pages/Landing/Surge.tsx b/src/pages/Landing/Surge.tsx new file mode 100644 index 0000000..f35bcc5 --- /dev/null +++ b/src/pages/Landing/Surge.tsx @@ -0,0 +1,194 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import axios from 'axios' +import React, { FormEventHandler, useCallback, useEffect } from 'react' +import { Heading, Input, LoadingButton, Checkbox } from '@sumup/circuit-ui' +import { CircleWarning } from '@sumup/icons' +import css from '@emotion/css/macro' +import tw from 'twin.macro' +import store from 'store2' +import { v4 as uuid } from 'uuid' +import { find } from 'lodash-es' +import { useHistory } from 'react-router-dom' + +import useSetState from '../../hooks/use-set-state' +import { Profile } from '../../types' +import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' +import { useAuthData } from './hooks' + +const Page: React.FC = () => { + const history = useHistory() + const protocol = window.location.protocol + const { + data, + setData, + hasError, + setHasError, + isLoading, + setIsLoading, + keepCredential, + setKeepCredential, + } = useAuthData() + const [existingProfiles, setExistingProfiles, getExistingProfiles] = + useSetState>([]) + + const addProfile = (config: Omit): Profile => { + const profile: Profile = { + ...config, + id: uuid(), + } + const newProfiles = [profile, ...existingProfiles] + setExistingProfiles(newProfiles) + + if (keepCredential) { + store.set(ExistingProfiles, newProfiles) + store.set(LastUsedProfile, profile.id) + } + + return profile + } + + const selectProfile = useCallback( + (id: string) => { + getExistingProfiles().then((profiles) => { + const profile = find(profiles, { id }) + + if (profile) { + if (keepCredential) { + store.set(LastUsedProfile, profile.id) + } + history.replace('/home') + } + }) + }, + [getExistingProfiles, history, keepCredential], + ) + + const resetFields = () => { + setData((prev) => ({ + ...prev, + key: '', + })) + } + + const onSubmit: FormEventHandler = (e) => { + e.preventDefault() + + if (!data.key) { + return + } + + const { hostname, port } = window.location + + setIsLoading(true) + + axios + .request({ + url: `${protocol}//${hostname}:${port}/v1/outbound`, + method: 'GET', + timeout: 3000, + headers: { + 'x-key': data.key, + }, + }) + .then((res) => { + setHasError(false) + + const newProfile = addProfile({ + name: 'Surge for Mac', + host: hostname, + port: Number(port), + key: data.key, + platform: res.headers['x-system']?.includes('macOS') + ? 'macos' + : 'ios', + platformVersion: res.headers['x-surge-version'] || '', + platformBuild: res.headers['x-surge-build'] || '', + tls: protocol === 'https:', + }) + + resetFields() + setIsLoading(false) + selectProfile(newProfile.id) + }) + .catch((err) => { + setHasError(err.message) + console.error(err) + setIsLoading(false) + }) + } + + useEffect(() => { + const storedExistingProfiles = store.get(ExistingProfiles) + + if (storedExistingProfiles) { + setExistingProfiles(storedExistingProfiles) + } + }, [setExistingProfiles]) + + return ( +
+ + YASD + + {`v${process.env.REACT_APP_VERSION}`} + + + +
+ 添加 Surge + +
+ + setData((prev) => ({ + ...prev, + key: (target as HTMLInputElement).value, + })) + } + /> + +
+ setKeepCredential((prev) => !prev)}> + 保存到浏览器 + +
+ +
+ + Done + +
+ + {typeof hasError === 'string' && ( +
+ + {hasError} +
+ )} +
+
+
+ ) +} + +export default Page diff --git a/src/pages/Landing/hooks.ts b/src/pages/Landing/hooks.ts new file mode 100644 index 0000000..bcee1df --- /dev/null +++ b/src/pages/Landing/hooks.ts @@ -0,0 +1,34 @@ +import { useState } from 'react' + +interface AuthData { + name: string + host: string + port: string + key: string + useTls: boolean +} + +export function useAuthData() { + const protocol = window.location.protocol + const data = useState(() => ({ + name: '', + host: '', + port: '', + key: '', + useTls: protocol === 'https:', + })) + const [hasError, setHasError] = useState(false) + const [isLoading, setIsLoading] = useState(false) + const [keepCredential, setKeepCredential] = useState(false) + + return { + data: data[0], + setData: data[1], + hasError, + setHasError, + isLoading, + setIsLoading, + keepCredential, + setKeepCredential, + } +} diff --git a/src/pages/Landing/index.tsx b/src/pages/Landing/index.tsx index 89e6262..5e0bb97 100644 --- a/src/pages/Landing/index.tsx +++ b/src/pages/Landing/index.tsx @@ -1,279 +1,2 @@ -/** @jsx jsx */ -import { jsx } from '@emotion/core' -import axios from 'axios' -import React, { - FormEventHandler, - useCallback, - useEffect, - useState, -} from 'react' -import { Heading, Input, LoadingButton, Checkbox } from '@sumup/circuit-ui' -import { CircleWarning } from '@sumup/icons' -import css from '@emotion/css/macro' -import tw from 'twin.macro' -import store from 'store2' -import { v4 as uuid } from 'uuid' -import { find } from 'lodash-es' -import { useHistory } from 'react-router-dom' - -import ProfileCell from '../../components/ProfileCell' -import Ad from '../../components/Ad' -import useSetState from '../../hooks/use-set-state' -import { Profile } from '../../types' -import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' - -const Page: React.FC = () => { - const history = useHistory() - const protocol = window.location.protocol - const [name, setName] = useState('') - const [host, setHost] = useState('') - const [port, setPort] = useState('') - const [key, setKey] = useState('') - const [useTls, setUseTls] = useState(() => protocol === 'https:') - const [existingProfiles, setExistingProfiles, getExistingProfiles] = - useSetState>([]) - const [hasError, setHasError] = useState(false) - const [isLoading, setIsLoading] = useState(false) - - const addProfile = (config: Omit): Profile => { - const profile: Profile = { - ...config, - id: uuid(), - } - const newProfiles = [profile, ...existingProfiles] - setExistingProfiles(newProfiles) - store.set(ExistingProfiles, newProfiles) - store.set(LastUsedProfile, profile.id) - - return profile - } - - const selectProfile = useCallback( - (id: string) => { - getExistingProfiles().then((profiles) => { - const profile = find(profiles, { id }) - - if (profile) { - store.set(LastUsedProfile, profile.id) - history.replace('/home') - } - }) - }, - [getExistingProfiles, history], - ) - - const deleteProfile = useCallback( - (id: string) => { - const profiles = existingProfiles.filter((item) => item.id !== id) - - setExistingProfiles(profiles) - store.set(ExistingProfiles, profiles) - }, - [setExistingProfiles, existingProfiles], - ) - - const resetFields = () => { - setName('') - setHost('') - setPort('') - setKey('') - setUseTls(protocol === 'https:') - } - - const onSubmit: FormEventHandler = (e) => { - e.preventDefault() - - if (!name || !host || !port || !key) { - return - } - - setIsLoading(true) - - axios - .request({ - url: `${useTls ? 'https' : 'http'}://${host}:${port}/v1/outbound`, - method: 'GET', - timeout: 3000, - headers: { - 'x-key': key, - }, - }) - .then((res) => { - setHasError(false) - - const newProfile = addProfile({ - name, - host, - port: Number(port), - key, - platform: res.headers['x-system']?.includes('macOS') - ? 'macos' - : 'ios', - platformVersion: res.headers['x-surge-version'] || '', - platformBuild: res.headers['x-surge-build'] || '', - tls: useTls, - }) - - resetFields() - setIsLoading(false) - selectProfile(newProfile.id) - }) - .catch((err) => { - setHasError(err.message) - console.error(err) - setIsLoading(false) - }) - } - - useEffect(() => { - const storedExistingProfiles = store.get(ExistingProfiles) - - if (storedExistingProfiles) { - setExistingProfiles(storedExistingProfiles) - } - }, [setExistingProfiles]) - - return ( -
- - YASD - - {`v${process.env.REACT_APP_VERSION}`} - - - -
- Add New Host - -
-

- 该功能仅 Surge iOS 4.4.0 和 Surge Mac 4.0.0 以上版本支持。 -

-

- - 🔗 开启方式 - -

-

- Surge Mac v4.0.6 (1280) 开始已支持开启 HTTPS API,故不再支持使用 - yasd-helper。 -

-
- -
- - setName((target as HTMLInputElement).value) - } - /> - - setHost((target as HTMLInputElement).value) - } - /> - - setPort((target as HTMLInputElement).value) - } - /> - - setKey((target as HTMLInputElement).value) - } - /> - -
- setUseTls((prev) => !prev)}> - HTTPS(请确保开启 http-api-tls) - -
- -
- - Done - -
- - {typeof hasError === 'string' && ( -
- - {hasError} -
- )} -
-
- - {existingProfiles.length > 0 && ( -
- History - -
- {existingProfiles.map((profile) => { - return ( -
- selectProfile(profile.id)} - onDelete={() => deleteProfile(profile.id)} - /> -
- ) - })} -
-
- )} - -
- -
-
- ) -} - -export default Page +export { default as RegularLanding } from './Regular' +export { default as SurgeLanding } from './Surge' From 4456b3d183535fc68ca9b480471007ad80807bf5 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 24 May 2021 15:28:11 +0200 Subject: [PATCH 09/45] =?UTF-8?q?fix:=20=E6=9C=AA=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E6=88=90=E5=8A=9F=E6=97=B6=E4=B8=8D=E8=AF=B7=E6=B1=82?= =?UTF-8?q?API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Index/components/CapabilityTile.tsx | 9 +++++++-- src/pages/Index/components/Events.tsx | 7 ++++++- src/pages/Index/components/TrafficCell/index.tsx | 4 +++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/pages/Index/components/CapabilityTile.tsx b/src/pages/Index/components/CapabilityTile.tsx index 485a680..bb97e0a 100644 --- a/src/pages/Index/components/CapabilityTile.tsx +++ b/src/pages/Index/components/CapabilityTile.tsx @@ -6,8 +6,9 @@ import { Toggle } from '@sumup/circuit-ui' import { useHistory } from 'react-router-dom' import useSWR, { mutate } from 'swr' import tw from 'twin.macro' -import React, { MouseEventHandler, useCallback } from 'react' +import React, { useCallback } from 'react' +import { useProfile } from '../../../models/profile' import { Capability } from '../../../types' import fetcher from '../../../utils/fetcher' import MenuTile, { MenuTileContent, MenuTileTitle } from './MenuTile' @@ -23,7 +24,11 @@ const CapabilityTile: React.FC = ({ title, link, }) => { - const { data: capability } = useSWR(api, fetcher) + const profile = useProfile() + const { data: capability } = useSWR( + profile !== undefined ? api : null, + fetcher, + ) const history = useHistory() const toggle = useCallback(() => { diff --git a/src/pages/Index/components/Events.tsx b/src/pages/Index/components/Events.tsx index 3fa2278..ee12693 100644 --- a/src/pages/Index/components/Events.tsx +++ b/src/pages/Index/components/Events.tsx @@ -8,13 +8,18 @@ import useSWR from 'swr' import tw from 'twin.macro' import React from 'react' +import { useProfile } from '../../../models/profile' import { EventList } from '../../../types' import fetcher from '../../../utils/fetcher' dayjs.extend(localizedFormat) const Events: React.FC = () => { - const { data: events } = useSWR('/events', fetcher) + const profile = useProfile() + const { data: events } = useSWR( + profile !== undefined ? '/events' : null, + fetcher, + ) return (
diff --git a/src/pages/Index/components/TrafficCell/index.tsx b/src/pages/Index/components/TrafficCell/index.tsx index 999f38c..6e72ec6 100644 --- a/src/pages/Index/components/TrafficCell/index.tsx +++ b/src/pages/Index/components/TrafficCell/index.tsx @@ -9,6 +9,7 @@ import useSWR from 'swr' import tw from 'twin.macro' import React, { useEffect, useMemo, useState } from 'react' +import { useProfile } from '../../../../models/profile' import { ConnectorTraffic, Traffic } from '../../../../types' import fetcher from '../../../../utils/fetcher' @@ -39,8 +40,9 @@ const Data = styled.div` export const REFRESH_RATE = 1000 const Index: React.FC = () => { + const profile = useProfile() const { data: traffic, error: trafficError } = useSWR( - '/traffic', + profile !== undefined ? '/traffic' : null, (url) => fetcher(url).then((res) => { res.nowTime = Date.now() From 2bcc874fe3176231223157d28720868860b45120 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 24 May 2021 16:23:13 +0200 Subject: [PATCH 10/45] =?UTF-8?q?refactor:=20profile=20=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 135 ++++++++++++++++++---------------- src/models/profile.tsx | 31 ++++---- src/pages/Landing/Regular.tsx | 4 + src/pages/Landing/Surge.tsx | 4 + 4 files changed, 95 insertions(+), 79 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index fe83911..ebabbd8 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -23,14 +23,17 @@ import 'react-toastify/dist/ReactToastify.css' import FullLoading from './components/FullLoading' import NewVersionAlert from './components/NewVersionAlert' import ScrollToTop from './components/ScrollToTop' -import { ProfileProvider } from './models/profile' import NetworkErrorModal from './components/NetworkErrorModal' -import LandingPage from './pages/Landing' +import { useProfile, useSetProfile } from './models/profile' +import { + RegularLanding as LandingPage, + SurgeLanding as SurgeLandingPage, +} from './pages/Landing' import IndexPage from './pages/Index' import PageLayout from './components/PageLayout' import { Profile } from './types' +import { isRunInSurge } from './utils' import { ExistingProfiles, LastUsedProfile } from './utils/constant' -import { setServer } from './utils/fetcher' const PoliciesPage = loadable(() => import('./pages/Policies'), { fallback: , @@ -120,21 +123,31 @@ const App: React.FC = () => { const [isNetworkModalOpen, setIsNetworkModalOpen] = useState(false) const location = useLocation() const history = useHistory() - const currentProfile = useRef() + const setProfile = useSetProfile() + const profile = useProfile() + const [hasInit, setHasInit] = useState(false) + + useEffect( + () => { + const existingProfiles = store.get(ExistingProfiles) + const lastId = store.get(LastUsedProfile) + const result = find(existingProfiles, { id: lastId }) - if (location.pathname !== '/') { - const existingProfiles = store.get(ExistingProfiles) - const lastId = store.get(LastUsedProfile) - const result = find(existingProfiles, { id: lastId }) + if (result) { + setProfile(result) + } - if (result) { - currentProfile.current = result + setHasInit(true) + }, + // eslint-disable-next-line + [], + ) - setServer(result.host, result.port, result.key, { tls: result.tls }) - } else { + useEffect(() => { + if (hasInit && !profile && location.pathname !== '/') { history.replace('/') } - } + }, [hasInit, history, location.pathname, profile]) useEffect(() => { ReactGA.pageview(location.pathname) @@ -154,55 +167,53 @@ const App: React.FC = () => { refreshWhenOffline: true, }}> - - - - { - window.location.replace('/') - }} - /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + { + window.location.replace('/') + }} + /> + + + + + + {isRunInSurge() ? : } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) diff --git a/src/models/profile.tsx b/src/models/profile.tsx index 012d4ad..5f8d515 100644 --- a/src/models/profile.tsx +++ b/src/models/profile.tsx @@ -1,31 +1,28 @@ import React, { createContext, useState } from 'react' import { Profile } from '../types' +import { setServer } from '../utils/fetcher' -type ProfileContextType = { +interface IProfileContext { profile?: Profile + setProfile: (profile: Profile) => void } -const ProfileContext = createContext(undefined) - -export const ProfileProvider: React.FC<{ - profile?: Profile -}> = (props) => { - const [profile, setProfile] = useState() - - if (profile !== props.profile) { - setProfile(props.profile) - } - - return ( - - {props.children} - - ) +const context: IProfileContext = { + setProfile(profile) { + setServer(profile.host, profile.port, profile.key, { tls: profile.tls }) + this.profile = profile + }, } +export const ProfileContext = createContext(context) + export const useProfile = (): Profile | undefined => { const context = React.useContext(ProfileContext) return context?.profile } + +export const useSetProfile = (): IProfileContext['setProfile'] => { + return context.setProfile.bind(context) +} diff --git a/src/pages/Landing/Regular.tsx b/src/pages/Landing/Regular.tsx index 095ba48..8cc63ea 100644 --- a/src/pages/Landing/Regular.tsx +++ b/src/pages/Landing/Regular.tsx @@ -19,6 +19,7 @@ import { useHistory } from 'react-router-dom' import ProfileCell from '../../components/ProfileCell' import Ad from '../../components/Ad' import useSetState from '../../hooks/use-set-state' +import { useSetProfile } from '../../models/profile' import { Profile } from '../../types' import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' import { useAuthData } from './hooks' @@ -38,6 +39,7 @@ const Page: React.FC = () => { } = useAuthData() const [existingProfiles, setExistingProfiles, getExistingProfiles] = useSetState>([]) + const setProfile = useSetProfile() const addProfile = (config: Omit): Profile => { const profile: Profile = { @@ -64,6 +66,8 @@ const Page: React.FC = () => { if (keepCredential) { store.set(LastUsedProfile, profile.id) } + + setProfile(profile) history.replace('/home') } }) diff --git a/src/pages/Landing/Surge.tsx b/src/pages/Landing/Surge.tsx index f35bcc5..bee1b21 100644 --- a/src/pages/Landing/Surge.tsx +++ b/src/pages/Landing/Surge.tsx @@ -12,6 +12,7 @@ import { find } from 'lodash-es' import { useHistory } from 'react-router-dom' import useSetState from '../../hooks/use-set-state' +import { useSetProfile } from '../../models/profile' import { Profile } from '../../types' import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' import { useAuthData } from './hooks' @@ -31,6 +32,7 @@ const Page: React.FC = () => { } = useAuthData() const [existingProfiles, setExistingProfiles, getExistingProfiles] = useSetState>([]) + const setProfile = useSetProfile() const addProfile = (config: Omit): Profile => { const profile: Profile = { @@ -57,6 +59,8 @@ const Page: React.FC = () => { if (keepCredential) { store.set(LastUsedProfile, profile.id) } + + setProfile(profile) history.replace('/home') } }) From 04b51187e616bece093402f86f9b4f1f36ac305f Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 24 May 2021 16:34:17 +0200 Subject: [PATCH 11/45] =?UTF-8?q?feat:=20=E7=99=BB=E5=87=BA=E6=8C=89?= =?UTF-8?q?=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Index/index.tsx | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/pages/Index/index.tsx b/src/pages/Index/index.tsx index 7a043a1..322e1d0 100644 --- a/src/pages/Index/index.tsx +++ b/src/pages/Index/index.tsx @@ -1,19 +1,22 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' import React, { useCallback } from 'react' -import { Heading, ModalProvider, Toggle } from '@sumup/circuit-ui' +import { Button, Heading, ModalProvider, Toggle } from '@sumup/circuit-ui' import styled from '@emotion/styled/macro' import css from '@emotion/css/macro' import tw from 'twin.macro' import { delay } from 'bluebird' import { useHistory } from 'react-router-dom' import useSWR, { mutate } from 'swr' +import store, { remove } from 'store2' import { DataGroup, DataRow, DataRowMain } from '../../components/Data' import ProfileCell from '../../components/ProfileCell' import Ad from '../../components/Ad' import { useProfile } from '../../models/profile' import { Capability } from '../../types' +import { isRunInSurge } from '../../utils' +import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' import fetcher from '../../utils/fetcher' import TrafficCell from './components/TrafficCell' import Events from './components/Events' @@ -65,6 +68,12 @@ const Page: React.FC = () => { }) }, [enhancedMode]) + const logout = () => { + store.remove(LastUsedProfile) + store.remove(ExistingProfiles) + window.location.reload() + } + const openLink = (link?: string) => { if (!link) return @@ -92,7 +101,16 @@ const Page: React.FC = () => { onDoubleClick={() => window.location.reload(true)}>
- + + {isRunInSurge() ? ( +
+ +
+ ) : ( + + )} )} From d941a945b256de4abfba670410fcb12a8d83abe9 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 24 May 2021 23:19:54 +0200 Subject: [PATCH 12/45] fix: profile store --- src/App.tsx | 119 +++++++++++++++++++--------------- src/models/profile.tsx | 69 ++++++++++++++++---- src/pages/Landing/Regular.tsx | 9 ++- src/pages/Landing/Surge.tsx | 20 ++++-- 4 files changed, 145 insertions(+), 72 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index ebabbd8..16c62c7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -24,7 +24,11 @@ import FullLoading from './components/FullLoading' import NewVersionAlert from './components/NewVersionAlert' import ScrollToTop from './components/ScrollToTop' import NetworkErrorModal from './components/NetworkErrorModal' -import { useProfile, useSetProfile } from './models/profile' +import { + ProfileProvider, + useProfile, + useProfileDispatch, +} from './models/profile' import { RegularLanding as LandingPage, SurgeLanding as SurgeLandingPage, @@ -123,7 +127,7 @@ const App: React.FC = () => { const [isNetworkModalOpen, setIsNetworkModalOpen] = useState(false) const location = useLocation() const history = useHistory() - const setProfile = useSetProfile() + const profileDispatch = useProfileDispatch() const profile = useProfile() const [hasInit, setHasInit] = useState(false) @@ -134,7 +138,10 @@ const App: React.FC = () => { const result = find(existingProfiles, { id: lastId }) if (result) { - setProfile(result) + profileDispatch({ + type: 'update', + payload: result, + }) } setHasInit(true) @@ -166,57 +173,65 @@ const App: React.FC = () => { }, refreshWhenOffline: true, }}> + + + { + window.location.replace('/') + }} + /> + + + + + + {isRunInSurge() ? : } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) +} + +const AppWrapper: React.FC = () => { + return ( + - - - { - window.location.replace('/') - }} - /> - - - - - - {isRunInSurge() ? : } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + ) } -export default App +export default AppWrapper diff --git a/src/models/profile.tsx b/src/models/profile.tsx index 5f8d515..94cf234 100644 --- a/src/models/profile.tsx +++ b/src/models/profile.tsx @@ -1,28 +1,75 @@ -import React, { createContext, useState } from 'react' +import React, { createContext, Dispatch, Reducer, useReducer } from 'react' import { Profile } from '../types' import { setServer } from '../utils/fetcher' interface IProfileContext { profile?: Profile - setProfile: (profile: Profile) => void } -const context: IProfileContext = { - setProfile(profile) { - setServer(profile.host, profile.port, profile.key, { tls: profile.tls }) - this.profile = profile - }, +type ReducerAction = + | { + type: 'update' + payload: Profile + } + | { + type: 'clear' + } + +const profileReducer: Reducer = ( + state, + action, +) => { + switch (action.type) { + case 'update': + setServer(action.payload.host, action.payload.port, action.payload.key, { + tls: action.payload.tls, + }) + return { + profile: action.payload, + } + case 'clear': + return { + profile: undefined, + } + default: + throw new Error() + } } -export const ProfileContext = createContext(context) +const ProfileContext = createContext({ + profile: undefined, +}) + +const ProfileDispatchContext = + createContext | undefined>(undefined) + +export const ProfileProvider: React.FC = (props) => { + const [state, dispatch] = useReducer(profileReducer, { + profile: undefined, + }) + + return ( + + + {props.children} + + + ) +} export const useProfile = (): Profile | undefined => { const context = React.useContext(ProfileContext) - return context?.profile + return context.profile } -export const useSetProfile = (): IProfileContext['setProfile'] => { - return context.setProfile.bind(context) +export const useProfileDispatch = (): Dispatch => { + const context = React.useContext(ProfileDispatchContext) + + if (!context) { + throw new Error() + } + + return context } diff --git a/src/pages/Landing/Regular.tsx b/src/pages/Landing/Regular.tsx index 8cc63ea..30c8b7e 100644 --- a/src/pages/Landing/Regular.tsx +++ b/src/pages/Landing/Regular.tsx @@ -19,7 +19,7 @@ import { useHistory } from 'react-router-dom' import ProfileCell from '../../components/ProfileCell' import Ad from '../../components/Ad' import useSetState from '../../hooks/use-set-state' -import { useSetProfile } from '../../models/profile' +import { useProfileDispatch } from '../../models/profile' import { Profile } from '../../types' import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' import { useAuthData } from './hooks' @@ -39,7 +39,7 @@ const Page: React.FC = () => { } = useAuthData() const [existingProfiles, setExistingProfiles, getExistingProfiles] = useSetState>([]) - const setProfile = useSetProfile() + const profileDispatch = useProfileDispatch() const addProfile = (config: Omit): Profile => { const profile: Profile = { @@ -67,7 +67,10 @@ const Page: React.FC = () => { store.set(LastUsedProfile, profile.id) } - setProfile(profile) + profileDispatch({ + type: 'update', + payload: profile, + }) history.replace('/home') } }) diff --git a/src/pages/Landing/Surge.tsx b/src/pages/Landing/Surge.tsx index bee1b21..9871467 100644 --- a/src/pages/Landing/Surge.tsx +++ b/src/pages/Landing/Surge.tsx @@ -12,13 +12,12 @@ import { find } from 'lodash-es' import { useHistory } from 'react-router-dom' import useSetState from '../../hooks/use-set-state' -import { useSetProfile } from '../../models/profile' +import { useProfile, useProfileDispatch } from '../../models/profile' import { Profile } from '../../types' import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' import { useAuthData } from './hooks' const Page: React.FC = () => { - const history = useHistory() const protocol = window.location.protocol const { data, @@ -32,7 +31,9 @@ const Page: React.FC = () => { } = useAuthData() const [existingProfiles, setExistingProfiles, getExistingProfiles] = useSetState>([]) - const setProfile = useSetProfile() + const profileDispatch = useProfileDispatch() + const profile = useProfile() + const history = useHistory() const addProfile = (config: Omit): Profile => { const profile: Profile = { @@ -60,8 +61,10 @@ const Page: React.FC = () => { store.set(LastUsedProfile, profile.id) } - setProfile(profile) - history.replace('/home') + profileDispatch({ + type: 'update', + payload: profile, + }) } }) }, @@ -83,7 +86,6 @@ const Page: React.FC = () => { } const { hostname, port } = window.location - setIsLoading(true) axios @@ -130,6 +132,12 @@ const Page: React.FC = () => { } }, [setExistingProfiles]) + useEffect(() => { + if (profile) { + history.replace('/home') + } + }, [profile, history]) + return (
Date: Mon, 24 May 2021 23:25:07 +0200 Subject: [PATCH 13/45] =?UTF-8?q?feat:=20surge=20=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E8=90=BD=E5=9C=B0=E9=A1=B5=E8=87=AA=E5=8A=A8=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Landing/Surge.tsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/pages/Landing/Surge.tsx b/src/pages/Landing/Surge.tsx index 9871467..f20f248 100644 --- a/src/pages/Landing/Surge.tsx +++ b/src/pages/Landing/Surge.tsx @@ -126,9 +126,19 @@ const Page: React.FC = () => { useEffect(() => { const storedExistingProfiles = store.get(ExistingProfiles) + const lastId = store.get(LastUsedProfile) if (storedExistingProfiles) { + const result = find(storedExistingProfiles, { id: lastId }) + setExistingProfiles(storedExistingProfiles) + + if (result) { + profileDispatch({ + type: 'update', + payload: result, + }) + } } }, [setExistingProfiles]) From 73b30d02ad8152c00bee6c475103981485e83a72 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Tue, 25 May 2021 00:00:00 +0200 Subject: [PATCH 14/45] =?UTF-8?q?chore:=20=E5=A2=9E=E5=8A=A0=20sw=20?= =?UTF-8?q?=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/build.mjs | 3 +++ src/index.tsx | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/scripts/build.mjs b/scripts/build.mjs index b06b3f4..ce522fd 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -14,6 +14,7 @@ await (async () => { switch (target) { case 'release-vercel': process.env.NODE_ENV = 'production' + process.env.REACT_APP_USE_SW = 'true' await $`craco build` break @@ -22,6 +23,7 @@ await (async () => { process.env.NODE_ENV = 'production' process.env.REACT_APP_SHOW_AD = 'true' process.env.REACT_APP_HASH_ROUTER = 'true' + process.env.REACT_APP_USE_SW = 'true' process.env.PUBLIC_URL = getUrlPathPrefix() await $`craco build` await changeManifest({ @@ -45,6 +47,7 @@ await (async () => { default: process.env.NODE_ENV = 'production' + process.env.REACT_APP_USE_SW = 'true' process.env.PUBLIC_URL = getUrlPathPrefix() await $`craco build` diff --git a/src/index.tsx b/src/index.tsx index 5582b6c..486022e 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -38,10 +38,12 @@ ReactDOM.render( document.getElementById('root'), ) -// If you want your app to work offline and load faster, you can change -// unregister() to register() below. Note this comes with some pitfalls. -// Learn more about service workers: https://cra.link/PWA -serviceWorkerRegistration.register() +if ('REACT_APP_USE_SW' in process.env) { + // If you want your app to work offline and load faster, you can change + // unregister() to register() below. Note this comes with some pitfalls. + // Learn more about service workers: https://cra.link/PWA + serviceWorkerRegistration.register() +} if (!('scrollBehavior' in document.documentElement.style)) { // @ts-ignore From 11a4f9101758bad4890585b80d76311b70475d06 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Tue, 25 May 2021 00:00:14 +0200 Subject: [PATCH 15/45] fix: bugs --- src/pages/Index/components/CapabilityTile.tsx | 40 +++++++++++-------- src/pages/Modules/index.tsx | 2 +- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/pages/Index/components/CapabilityTile.tsx b/src/pages/Index/components/CapabilityTile.tsx index bb97e0a..dcede13 100644 --- a/src/pages/Index/components/CapabilityTile.tsx +++ b/src/pages/Index/components/CapabilityTile.tsx @@ -6,7 +6,7 @@ import { Toggle } from '@sumup/circuit-ui' import { useHistory } from 'react-router-dom' import useSWR, { mutate } from 'swr' import tw from 'twin.macro' -import React, { useCallback } from 'react' +import React, { ChangeEventHandler, useCallback } from 'react' import { useProfile } from '../../../models/profile' import { Capability } from '../../../types' @@ -31,21 +31,27 @@ const CapabilityTile: React.FC = ({ ) const history = useHistory() - const toggle = useCallback(() => { - fetcher({ - method: 'POST', - url: api, - data: { - enabled: !capability?.enabled, - }, - }) - .then(() => { - return mutate(api) - }) - .catch((err) => { - console.error(err) + const toggle: ChangeEventHandler = useCallback( + (e) => { + e.stopPropagation() + e.preventDefault() + + fetcher({ + method: 'POST', + url: api, + data: { + enabled: !capability?.enabled, + }, }) - }, [api, capability]) + .then(() => { + return mutate(api) + }) + .catch((err) => { + console.error(err) + }) + }, + [api, capability], + ) return ( history.push(link) : undefined}> @@ -55,8 +61,8 @@ const CapabilityTile: React.FC = ({ diff --git a/src/pages/Modules/index.tsx b/src/pages/Modules/index.tsx index 571635b..65e6d98 100644 --- a/src/pages/Modules/index.tsx +++ b/src/pages/Modules/index.tsx @@ -46,7 +46,7 @@ const Page: React.FC = () => { return (
{mod}
-
+
toggle(mod, !isChecked(mod))} From fd155c4262df6b735f2366ccf69341625abbc784 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Wed, 26 May 2021 22:56:34 +0200 Subject: [PATCH 16/45] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E7=95=8C?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.html | 2 +- src/App.tsx | 4 +- src/components/Ad.tsx | 2 +- src/index.tsx | 2 +- src/pages/Landing/Regular.tsx | 136 ++++++++++----------- src/pages/Landing/Surge.tsx | 136 ++++++++++----------- src/pages/Landing/components/Header.tsx | 19 +++ src/pages/Landing/utils.ts | 48 ++++++++ src/pages/Requests/components/ListItem.tsx | 11 +- src/pages/Requests/index.tsx | 2 +- src/pages/Traffic/index.tsx | 2 +- src/types.ts | 2 +- 12 files changed, 214 insertions(+), 152 deletions(-) create mode 100644 src/pages/Landing/components/Header.tsx create mode 100644 src/pages/Landing/utils.ts diff --git a/public/index.html b/public/index.html index b544020..cfa43b7 100644 --- a/public/index.html +++ b/public/index.html @@ -13,7 +13,7 @@ - YASD - Yet Another Surge Dashboard + Surge Web Dashboard diff --git a/src/App.tsx b/src/App.tsx index 16c62c7..dd9f64e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -115,11 +115,11 @@ const ToastContainer = styled(OriginalToastContainer)` ` if ( - 'REACT_APP_DEBUG_GA' in process.env || + !!process.env.REACT_APP_DEBUG_GA || (process.env.NODE_ENV === 'production' && process.env.REACT_APP_ENABLE_GA) ) { ReactGA.initialize('UA-146417304-2', { - debug: 'REACT_APP_DEBUG_GA' in process.env, + debug: !!process.env.REACT_APP_DEBUG_GA, }) } diff --git a/src/components/Ad.tsx b/src/components/Ad.tsx index 529db69..96a9e7e 100644 --- a/src/components/Ad.tsx +++ b/src/components/Ad.tsx @@ -14,7 +14,7 @@ interface AdData { } const Ad: React.FC = () => { - const showDynamicAd = useRef('REACT_APP_SHOW_AD' in process.env) + const showDynamicAd = useRef(!!process.env.REACT_APP_SHOW_AD) const [ad, setAd] = useState() useEffect(() => { diff --git a/src/index.tsx b/src/index.tsx index 486022e..8713b63 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -38,7 +38,7 @@ ReactDOM.render( document.getElementById('root'), ) -if ('REACT_APP_USE_SW' in process.env) { +if (process.env.REACT_APP_USE_SW) { // If you want your app to work offline and load faster, you can change // unregister() to register() below. Note this comes with some pitfalls. // Learn more about service workers: https://cra.link/PWA diff --git a/src/pages/Landing/Regular.tsx b/src/pages/Landing/Regular.tsx index 30c8b7e..cabdc7e 100644 --- a/src/pages/Landing/Regular.tsx +++ b/src/pages/Landing/Regular.tsx @@ -1,12 +1,7 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' import axios from 'axios' -import React, { - FormEventHandler, - useCallback, - useEffect, - useState, -} from 'react' +import React, { FormEventHandler, useCallback, useEffect } from 'react' import { Heading, Input, LoadingButton, Checkbox } from '@sumup/circuit-ui' import { CircleWarning } from '@sumup/icons' import css from '@emotion/css/macro' @@ -22,7 +17,9 @@ import useSetState from '../../hooks/use-set-state' import { useProfileDispatch } from '../../models/profile' import { Profile } from '../../types' import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' +import Header from './components/Header' import { useAuthData } from './hooks' +import { tryHost } from './utils' const Page: React.FC = () => { const history = useHistory() @@ -41,21 +38,24 @@ const Page: React.FC = () => { useSetState>([]) const profileDispatch = useProfileDispatch() - const addProfile = (config: Omit): Profile => { - const profile: Profile = { - ...config, - id: uuid(), - } - const newProfiles = [profile, ...existingProfiles] - setExistingProfiles(newProfiles) + const addProfile = useCallback( + (config: Omit): Profile => { + const profile: Profile = { + ...config, + id: uuid(), + } + const newProfiles = [profile, ...existingProfiles] + setExistingProfiles(newProfiles) - if (keepCredential) { - store.set(ExistingProfiles, newProfiles) - store.set(LastUsedProfile, profile.id) - } + if (keepCredential) { + store.set(ExistingProfiles, newProfiles) + store.set(LastUsedProfile, profile.id) + } - return profile - } + return profile + }, + [existingProfiles, keepCredential, setExistingProfiles], + ) const selectProfile = useCallback( (id: string) => { @@ -88,7 +88,7 @@ const Page: React.FC = () => { [setExistingProfiles, existingProfiles], ) - const resetFields = () => { + const resetFields = useCallback(() => { setData((prev) => ({ ...prev, name: '', @@ -97,54 +97,56 @@ const Page: React.FC = () => { key: '', useTls: protocol === 'https:', })) - } + }, [protocol, setData]) - const onSubmit: FormEventHandler = (e) => { - e.preventDefault() + const onSubmit: FormEventHandler = useCallback( + (e) => { + e.preventDefault() - if (!data.name || !data.host || !data.port || !data.key) { - return - } + if (!data.name || !data.host || !data.port || !data.key) { + return + } - setIsLoading(true) + setIsLoading(true) - axios - .request({ - url: `${data.useTls ? 'https' : 'http'}://${data.host}:${ - data.port - }/v1/outbound`, - method: 'GET', - timeout: 3000, - headers: { - 'x-key': data.key, - }, - }) - .then((res) => { - setHasError(false) + tryHost(data.useTls ? 'https:' : 'http:', data.host, data.port, data.key) + .then((res) => { + setHasError(false) - const newProfile = addProfile({ - name: data.name, - host: data.host, - port: Number(data.port), - key: data.key, - platform: res.headers['x-system']?.includes('macOS') - ? 'macos' - : 'ios', - platformVersion: res.headers['x-surge-version'] || '', - platformBuild: res.headers['x-surge-build'] || '', - tls: data.useTls, - }) + const newProfile = addProfile({ + name: data.name, + host: data.host, + port: Number(data.port), + key: data.key, + platform: res.platform, + platformVersion: res.platformVersion, + platformBuild: res.platformBuild, + tls: data.useTls, + }) - resetFields() - setIsLoading(false) - selectProfile(newProfile.id) - }) - .catch((err) => { - setHasError(err.message) - console.error(err) - setIsLoading(false) - }) - } + resetFields() + setIsLoading(false) + selectProfile(newProfile.id) + }) + .catch((err) => { + setHasError(err.message) + console.error(err) + setIsLoading(false) + }) + }, + [ + addProfile, + data.host, + data.key, + data.name, + data.port, + data.useTls, + resetFields, + selectProfile, + setHasError, + setIsLoading, + ], + ) useEffect(() => { const storedExistingProfiles = store.get(ExistingProfiles) @@ -159,15 +161,7 @@ const Page: React.FC = () => { css={css` padding-bottom: calc(env(safe-area-inset-bottom) + 1.25rem); `}> - - YASD - - {`v${process.env.REACT_APP_VERSION}`} - - +
添加 Surge diff --git a/src/pages/Landing/Surge.tsx b/src/pages/Landing/Surge.tsx index f20f248..72f826f 100644 --- a/src/pages/Landing/Surge.tsx +++ b/src/pages/Landing/Surge.tsx @@ -15,7 +15,9 @@ import useSetState from '../../hooks/use-set-state' import { useProfile, useProfileDispatch } from '../../models/profile' import { Profile } from '../../types' import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' +import Header from './components/Header' import { useAuthData } from './hooks' +import { tryHost } from './utils' const Page: React.FC = () => { const protocol = window.location.protocol @@ -35,21 +37,24 @@ const Page: React.FC = () => { const profile = useProfile() const history = useHistory() - const addProfile = (config: Omit): Profile => { - const profile: Profile = { - ...config, - id: uuid(), - } - const newProfiles = [profile, ...existingProfiles] - setExistingProfiles(newProfiles) + const addProfile = useCallback( + (config: Omit): Profile => { + const profile: Profile = { + ...config, + id: uuid(), + } + const newProfiles = [profile, ...existingProfiles] + setExistingProfiles(newProfiles) - if (keepCredential) { - store.set(ExistingProfiles, newProfiles) - store.set(LastUsedProfile, profile.id) - } + if (keepCredential) { + store.set(ExistingProfiles, newProfiles) + store.set(LastUsedProfile, profile.id) + } - return profile - } + return profile + }, + [existingProfiles, keepCredential, setExistingProfiles], + ) const selectProfile = useCallback( (id: string) => { @@ -68,61 +73,62 @@ const Page: React.FC = () => { } }) }, - [getExistingProfiles, history, keepCredential], + [getExistingProfiles, keepCredential, profileDispatch], ) - const resetFields = () => { + const resetFields = useCallback(() => { setData((prev) => ({ ...prev, key: '', })) - } + }, [setData]) - const onSubmit: FormEventHandler = (e) => { - e.preventDefault() + const onSubmit: FormEventHandler = useCallback( + (e) => { + e.preventDefault() - if (!data.key) { - return - } + if (!data.key) { + return + } - const { hostname, port } = window.location - setIsLoading(true) - - axios - .request({ - url: `${protocol}//${hostname}:${port}/v1/outbound`, - method: 'GET', - timeout: 3000, - headers: { - 'x-key': data.key, - }, - }) - .then((res) => { - setHasError(false) - - const newProfile = addProfile({ - name: 'Surge for Mac', - host: hostname, - port: Number(port), - key: data.key, - platform: res.headers['x-system']?.includes('macOS') - ? 'macos' - : 'ios', - platformVersion: res.headers['x-surge-version'] || '', - platformBuild: res.headers['x-surge-build'] || '', - tls: protocol === 'https:', - }) + const { hostname, port } = window.location + setIsLoading(true) + + tryHost(protocol, hostname, port, data.key) + .then((res) => { + setHasError(false) + + const newProfile = addProfile({ + name: res.name || 'Surge for Mac', + host: hostname, + port: Number(port), + key: data.key, + platform: res.platform, + platformVersion: res.platformVersion, + platformBuild: res.platformBuild, + tls: protocol === 'https:', + }) - resetFields() - setIsLoading(false) - selectProfile(newProfile.id) - }) - .catch((err) => { - setHasError(err.message) - console.error(err) - setIsLoading(false) - }) - } + resetFields() + setIsLoading(false) + selectProfile(newProfile.id) + }) + .catch((err) => { + setHasError(err.message) + console.error(err) + setIsLoading(false) + }) + }, + [ + addProfile, + data.key, + protocol, + resetFields, + selectProfile, + setHasError, + setIsLoading, + ], + ) useEffect(() => { const storedExistingProfiles = store.get(ExistingProfiles) @@ -140,7 +146,7 @@ const Page: React.FC = () => { }) } } - }, [setExistingProfiles]) + }, [profileDispatch, setExistingProfiles]) useEffect(() => { if (profile) { @@ -153,18 +159,10 @@ const Page: React.FC = () => { css={css` padding-bottom: calc(env(safe-area-inset-bottom) + 1.25rem); `}> - - YASD - - {`v${process.env.REACT_APP_VERSION}`} - - +
- 添加 Surge + 登录
+ Surge Web Dashboard + + {`v${process.env.REACT_APP_VERSION}`} + + + ) +} diff --git a/src/pages/Landing/utils.ts b/src/pages/Landing/utils.ts new file mode 100644 index 0000000..1e940b1 --- /dev/null +++ b/src/pages/Landing/utils.ts @@ -0,0 +1,48 @@ +import axios from 'axios' + +export async function tryHost( + protocol: string, + hostname: string, + port: string, + key: string, +): Promise<{ + name?: string + platform: 'macos' | 'ios' + platformVersion: string + platformBuild: string +}> { + const basicInfoReq = axios.request({ + url: `${protocol}//${hostname}:${port}/v1/outbound`, + method: 'GET', + timeout: 3000, + headers: { + 'x-key': key, + }, + responseType: 'json', + }) + const environmentReq = axios + .request<{ deviceName: string }>({ + url: `${protocol}//${hostname}:${port}/v1/environment`, + method: 'GET', + timeout: 3000, + headers: { + 'x-key': key, + }, + responseType: 'json', + }) + .then((res) => res.data) + .catch(() => undefined) + const [basicInfo, environment] = await Promise.all([ + basicInfoReq, + environmentReq, + ]) + + return { + name: environment ? environment.deviceName : undefined, + platform: basicInfo.headers['x-system']?.includes('macOS') + ? 'macos' + : 'ios', + platformVersion: basicInfo.headers['x-surge-version'] || '', + platformBuild: basicInfo.headers['x-surge-build'] || '', + } +} diff --git a/src/pages/Requests/components/ListItem.tsx b/src/pages/Requests/components/ListItem.tsx index 4400127..96ae4fb 100644 --- a/src/pages/Requests/components/ListItem.tsx +++ b/src/pages/Requests/components/ListItem.tsx @@ -13,10 +13,7 @@ import MethodBadge from './MethodBadge' const ListItem: React.FC<{ req: RequestItem }> = ({ req }) => { return ( -
{req.URL}
-
- {req.policyName}({req.rule}) -
+
{req.URL}
= ({ req }) => { - {dayjs.unix(req.startDate).format('HH:mm:ss')}
+
+ - + + {req.policyName}({req.rule}) + +
- {bytes(req.inBytes + req.outBytes)} diff --git a/src/pages/Requests/index.tsx b/src/pages/Requests/index.tsx index 0d0db5c..47b8883 100644 --- a/src/pages/Requests/index.tsx +++ b/src/pages/Requests/index.tsx @@ -177,7 +177,7 @@ const Page: React.FC = () => { width={width} height={height} rowCount={currentList.length} - rowHeight={85} + rowHeight={64} rowRenderer={getRowRenderer(setModal)} style={{ outline: 'none', diff --git a/src/pages/Traffic/index.tsx b/src/pages/Traffic/index.tsx index ed0547b..5638e5f 100644 --- a/src/pages/Traffic/index.tsx +++ b/src/pages/Traffic/index.tsx @@ -56,7 +56,7 @@ const Page: React.FC = () => { return (
setIsAutoRefresh(newState)} diff --git a/src/types.ts b/src/types.ts index 467ac73..4cf34b5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -134,7 +134,7 @@ export interface Profile { name: string platform: 'macos' | 'ios' platformVersion: string - platformBuild: number + platformBuild: string tls?: boolean } From 05020094bec566eedd612f6629ff277a09ac778c Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sat, 29 May 2021 22:35:42 +0200 Subject: [PATCH 17/45] feat: add i18n support --- package.json | 5 + src/App.tsx | 12 +-- src/AppContainer.tsx | 45 +++++++++ src/components/ChangeLanguage.tsx | 45 +++++++++ src/components/CodeMirrorLoading.tsx | 17 ++++ src/i18n/en/translation.json | 95 +++++++++++++++++++ src/i18n/index.ts | 34 +++++++ src/i18n/zh/translation.json | 95 +++++++++++++++++++ src/index.tsx | 32 ++----- src/pages/Dns/index.tsx | 21 ++-- src/pages/Index/components/CapabilityTile.tsx | 8 +- src/pages/Index/components/Events.tsx | 4 +- src/pages/Index/components/SetHostModal.tsx | 8 +- .../TrafficCell/components/LineChart.tsx | 4 +- .../Index/components/TrafficCell/index.tsx | 16 ++-- src/pages/Index/index.tsx | 15 ++- src/pages/Index/menu.tsx | 30 +++--- src/pages/Landing/Regular.tsx | 72 +++++++------- src/pages/Landing/Surge.tsx | 36 ++++--- src/pages/Modules/index.tsx | 47 +++++---- src/pages/Policies/components/PolicyGroup.tsx | 4 +- src/pages/Policies/index.tsx | 4 +- src/pages/Profiles/Current/index.tsx | 22 ++--- src/pages/Requests/components/ListItem.tsx | 5 +- .../Requests/components/RequestModal.tsx | 83 ++++++++-------- src/pages/Requests/index.tsx | 90 ++++++++++-------- src/pages/Scripting/Evaluate/index.tsx | 25 ++--- src/pages/Scripting/index.tsx | 13 ++- src/pages/Traffic/index.tsx | 8 +- yarn.lock | 59 +++++++++++- 30 files changed, 695 insertions(+), 259 deletions(-) create mode 100644 src/AppContainer.tsx create mode 100644 src/components/ChangeLanguage.tsx create mode 100644 src/components/CodeMirrorLoading.tsx create mode 100644 src/i18n/en/translation.json create mode 100644 src/i18n/index.ts create mode 100644 src/i18n/zh/translation.json diff --git a/package.json b/package.json index 2e8c1b5..327e5d7 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,10 @@ "eslint-plugin-react-hooks": "^4.2.0", "fs-extra": "^10.0.0", "husky": "^5.2.0", + "i18next": "^20.3.1", + "i18next-chained-backend": "^3.0.2", + "i18next-http-backend": "^1.2.6", + "i18next-resources-to-backend": "^1.0.0", "identity-obj-proxy": "^3.0.0", "lint-staged": "^10.4.0", "lodash-es": "^4.17.15", @@ -92,6 +96,7 @@ "react-collapse": "^5.0.1", "react-dom": "^17.0.1", "react-ga": "^3.1.2", + "react-i18next": "^11.10.0", "react-router-dom": "^5.2.0", "react-scripts": "4.0.3", "react-scroll-to": "^3.0.0-beta.6", diff --git a/src/App.tsx b/src/App.tsx index dd9f64e..c9cc1fa 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -224,14 +224,4 @@ const App: React.FC = () => { ) } -const AppWrapper: React.FC = () => { - return ( - - - - - - ) -} - -export default AppWrapper +export default App diff --git a/src/AppContainer.tsx b/src/AppContainer.tsx new file mode 100644 index 0000000..4cfb076 --- /dev/null +++ b/src/AppContainer.tsx @@ -0,0 +1,45 @@ +import createCache from '@emotion/cache' +import { CacheProvider } from '@emotion/core' +import { light } from '@sumup/design-tokens' +import { ThemeProvider } from 'emotion-theming' +import React, { Suspense } from 'react' +import { + BrowserRouter, + BrowserRouterProps, + HashRouter, + HashRouterProps, +} from 'react-router-dom' + +import App from './App' +import { ProfileProvider } from './models/profile' + +const ReactRouter: React.FC = (args) => { + return process.env.REACT_APP_HASH_ROUTER ? ( + {args.children} + ) : ( + + {args.children} + + ) +} +const styleCache = createCache({ + key: 'yasd', +}) + +const AppContainer: React.FC = () => { + return ( +
}> + + + + + + + + + + + ) +} + +export default AppContainer diff --git a/src/components/ChangeLanguage.tsx b/src/components/ChangeLanguage.tsx new file mode 100644 index 0000000..619d529 --- /dev/null +++ b/src/components/ChangeLanguage.tsx @@ -0,0 +1,45 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import { Select } from '@sumup/circuit-ui' +import { ChangeEventHandler, useCallback, useState } from 'react' +import { useTranslation } from 'react-i18next' +import tw from 'twin.macro' +import css from '@emotion/css/macro' + +const ChangeLanguage = (): JSX.Element => { + const { t, i18n } = useTranslation() + const options = [ + { + value: 'en', + label: 'English', + }, + { + value: 'zh', + label: '中文', + }, + ] + const [isLoading, setIsLoading] = useState(false) + + const onChange: ChangeEventHandler = useCallback( + (e) => { + setIsLoading(true) + i18n.changeLanguage(e.target.value).finally(() => setIsLoading(false)) + }, + [i18n], + ) + + return ( +
+ - setData((prev) => ({ - ...prev, - host: (target as HTMLInputElement).value, - })) + validationHint={t('landing.host_tips')} + onChange={(e: ChangeEvent) => + updateData('host', e.target.value) } /> - setData((prev) => ({ - ...prev, - port: (target as HTMLInputElement).value, - })) + onChange={(e: ChangeEvent) => + updateData('port', e.target.value) } /> setData((prev) => ({ ...prev, @@ -254,12 +258,12 @@ const Page: React.FC = () => { useTls: !prev.useTls, })) }> - HTTPS(请确保开启 http-api-tls) + setKeepCredential((prev) => !prev)}> - 保存到浏览器 + {t('landing.remember_me')}
@@ -269,8 +273,8 @@ const Page: React.FC = () => { variant="primary" stretch isLoading={isLoading} - loadingLabel={'Loading'}> - Done + loadingLabel={t('landing.is_loading')}> + {t('landing.confirm')}
@@ -285,7 +289,7 @@ const Page: React.FC = () => { {existingProfiles.length > 0 && (
- History + {t('landing.history')}
{existingProfiles.map((profile) => { @@ -309,6 +313,10 @@ const Page: React.FC = () => {
+ +
+ +
) } diff --git a/src/pages/Landing/Surge.tsx b/src/pages/Landing/Surge.tsx index 72f826f..cbc87ab 100644 --- a/src/pages/Landing/Surge.tsx +++ b/src/pages/Landing/Surge.tsx @@ -1,10 +1,16 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' import axios from 'axios' -import React, { FormEventHandler, useCallback, useEffect } from 'react' +import React, { + ChangeEvent, + FormEventHandler, + useCallback, + useEffect, +} from 'react' import { Heading, Input, LoadingButton, Checkbox } from '@sumup/circuit-ui' import { CircleWarning } from '@sumup/icons' import css from '@emotion/css/macro' +import { useTranslation } from 'react-i18next' import tw from 'twin.macro' import store from 'store2' import { v4 as uuid } from 'uuid' @@ -21,6 +27,7 @@ import { tryHost } from './utils' const Page: React.FC = () => { const protocol = window.location.protocol + const { t } = useTranslation() const { data, setData, @@ -130,6 +137,16 @@ const Page: React.FC = () => { ], ) + const updateData = useCallback( + (key: string, value: string) => { + setData((prev) => ({ + ...prev, + [key]: value, + })) + }, + [setData], + ) + useEffect(() => { const storedExistingProfiles = store.get(ExistingProfiles) const lastId = store.get(LastUsedProfile) @@ -162,21 +179,18 @@ const Page: React.FC = () => {
- 登录 + {t('landing.login')} - setData((prev) => ({ - ...prev, - key: (target as HTMLInputElement).value, - })) + onChange={(e: ChangeEvent) => + updateData('key', e.target.value) } /> @@ -184,7 +198,7 @@ const Page: React.FC = () => { setKeepCredential((prev) => !prev)}> - 保存到浏览器 + {t('landing.remember_me')}
@@ -194,8 +208,8 @@ const Page: React.FC = () => { variant="primary" stretch isLoading={isLoading} - loadingLabel={'Loading'}> - Done + loadingLabel={t('landing.is_loading')}> + {t('landing.confirm')}
diff --git a/src/pages/Modules/index.tsx b/src/pages/Modules/index.tsx index 65e6d98..3bcc3c3 100644 --- a/src/pages/Modules/index.tsx +++ b/src/pages/Modules/index.tsx @@ -1,44 +1,58 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' -import React from 'react' +import React, { useCallback, useState } from 'react' import { RadioButton } from '@sumup/circuit-ui' import styled from '@emotion/styled/macro' +import { useTranslation } from 'react-i18next' import tw from 'twin.macro' import useSWR, { mutate } from 'swr' +import { toast } from 'react-toastify' import PageTitle from '../../components/PageTitle' import { Modules } from '../../types' import fetcher from '../../utils/fetcher' const Page: React.FC = () => { + const { t } = useTranslation() const { data: modules, error: modulesError } = useSWR( '/modules', fetcher, ) + const [isLoading, setIsLoading] = useState(false) const isChecked = (name: string): boolean => { return modules?.enabled.includes(name) === true } - const toggle = (name: string, newVal: boolean) => { - fetcher({ - url: '/modules', - method: 'POST', - data: { - [name]: newVal, - }, - }) - .then(() => { - return mutate('/modules') - }) - .catch((err) => { - console.error(err) + const toggle = useCallback( + (name: string, newVal: boolean) => { + setIsLoading(true) + + fetcher({ + url: '/modules', + method: 'POST', + data: { + [name]: newVal, + }, }) - } + .then(() => { + toast.success(t('common.success_interaction')) + return mutate('/modules') + }) + .catch((err) => { + toast.success(t('common.failed_interaction')) + console.error(err) + }) + .finally(() => { + setIsLoading(false) + }) + }, + [setIsLoading, t], + ) return (
- +
{modules && @@ -48,6 +62,7 @@ const Page: React.FC = () => {
{mod}
toggle(mod, !isChecked(mod))} /> diff --git a/src/pages/Policies/components/PolicyGroup.tsx b/src/pages/Policies/components/PolicyGroup.tsx index f11e6b2..91a2b84 100644 --- a/src/pages/Policies/components/PolicyGroup.tsx +++ b/src/pages/Policies/components/PolicyGroup.tsx @@ -4,6 +4,7 @@ import styled from '@emotion/styled/macro' import { Card, Heading, Spinner, IconButton } from '@sumup/circuit-ui' import { Zap } from '@sumup/icons' import css from '@emotion/css/macro' +import { useTranslation } from 'react-i18next' import tw from 'twin.macro' import React, { useCallback, useEffect, useState } from 'react' import useIsInViewport from 'use-is-in-viewport' @@ -42,6 +43,7 @@ const PolicyGroup: React.FC = ({ policyGroupName, policyGroup, }) => { + const { t } = useTranslation() const [isInViewport, targetRef] = useIsInViewport({ threshold: 10 }) const [selection, setSelection] = useState() const [latencies, setLatencies] = useState<{ @@ -159,7 +161,7 @@ const PolicyGroup: React.FC = ({
{policyGroupName}
testPolicy(policyGroupName)}> {isTesting ? ( diff --git a/src/pages/Policies/index.tsx b/src/pages/Policies/index.tsx index 271ab72..ea0cc43 100644 --- a/src/pages/Policies/index.tsx +++ b/src/pages/Policies/index.tsx @@ -3,6 +3,7 @@ import { jsx } from '@emotion/core' import styled from '@emotion/styled/macro' import css from '@emotion/css/macro' import { Heading } from '@sumup/circuit-ui' +import { useTranslation } from 'react-i18next' import tw from 'twin.macro' import React, { createRef, RefObject, useRef } from 'react' import { ScrollTo } from 'react-scroll-to' @@ -18,6 +19,7 @@ const PolicyNameItem = styled.div` ` const Page: React.FC = () => { + const { t } = useTranslation() const { data: policies, error: policiesError } = useSWR( '/policies', fetcher, @@ -56,7 +58,7 @@ const Page: React.FC = () => {
-
Policies
+
{t('home.policies')}
diff --git a/src/pages/Profiles/Current/index.tsx b/src/pages/Profiles/Current/index.tsx index c96eb3c..7532477 100644 --- a/src/pages/Profiles/Current/index.tsx +++ b/src/pages/Profiles/Current/index.tsx @@ -1,19 +1,14 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' import loadable from '@loadable/component' -import { Button } from '@sumup/circuit-ui' -import React, { - ChangeEvent, - MouseEventHandler, - useCallback, - useMemo, - useState, -} from 'react' +import React from 'react' import css from '@emotion/css/macro' import { IControlledCodeMirror } from 'react-codemirror2' +import { useTranslation } from 'react-i18next' import useSWR from 'swr' import tw from 'twin.macro' +import CodeMirrorLoading from '../../../components/CodeMirrorLoading' import PageTitle from '../../../components/PageTitle' import fetcher from '../../../utils/fetcher' @@ -33,15 +28,12 @@ const CodeMirror = loadable( return mod }, { - fallback: ( -
- Loading... -
- ), + fallback: , }, ) const Page: React.FC = () => { + const { t } = useTranslation() const { data: profile, error: profileError } = useSWR<{ profile: string }>( '/profiles/current?sensitive=1', fetcher, @@ -50,7 +42,7 @@ const Page: React.FC = () => { return (
- +
@@ -66,7 +58,7 @@ const Page: React.FC = () => { } `, ]} - value={profile?.profile ?? 'Loading...'} + value={profile?.profile ?? `${t('common.is_loading')}...`} options={{ mode: 'properties', theme: 'material', diff --git a/src/pages/Requests/components/ListItem.tsx b/src/pages/Requests/components/ListItem.tsx index 96ae4fb..b89c641 100644 --- a/src/pages/Requests/components/ListItem.tsx +++ b/src/pages/Requests/components/ListItem.tsx @@ -4,6 +4,7 @@ import styled from '@emotion/styled/macro' import css from '@emotion/css/macro' import bytes from 'bytes' import dayjs from 'dayjs' +import { useTranslation } from 'react-i18next' import tw from 'twin.macro' import React from 'react' @@ -11,6 +12,8 @@ import { RequestItem } from '../../../types' import MethodBadge from './MethodBadge' const ListItem: React.FC<{ req: RequestItem }> = ({ req }) => { + const { t } = useTranslation() + return (
{req.URL}
@@ -43,7 +46,7 @@ const ListItem: React.FC<{ req: RequestItem }> = ({ req }) => {
- - {req.status} + {t(`requests.${req.status.toLowerCase()}`)}
diff --git a/src/pages/Requests/components/RequestModal.tsx b/src/pages/Requests/components/RequestModal.tsx index 61af15e..335ba10 100644 --- a/src/pages/Requests/components/RequestModal.tsx +++ b/src/pages/Requests/components/RequestModal.tsx @@ -5,11 +5,12 @@ import css from '@emotion/css/macro' import bytes from 'bytes' import dayjs from 'dayjs' import { basename } from 'path' +import { useTranslation } from 'react-i18next' import { mutate } from 'swr' import tw from 'twin.macro' import { ModalHeader, ModalWrapper } from '@sumup/circuit-ui' import { Search } from '@sumup/icons' -import React, { KeyboardEvent, MouseEvent } from 'react' +import React, { KeyboardEvent, MouseEvent, useCallback } from 'react' import { Tab, Tabs, TabList, TabPanel } from 'react-tabs' import { toast } from 'react-toastify' import 'react-tabs/style/react-tabs.css' @@ -42,26 +43,32 @@ interface RequestModalProps { } const RequestModal: React.FC = ({ req, onClose }) => { - const killRequest = (id: number) => { - fetcher({ - url: '/requests/kill', - method: 'POST', - data: { - id, - }, - }) - .then(() => { - toast.success('操作成功') - - return Promise.all([ - mutate('/requests/recent'), - mutate('/requests/active'), - ]) + const { t } = useTranslation() + + const killRequest = useCallback( + (id: number) => { + fetcher({ + url: '/requests/kill', + method: 'POST', + data: { + id, + }, }) - .catch((err) => { - console.error(err) - }) - } + .then(() => { + toast.success(t('common.success_interaction')) + + return Promise.all([ + mutate('/requests/recent'), + mutate('/requests/active'), + ]) + }) + .catch((err) => { + toast.error(t('common.failed_interaction')) + console.error(err) + }) + }, + [t], + ) return ( @@ -82,25 +89,25 @@ const RequestModal: React.FC = ({ req, onClose }) => { - General - Request - 计时 + {t('requests.general_tab')} + {t('requests.request_tab')} + {t('requests.timing_tab')} -
日期
+
{t('requests.date')}
{dayjs.unix(req.startDate).format('L LTS')}
-
状态
+
{t('requests.status')}
{req.status}
{isTruthy(req.completed) && ( -
时长
+
{t('requests.duration')}
{dayjs .unix(req.completedDate) @@ -112,7 +119,7 @@ const RequestModal: React.FC = ({ req, onClose }) => { {req.pid !== 0 && req.processPath && ( -
进程
+
{t('requests.process')}
{trimPath(req.processPath)}({req.pid})
@@ -122,23 +129,23 @@ const RequestModal: React.FC = ({ req, onClose }) => { -
策略
+
{t('requests.policy_name')}
{req.policyName}
-
规则
+
{t('requests.rule_name')}
{req.rule}
{!!req.localAddress && !!req.remoteAddress && ( - + -
本地 IP 地址
+
{t('requests.local_ip')}
{req.localAddress}
-
远端 IP 地址
+
{t('requests.remote_ip')}
= ({ req, onClose }) => { )} - + -
下载
+
{t('requests.download')}
{bytes(req.inBytes)}
-
上传
+
{t('requests.upload')}
{bytes(req.outBytes)}
- +
 = ({ req, onClose }) => {
                 
killRequest(req.id)}> - Kill Connection... + {t('requests.kill_connection_button_title')}...
)} - +
 {
+  const { t } = useTranslation()
   const profile = useProfile()
   const [isAutoRefresh, setIsAutoRefresh] = useState(true)
   const [group, setGroup] = useState<'recent' | 'active'>('recent')
@@ -54,53 +56,59 @@ const Page: React.FC = () => {
     [group, requestList, activeRequestList],
   )
 
-  useEffect(() => {
-    if (!requests?.requests) return
+  useEffect(
+    () => {
+      if (!requests?.requests) return
 
-    const pendingList = requests.requests
-    const now = new Date()
-    let newList = [...currentList]
+      const pendingList = requests.requests
+      const now = new Date()
+      let newList = [...currentList]
 
-    while (pendingList.length) {
-      const request = pendingList.pop() as RequestItem
-      const existingIndex = newList.findIndex((item) => item.id === request.id)
+      while (pendingList.length) {
+        const request = pendingList.pop() as RequestItem
+        const existingIndex = newList.findIndex(
+          (item) => item.id === request.id,
+        )
 
-      if (existingIndex >= 0) {
-        Object.assign(newList[existingIndex], {
-          ...omit(request, ['id']),
-          lastUpdated: now,
-        })
-      } else {
-        if (newList.length && request.id > newList[0].id) {
-          newList.unshift({
-            ...request,
+        if (existingIndex >= 0) {
+          Object.assign(newList[existingIndex], {
+            ...omit(request, ['id']),
             lastUpdated: now,
           })
         } else {
-          newList.push({
-            ...request,
-            lastUpdated: now,
-          })
+          if (newList.length && request.id > newList[0].id) {
+            newList.unshift({
+              ...request,
+              lastUpdated: now,
+            })
+          } else {
+            newList.push({
+              ...request,
+              lastUpdated: now,
+            })
+          }
         }
       }
-    }
 
-    if (group === 'recent') {
-      newList = newList.slice(0, LIST_ITEMS_MAX)
-    } else {
-      newList = newList
-        .filter((item) => item.lastUpdated === now)
-        .sort((a, b) => b.id - a.id)
-    }
+      if (group === 'recent') {
+        newList = newList.slice(0, LIST_ITEMS_MAX)
+      } else {
+        newList = newList
+          .filter((item) => item.lastUpdated === now)
+          .sort((a, b) => b.id - a.id)
+      }
 
-    if (group === 'recent') {
-      setRequestList(newList)
-      setActiveRequestList([])
-    } else {
-      setRequestList([])
-      setActiveRequestList(newList)
-    }
-  }, [requests, group])
+      if (group === 'recent') {
+        setRequestList(newList)
+        setActiveRequestList([])
+      } else {
+        setRequestList([])
+        setActiveRequestList(newList)
+      }
+    },
+    // eslint-disable-next-line react-hooks/exhaustive-deps
+    [requests, group],
+  )
 
   const openRequestDetail = useCallback(
     (setModal: (modal: ModalProps) => void, req: RequestItem) => {
@@ -160,7 +168,7 @@ const Page: React.FC = () => {
             return (
               
@@ -193,7 +201,7 @@ const Page: React.FC = () => { ) : (
- Loading... + {t('common.is_loading')}...
)}
@@ -233,11 +241,11 @@ const Page: React.FC = () => { }} options={[ { - children: 'Recent', + children: t('requests.recent'), value: 'recent', }, { - children: 'Active', + children: t('requests.active'), value: 'active', }, ]} diff --git a/src/pages/Scripting/Evaluate/index.tsx b/src/pages/Scripting/Evaluate/index.tsx index ea9d4c6..bf92ba0 100644 --- a/src/pages/Scripting/Evaluate/index.tsx +++ b/src/pages/Scripting/Evaluate/index.tsx @@ -5,6 +5,7 @@ import loadable from '@loadable/component' import React, { useState } from 'react' import styled from '@emotion/styled/macro' import { IControlledCodeMirror } from 'react-codemirror2' +import { useTranslation } from 'react-i18next' import tw from 'twin.macro' import { Input, @@ -15,6 +16,7 @@ import { } from '@sumup/circuit-ui' import { toast } from 'react-toastify' +import CodeMirrorLoading from '../../../components/CodeMirrorLoading' import PageTitle from '../../../components/PageTitle' import { EvaluateResult } from '../../../types' import fetcher from '../../../utils/fetcher' @@ -35,16 +37,15 @@ const CodeMirror = loadable( return mod }, { - fallback: ( -
- Loading... -
- ), + fallback: , }, ) const Page: React.FC = () => { - const [code, setCode] = useState('// Only supports Cron script\n') + const { t } = useTranslation() + const [code, setCode] = useState(() => + t('scripting.editor_placeholder'), + ) const [isLoading, setIsLoading] = useState(false) const [result, setResult] = useState() const [timeout, setTimeoutValue] = useState(5) @@ -53,7 +54,7 @@ const Page: React.FC = () => { if (isLoading) return if (!code) { - toast.error('没有输入脚本内容') + toast.error(t('scripting.empty_code_error')) return } @@ -87,7 +88,7 @@ const Page: React.FC = () => { return (
- +
@@ -128,8 +129,8 @@ const Page: React.FC = () => { variant="primary" size="kilo" isLoading={isLoading} - loadingLabel={'运行中'}> - 运行 + loadingLabel={t('scripting.running')}> + {t('scripting.run_script_button_title')}
{ type="number" required noMargin - label="Timeout" + label={t('scripting.timeout')} value={timeout} onChange={({ target }) => setTimeoutValue(Number((target as HTMLInputElement).value)) @@ -165,7 +166,7 @@ const Page: React.FC = () => { }}> {({ onClose }) => ( - +
 {
+  const { t } = useTranslation()
   const history = useHistory()
   const { data: scripting, error: scriptingError } = useSWR(
     '/scripting',
@@ -70,7 +72,7 @@ const Page: React.FC = () => {
   return (
     
- +
@@ -88,6 +90,7 @@ const Page: React.FC = () => { ); `, ]} + title={t('scripting.open_script')} onClick={() => openUrl(script.path)}>
@@ -104,9 +107,9 @@ const Page: React.FC = () => { }} size="kilo" isLoading={isLoading === index} - loadingLabel={'运行中'} + loadingLabel={t('scripting.running')} tw="px-3 py-3 text-sm leading-tight"> - 运行 + {t('scripting.run_script_button_title')} )}
@@ -125,7 +128,7 @@ const Page: React.FC = () => { variant="tertiary" size="kilo" onClick={() => history.push('/scripting/evaluate')}> - 调试脚本 + {t('scripting.debug_script_button_title')}
@@ -138,7 +141,7 @@ const Page: React.FC = () => { }}> {({ onClose }) => ( - +
 {
+  const { t } = useTranslation()
   const [isAutoRefresh, setIsAutoRefresh] = useState(false)
   const { data: traffic, error: trafficError } = useSWR(
     '/traffic',
@@ -56,7 +58,7 @@ const Page: React.FC = () => {
   return (
     
setIsAutoRefresh(newState)} @@ -67,13 +69,13 @@ const Page: React.FC = () => { -
开启时间
+
{t('traffic.start_time')}
{dayjs.unix(traffic.startTime).format()}
-
启动时长
+
{t('traffic.uptime')}
{dayjs.unix(traffic.startTime).toNow(true)}
diff --git a/yarn.lock b/yarn.lock index 3883567..48812dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1202,7 +1202,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.7", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@7.14.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.7", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.14.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== @@ -5302,6 +5302,13 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +cross-fetch@3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" + integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ== + dependencies: + node-fetch "2.6.1" + cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -7982,6 +7989,13 @@ html-minifier-terser@^5.0.1: relateurl "^0.2.7" terser "^4.6.3" +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + html-tags@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" @@ -8127,6 +8141,34 @@ husky@^5.2.0: resolved "https://registry.yarnpkg.com/husky/-/husky-5.2.0.tgz#fc5e1c2300d34855d47de4753607d00943fc0802" integrity sha512-AM8T/auHXRBxlrfPVLKP6jt49GCM2Zz47m8G3FOMsLmTv8Dj/fKVWE0Rh2d4Qrvmy131xEsdQnb3OXRib67PGg== +i18next-chained-backend@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/i18next-chained-backend/-/i18next-chained-backend-3.0.2.tgz#8968c9e12412d24fd23eec109f0340386154384a" + integrity sha512-0dd/7oVtPHJnCDMuDvjzlXmWxwfbLOGBFXd1+cgcZ54QlMwv6/ofQ9xhrBIhCFjNh97WQ5pytEeTdcAGwLQ/QA== + dependencies: + "@babel/runtime" "^7.14.0" + +i18next-http-backend@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/i18next-http-backend/-/i18next-http-backend-1.2.6.tgz#80b12e8b207814aebb3b8a74c4487dd156973bee" + integrity sha512-NeNNRofj+rR6Cw+/Elf8bCVaCiqWg2Y6F+CrmDvHiPzAW2Dtxxlk8O0na2et/rr1n3ST6rJr4nMXH/QOFuhaeA== + dependencies: + cross-fetch "3.1.4" + +i18next-resources-to-backend@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/i18next-resources-to-backend/-/i18next-resources-to-backend-1.0.0.tgz#a6799e30c5d55db9fd7d3872e8ac5ddbf79755f3" + integrity sha512-mxntiPK84guqzYP/0T4OwU6BWda57ar7Tw5pU8BjM8dS4rULOtYU4JHMXfCbqZhNQEPCrp1WrVBEPk6yOze8jw== + dependencies: + "@babel/runtime" "7.14.0" + +i18next@^20.3.1: + version "20.3.1" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-20.3.1.tgz#b51dd281a2eec8087753edf1727e160dac8a5554" + integrity sha512-WTY07KreR5z2LBSzAIKs05zpR5tgUT98C4fD96e7Risbc/HZePwF6AEnb9VkjdeSeRn9PDqQBay7ZkphuXt0Xw== + dependencies: + "@babel/runtime" "^7.12.0" + iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -10847,7 +10889,7 @@ node-emoji@^1.8.1: dependencies: lodash.toarray "^4.4.0" -node-fetch@^2.6.1: +node-fetch@2.6.1, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -13092,6 +13134,14 @@ react-ga@^3.1.2: resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.3.0.tgz#c91f407198adcb3b49e2bc5c12b3fe460039b3ca" integrity sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ== +react-i18next@^11.10.0: + version "11.10.0" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.10.0.tgz#f34257447e18e710e36d8fd3f721dd7d37c7004f" + integrity sha512-Vn0Xw2MczBZHKciWdayx4J+P3S9Im2FWIzUPV2O7iUVFqIOhMv6o9mVTJN1gEi/MA2FZzorjvaEijglCMeehZQ== + dependencies: + "@babel/runtime" "^7.14.0" + html-parse-stringify "^3.0.1" + react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.6: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -16278,6 +16328,11 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= + vscode-languageserver-types@^3.16.0: version "3.16.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" From c0fe2b5ef1d6f535750d141e01f8a2b3c27b9c99 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sat, 29 May 2021 22:37:04 +0200 Subject: [PATCH 18/45] docs: update --- README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/README.md b/README.md index ff472a6..02af4da 100644 --- a/README.md +++ b/README.md @@ -47,12 +47,7 @@ You can also find the full bundle in [releases](https://github.com/geekdada/yasd ## Roadmap -- [x] Better PWA support -- [ ] i18n -- [x] Manage and inspect requests -- [x] Write and debug scripts -- [ ] Manage DHCP devices -- [ ] Full unit and e2e tests +See [Roadmap](https://github.com/geekdada/yasd/projects/1) ## License From a8f8ed075b44387f61f989d846507f5e12d33fb8 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sat, 29 May 2021 23:45:28 +0200 Subject: [PATCH 19/45] fix: bugfix --- src/i18n/index.ts | 9 ++------- src/pages/Landing/Surge.tsx | 5 +++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/i18n/index.ts b/src/i18n/index.ts index c39be46..48dfee3 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -1,13 +1,14 @@ import i18n from 'i18next' import { initReactI18next } from 'react-i18next' import ChainedBackend from 'i18next-chained-backend' -import HttpBackend from 'i18next-http-backend' import resourcesToBackend from 'i18next-resources-to-backend' i18n .use(initReactI18next) // passes i18n down to react-i18next .use(ChainedBackend) .init({ + // debug: true, + lng: navigator.language.substr(0, 2), fallbackLng: 'en', supportedLngs: ['en', 'zh'], nonExplicitSupportedLngs: true, @@ -16,18 +17,12 @@ i18n }, backend: { backends: [ - HttpBackend, resourcesToBackend((lng, ns, clb) => { import(`./${lng}/${ns}.json`) .then((resources) => clb(null, resources)) .catch((err) => clb(err, undefined)) }), ], - backendOptions: [ - { - loadPath: '/locales/{{lng}}/{{ns}}.json', - }, - ], }, }) diff --git a/src/pages/Landing/Surge.tsx b/src/pages/Landing/Surge.tsx index cbc87ab..dc1ba17 100644 --- a/src/pages/Landing/Surge.tsx +++ b/src/pages/Landing/Surge.tsx @@ -16,6 +16,7 @@ import store from 'store2' import { v4 as uuid } from 'uuid' import { find } from 'lodash-es' import { useHistory } from 'react-router-dom' +import ChangeLanguage from '../../components/ChangeLanguage' import useSetState from '../../hooks/use-set-state' import { useProfile, useProfileDispatch } from '../../models/profile' @@ -221,6 +222,10 @@ const Page: React.FC = () => { )}
+ +
+ +
) } From 597942e99ea7cc32d24ae93c07879b596ba94617 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sat, 29 May 2021 23:47:38 +0200 Subject: [PATCH 20/45] fix: typo --- src/i18n/zh/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/zh/translation.json b/src/i18n/zh/translation.json index 721c9e4..6d0fdf2 100644 --- a/src/i18n/zh/translation.json +++ b/src/i18n/zh/translation.json @@ -13,7 +13,7 @@ "host": "域名或 IP 地址", "host_tips": "局域网内可以使用 iphone.local", "port": "端口", - "key": "秘钥", + "key": "密钥", "remember_me": "记住我", "https": "HTTPS (请确保开启 http-api-tls)", "confirm": "完成", From 4b2b2eb141ba3030b9f0c495fe4d7c51d1593502 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 31 May 2021 20:59:11 +0200 Subject: [PATCH 21/45] fix: bugfix --- src/pages/Landing/Regular.tsx | 2 +- src/pages/Landing/Surge.tsx | 28 ++++++++++++++++++---- src/pages/Requests/components/ListItem.tsx | 6 ++--- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/pages/Landing/Regular.tsx b/src/pages/Landing/Regular.tsx index 3c109e1..a36756f 100644 --- a/src/pages/Landing/Regular.tsx +++ b/src/pages/Landing/Regular.tsx @@ -235,7 +235,7 @@ const Page: React.FC = () => { } /> { - const protocol = window.location.protocol const { t } = useTranslation() const { data, @@ -91,6 +89,27 @@ const Page: React.FC = () => { })) }, [setData]) + const getHost: () => { + protocol: string + hostname: string + port: string + } = useCallback(() => { + const protocol = window.location.protocol + + if (process.env.NODE_ENV === 'production') { + return { + protocol, + hostname: window.location.hostname, + port: window.location.port, + } + } + return { + protocol: process.env.REACT_APP_PROTOCOL as string, + hostname: process.env.REACT_APP_HOST as string, + port: process.env.REACT_APP_PORT as string, + } + }, []) + const onSubmit: FormEventHandler = useCallback( (e) => { e.preventDefault() @@ -99,7 +118,7 @@ const Page: React.FC = () => { return } - const { hostname, port } = window.location + const { hostname, port, protocol } = getHost() setIsLoading(true) tryHost(protocol, hostname, port, data.key) @@ -130,7 +149,6 @@ const Page: React.FC = () => { [ addProfile, data.key, - protocol, resetFields, selectProfile, setHasError, @@ -184,7 +202,7 @@ const Page: React.FC = () => {
= ({ req }) => {
{req.URL}
= ({ req }) => {
- - - {req.policyName}({req.rule}) - + {req.policyName}
- From f83052c5424ab60bac1047a039e524ad6a31dc4a Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 31 May 2021 21:15:31 +0200 Subject: [PATCH 22/45] feat: add new translation --- src/components/NetworkErrorModal.tsx | 9 ++++++--- src/components/NewVersionAlert.tsx | 8 +++++--- src/i18n/en/translation.json | 10 +++++++++- src/i18n/zh/translation.json | 10 +++++++++- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/components/NetworkErrorModal.tsx b/src/components/NetworkErrorModal.tsx index fce0840..155d282 100644 --- a/src/components/NetworkErrorModal.tsx +++ b/src/components/NetworkErrorModal.tsx @@ -11,6 +11,7 @@ import { } from '@sumup/circuit-ui' import styled from '@emotion/styled/macro' import css from '@emotion/css/macro' +import { useTranslation } from 'react-i18next' import tw from 'twin.macro' interface NetworkErrorModalProps { @@ -22,16 +23,18 @@ const NetworkErrorModal: React.FC = ({ isOpen, onClose, }) => { + const { t } = useTranslation() + return ( {({ onClose }) => ( - -
YASD 无法连接 Surge 或连接失败,请退出后重试
+ +
{t('common.network_error_message')}
diff --git a/src/components/NewVersionAlert.tsx b/src/components/NewVersionAlert.tsx index d77c149..44086ed 100644 --- a/src/components/NewVersionAlert.tsx +++ b/src/components/NewVersionAlert.tsx @@ -11,6 +11,7 @@ import { } from '@sumup/circuit-ui' import styled from '@emotion/styled/macro' import css from '@emotion/css/macro' +import { useTranslation } from 'react-i18next' import tw from 'twin.macro' import store from 'store2' import satisfies from 'semver/functions/satisfies' @@ -22,6 +23,7 @@ const currentVersion = process.env.REACT_APP_VERSION as string const NewVersionAlert: React.FC = () => { const [isOpen, setIsOpen] = useState(false) const [versionUrl, setVersionUrl] = useState() + const { t } = useTranslation() useEffect(() => { const lastUsedVersion = store.get(LastUsedVersion) @@ -44,13 +46,13 @@ const NewVersionAlert: React.FC = () => { }}> {({ onClose }) => ( - -
快看看更新了什么
+ +
{t('new_version_alert.message')}
diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index fdd9fe3..19ee54e 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -2,9 +2,17 @@ "common": { "on": "On", "off": "Off", + "exit": "Exit", + "network_error_title": "Network Error", + "network_error_message": "Unable to connect to Surge, please exit and try again.", "is_loading": "Loading", "success_interaction": "Success", - "failed_interaction": "Failed" + "failed_interaction": "Failed", + "see": "See" + }, + "new_version_alert": { + "title": "Found new version!", + "message": "Take a look at what's been update." }, "landing": { "add_new_host": "Add New Host", diff --git a/src/i18n/zh/translation.json b/src/i18n/zh/translation.json index 6d0fdf2..83c5034 100644 --- a/src/i18n/zh/translation.json +++ b/src/i18n/zh/translation.json @@ -2,9 +2,17 @@ "common": { "on": "开启", "off": "关闭", + "exit": "退出", + "network_error_title": "网络错误", + "network_error_message": "无法连接 Surge 或连接失败,请退出后重试。", "is_loading": "加载中", "success_interaction": "操作成功", - "failed_interaction": "操作失败" + "failed_interaction": "操作失败", + "see": "查看" + }, + "new_version_alert": { + "title": "发现新版本!", + "message": "快看看更新了什么" }, "landing": { "add_new_host": "添加连接", From 7238b785845434e9435cca73ad3ea21409008158 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 31 May 2021 21:22:05 +0200 Subject: [PATCH 23/45] fix: add more options when the network is failing --- src/App.tsx | 22 +++++++++++++--------- src/components/NetworkErrorModal.tsx | 12 ++++++++++++ src/i18n/en/translation.json | 3 ++- src/i18n/zh/translation.json | 3 ++- 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index c9cc1fa..147de7d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,7 +1,7 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' import { find } from 'lodash-es' -import React, { useEffect, useRef, useState } from 'react' +import React, { useCallback, useEffect, useRef, useState } from 'react' import { ThemeProvider } from 'emotion-theming' import { light } from '@sumup/design-tokens' import { @@ -24,11 +24,7 @@ import FullLoading from './components/FullLoading' import NewVersionAlert from './components/NewVersionAlert' import ScrollToTop from './components/ScrollToTop' import NetworkErrorModal from './components/NetworkErrorModal' -import { - ProfileProvider, - useProfile, - useProfileDispatch, -} from './models/profile' +import { useProfile, useProfileDispatch } from './models/profile' import { RegularLanding as LandingPage, SurgeLanding as SurgeLandingPage, @@ -131,6 +127,15 @@ const App: React.FC = () => { const profile = useProfile() const [hasInit, setHasInit] = useState(false) + const onCloseApplication = useCallback(() => { + if (isRunInSurge()) { + store.remove(LastUsedProfile) + store.remove(ExistingProfiles) + } + + window.location.replace('/') + }, []) + useEffect( () => { const existingProfiles = store.get(ExistingProfiles) @@ -176,10 +181,9 @@ const App: React.FC = () => { { - window.location.replace('/') - }} + onClose={onCloseApplication} /> diff --git a/src/components/NetworkErrorModal.tsx b/src/components/NetworkErrorModal.tsx index 155d282..7880296 100644 --- a/src/components/NetworkErrorModal.tsx +++ b/src/components/NetworkErrorModal.tsx @@ -17,11 +17,13 @@ import tw from 'twin.macro' interface NetworkErrorModalProps { onClose: (event?: MouseEvent | KeyboardEvent) => void isOpen: boolean + reloadButton?: boolean } const NetworkErrorModal: React.FC = ({ isOpen, onClose, + reloadButton, }) => { const { t } = useTranslation() @@ -33,6 +35,16 @@ const NetworkErrorModal: React.FC = ({
{t('common.network_error_message')}
+ {reloadButton ? ( + + ) : ( + + )} diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index 19ee54e..abcd539 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -3,8 +3,9 @@ "on": "On", "off": "Off", "exit": "Exit", + "reload_window_retry": "Reload and retry", "network_error_title": "Network Error", - "network_error_message": "Unable to connect to Surge, please exit and try again.", + "network_error_message": "Unable to connect to Surge, please try again.", "is_loading": "Loading", "success_interaction": "Success", "failed_interaction": "Failed", diff --git a/src/i18n/zh/translation.json b/src/i18n/zh/translation.json index 83c5034..115890c 100644 --- a/src/i18n/zh/translation.json +++ b/src/i18n/zh/translation.json @@ -3,8 +3,9 @@ "on": "开启", "off": "关闭", "exit": "退出", + "reload_window_retry": "刷新重试", "network_error_title": "网络错误", - "network_error_message": "无法连接 Surge 或连接失败,请退出后重试。", + "network_error_message": "无法连接 Surge 或连接失败,请重试。", "is_loading": "加载中", "success_interaction": "操作成功", "failed_interaction": "操作失败", From c713f01dabf0116e3f1407d0cac15bcc6aa0c302 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 31 May 2021 21:52:35 +0200 Subject: [PATCH 24/45] feat: add missing translations for request status --- src/i18n/en/translation.json | 3 +++ src/i18n/zh/translation.json | 3 +++ src/pages/Requests/components/ListItem.tsx | 15 ++++++++++----- src/types.ts | 7 ++++++- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index abcd539..5a94806 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -59,6 +59,9 @@ "recent": "Recent", "active": "Active", "completed": "Completed", + "rule_evaluating": "Rule Evaluating", + "dns_lookup": "DNS Lookup", + "establishing_connection": "Establishing Connection", "general_tab": "General", "request_tab": "Request", "timing_tab": "Timing", diff --git a/src/i18n/zh/translation.json b/src/i18n/zh/translation.json index 115890c..1e9e11c 100644 --- a/src/i18n/zh/translation.json +++ b/src/i18n/zh/translation.json @@ -59,6 +59,9 @@ "recent": "最近请求", "active": "活跃", "completed": "已完成", + "rule_evaluating": "解析规则", + "dns_lookup": "解析域名", + "establishing_connection": "建立连接", "general_tab": "一般", "request_tab": "请求", "timing_tab": "计时", diff --git a/src/pages/Requests/components/ListItem.tsx b/src/pages/Requests/components/ListItem.tsx index b602bc4..6e72595 100644 --- a/src/pages/Requests/components/ListItem.tsx +++ b/src/pages/Requests/components/ListItem.tsx @@ -14,6 +14,9 @@ import MethodBadge from './MethodBadge' const ListItem: React.FC<{ req: RequestItem }> = ({ req }) => { const { t } = useTranslation() + const formatStatusKey = (str: string): string => + str.toLowerCase().replace(/\s/g, '_') + return (
{req.URL}
@@ -34,17 +37,19 @@ const ListItem: React.FC<{ req: RequestItem }> = ({ req }) => { - {dayjs.unix(req.startDate).format('HH:mm:ss')}
-
- - - {req.policyName} -
+ {req.policyName ? ( +
+ - + {req.policyName} +
+ ) : null}
- {bytes(req.inBytes + req.outBytes)}
- - {t(`requests.${req.status.toLowerCase()}`)} + {t(`requests.${formatStatusKey(req.status)}`)}
diff --git a/src/types.ts b/src/types.ts index 4cf34b5..55837cd 100644 --- a/src/types.ts +++ b/src/types.ts @@ -46,7 +46,12 @@ export interface RequestItem { notes?: Array inCurrentSpeed: number failed: 1 | 0 | boolean - status: 'Active' | 'Complete' + status: + | 'Active' + | 'Completed' + | 'Rule Evaluating' + | 'DNS Lookup' + | 'Establishing Connection' outCurrentSpeed: number completed: 1 | 0 | boolean modified: 1 | 0 | boolean From b49aa918eed5560d43bf5f91bb1e6baf8360a776 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Mon, 31 May 2021 22:12:27 +0200 Subject: [PATCH 25/45] chore: add checks for translation files --- .github/workflows/ci.yml | 2 +- package.json | 3 ++- scripts/build.mjs | 2 ++ scripts/verify-translations.mjs | 39 +++++++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 scripts/verify-translations.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 684eeeb..bf28d76 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: - name: test, report coverage run: | - yarn test + yarn verify-translation yarn test:coverage - uses: codecov/codecov-action@v1 diff --git a/package.json b/package.json index 327e5d7..0b9215e 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "pub": "np --no-publish", "version": "npm run changelog && git add .", "snyk-protect": "snyk protect", - "prepare": "npm run snyk-protect && husky install" + "prepare": "npm run snyk-protect && husky install", + "verify-translation": "zx scripts/verify-translations.mjs" }, "dependencies": { "@commitlint/cli": "^12.0.1", diff --git a/scripts/build.mjs b/scripts/build.mjs index ce522fd..cc8ffed 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -11,6 +11,8 @@ await (async () => { throw new Error('Invalid build target.') } + await $`yarn verify-translation` + switch (target) { case 'release-vercel': process.env.NODE_ENV = 'production' diff --git a/scripts/verify-translations.mjs b/scripts/verify-translations.mjs new file mode 100644 index 0000000..dee8ad1 --- /dev/null +++ b/scripts/verify-translations.mjs @@ -0,0 +1,39 @@ +/* global $ */ + +import fs from 'fs-extra' +import { join } from 'path' +import get from 'lodash-es/get.js' + +await (async () => { + const baseline = await fs.readJson( + join(__dirname, '../src/i18n/en/translation.json'), + ) + const keys = walkKeys([], '', baseline) + const langs = ['zh'] + + for (const lang of langs) { + const json = await fs.readJson( + join(__dirname, `../src/i18n/${lang}/translation.json`), + ) + + for (const key of keys) { + if (!get(json, key)) { + throw new Error(`Cannot find '${key}' for translation '${lang}'.`) + } + } + } + + console.info('🌎 Translation files is good to go!') +})() + +function walkKeys(arr, currKey, obj) { + for (const key in obj) { + if (typeof obj[key] === 'object') { + walkKeys(arr, currKey + key + '.', obj[key]) + } else { + arr.push(currKey + key) + } + } + + return arr +} From 885ea048c882c428f3e0b1dc8cc1a09b6cbaf2af Mon Sep 17 00:00:00 2001 From: Roy Li Date: Tue, 1 Jun 2021 23:46:15 +0200 Subject: [PATCH 26/45] chore: change title for surge dashboard --- scripts/build.mjs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/build.mjs b/scripts/build.mjs index cc8ffed..c1381ce 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -42,6 +42,8 @@ await (async () => { process.env.PUBLIC_URL = getUrlPathPrefix() await $`craco build` await changeManifest({ + short_name: 'Surge Dashboard', + name: 'Surge Web Dashboard', start_url: `${getUrlPathPrefix()}/#/home`, }) From 25ce67254730f2b531a0c854736742e3b672c793 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Tue, 1 Jun 2021 23:47:05 +0200 Subject: [PATCH 27/45] feat: use black texts over white background status bar --- public/index.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/public/index.html b/public/index.html index cfa43b7..c107795 100644 --- a/public/index.html +++ b/public/index.html @@ -6,13 +6,16 @@ + + + Surge Web Dashboard From 30471e037a14ab7f20ef25f52574e8db0caa9ac0 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Tue, 1 Jun 2021 23:47:35 +0200 Subject: [PATCH 28/45] fix: change spacing of language chooser --- src/components/ChangeLanguage.tsx | 2 +- src/pages/Index/index.tsx | 2 +- src/pages/Landing/Regular.tsx | 2 +- src/pages/Landing/Surge.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/ChangeLanguage.tsx b/src/components/ChangeLanguage.tsx index 619d529..f395587 100644 --- a/src/components/ChangeLanguage.tsx +++ b/src/components/ChangeLanguage.tsx @@ -29,7 +29,7 @@ const ChangeLanguage = (): JSX.Element => { ) return ( -
+
= (props) => { return (
{props.title && ( -
+
{props.title}
)} @@ -31,7 +31,7 @@ export const DataRowMain = styled.div` ` export const DataRowSub = styled.div` - ${tw`flex items-center justify-between px-3 leading-normal text-xs text-gray-800`} + ${tw`flex items-center justify-between px-3 leading-normal text-xs text-gray-800 lg:text-sm lg:leading-relaxed`} & > div:last-of-type { ${tw`text-gray-600`} diff --git a/src/components/FixedFullscreenContainer.tsx b/src/components/FixedFullscreenContainer.tsx index 196eb4b..fd25db1 100644 --- a/src/components/FixedFullscreenContainer.tsx +++ b/src/components/FixedFullscreenContainer.tsx @@ -23,7 +23,7 @@ const FixedFullscreenContainer: React.FC<{ ` : '', ]}> - {props.children} +
{props.children}
) } diff --git a/src/components/PageContainer.tsx b/src/components/PageContainer.tsx new file mode 100644 index 0000000..1c33a5e --- /dev/null +++ b/src/components/PageContainer.tsx @@ -0,0 +1,11 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import css from '@emotion/css/macro' +import tw from 'twin.macro' +import React from 'react' + +const PageContainer: React.FC = ({ children }) => { + return
{children}
+} + +export default PageContainer diff --git a/src/components/VersionSupport.tsx b/src/components/VersionSupport.tsx new file mode 100644 index 0000000..9c93b95 --- /dev/null +++ b/src/components/VersionSupport.tsx @@ -0,0 +1,34 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import React from 'react' +import gte from 'semver/functions/gte' + +import { usePlatform, usePlatformVersion } from '../models/profile' + +interface VersionSupportProps { + macos?: string + ios?: string +} + +const VersionSupport: React.FC = ({ + macos, + ios, + children, +}) => { + const platform = usePlatform() + const platformVersion = usePlatformVersion() + + if (!platform || !platformVersion) return null + + if (macos && platform === 'macos' && gte(platformVersion, macos)) { + return {children} + } + + if (ios && platform === 'ios' && gte(platformVersion, ios)) { + return {children} + } + + return null +} + +export default VersionSupport diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index 5a94806..bd10fef 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -9,7 +9,8 @@ "is_loading": "Loading", "success_interaction": "Success", "failed_interaction": "Failed", - "see": "See" + "see": "See", + "save": "Save" }, "new_version_alert": { "title": "Found new version!", @@ -45,7 +46,8 @@ "http_capture": "HTTP Capture", "rewrite": "Rewrite", "github": "GitHub", - "events": "Events" + "events": "Events", + "device_management": "Device Management" }, "traffic_cell": { "upload": "Upload", @@ -103,5 +105,25 @@ "dynamic": "Dynamic", "static": "Static", "comment": "Comment" + }, + "devices": { + "mac_address": "MAC Address", + "vendor": "Manufacturer", + "active_connections": "Active Connections", + "total_connections": "Total Connections", + "total_bytes": "Total Traffic", + "top_host": "Top Host", + "dhcp_last_seen": "DHCP Last Seen", + "dhcp_hostname": "DHCP Hostname", + "mode": "Mode", + "address": "Address", + "name": "Name", + "should_handled_by_surge": "Handled by Surge", + "handled_by_surge": "Surge", + "not_handled_by_surge": "None", + "gateway_mode": "Gateway", + "err_required": "Required", + "err_not_ip": "Input value is not an IP address", + "err_nothing_changed": "Nothing changed" } } \ No newline at end of file diff --git a/src/i18n/zh/translation.json b/src/i18n/zh/translation.json index 1e9e11c..a64b1ca 100644 --- a/src/i18n/zh/translation.json +++ b/src/i18n/zh/translation.json @@ -9,7 +9,8 @@ "is_loading": "加载中", "success_interaction": "操作成功", "failed_interaction": "操作失败", - "see": "查看" + "see": "查看", + "save": "保存" }, "new_version_alert": { "title": "发现新版本!", @@ -45,7 +46,8 @@ "http_capture": "抓取流量", "rewrite": "Rewrite", "github": "GitHub", - "events": "事件" + "events": "事件", + "device_management": "设备管理" }, "traffic_cell": { "upload": "上传", @@ -103,5 +105,25 @@ "dynamic": "动态记录", "static": "静态记录", "comment": "备注" + }, + "devices": { + "mac_address": "MAC 地址", + "vendor": "生产商", + "active_connections": "活跃连接数", + "total_connections": "所有连接数", + "total_bytes": "所有流量", + "top_host": "最多流量主机", + "dhcp_last_seen": "DHCP 最后一次出现", + "dhcp_hostname": "DHCP 主机", + "mode": "模式", + "address": "地址", + "name": "名称", + "should_handled_by_surge": "由 Surge 处理", + "handled_by_surge": "Surge", + "not_handled_by_surge": "无", + "gateway_mode": "网关模式", + "err_required": "必须输入", + "err_not_ip": "输入值不是 IP 地址", + "err_nothing_changed": "什么都没有修改" } } \ No newline at end of file diff --git a/src/models/profile.tsx b/src/models/profile.tsx index 94cf234..85821c5 100644 --- a/src/models/profile.tsx +++ b/src/models/profile.tsx @@ -41,8 +41,9 @@ const ProfileContext = createContext({ profile: undefined, }) -const ProfileDispatchContext = - createContext | undefined>(undefined) +const ProfileDispatchContext = createContext< + Dispatch | undefined +>(undefined) export const ProfileProvider: React.FC = (props) => { const [state, dispatch] = useReducer(profileReducer, { @@ -64,6 +65,29 @@ export const useProfile = (): Profile | undefined => { return context.profile } +export const usePlatform = (): Profile['platform'] | undefined => { + const context = React.useContext(ProfileContext) + + return context.profile?.platform +} +export const usePlatformVersion = (): + | Profile['platformVersion'] + | undefined => { + const context = React.useContext(ProfileContext) + + return context.profile?.platformVersion +} + +export const useSurgeHost = (): string | null => { + const context = React.useContext(ProfileContext) + + if (!context.profile) return null + + const { tls, host, port } = context.profile + + return `${tls ? 'https:' : 'http:'}//${host}:${port}` +} + export const useProfileDispatch = (): Dispatch => { const context = React.useContext(ProfileDispatchContext) diff --git a/src/pages/Devices/components/DeviceIcon.tsx b/src/pages/Devices/components/DeviceIcon.tsx new file mode 100644 index 0000000..e58eba5 --- /dev/null +++ b/src/pages/Devices/components/DeviceIcon.tsx @@ -0,0 +1,32 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import { Image } from '@sumup/circuit-ui' +import React from 'react' +import css from '@emotion/css/macro' +import tw from 'twin.macro' + +import { useSurgeHost } from '../../../models/profile' + +interface DeviceIconProps { + icon: string +} + +const DeviceIcon = ({ icon }: DeviceIconProps): JSX.Element => { + const surgeHost = useSurgeHost() + + return ( +
+ {icon} +
+ ) +} + +export default DeviceIcon diff --git a/src/pages/Devices/components/DeviceItem.tsx b/src/pages/Devices/components/DeviceItem.tsx new file mode 100644 index 0000000..30da001 --- /dev/null +++ b/src/pages/Devices/components/DeviceItem.tsx @@ -0,0 +1,134 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import { useModal } from '@sumup/circuit-ui' +import { noop } from 'lodash-es' +import React, { useCallback, useState } from 'react' +import css from '@emotion/css/macro' +import { useTranslation } from 'react-i18next' +import tw from 'twin.macro' +import bytes from 'bytes' +import dayjs from 'dayjs' +import { ChevronRight } from '@sumup/icons' + +import { DataRow, DataRowMain, DataRowSub } from '../../../components/Data' +import VersionSupport from '../../../components/VersionSupport' +import { useSurgeHost } from '../../../models/profile' +import { DeviceInfo } from '../../../types' +import DeviceIcon from './DeviceIcon' +import DeviceSettingsModal from './DeviceSettingsModal' + +const DeviceItem = ({ device }: { device: DeviceInfo }): JSX.Element => { + const { t } = useTranslation() + const { setModal } = useModal() + const surgeHost = useSurgeHost() + const isClickable = !!device.dhcpDevice + + const onClick = useCallback(() => { + setModal({ + children({ onClose }) { + return onClose && device.dhcpDevice ? ( + + ) : ( + + ) + }, + }) + }, [device, setModal]) + + return ( + + +
+ {device?.dhcpDevice?.icon && surgeHost ? ( + +
+ +
+
+ ) : ( + + )} +
+
{device.name}
+
{device.displayIPAddress}
+
+
+
+
{bytes(device.currentSpeed) + '/s'}
+ {isClickable && ( +
+ +
+ )} +
+
+
+ +
{t('devices.mac_address')}
+
{device.physicalAddress}
+
+ +
{t('devices.vendor')}
+
{device.vendor}
+
+ + {device.dhcpDevice ? ( + + +
{t('devices.dhcp_last_seen')}
+
{dayjs(device.dhcpDevice.dhcpLastSeen).format('L LTS')}
+
+ +
{t('devices.dhcp_hostname')}
+
{device.dhcpDevice.dhcpHostname || 'N/A'}
+
+ +
{t('devices.mode')}
+
+ {device.dhcpDevice.handledBySurge + ? t('devices.handled_by_surge') + : t('devices.not_handled_by_surge')} +
+
+
+ ) : ( + + +
{t('devices.mode')}
+
{t('devices.gateway_mode')}
+
+
+ )} + + {(device.hasTCPConnection || device.hasProxyConnection) && ( + + +
{t('devices.active_connections')}
+
{device.activeConnections}
+
+ +
{t('devices.total_connections')}
+
{device.totalConnections}
+
+ +
{t('devices.total_bytes')}
+
{bytes(device.totalBytes)}
+
+ +
{t('devices.top_host')}
+
{device.topHostBySingleConnectionTraffic || 'N/A'}
+
+
+ )} +
+
+ ) +} + +export default DeviceItem diff --git a/src/pages/Devices/components/DeviceSettingsModal.tsx b/src/pages/Devices/components/DeviceSettingsModal.tsx new file mode 100644 index 0000000..7a473b6 --- /dev/null +++ b/src/pages/Devices/components/DeviceSettingsModal.tsx @@ -0,0 +1,194 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import css from '@emotion/css/macro' +import React, { + MouseEvent, + KeyboardEvent, + useState, + ChangeEvent, + FormEventHandler, +} from 'react' +import { + Button, + ButtonGroup, + Input, + LoadingButton, + ModalFooter, + ModalHeader, + ModalWrapper, + Toggle, +} from '@sumup/circuit-ui' +import { useTranslation } from 'react-i18next' +import tw from 'twin.macro' +import { useForm, Controller, useFormState } from 'react-hook-form' +import isIP from 'is-ip' +import to from 'await-to-js' +import { toast } from 'react-toastify' +import { mutate } from 'swr' + +import { DHCPDevice } from '../../../types' +import fetcher from '../../../utils/fetcher' +import { getValidationHint } from '../../../utils/validation' + +interface DeviceSettingsModalProps { + title: string + dhcpDevice: DHCPDevice + onClose: (event?: MouseEvent | KeyboardEvent) => void +} + +interface FormData { + name: string + address: string + shouldHandledBySurge: boolean +} + +const DeviceSettingsModal = ({ + title, + dhcpDevice, + onClose, +}: DeviceSettingsModalProps): JSX.Element => { + const { + register, + handleSubmit, + control, + formState: { errors }, + } = useForm({ + defaultValues: { + name: dhcpDevice.displayName, + address: dhcpDevice.assignedIP || dhcpDevice.currentIP, + shouldHandledBySurge: Boolean(dhcpDevice.handledBySurge), + }, + }) + const { dirtyFields } = useFormState({ + control, + }) + const { t } = useTranslation() + const [isLoading, setIsLoading] = useState(false) + const onSubmit = (data: FormData) => { + if (!Object.keys(dirtyFields).length) { + toast.warn(t('devices.err_nothing_changed')) + return + } + + ;(async () => { + setIsLoading(true) + + const payload: Partial & { + physicalAddress: string + } = { + physicalAddress: dhcpDevice.physicalAddress, + } + + for (const i in dirtyFields) { + const key = i as keyof FormData + const isDirty = dirtyFields[key] + + if (isDirty) { + // @ts-ignore + payload[key] = data[key] + } + } + + const [err, result] = await to( + fetcher<{ + error?: string + }>({ + method: 'POST', + url: '/devices', + data: payload, + timeout: 20000, + }).then((res) => { + if (res.error) { + throw new Error(res.error) + } + }), + ) + + setIsLoading(false) + + if (err) { + console.error(err) + toast.error(t('common.failed_interaction') + `: ${err.message}`) + return + } + + mutate('/devices') + toast.success(t('common.success_interaction')) + onClose() + })() + } + + return ( + + + + +
+ + isIP(val), + }, + })} + /> + ( + field.onChange(!field.value)} + /> + )} + /> +
+ + + + + {t('common.save')} + + + + +
+ ) +} + +export default DeviceSettingsModal diff --git a/src/pages/Devices/index.tsx b/src/pages/Devices/index.tsx new file mode 100644 index 0000000..b6626dc --- /dev/null +++ b/src/pages/Devices/index.tsx @@ -0,0 +1,49 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import React, { useState } from 'react' +import css from '@emotion/css/macro' +import tw from 'twin.macro' +import { useTranslation } from 'react-i18next' +import useSWR from 'swr' + +import PageContainer from '../../components/PageContainer' +import PageTitle from '../../components/PageTitle' +import { DevicesResult } from '../../types' +import fetcher from '../../utils/fetcher' +import DeviceItem from './components/DeviceItem' + +const Page = (): JSX.Element => { + const { t } = useTranslation() + const [isAutoRefresh, setIsAutoRefresh] = useState(false) + const { data: devices, error: devicesError } = useSWR( + '/devices', + fetcher, + { + revalidateOnFocus: false, + revalidateOnReconnect: false, + refreshInterval: isAutoRefresh ? 2000 : 0, + }, + ) + + return ( + + setIsAutoRefresh(newState)} + /> + +
+ {devices?.devices && + devices.devices.map((device) => ( +
+ +
+ ))} +
+
+ ) +} + +export default Page diff --git a/src/pages/Dns/index.tsx b/src/pages/Dns/index.tsx index 91d625f..96631ff 100644 --- a/src/pages/Dns/index.tsx +++ b/src/pages/Dns/index.tsx @@ -71,7 +71,8 @@ const Page: React.FC = () => { style={style} onClick={() => openIpDetail(record.data[0])} css={[ - tw`flex flex-col justify-center py-2 cursor-pointer hover:bg-gray-100`, + tw`flex flex-col justify-center py-2`, + tw`cursor-pointer hover:bg-gray-100`, css` padding-left: calc(env(safe-area-inset-left) + 0.75rem); padding-right: calc(env(safe-area-inset-right) + 0.75rem); @@ -129,84 +130,82 @@ const Page: React.FC = () => { return ( -
- + -
- - {({ width, height }) => { - return ( - div { - ${tw`divide-y divide-gray-200`} - } - `} - /> - ) - }} - -
+
+ + {({ width, height }) => { + return ( + div { + ${tw`divide-y divide-gray-200`} + } + `} + /> + ) + }} + +
-
div { + ${tw`mx-2`} + } + & > div:first-of-type { + margin-left: 0; + } + `, + ]}> + div { - ${tw`mx-2`} + & label { + ${tw`py-2 px-4 ml-2 my-1 text-sm`} } - & > div:first-of-type { + & label:first-of-type { margin-left: 0; } `, - ]}> - ) => { - setGroup(event.target.value as 'dynamic' | 'static') - }} - options={[ - { - children: t('dns.dynamic'), - value: 'dynamic', - }, - { - children: t('dns.static'), - value: 'static', - }, - ]} - value={group} - /> + ]} + label="choose the dns result group" + name="selector-group" + onChange={(event: ChangeEvent) => { + setGroup(event.target.value as 'dynamic' | 'static') + }} + options={[ + { + children: t('dns.dynamic'), + value: 'dynamic', + }, + { + children: t('dns.static'), + value: 'static', + }, + ]} + value={group} + /> -
- -
+
+
diff --git a/src/pages/Index/components/MenuTile.tsx b/src/pages/Index/components/MenuTile.tsx index 78a9578..c9e7155 100644 --- a/src/pages/Index/components/MenuTile.tsx +++ b/src/pages/Index/components/MenuTile.tsx @@ -22,12 +22,11 @@ const MenuTile: React.FC = (props) => { return (
{props.children} diff --git a/src/pages/Index/index.tsx b/src/pages/Index/index.tsx index 35bfdce..f36f3bd 100644 --- a/src/pages/Index/index.tsx +++ b/src/pages/Index/index.tsx @@ -1,7 +1,7 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' import React, { useCallback } from 'react' -import { Button, Heading, ModalProvider, Toggle } from '@sumup/circuit-ui' +import { Button, Heading, Toggle } from '@sumup/circuit-ui' import styled from '@emotion/styled/macro' import css from '@emotion/css/macro' import { useTranslation } from 'react-i18next' @@ -9,13 +9,17 @@ import tw from 'twin.macro' import { delay } from 'bluebird' import { useHistory } from 'react-router-dom' import useSWR, { mutate } from 'swr' -import store, { remove } from 'store2' -import ChangeLanguage from '../../components/ChangeLanguage' +import store from 'store2' +import ChangeLanguage from '../../components/ChangeLanguage' import { DataGroup, DataRow, DataRowMain } from '../../components/Data' import ProfileCell from '../../components/ProfileCell' import Ad from '../../components/Ad' -import { useProfile } from '../../models/profile' +import { + usePlatform, + usePlatformVersion, + useProfile, +} from '../../models/profile' import { Capability } from '../../types' import { isRunInSurge } from '../../utils' import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' @@ -38,6 +42,8 @@ const Page: React.FC = () => { fetcher, ) const { t } = useTranslation() + const platform = usePlatform() + const platformVersion = usePlatformVersion() const toggleSystemProxy = useCallback(() => { fetcher({ @@ -88,7 +94,7 @@ const Page: React.FC = () => { } return ( - +
{
{menu.map((item) => { + if ( + typeof item.isEnabled === 'function' && + !item.isEnabled(platform, platformVersion) + ) { + return null + } + return (
{item.component ? ( @@ -197,7 +210,7 @@ const Page: React.FC = () => {
-
+ ) } diff --git a/src/pages/Index/menu.tsx b/src/pages/Index/menu.tsx index 8c7e4de..39920d8 100644 --- a/src/pages/Index/menu.tsx +++ b/src/pages/Index/menu.tsx @@ -2,7 +2,9 @@ import { jsx } from '@emotion/core' import React from 'react' import tw, { TwStyle } from 'twin.macro' +import gte from 'semver/functions/gte' +import { Profile } from '../../types' import { isRunInSurge } from '../../utils' import CapabilityTile from './components/CapabilityTile' @@ -13,6 +15,10 @@ export interface MenuItem { tintColor?: TwStyle textColor?: TwStyle component?: JSX.Element + isEnabled?: ( + platform: Profile['platform'] | void, + platformVersion: Profile['platformVersion'] | void, + ) => boolean } const menu: Array = [ @@ -42,6 +48,17 @@ const menu: Array = [ title: 'modules', link: '/modules', }, + { + title: 'device_management', + link: '/devices', + isEnabled: (platform, platformVersion) => { + return Boolean( + platform === 'macos' && + platformVersion && + gte(platformVersion, '4.0.6'), + ) + }, + }, { title: 'dns', link: '/dns', diff --git a/src/pages/Modules/index.tsx b/src/pages/Modules/index.tsx index 3bcc3c3..106f9d1 100644 --- a/src/pages/Modules/index.tsx +++ b/src/pages/Modules/index.tsx @@ -8,6 +8,7 @@ import tw from 'twin.macro' import useSWR, { mutate } from 'swr' import { toast } from 'react-toastify' +import PageContainer from '../../components/PageContainer' import PageTitle from '../../components/PageTitle' import { Modules } from '../../types' import fetcher from '../../utils/fetcher' @@ -51,7 +52,7 @@ const Page: React.FC = () => { ) return ( -
+
@@ -71,7 +72,7 @@ const Page: React.FC = () => { ) })}
-
+ ) } diff --git a/src/pages/Policies/index.tsx b/src/pages/Policies/index.tsx index ea0cc43..ce17001 100644 --- a/src/pages/Policies/index.tsx +++ b/src/pages/Policies/index.tsx @@ -8,8 +8,9 @@ import tw from 'twin.macro' import React, { createRef, RefObject, useRef } from 'react' import { ScrollTo } from 'react-scroll-to' import useSWR from 'swr' -import BackButton from '../../components/BackButton' +import BackButton from '../../components/BackButton' +import PageContainer from '../../components/PageContainer' import { Policies, PolicyGroups } from '../../types' import fetcher from '../../utils/fetcher' import PolicyGroup from './components/PolicyGroup' @@ -46,7 +47,7 @@ const Page: React.FC = () => { } return ( -
+
@@ -106,7 +107,7 @@ const Page: React.FC = () => { ) })}
-
+ ) } diff --git a/src/pages/Profiles/Current/index.tsx b/src/pages/Profiles/Current/index.tsx index e55b5f9..5a2af4a 100644 --- a/src/pages/Profiles/Current/index.tsx +++ b/src/pages/Profiles/Current/index.tsx @@ -42,38 +42,36 @@ const Page: React.FC = () => { return ( -
- + -
-
- .CodeMirror { - padding-bottom: env(safe-area-inset-bottom); - height: 100%; - font-family: Menlo, Monaco, Consolas, 'Liberation Mono', - 'Courier New', monospace; - } - `, - ]} - value={profile?.profile ?? `${t('common.is_loading')}...`} - options={{ - mode: 'properties', - theme: 'material', - lineNumbers: true, - tabSize: 2, - indentWithTabs: false, - lineWrapping: true, - readOnly: 'nocursor', - }} - onBeforeChange={() => { - // noop - }} - /> -
+
+
+ .CodeMirror { + padding-bottom: env(safe-area-inset-bottom); + height: 100%; + font-family: Menlo, Monaco, Consolas, 'Liberation Mono', + 'Courier New', monospace; + } + `, + ]} + value={profile?.profile ?? `${t('common.is_loading')}...`} + options={{ + mode: 'properties', + theme: 'material', + lineNumbers: true, + tabSize: 2, + indentWithTabs: false, + lineWrapping: true, + readOnly: 'nocursor', + }} + onBeforeChange={() => { + // noop + }} + />
diff --git a/src/pages/Requests/index.tsx b/src/pages/Requests/index.tsx index 33b16da..1cee4c2 100644 --- a/src/pages/Requests/index.tsx +++ b/src/pages/Requests/index.tsx @@ -2,8 +2,7 @@ import { jsx } from '@emotion/core' import styled from '@emotion/styled/macro' import css from '@emotion/css/macro' -import { ModalConsumer, ModalProvider } from '@sumup/circuit-ui' -import { ModalProps } from '@sumup/circuit-ui/dist/es/components/Modal/Modal' +import { ModalConsumer, useModal } from '@sumup/circuit-ui' import SelectorGroup from '@sumup/circuit-ui/dist/es/components/SelectorGroup' import { useTranslation } from 'react-i18next' import { ListRowRenderer } from 'react-virtualized/dist/es/List' @@ -30,6 +29,7 @@ import RequestModal from './components/RequestModal' const LIST_ITEMS_MAX = 150 const Page: React.FC = () => { + const { setModal } = useModal() const { t } = useTranslation() const profile = useProfile() const [isAutoRefresh, setIsAutoRefresh] = useState(true) @@ -112,7 +112,7 @@ const Page: React.FC = () => { ) const openRequestDetail = useCallback( - (setModal: (modal: ModalProps) => void, req: RequestItem) => { + (req: RequestItem) => { setModal({ children({ onClose }) { return onClose ? ( @@ -126,134 +126,119 @@ const Page: React.FC = () => { }, }) }, - [], + [setModal], ) - const getRowRenderer: ( - setModal: (modal: ModalProps) => void, - ) => ListRowRenderer = useCallback( - (setModal) => { - // eslint-disable-next-line react/display-name - return ({ - key, // Unique key within array of rows - index, // Index of row within collection - isScrolling, // The List is currently being scrolled - isVisible, // This row is visible within the List (eg it is not an overscanned row) - style, // Style object to be applied to row (to position it) - }) => { - const req = currentList[index] - - return ( -
openRequestDetail(setModal, req)} - tw="flex flex-col justify-center py-2 cursor-pointer hover:bg-gray-100" - css={css` - padding-left: calc(env(safe-area-inset-left) + 0.75rem); - padding-right: calc(env(safe-area-inset-right) + 0.75rem); - `}> - -
- ) - } + const rowRenderer: ListRowRenderer = useCallback( + ({ + key, // Unique key within array of rows + index, // Index of row within collection + isScrolling, // The List is currently being scrolled + isVisible, // This row is visible within the List (eg it is not an overscanned row) + style, // Style object to be applied to row (to position it) + }) => { + const req = currentList[index] + + return ( +
openRequestDetail(req)} + tw="flex flex-col justify-center py-2 cursor-pointer hover:bg-gray-100" + css={css` + padding-left: calc(env(safe-area-inset-left) + 0.75rem); + padding-right: calc(env(safe-area-inset-right) + 0.75rem); + `}> + +
+ ) }, [currentList, openRequestDetail], ) return ( - - - {({ setModal }) => { - return ( -
- - setIsAutoRefresh(newState) - } - /> - -
- {currentList.length ? ( - - {({ width, height }) => { - return ( - div { - ${tw`divide-y divide-gray-200`} - } - `} - /> - ) - }} - - ) : ( -
- {t('common.is_loading')}... -
- )} -
- -
+ setIsAutoRefresh(newState)} + /> + +
+ {currentList.length ? ( + + {({ width, height }) => { + return ( + div { - ${tw`mx-2`} - } - & > div:first-of-type { - margin-left: 0; + ${tw`divide-y divide-gray-200`} } - `, - ]}> - ) => { - setGroup(event.target.value as 'recent' | 'active') - }} - options={[ - { - children: t('requests.recent'), - value: 'recent', - }, - { - children: t('requests.active'), - value: 'active', - }, - ]} - value={group} + `} /> -
-
- ) - }} - - + ) + }} + + ) : ( +
+ {t('common.is_loading')}... +
+ )} +
+ +
div { + ${tw`mx-2`} + } + & > div:first-of-type { + margin-left: 0; + } + `, + ]}> + ) => { + setGroup(event.target.value as 'recent' | 'active') + }} + options={[ + { + children: t('requests.recent'), + value: 'recent', + }, + { + children: t('requests.active'), + value: 'active', + }, + ]} + value={group} + /> +
+
) } diff --git a/src/pages/Scripting/Evaluate/index.tsx b/src/pages/Scripting/Evaluate/index.tsx index 5b990d3..a4585ca 100644 --- a/src/pages/Scripting/Evaluate/index.tsx +++ b/src/pages/Scripting/Evaluate/index.tsx @@ -88,96 +88,94 @@ const Page: React.FC = () => { return ( -
- + -
-
- .CodeMirror { - height: 100%; - font-family: Menlo, Monaco, Consolas, 'Liberation Mono', - 'Courier New', monospace; - } - `, - ]} - value={code} - options={{ - mode: 'javascript', - theme: 'material', - lineNumbers: true, - tabSize: 2, - indentWithTabs: false, - lineWrapping: true, - }} - onBeforeChange={(editor, data, value) => { - setCode(value) - }} - /> -
-
+
+ - - {t('scripting.run_script_button_title')} - + tw`h-full text-xs`, + css` + & > .CodeMirror { + height: 100%; + font-family: Menlo, Monaco, Consolas, 'Liberation Mono', + 'Courier New', monospace; + } + `, + ]} + value={code} + options={{ + mode: 'javascript', + theme: 'material', + lineNumbers: true, + tabSize: 2, + indentWithTabs: false, + lineWrapping: true, + }} + onBeforeChange={(editor, data, value) => { + setCode(value) + }} + /> +
+
+ + {t('scripting.run_script_button_title')} + -
- - setTimeoutValue(Number((target as HTMLInputElement).value)) + & input { + border-radius: 4px; + ${tw`px-2 py-1 text-sm leading-none`} } - /> -
+ `, + ]}> + + setTimeoutValue(Number((target as HTMLInputElement).value)) + } + />
- - { - setResult('') - }}> - {({ onClose }) => ( - - -
-
-                  {result}
-                
-
-
- )} -
+ + { + setResult('') + }}> + {({ onClose }) => ( + + +
+
+                {result}
+              
+
+
+ )} +
) } diff --git a/src/pages/Scripting/index.tsx b/src/pages/Scripting/index.tsx index 75ccb10..9adbc69 100644 --- a/src/pages/Scripting/index.tsx +++ b/src/pages/Scripting/index.tsx @@ -72,62 +72,58 @@ const Page: React.FC = () => { return ( -
- + -
-
- {scripting && - filteredList.map((script, index) => { - return ( -
openUrl(script.path)}> -
-
- {script.name} -
-
{script.type}
-
-
- {script.type === 'cron' && ( - { - e.stopPropagation() - evaluate(script.name, index) - }} - size="kilo" - isLoading={isLoading === index} - loadingLabel={t('scripting.running')} - tw="px-3 py-3 text-sm leading-tight"> - {t('scripting.run_script_button_title')} - - )} +
+
+ {scripting && + filteredList.map((script, index) => { + return ( +
openUrl(script.path)}> +
+
+ {script.name}
+
{script.type}
+
+
+ {script.type === 'cron' && ( + { + e.stopPropagation() + evaluate(script.name, index) + }} + size="kilo" + isLoading={isLoading === index} + loadingLabel={t('scripting.running')} + tw="px-3 py-3 text-sm leading-tight"> + {t('scripting.run_script_button_title')} + + )}
- ) - })} -
+
+ ) + })}
+
-
- -
+
+
= ({ name, data }) => { key={name} onClick={() => setIsDetailsOpen(!isDetailsOpen)}> -
{name}
-
+
{name}
+
总计 {bytes(data.in + data.out)}
{ } return ( -
+ { )} -
+ ) } diff --git a/src/types.ts b/src/types.ts index 55837cd..567970f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -166,3 +166,37 @@ export interface DnsResult { expiresTime: number }> } + +export interface DeviceInfo { + activeConnections: number + currentSpeed: number + displayIPAddress: string + hasProxyConnection: boolean + hasTCPConnection: boolean + identifier: string + name: string + physicalAddress: string + sourceIP: string + topHostBySingleConnectionTraffic: string + totalBytes: number + totalConnections: number + vendor: string + dhcpDevice?: DHCPDevice +} + +export interface DHCPDevice { + assignedIP?: string + currentIP?: string + dhcpHostname: string + dhcpLastSeen?: string + handledBySurge: 0 | 1 + displayName?: string + icon?: string + physicalAddress: string + shouldHandledBySurge: 0 | 1 + waitingToReconnect: 0 | 1 +} + +export interface DevicesResult { + devices: ReadonlyArray +} diff --git a/src/utils/validation.ts b/src/utils/validation.ts new file mode 100644 index 0000000..5424366 --- /dev/null +++ b/src/utils/validation.ts @@ -0,0 +1,20 @@ +import { FieldError, RegisterOptions } from 'react-hook-form' + +export function getValidationHint( + typeMap: { + [key in keyof RegisterOptions]?: string + } & { + [key: string]: any + }, + fieldError?: FieldError, +): string | undefined { + if (!fieldError) return undefined + + for (const key in typeMap) { + if (fieldError.type === key) { + return typeMap[key] + } + } + + return undefined +} diff --git a/yarn.lock b/yarn.lock index 25ef4b1..598546f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3797,6 +3797,11 @@ autoprefixer@^9.4.5, autoprefixer@^9.6.1, autoprefixer@^9.8.6: postcss "^7.0.32" postcss-value-parser "^4.1.0" +await-to-js@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/await-to-js/-/await-to-js-3.0.0.tgz#70929994185616f4675a91af6167eb61cc92868f" + integrity sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g== + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -8428,6 +8433,11 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -8677,6 +8687,13 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-ip@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" + integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== + dependencies: + ip-regex "^4.0.0" + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -13143,6 +13160,11 @@ react-ga@^3.1.2: resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.3.0.tgz#c91f407198adcb3b49e2bc5c12b3fe460039b3ca" integrity sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ== +react-hook-form@^7.8.4: + version "7.8.4" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.8.4.tgz#4405b242db7b946f387f2a6c01f92390a2564893" + integrity sha512-hVh7uAJZS4/c20kNjW4rW+pD7+4RhuMDF3qY82f8wFuuPkoO+Pg5JHSJUqGdPdlI82snOlZ4DK/avIBn5SxItg== + react-i18next@^11.10.0: version "11.10.0" resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.10.0.tgz#f34257447e18e710e36d8fd3f721dd7d37c7004f" From 69adb7a7d1a9e2915b0e283efa772efe7c88ed99 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 13 Jun 2021 20:03:22 +0200 Subject: [PATCH 36/45] chore: text changes --- scripts/build.mjs | 2 +- scripts/verify-translations.mjs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build.mjs b/scripts/build.mjs index 6edc8e8..4c27370 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -13,7 +13,7 @@ await (async () => { await $`yarn verify-translation` await clean() - console.info('🏗 Build artifact') + console.info('🚧 Build artifact') switch (target) { case 'release-vercel': diff --git a/scripts/verify-translations.mjs b/scripts/verify-translations.mjs index dee8ad1..40623f0 100644 --- a/scripts/verify-translations.mjs +++ b/scripts/verify-translations.mjs @@ -23,7 +23,7 @@ await (async () => { } } - console.info('🌎 Translation files is good to go!') + console.info('🌎 Translation files are good to go!') })() function walkKeys(arr, currKey, obj) { From 7c7bdc1b7c0c4fc93b0f5aed4a97d29df412d939 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 13 Jun 2021 20:03:45 +0200 Subject: [PATCH 37/45] refactor: use hook to handle forms --- src/i18n/en/translation.json | 4 + src/i18n/zh/translation.json | 2 +- src/pages/Landing/Regular.tsx | 309 +++++++++++++++------------------- src/pages/Landing/Surge.tsx | 227 +++++++++++-------------- src/pages/Landing/types.ts | 15 ++ src/pages/Landing/utils.ts | 2 +- src/utils/validation.ts | 2 +- 7 files changed, 257 insertions(+), 304 deletions(-) create mode 100644 src/pages/Landing/types.ts diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index bd10fef..16fb45d 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -12,6 +12,10 @@ "see": "See", "save": "Save" }, + "form": { + "err_invalid": "Invalid value", + "err_required": "Required" + }, "new_version_alert": { "title": "Found new version!", "message": "Take a look at what's been update." diff --git a/src/i18n/zh/translation.json b/src/i18n/zh/translation.json index a64b1ca..e46ba48 100644 --- a/src/i18n/zh/translation.json +++ b/src/i18n/zh/translation.json @@ -25,7 +25,7 @@ "port": "端口", "key": "密钥", "remember_me": "记住我", - "https": "HTTPS (请确保开启 http-api-tls)", + "https": "HTTPS (请确保开启 http-api-tls)", "confirm": "完成", "is_loading": "加载中", "history": "历史记录", diff --git a/src/pages/Landing/Regular.tsx b/src/pages/Landing/Regular.tsx index cf73f60..c3a93c5 100644 --- a/src/pages/Landing/Regular.tsx +++ b/src/pages/Landing/Regular.tsx @@ -1,169 +1,135 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' -import React, { - ChangeEvent, - FormEventHandler, - useCallback, - useEffect, -} from 'react' +import React, { useCallback, useEffect } from 'react' import { Heading, Input, LoadingButton, Checkbox } from '@sumup/circuit-ui' -import { CircleWarning } from '@sumup/icons' import css from '@emotion/css/macro' +import { Controller, useForm } from 'react-hook-form' import tw from 'twin.macro' import store from 'store2' import { v4 as uuid } from 'uuid' import { find } from 'lodash-es' import { useHistory } from 'react-router-dom' import { useTranslation } from 'react-i18next' -import ChangeLanguage from '../../components/ChangeLanguage' +import ChangeLanguage from '../../components/ChangeLanguage' import ProfileCell from '../../components/ProfileCell' import Ad from '../../components/Ad' import useSetState from '../../hooks/use-set-state' import { useProfileDispatch } from '../../models/profile' import { Profile } from '../../types' import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' +import { getValidationHint } from '../../utils/validation' import Header from './components/Header' import { useAuthData } from './hooks' +import { RegularFormFields } from './types' import { tryHost } from './utils' const Page: React.FC = () => { const history = useHistory() const protocol = window.location.protocol - const { - data, - setData, - hasError, - setHasError, - isLoading, - setIsLoading, - keepCredential, - setKeepCredential, - } = useAuthData() + const { isLoading, setIsLoading } = useAuthData() const [existingProfiles, setExistingProfiles, getExistingProfiles] = useSetState>([]) const profileDispatch = useProfileDispatch() const { t } = useTranslation() - - const addProfile = useCallback( - (config: Omit): Profile => { - const profile: Profile = { - ...config, - id: uuid(), - } - const newProfiles = [profile, ...existingProfiles] - setExistingProfiles(newProfiles) - - if (keepCredential) { - store.set(ExistingProfiles, newProfiles) - store.set(LastUsedProfile, profile.id) - } - - return profile + const { + getValues, + register, + handleSubmit, + control, + clearErrors, + setError, + reset, + formState: { errors }, + } = useForm({ + defaultValues: { + keepCredential: false, + useTls: window.location.protocol === 'https:', }, - [existingProfiles, keepCredential, setExistingProfiles], - ) - - const selectProfile = useCallback( - (id: string) => { - getExistingProfiles().then((profiles) => { - const profile = find(profiles, { id }) + }) - if (profile) { - if (keepCredential) { - store.set(LastUsedProfile, profile.id) - } - - profileDispatch({ - type: 'update', - payload: profile, - }) - history.replace('/home') - } - }) - }, - [getExistingProfiles, history, keepCredential], - ) + const addProfile = (config: Omit): Profile => { + const profile: Profile = { + ...config, + id: uuid(), + } + const newProfiles = [profile, ...existingProfiles] + setExistingProfiles(newProfiles) - const deleteProfile = useCallback( - (id: string) => { - const profiles = existingProfiles.filter((item) => item.id !== id) + if (getValues('keepCredential')) { + store.set(ExistingProfiles, newProfiles) + store.set(LastUsedProfile, profile.id) + } - setExistingProfiles(profiles) - store.set(ExistingProfiles, profiles) - }, - [setExistingProfiles, existingProfiles], - ) + return profile + } - const resetFields = useCallback(() => { - setData((prev) => ({ - ...prev, - name: '', - host: '', - port: '', - key: '', - useTls: protocol === 'https:', - })) - }, [protocol, setData]) + const selectProfile = (id: string) => { + getExistingProfiles().then((profiles) => { + const profile = find(profiles, { id }) - const onSubmit: FormEventHandler = useCallback( - (e) => { - e.preventDefault() + if (profile) { + if (getValues('keepCredential')) { + store.set(LastUsedProfile, profile.id) + } - if (!data.name || !data.host || !data.port || !data.key) { - return + profileDispatch({ + type: 'update', + payload: profile, + }) + history.replace('/home') } + }) + } - setIsLoading(true) + const deleteProfile = (id: string) => { + const profiles = existingProfiles.filter((item) => item.id !== id) - tryHost(data.useTls ? 'https:' : 'http:', data.host, data.port, data.key) - .then((res) => { - setHasError(false) + setExistingProfiles(profiles) + store.set(ExistingProfiles, profiles) + } - const newProfile = addProfile({ - name: data.name, - host: data.host, - port: Number(data.port), - key: data.key, - platform: res.platform, - platformVersion: res.platformVersion, - platformBuild: res.platformBuild, - tls: data.useTls, - }) + const onSubmit = (data: RegularFormFields) => { + if (!data.name || !data.host || !data.port || !data.key) { + return + } - resetFields() - setIsLoading(false) - selectProfile(newProfile.id) - }) - .catch((err) => { - setHasError(err.message) - console.error(err) - setIsLoading(false) + setIsLoading(true) + + tryHost(data.useTls ? 'https:' : 'http:', data.host, data.port, data.key) + .then((res) => { + clearErrors() + + const newProfile = addProfile({ + name: data.name, + host: data.host, + port: Number(data.port), + key: data.key, + platform: res.platform, + platformVersion: res.platformVersion, + platformBuild: res.platformBuild, + tls: data.useTls, }) - }, - [ - addProfile, - data.host, - data.key, - data.name, - data.port, - data.useTls, - resetFields, - selectProfile, - setHasError, - setIsLoading, - ], - ) - const updateData = useCallback( - (key: string, value: string) => { - setData((prev) => ({ - ...prev, - [key]: value, - })) - }, - [setData], - ) + reset() + setIsLoading(false) + selectProfile(newProfile.id) + }) + .catch((err) => { + setError('key', { + type: 'invalid', + message: err.message, + }) + setError('host', { + type: 'invalid', + }) + setError('port', { + type: 'invalid', + }) + console.error(err) + setIsLoading(false) + }) + } useEffect(() => { const storedExistingProfiles = store.get(ExistingProfiles) @@ -202,69 +168,77 @@ const Page: React.FC = () => {

-
+ ) => - updateData('name', e.target.value) - } + {...register('name', { required: true })} /> ) => - updateData('host', e.target.value) - } + {...register('host', { required: true })} /> ) => - updateData('port', e.target.value) - } + validationHint={getValidationHint( + { + required: t('devices.err_required'), + }, + errors?.port, + )} + {...register('port', { required: true })} /> - setData((prev) => ({ - ...prev, - key: (target as HTMLInputElement).value, - })) - } + {...register('key', { required: true })} />
- - setData((prev) => ({ - ...prev, - useTls: !prev.useTls, - })) - }> - - - setKeepCredential((prev) => !prev)}> - {t('landing.remember_me')} - + ( + + {t('landing.https')} + + )} + /> + ( + + {t('landing.remember_me')} + + )} + />
@@ -277,13 +251,6 @@ const Page: React.FC = () => { {t('landing.confirm')}
- - {typeof hasError === 'string' && ( -
- - {hasError} -
- )}
diff --git a/src/pages/Landing/Surge.tsx b/src/pages/Landing/Surge.tsx index 50f7a89..c82b938 100644 --- a/src/pages/Landing/Surge.tsx +++ b/src/pages/Landing/Surge.tsx @@ -1,99 +1,87 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' -import React, { - ChangeEvent, - FormEventHandler, - useCallback, - useEffect, -} from 'react' +import React, { useEffect } from 'react' import { Heading, Input, LoadingButton, Checkbox } from '@sumup/circuit-ui' -import { CircleWarning } from '@sumup/icons' import css from '@emotion/css/macro' +import { useForm, Controller } from 'react-hook-form' import { useTranslation } from 'react-i18next' import tw from 'twin.macro' import store from 'store2' import { v4 as uuid } from 'uuid' import { find } from 'lodash-es' import { useHistory } from 'react-router-dom' -import ChangeLanguage from '../../components/ChangeLanguage' +import ChangeLanguage from '../../components/ChangeLanguage' import useSetState from '../../hooks/use-set-state' import { useProfile, useProfileDispatch } from '../../models/profile' import { Profile } from '../../types' import { ExistingProfiles, LastUsedProfile } from '../../utils/constant' +import { getValidationHint } from '../../utils/validation' import Header from './components/Header' import { useAuthData } from './hooks' +import { SurgeFormFields } from './types' import { tryHost } from './utils' const Page: React.FC = () => { const { t } = useTranslation() - const { - data, - setData, - hasError, - setHasError, - isLoading, - setIsLoading, - keepCredential, - setKeepCredential, - } = useAuthData() + const { isLoading, setIsLoading } = useAuthData() const [existingProfiles, setExistingProfiles, getExistingProfiles] = useSetState>([]) const profileDispatch = useProfileDispatch() const profile = useProfile() const history = useHistory() + const { + getValues, + register, + handleSubmit, + control, + clearErrors, + setError, + formState: { errors }, + } = useForm({ + defaultValues: { + keepCredential: false, + }, + }) - const addProfile = useCallback( - (config: Omit): Profile => { - const profile: Profile = { - ...config, - id: uuid(), - } - const newProfiles = [profile, ...existingProfiles] - setExistingProfiles(newProfiles) - - if (keepCredential) { - store.set(ExistingProfiles, newProfiles) - store.set(LastUsedProfile, profile.id) - } + const addProfile = (config: Omit): Profile => { + const profile: Profile = { + ...config, + id: uuid(), + } + const newProfiles = [profile, ...existingProfiles] + setExistingProfiles(newProfiles) - return profile - }, - [existingProfiles, keepCredential, setExistingProfiles], - ) + if (getValues('keepCredential')) { + store.set(ExistingProfiles, newProfiles) + store.set(LastUsedProfile, profile.id) + } - const selectProfile = useCallback( - (id: string) => { - getExistingProfiles().then((profiles) => { - const profile = find(profiles, { id }) + return profile + } - if (profile) { - if (keepCredential) { - store.set(LastUsedProfile, profile.id) - } + const selectProfile = (id: string) => { + getExistingProfiles().then((profiles) => { + const profile = find(profiles, { id }) - profileDispatch({ - type: 'update', - payload: profile, - }) + if (profile) { + if (getValues('keepCredential')) { + store.set(LastUsedProfile, profile.id) } - }) - }, - [getExistingProfiles, keepCredential, profileDispatch], - ) - const resetFields = useCallback(() => { - setData((prev) => ({ - ...prev, - key: '', - })) - }, [setData]) + profileDispatch({ + type: 'update', + payload: profile, + }) + } + }) + } const getHost: () => { protocol: string hostname: string port: string - } = useCallback(() => { + } = () => { const protocol = window.location.protocol if (process.env.NODE_ENV === 'production') { @@ -108,63 +96,43 @@ const Page: React.FC = () => { hostname: process.env.REACT_APP_HOST as string, port: process.env.REACT_APP_PORT as string, } - }, []) - - const onSubmit: FormEventHandler = useCallback( - (e) => { - e.preventDefault() + } - if (!data.key) { - return - } + const onSubmit = (data: SurgeFormFields) => { + if (!data.key) { + return + } - const { hostname, port, protocol } = getHost() - setIsLoading(true) - - tryHost(protocol, hostname, port, data.key) - .then((res) => { - setHasError(false) - - const newProfile = addProfile({ - name: res.name || 'Surge for Mac', - host: hostname, - port: Number(port), - key: data.key, - platform: res.platform, - platformVersion: res.platformVersion, - platformBuild: res.platformBuild, - tls: protocol === 'https:', - }) - - resetFields() - setIsLoading(false) - selectProfile(newProfile.id) + const { hostname, port, protocol } = getHost() + setIsLoading(true) + + tryHost(protocol, hostname, port, data.key) + .then((res) => { + clearErrors() + + const newProfile = addProfile({ + name: res.name || 'Surge for Mac', + host: hostname, + port: Number(port), + key: data.key, + platform: res.platform, + platformVersion: res.platformVersion, + platformBuild: res.platformBuild, + tls: protocol === 'https:', }) - .catch((err) => { - setHasError(err.message) - console.error(err) - setIsLoading(false) - }) - }, - [ - addProfile, - data.key, - resetFields, - selectProfile, - setHasError, - setIsLoading, - ], - ) - const updateData = useCallback( - (key: string, value: string) => { - setData((prev) => ({ - ...prev, - [key]: value, - })) - }, - [setData], - ) + setIsLoading(false) + selectProfile(newProfile.id) + }) + .catch((err) => { + setError('key', { + type: 'invalid', + message: err.message, + }) + console.error(err) + setIsLoading(false) + }) + } useEffect(() => { const storedExistingProfiles = store.get(ExistingProfiles) @@ -200,25 +168,31 @@ const Page: React.FC = () => {
{t('landing.login')} -
+ ) => - updateData('key', e.target.value) - } + {...register('key', { required: true })} />
- setKeepCredential((prev) => !prev)}> - {t('landing.remember_me')} - + ( + + {t('landing.remember_me')} + + )} + />
@@ -231,13 +205,6 @@ const Page: React.FC = () => { {t('landing.confirm')}
- - {typeof hasError === 'string' && ( -
- - {hasError} -
- )}
diff --git a/src/pages/Landing/types.ts b/src/pages/Landing/types.ts new file mode 100644 index 0000000..39e9075 --- /dev/null +++ b/src/pages/Landing/types.ts @@ -0,0 +1,15 @@ +export interface SurgeFormFields extends FormFields { + key: string +} + +export interface RegularFormFields extends FormFields { + name: string + host: string + port: number + key: string + useTls: boolean +} + +export interface FormFields { + keepCredential: boolean +} diff --git a/src/pages/Landing/utils.ts b/src/pages/Landing/utils.ts index 1e940b1..3dcf7b7 100644 --- a/src/pages/Landing/utils.ts +++ b/src/pages/Landing/utils.ts @@ -3,7 +3,7 @@ import axios from 'axios' export async function tryHost( protocol: string, hostname: string, - port: string, + port: string | number, key: string, ): Promise<{ name?: string diff --git a/src/utils/validation.ts b/src/utils/validation.ts index 5424366..4249732 100644 --- a/src/utils/validation.ts +++ b/src/utils/validation.ts @@ -16,5 +16,5 @@ export function getValidationHint( } } - return undefined + return fieldError.message } From b1c56dcee1c2d8dc917c14860cb32e45ad9b9f80 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 13 Jun 2021 21:23:32 +0200 Subject: [PATCH 38/45] fix: translations --- src/i18n/zh/translation.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/i18n/zh/translation.json b/src/i18n/zh/translation.json index e46ba48..f0a5f25 100644 --- a/src/i18n/zh/translation.json +++ b/src/i18n/zh/translation.json @@ -12,6 +12,10 @@ "see": "查看", "save": "保存" }, + "form": { + "err_invalid": "无效的输入内容", + "err_required": "必须输入" + }, "new_version_alert": { "title": "发现新版本!", "message": "快看看更新了什么" From 61ef3279833f15ece96687a476ae358b052fbbaf Mon Sep 17 00:00:00 2001 From: Roy Li Date: Fri, 18 Jun 2021 22:58:26 +0200 Subject: [PATCH 39/45] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=AE=A1=E7=90=86=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ActionsModal.tsx | 54 ++++++++ src/i18n/en/translation.json | 11 +- src/i18n/zh/translation.json | 13 +- src/pages/Devices/components/DeviceItem.tsx | 118 +++++++++++++----- .../components/DeviceSettingsModal.tsx | 20 ++- src/pages/Index/components/CapabilityTile.tsx | 1 - src/pages/Requests/index.tsx | 30 ++++- 7 files changed, 192 insertions(+), 55 deletions(-) create mode 100644 src/components/ActionsModal.tsx diff --git a/src/components/ActionsModal.tsx b/src/components/ActionsModal.tsx new file mode 100644 index 0000000..02c05c5 --- /dev/null +++ b/src/components/ActionsModal.tsx @@ -0,0 +1,54 @@ +/** @jsx jsx */ +import { jsx } from '@emotion/core' +import { noop } from 'lodash-es' +import { KeyboardEvent, MouseEvent } from 'react' +import css from '@emotion/css/macro' +import { useTranslation } from 'react-i18next' +import tw from 'twin.macro' +import { + ButtonGroup, + Button, + ModalFooter, + ModalHeader, + ModalWrapper, +} from '@sumup/circuit-ui' + +interface Action { + id: number | string + title: string + onClick: () => void +} + +interface ActionsModalProps { + title: string + onClose: (event?: MouseEvent | KeyboardEvent) => void + actions: ReadonlyArray +} + +const ActionsModal = ({ + title, + onClose, + actions, +}: ActionsModalProps): JSX.Element => { + const { t } = useTranslation() + + return ( + + + +
+ {actions.map((action) => ( + + ))} +
+
+ ) +} + +export default ActionsModal diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index 16fb45d..72c210e 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -122,12 +122,17 @@ "mode": "Mode", "address": "Address", "name": "Name", - "should_handled_by_surge": "Handled by Surge", - "handled_by_surge": "Surge", + "handled_by_surge": "Handled by Surge", "not_handled_by_surge": "None", + "proxy_and_gateway_mode": "Proxy & Gateway", "gateway_mode": "Gateway", + "proxy_mode": "Proxy", "err_required": "Required", "err_not_ip": "Input value is not an IP address", - "err_nothing_changed": "Nothing changed" + "err_nothing_changed": "Nothing changed", + "waiting": "Waiting", + "device_settings": "Device Settings", + "view_requests": "View Requests", + "modify": "Modify" } } \ No newline at end of file diff --git a/src/i18n/zh/translation.json b/src/i18n/zh/translation.json index f0a5f25..0f78d33 100644 --- a/src/i18n/zh/translation.json +++ b/src/i18n/zh/translation.json @@ -119,15 +119,20 @@ "top_host": "最多流量主机", "dhcp_last_seen": "DHCP 最后一次出现", "dhcp_hostname": "DHCP 主机", - "mode": "模式", + "mode": "接管模式", "address": "地址", "name": "名称", - "should_handled_by_surge": "由 Surge 处理", - "handled_by_surge": "Surge", + "handled_by_surge": "由 Surge 接管", "not_handled_by_surge": "无", + "proxy_and_gateway_mode": "代理和网关模式", "gateway_mode": "网关模式", + "proxy_mode": "代理模式", "err_required": "必须输入", "err_not_ip": "输入值不是 IP 地址", - "err_nothing_changed": "什么都没有修改" + "err_nothing_changed": "什么都没有修改", + "waiting": "等待", + "device_settings": "设备设定", + "view_requests": "查看连接", + "modify": "修改" } } \ No newline at end of file diff --git a/src/pages/Devices/components/DeviceItem.tsx b/src/pages/Devices/components/DeviceItem.tsx index 30da001..c359d83 100644 --- a/src/pages/Devices/components/DeviceItem.tsx +++ b/src/pages/Devices/components/DeviceItem.tsx @@ -1,8 +1,9 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' import { useModal } from '@sumup/circuit-ui' +import { useHistory } from 'react-router-dom' import { noop } from 'lodash-es' -import React, { useCallback, useState } from 'react' +import React, { useCallback, useMemo } from 'react' import css from '@emotion/css/macro' import { useTranslation } from 'react-i18next' import tw from 'twin.macro' @@ -10,6 +11,7 @@ import bytes from 'bytes' import dayjs from 'dayjs' import { ChevronRight } from '@sumup/icons' +import ActionsModal from '../../../components/ActionsModal' import { DataRow, DataRowMain, DataRowSub } from '../../../components/Data' import VersionSupport from '../../../components/VersionSupport' import { useSurgeHost } from '../../../models/profile' @@ -21,15 +23,47 @@ const DeviceItem = ({ device }: { device: DeviceInfo }): JSX.Element => { const { t } = useTranslation() const { setModal } = useModal() const surgeHost = useSurgeHost() - const isClickable = !!device.dhcpDevice + const history = useHistory() const onClick = useCallback(() => { + const actions = [ + { + id: 'view_requests', + title: 'devices.view_requests', + onClick: () => { + history.push(`/requests?source=${device.displayIPAddress}`) + }, + }, + ] + + if (device.dhcpDevice) { + actions.push({ + id: 'device_settings', + title: 'devices.device_settings', + onClick: () => { + setModal({ + children({ onClose }) { + return onClose && device.dhcpDevice ? ( + + ) : ( + + ) + }, + }) + }, + }) + } + setModal({ children({ onClose }) { - return onClose && device.dhcpDevice ? ( - ) : ( @@ -39,10 +73,32 @@ const DeviceItem = ({ device }: { device: DeviceInfo }): JSX.Element => { }) }, [device, setModal]) + const gateway = useMemo(() => { + const { hasTCPConnection } = device + return hasTCPConnection || Boolean(device?.dhcpDevice?.shouldHandledBySurge) + }, [device]) + + const mode = useMemo(() => { + let result = t('devices.not_handled_by_surge') + const { hasProxyConnection } = device + + if (gateway && hasProxyConnection) { + result = t('devices.proxy_and_gateway_mode') + } else if (hasProxyConnection) { + result = t('devices.proxy_mode') + } else if (gateway) { + result = t('devices.gateway_mode') + } + + return result + }, [t, device, gateway]) + + const waitingToReconnect = useMemo(() => { + return Boolean(device?.dhcpDevice?.waitingToReconnect) + }, [device.dhcpDevice]) + return ( - +
{device?.dhcpDevice?.icon && surgeHost ? ( @@ -59,13 +115,23 @@ const DeviceItem = ({ device }: { device: DeviceInfo }): JSX.Element => {
{device.displayIPAddress}
-
-
{bytes(device.currentSpeed) + '/s'}
- {isClickable && ( -
- +
+ {waitingToReconnect ? ( +
+ {t('devices.waiting')}
+ ) : ( + (gateway || device.hasProxyConnection) && ( +
{bytes(device.currentSpeed) + '/s'}
+ ) )} + +
+ +
@@ -75,7 +141,7 @@ const DeviceItem = ({ device }: { device: DeviceInfo }): JSX.Element => {
{t('devices.vendor')}
-
{device.vendor}
+
{device.vendor || 'N/A'}
{device.dhcpDevice ? ( @@ -88,23 +154,8 @@ const DeviceItem = ({ device }: { device: DeviceInfo }): JSX.Element => {
{t('devices.dhcp_hostname')}
{device.dhcpDevice.dhcpHostname || 'N/A'}
- -
{t('devices.mode')}
-
- {device.dhcpDevice.handledBySurge - ? t('devices.handled_by_surge') - : t('devices.not_handled_by_surge')} -
-
- ) : ( - - -
{t('devices.mode')}
-
{t('devices.gateway_mode')}
-
-
- )} + ) : null} {(device.hasTCPConnection || device.hasProxyConnection) && ( @@ -126,6 +177,11 @@ const DeviceItem = ({ device }: { device: DeviceInfo }): JSX.Element => { )} + + +
{t('devices.mode')}
+
{mode}
+
) diff --git a/src/pages/Devices/components/DeviceSettingsModal.tsx b/src/pages/Devices/components/DeviceSettingsModal.tsx index 7a473b6..99ccfdc 100644 --- a/src/pages/Devices/components/DeviceSettingsModal.tsx +++ b/src/pages/Devices/components/DeviceSettingsModal.tsx @@ -1,15 +1,8 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' import css from '@emotion/css/macro' -import React, { - MouseEvent, - KeyboardEvent, - useState, - ChangeEvent, - FormEventHandler, -} from 'react' +import React, { MouseEvent, KeyboardEvent, useState } from 'react' import { - Button, ButtonGroup, Input, LoadingButton, @@ -52,11 +45,12 @@ const DeviceSettingsModal = ({ handleSubmit, control, formState: { errors }, + reset, } = useForm({ defaultValues: { name: dhcpDevice.displayName, address: dhcpDevice.assignedIP || dhcpDevice.currentIP, - shouldHandledBySurge: Boolean(dhcpDevice.handledBySurge), + shouldHandledBySurge: Boolean(dhcpDevice.shouldHandledBySurge), }, }) const { dirtyFields } = useFormState({ @@ -107,6 +101,7 @@ const DeviceSettingsModal = ({ setIsLoading(false) if (err) { + reset() console.error(err) toast.error(t('common.failed_interaction') + `: ${err.message}`) return @@ -120,7 +115,10 @@ const DeviceSettingsModal = ({ return ( - +
@@ -165,7 +163,7 @@ const DeviceSettingsModal = ({ { const { setModal } = useModal() const { t } = useTranslation() @@ -56,6 +60,8 @@ const Page: React.FC = () => { () => (group === 'recent' ? requestList : activeRequestList), [group, requestList, activeRequestList], ) + const query = useQuery() + const sourceIp = useMemo(() => query.get('source'), [query]) useEffect( () => { @@ -92,10 +98,24 @@ const Page: React.FC = () => { } if (group === 'recent') { - newList = newList.slice(0, LIST_ITEMS_MAX) + newList = newList + .filter((request) => { + if (sourceIp) { + return sourceIp === request.localAddress + } + return true + }) + .slice(0, LIST_ITEMS_MAX) } else { newList = newList - .filter((item) => item.lastUpdated === now) + .filter((request) => { + if (sourceIp) { + return ( + request.lastUpdated === now && sourceIp === request.localAddress + ) + } + return request.lastUpdated === now + }) .sort((a, b) => b.id - a.id) } @@ -108,7 +128,7 @@ const Page: React.FC = () => { } }, // eslint-disable-next-line react-hooks/exhaustive-deps - [requests, group], + [requests, group, sourceIp], ) const openRequestDetail = useCallback( @@ -118,7 +138,7 @@ const Page: React.FC = () => { return onClose ? ( ) : ( - + ) }, onClose() { From 0611ef45e4f02a70fc0fa0ed78b46fe8194ba0a4 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Fri, 18 Jun 2021 22:58:38 +0200 Subject: [PATCH 40/45] chore: change scripts --- scripts/build.mjs | 4 ++-- scripts/verify-translations.mjs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/build.mjs b/scripts/build.mjs index 4c27370..abe5ecf 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -13,7 +13,7 @@ await (async () => { await $`yarn verify-translation` await clean() - console.info('🚧 Build artifact') + console.info('🚧 Build artifact') switch (target) { case 'release-vercel': @@ -86,7 +86,7 @@ async function bundleArtifact() { } async function clean() { - console.info('🧹 Clean up') + console.info('🧹 Clean up') await $`rm -r ./build` await $`rm -r ./*.tar.gz` } diff --git a/scripts/verify-translations.mjs b/scripts/verify-translations.mjs index 40623f0..a2aa786 100644 --- a/scripts/verify-translations.mjs +++ b/scripts/verify-translations.mjs @@ -18,12 +18,12 @@ await (async () => { for (const key of keys) { if (!get(json, key)) { - throw new Error(`Cannot find '${key}' for translation '${lang}'.`) + throw new Error(`⚠️ Cannot find '${key}' for translation '${lang}'.`) } } } - console.info('🌎 Translation files are good to go!') + console.info('🌎 Translation files are good to go!') })() function walkKeys(arr, currKey, obj) { From f7a6f03ff3ab3a36e077a703f523c50d4cabfd4c Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 20 Jun 2021 00:39:01 +0200 Subject: [PATCH 41/45] fix: bugfix --- src/i18n/en/translation.json | 2 +- src/pages/Devices/components/DeviceIcon.tsx | 6 +++--- src/pages/Devices/components/DeviceItem.tsx | 4 ++-- src/pages/Index/index.tsx | 5 +++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index 72c210e..0d78c18 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -119,7 +119,7 @@ "top_host": "Top Host", "dhcp_last_seen": "DHCP Last Seen", "dhcp_hostname": "DHCP Hostname", - "mode": "Mode", + "mode": "Takeover Mode", "address": "Address", "name": "Name", "handled_by_surge": "Handled by Surge", diff --git a/src/pages/Devices/components/DeviceIcon.tsx b/src/pages/Devices/components/DeviceIcon.tsx index e58eba5..c774e2e 100644 --- a/src/pages/Devices/components/DeviceIcon.tsx +++ b/src/pages/Devices/components/DeviceIcon.tsx @@ -8,7 +8,7 @@ import tw from 'twin.macro' import { useSurgeHost } from '../../../models/profile' interface DeviceIconProps { - icon: string + icon?: string } const DeviceIcon = ({ icon }: DeviceIconProps): JSX.Element => { @@ -22,8 +22,8 @@ const DeviceIcon = ({ icon }: DeviceIconProps): JSX.Element => { margin-right: 0.7rem; `}> {icon}
) diff --git a/src/pages/Devices/components/DeviceItem.tsx b/src/pages/Devices/components/DeviceItem.tsx index c359d83..1142a42 100644 --- a/src/pages/Devices/components/DeviceItem.tsx +++ b/src/pages/Devices/components/DeviceItem.tsx @@ -101,10 +101,10 @@ const DeviceItem = ({ device }: { device: DeviceInfo }): JSX.Element => {
- {device?.dhcpDevice?.icon && surgeHost ? ( + {surgeHost ? (
- +
) : ( diff --git a/src/pages/Index/index.tsx b/src/pages/Index/index.tsx index f36f3bd..2fe7a14 100644 --- a/src/pages/Index/index.tsx +++ b/src/pages/Index/index.tsx @@ -15,6 +15,7 @@ import ChangeLanguage from '../../components/ChangeLanguage' import { DataGroup, DataRow, DataRowMain } from '../../components/Data' import ProfileCell from '../../components/ProfileCell' import Ad from '../../components/Ad' +import VersionSupport from '../../components/VersionSupport' import { usePlatform, usePlatformVersion, @@ -133,7 +134,7 @@ const Page: React.FC = () => {
- {profile?.platform === 'macos' && ( + @@ -166,7 +167,7 @@ const Page: React.FC = () => { - )} +
{menu.map((item) => { From 90aa9d5a4e5827647e4678c6ed33f6ed27e6d7f4 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 20 Jun 2021 15:11:59 +0200 Subject: [PATCH 42/45] fix: bugfix --- src/i18n/en/translation.json | 1 + src/i18n/zh/translation.json | 1 + src/pages/Devices/components/DeviceItem.tsx | 2 +- .../components/DeviceSettingsModal.tsx | 1 - src/pages/Devices/index.tsx | 2 +- src/pages/Requests/index.tsx | 84 ++++++++++--------- src/types.ts | 2 +- 7 files changed, 51 insertions(+), 42 deletions(-) diff --git a/src/i18n/en/translation.json b/src/i18n/en/translation.json index 0d78c18..b0d9982 100644 --- a/src/i18n/en/translation.json +++ b/src/i18n/en/translation.json @@ -7,6 +7,7 @@ "network_error_title": "Network Error", "network_error_message": "Unable to connect to Surge, please try again.", "is_loading": "Loading", + "no_data": "No data", "success_interaction": "Success", "failed_interaction": "Failed", "see": "See", diff --git a/src/i18n/zh/translation.json b/src/i18n/zh/translation.json index 0f78d33..c640380 100644 --- a/src/i18n/zh/translation.json +++ b/src/i18n/zh/translation.json @@ -7,6 +7,7 @@ "network_error_title": "网络错误", "network_error_message": "无法连接 Surge 或连接失败,请重试。", "is_loading": "加载中", + "no_data": "无数据", "success_interaction": "操作成功", "failed_interaction": "操作失败", "see": "查看", diff --git a/src/pages/Devices/components/DeviceItem.tsx b/src/pages/Devices/components/DeviceItem.tsx index 1142a42..4cf09cd 100644 --- a/src/pages/Devices/components/DeviceItem.tsx +++ b/src/pages/Devices/components/DeviceItem.tsx @@ -137,7 +137,7 @@ const DeviceItem = ({ device }: { device: DeviceInfo }): JSX.Element => {
{t('devices.mac_address')}
-
{device.physicalAddress}
+
{device.physicalAddress || 'N/A'}
{t('devices.vendor')}
diff --git a/src/pages/Devices/components/DeviceSettingsModal.tsx b/src/pages/Devices/components/DeviceSettingsModal.tsx index 99ccfdc..27f6b1e 100644 --- a/src/pages/Devices/components/DeviceSettingsModal.tsx +++ b/src/pages/Devices/components/DeviceSettingsModal.tsx @@ -90,7 +90,6 @@ const DeviceSettingsModal = ({ method: 'POST', url: '/devices', data: payload, - timeout: 20000, }).then((res) => { if (res.error) { throw new Error(res.error) diff --git a/src/pages/Devices/index.tsx b/src/pages/Devices/index.tsx index b6626dc..83a4743 100644 --- a/src/pages/Devices/index.tsx +++ b/src/pages/Devices/index.tsx @@ -37,7 +37,7 @@ const Page = (): JSX.Element => {
{devices?.devices && devices.devices.map((device) => ( -
+
))} diff --git a/src/pages/Requests/index.tsx b/src/pages/Requests/index.tsx index 29cc875..80054ce 100644 --- a/src/pages/Requests/index.tsx +++ b/src/pages/Requests/index.tsx @@ -1,7 +1,7 @@ /** @jsx jsx */ import { jsx } from '@emotion/core' import css from '@emotion/css/macro' -import { ModalConsumer, useModal } from '@sumup/circuit-ui' +import { useModal } from '@sumup/circuit-ui' import SelectorGroup from '@sumup/circuit-ui/dist/es/components/SelectorGroup' import { useTranslation } from 'react-i18next' import { ListRowRenderer } from 'react-virtualized/dist/es/List' @@ -14,7 +14,7 @@ import React, { ChangeEvent, useMemo, } from 'react' -import useSWR from 'swr' +import useSWR, { mutate } from 'swr' import { List, AutoSizer } from 'react-virtualized' import { useLocation } from 'react-router-dom' @@ -38,20 +38,17 @@ const Page: React.FC = () => { const profile = useProfile() const [isAutoRefresh, setIsAutoRefresh] = useState(true) const [group, setGroup] = useState<'recent' | 'active'>('recent') - const { data: requests, error: requestsError } = useSWR( - () => '/requests/' + group, - fetcher, - { + const { data: recentRequestsResponse, error: requestsError } = + useSWR(() => '/requests/' + group, fetcher, { revalidateOnFocus: false, revalidateOnReconnect: false, dedupingInterval: 1000, refreshInterval: isAutoRefresh ? profile?.platform === 'macos' - ? 1000 + ? 2000 : 4000 : 0, - }, - ) + }) const [requestList, setRequestList] = useState>([]) const [activeRequestList, setActiveRequestList] = useState< Array @@ -65,9 +62,9 @@ const Page: React.FC = () => { useEffect( () => { - if (!requests?.requests) return + if (!recentRequestsResponse?.requests) return - const pendingList = requests.requests + const pendingList = [...recentRequestsResponse.requests] const now = new Date() let newList = [...currentList] @@ -101,7 +98,7 @@ const Page: React.FC = () => { newList = newList .filter((request) => { if (sourceIp) { - return sourceIp === request.localAddress + return sourceIp === request.sourceAddress } return true }) @@ -111,7 +108,8 @@ const Page: React.FC = () => { .filter((request) => { if (sourceIp) { return ( - request.lastUpdated === now && sourceIp === request.localAddress + request.lastUpdated === now && + sourceIp === request.sourceAddress ) } return request.lastUpdated === now @@ -128,7 +126,7 @@ const Page: React.FC = () => { } }, // eslint-disable-next-line react-hooks/exhaustive-deps - [requests, group, sourceIp], + [recentRequestsResponse, group, sourceIp], ) const openRequestDetail = useCallback( @@ -187,30 +185,36 @@ const Page: React.FC = () => { />
- {currentList.length ? ( - - {({ width, height }) => { - return ( - div { - ${tw`divide-y divide-gray-200`} - } - `} - /> - ) - }} - + {recentRequestsResponse ? ( + currentList.length ? ( + + {({ width, height }) => { + return ( + div { + ${tw`divide-y divide-gray-200`} + } + `} + /> + ) + }} + + ) : ( +
+ {t('common.no_data')} +
+ ) ) : ( -
+
{t('common.is_loading')}...
)} @@ -243,7 +247,11 @@ const Page: React.FC = () => { label="choose the dns result group" name="selector-group" onChange={(event: ChangeEvent) => { - setGroup(event.target.value as 'recent' | 'active') + setGroup(() => { + const newState = event.target.value as 'recent' | 'active' + mutate('/requests/' + newState) + return newState + }) }} options={[ { diff --git a/src/types.ts b/src/types.ts index 567970f..9df1139 100644 --- a/src/types.ts +++ b/src/types.ts @@ -175,7 +175,7 @@ export interface DeviceInfo { hasTCPConnection: boolean identifier: string name: string - physicalAddress: string + physicalAddress?: string sourceIP: string topHostBySingleConnectionTraffic: string totalBytes: number From 3be3b665c4c354c5fa8eb8584168ae4979d0aba5 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 20 Jun 2021 22:54:17 +0200 Subject: [PATCH 43/45] chore: fix build script --- package.json | 1 + scripts/build.mjs | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ffe5421..96d4930 100644 --- a/package.json +++ b/package.json @@ -107,6 +107,7 @@ "react-tabs": "^3.1.1", "react-toastify": "^7.0.3", "react-virtualized": "^9.22.2", + "rimraf": "^3.0.2", "semver": "^7.3.2", "smoothscroll-polyfill": "^0.4.4", "snyk": "^1.511.0", diff --git a/scripts/build.mjs b/scripts/build.mjs index abe5ecf..0568531 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -87,8 +87,8 @@ async function bundleArtifact() { async function clean() { console.info('🧹 Clean up') - await $`rm -r ./build` - await $`rm -r ./*.tar.gz` + await $`rimraf ./build` + await $`rimraf ./*.tar.gz` } function getUrlPathPrefix() { From ec0a2877433848414f1aeba8943823bcda24ac19 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 20 Jun 2021 23:06:19 +0200 Subject: [PATCH 44/45] chore: change ci configuration --- .github/workflows/release.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 048904e..573c344 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,9 +32,6 @@ jobs: ${{ runner.OS }}- - name: yarn install, build, bundle - env: - REACT_APP_SHOW_AD: true - REACT_APP_HASH_ROUTER: true run: | yarn install CI=false yarn build:release From f31bc327ae99d02e3e05ab80dd522c5745184893 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Sun, 20 Jun 2021 23:20:49 +0200 Subject: [PATCH 45/45] docs: update --- README.md | 10 +++------- README_zh-CN.md | 37 ++++++++++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 4d66a93..e7992fa 100644 --- a/README.md +++ b/README.md @@ -23,21 +23,17 @@ ## What is Surge Web Dashboard? -We are happy to annouce Surge Web Dashboard (formerly YASD) has joined Surge! +We are happy to announce Surge Web Dashboard (formerly YASD) has joined Surge! This project will remain open-source and active. Starting from Surge iOS 4.4.0 and Surge Mac 4.0.0, Surge added support for [HTTP API](https://manual.nssurge.com/others/http-api.html), which makes it possible to control Surge from a browser. You can use Surge Web Dashboard to control policies, inspect requests and more from another device! -## What happened to YASD? - -YASD used to be the name of this project. After becoming a part of Surge, the name changed to Surge Web Dashboard. This project will remain open-source and active. - ## How-to -Surge has Surge Web Dashboard built in now, you can turn it on in advance settings (it may requires a subscription to activate built-in Surge Web Dashboard). +Surge has Surge Web Dashboard built in now, you can turn it on in advance settings (it may require a subscription to activate built-in Surge Web Dashboard). -We also provide standalone version so you can manage all Surge instances at one place (it may requires a subscription to activate HTTP API). +We also provide standalone version, so you can manage all Surge instances at one place (it may require a subscription to activate HTTP API). - [HTTP](http://yasd.nerdynerd.org) - [HTTPS](https://yasd.royli.dev) diff --git a/README_zh-CN.md b/README_zh-CN.md index a877ab4..09100a6 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -1,6 +1,10 @@ -# YASD - Yet Another Surge Dashboard +

+ + logo + +

-> STILL IN ALPHA +# Surge Web Dashboard (前身为 YASD) ![Github Actions][github-actions-image] [![Test coverage][codecov-image]][codecov-url] @@ -17,4 +21,31 @@ [中文](/README_zh-CN.md) | [English](/README.md) -还未编撰 +## 什么是 Surge Web Dashboard? + +我们很高兴地宣布 Surge Web Dashboard(前身为 YASD)已加入 Surge!这个项目将保持开源和活跃开发维护。 + +从 Surge i0S 4.4.0 和Surge Mac 4.0.0 开始,Surge 增加了对 [HTTP API](https://manual.nssurge.com/others/http-api.html) 的支持,这使得从浏览器控制 Surge 成为可能。 + +您可以使用 Surge Web Dashboard 从另一台设备上控制策略、检查请求等! + +## 如何使用本项目 + +新版本的 Surge 已经内建 Surge Web Dashboard, 又可以在高级设置中将其打开。 + +内建的 Surge Web Dashboard 可能需要您拥有一个有效中的订阅才能开启,但是使用公开的独立版本(见后)则不受此限制。 + +公开的独立版本地址如下。你可以通过这个版本的 Surge Web Dashboard 管理多个 Surge 实例。 + +- [HTTP](http://yasd.nerdynerd.org) +- [HTTPS](https://yasd.royli.dev) + +你也可以在 [releases](https://github.com/geekdada/yasd/releases) 找到完整应用包自主部署。 + +## 路线图 + +见 [路线图](https://github.com/geekdada/yasd/projects/1) + +## License + +[MIT](https://github.com/geekdada/yasd/blob/master/LICENSE)