From 0049bbf39c302b851008e59d4824f421c1fa3c79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Apr 2022 08:45:59 -0400 Subject: [PATCH 01/14] Bump react-router-dom from 5.3.0 to 5.3.1 (#5258) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index d56b6a3cd8..6235c319c9 100644 --- a/package.json +++ b/package.json @@ -382,7 +382,7 @@ "react-beautiful-dnd": "^13.1.0", "react-refresh": "^0.11.0", "react-refresh-typescript": "^2.0.4", - "react-router-dom": "^5.3.0", + "react-router-dom": "^5.3.1", "react-select": "3.2.0", "react-select-event": "^5.3.0", "react-table": "^7.7.0", diff --git a/yarn.lock b/yarn.lock index 21533604ee..2e2da58d14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11021,23 +11021,23 @@ react-refresh@^0.11.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-router-dom@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.0.tgz#da1bfb535a0e89a712a93b97dd76f47ad1f32363" - integrity sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ== +react-router-dom@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.1.tgz#0151baf2365c5fcd8493f6ec9b9b31f34d0f8ae1" + integrity sha512-f0pj/gMAbv9e8gahTmCEY20oFhxhrmHwYeIwH5EO5xu0qme+wXtsdB8YfUOAZzUz4VaXmb58m3ceiLtjMhqYmQ== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.2.1" + react-router "5.3.1" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.2.1, react-router@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.1.tgz#4d2e4e9d5ae9425091845b8dbc6d9d276239774d" - integrity sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ== +react-router@5.3.1, react-router@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.1.tgz#b13e84a016c79b9e80dde123ca4112c4f117e3cf" + integrity sha512-v+zwjqb7bakqgF+wMVKlAPTca/cEmPOvQ9zt7gpSNyPXau1+0qvuYZ5BWzzNDP1y6s15zDwgb9rPN63+SIniRQ== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" From b8993a70586a1332c891b90e9cd533159df58bdc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Apr 2022 08:46:12 -0400 Subject: [PATCH 02/14] Bump esbuild from 0.14.34 to 0.14.36 (#5260) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 208 +++++++++++++++++++++++++-------------------------- 2 files changed, 105 insertions(+), 105 deletions(-) diff --git a/package.json b/package.json index 6235c319c9..6371d26195 100644 --- a/package.json +++ b/package.json @@ -349,7 +349,7 @@ "electron": "^14.2.9", "electron-builder": "^23.0.3", "electron-notarize": "^0.3.0", - "esbuild": "^0.14.34", + "esbuild": "^0.14.36", "esbuild-loader": "^2.18.0", "eslint": "^8.11.0", "eslint-plugin-header": "^3.1.1", diff --git a/yarn.lock b/yarn.lock index 2e2da58d14..1b68df8ebd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5137,75 +5137,75 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -esbuild-android-64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.34.tgz#46bc4327dd0809937912346244eaffdb9bfc980d" - integrity sha512-XfxcfJqmMYsT/LXqrptzFxmaR3GWzXHDLdFNIhm6S00zPaQF1TBBWm+9t0RZ6LRR7iwH57DPjaOeW20vMqI4Yw== +esbuild-android-64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.36.tgz#fc5f95ce78c8c3d790fa16bc71bd904f2bb42aa1" + integrity sha512-jwpBhF1jmo0tVCYC/ORzVN+hyVcNZUWuozGcLHfod0RJCedTDTvR4nwlTXdx1gtncDqjk33itjO+27OZHbiavw== -esbuild-android-arm64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.34.tgz#a3f7e1ad84b8a7dcb39b5e132768b56ee7133656" - integrity sha512-T02+NXTmSRL1Mc6puz+R9CB54rSPICkXKq6+tw8B6vxZFnCPzbJxgwIX4kcluz9p8nYBjF3+lSilTGWb7+Xgew== +esbuild-android-arm64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.36.tgz#44356fbb9f8de82a5cdf11849e011dfb3ad0a8a8" + integrity sha512-/hYkyFe7x7Yapmfv4X/tBmyKnggUmdQmlvZ8ZlBnV4+PjisrEhAvC3yWpURuD9XoB8Wa1d5dGkTsF53pIvpjsg== -esbuild-darwin-64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.34.tgz#a0e4ab7a0cddf76761f1fb5d6bf552a376beb16e" - integrity sha512-pLRip2Bh4Ng7Bf6AMgCrSp3pPe/qZyf11h5Qo2mOfJqLWzSVjxrXW+CFRJfrOVP7TCnh/gmZSM2AFdCPB72vtw== +esbuild-darwin-64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.36.tgz#3d9324b21489c70141665c2e740d6e84f16f725d" + integrity sha512-kkl6qmV0dTpyIMKagluzYqlc1vO0ecgpviK/7jwPbRDEv5fejRTaBBEE2KxEQbTHcLhiiDbhG7d5UybZWo/1zQ== -esbuild-darwin-arm64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.34.tgz#54c35461f82f83a7f5169d9a6a54201798977b07" - integrity sha512-vpidSJEBxx6lf1NWgXC+DCmGqesJuZ5Y8aQVVsaoO4i8tRXbXb0whChRvop/zd3nfNM4dIl5EXAky0knRX5I6w== +esbuild-darwin-arm64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.36.tgz#2a8040c2e465131e5281034f3c72405e643cb7b2" + integrity sha512-q8fY4r2Sx6P0Pr3VUm//eFYKVk07C5MHcEinU1BjyFnuYz4IxR/03uBbDwluR6ILIHnZTE7AkTUWIdidRi1Jjw== -esbuild-freebsd-64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.34.tgz#aebb50248f5874d04ffeab2db8ee1ed6037e2654" - integrity sha512-m0HBjePhe0hAQJgtMRMNV9kMgIyV4/qSnzPx42kRMQBcPhgjAq1JRu4Il26czC+9FgpMbFkUktb07f/Lwnc6CA== +esbuild-freebsd-64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.36.tgz#d82c387b4d01fe9e8631f97d41eb54f2dbeb68a3" + integrity sha512-Hn8AYuxXXRptybPqoMkga4HRFE7/XmhtlQjXFHoAIhKUPPMeJH35GYEUWGbjteai9FLFvBAjEAlwEtSGxnqWww== -esbuild-freebsd-arm64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.34.tgz#09bef288e29f18b38b0c70a9827b6ee718e36c7f" - integrity sha512-cpRc2B94L1KvMPPYB4D6G39jLqpKlD3noAMY4/e86iXXXkhUYJJEtTuyNFTa9JRpWM0xCAp4mxjHjoIiLuoCLA== +esbuild-freebsd-arm64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.36.tgz#e8ce2e6c697da6c7ecd0cc0ac821d47c5ab68529" + integrity sha512-S3C0attylLLRiCcHiJd036eDEMOY32+h8P+jJ3kTcfhJANNjP0TNBNL30TZmEdOSx/820HJFgRrqpNAvTbjnDA== -esbuild-linux-32@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.34.tgz#67790061758e008e919e65bbc34549f55dadaca7" - integrity sha512-8nQaEaoW7MH/K/RlozJa+lE1ejHIr8fuPIHhc513UebRav7HtXgQvxHQ6VZRUkWtep23M6dd7UqhwO1tMOfzQQ== +esbuild-linux-32@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.36.tgz#a4a261e2af91986ea62451f2db712a556cb38a15" + integrity sha512-Eh9OkyTrEZn9WGO4xkI3OPPpUX7p/3QYvdG0lL4rfr73Ap2HAr6D9lP59VMF64Ex01LhHSXwIsFG/8AQjh6eNw== -esbuild-linux-64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.34.tgz#b9b19d4ac07e37495dd2508ec843418aa71c98d6" - integrity sha512-Y3of4qQoLLlAgf042MlrY1P+7PnN9zWj8nVtw9XQG5hcLOZLz7IKpU35oeu7n4wvyaZHwvQqDJ93gRLqdJekcQ== +esbuild-linux-64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.36.tgz#4a9500f9197e2c8fcb884a511d2c9d4c2debde72" + integrity sha512-vFVFS5ve7PuwlfgoWNyRccGDi2QTNkQo/2k5U5ttVD0jRFaMlc8UQee708fOZA6zTCDy5RWsT5MJw3sl2X6KDg== -esbuild-linux-arm64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.34.tgz#fd84b11a6ccfe9e83e00d0c45890e9fb3a7248c1" - integrity sha512-IlWaGtj9ir7+Nrume1DGcyzBDlK8GcnJq0ANKwcI9pVw8tqr+6GD0eqyF9SF1mR8UmAp+odrx1H5NdR2cHdFHA== +esbuild-linux-arm64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.36.tgz#c91c21e25b315464bd7da867365dd1dae14ca176" + integrity sha512-24Vq1M7FdpSmaTYuu1w0Hdhiqkbto1I5Pjyi+4Cdw5fJKGlwQuw+hWynTcRI/cOZxBcBpP21gND7W27gHAiftw== -esbuild-linux-arm@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.34.tgz#c89d4714b05265a315a97c8933508cc73950e683" - integrity sha512-9lpq1NcJqssAF7alCO6zL3gvBVVt/lKw4oetUM7OgNnRX0OWpB+ZIO9FwCrSj/dMdmgDhPLf+119zB8QxSMmAg== +esbuild-linux-arm@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.36.tgz#90e23bca2e6e549affbbe994f80ba3bb6c4d934a" + integrity sha512-NhgU4n+NCsYgt7Hy61PCquEz5aevI6VjQvxwBxtxrooXsxt5b2xtOUXYZe04JxqQo+XZk3d1gcr7pbV9MAQ/Lg== -esbuild-linux-mips64le@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.34.tgz#d60752c3fb1260dd0737532af2de2a9521656456" - integrity sha512-k3or+01Rska1AjUyNjA4buEwB51eyN/xPQAoOx1CjzAQC3l8rpjUDw55kXyL63O/1MUi4ISvtNtl8gLwdyEcxw== +esbuild-linux-mips64le@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.36.tgz#40e11afb08353ff24709fc89e4db0f866bc131d2" + integrity sha512-hZUeTXvppJN+5rEz2EjsOFM9F1bZt7/d2FUM1lmQo//rXh1RTFYzhC0txn7WV0/jCC7SvrGRaRz0NMsRPf8SIA== -esbuild-linux-ppc64le@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.34.tgz#f4c6229269956564f0c6f9825f5e717c2cfc22b3" - integrity sha512-+qxb8M9FfM2CJaVU7GgYpJOHM1ngQOx+/VrtBjb4C8oVqaPcESCeg2anjl+HRZy8VpYc71q/iBYausPPbJ+Keg== +esbuild-linux-ppc64le@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.36.tgz#9e8a588c513d06cc3859f9dcc52e5fdfce8a1a5e" + integrity sha512-1Bg3QgzZjO+QtPhP9VeIBhAduHEc2kzU43MzBnMwpLSZ890azr4/A9Dganun8nsqD/1TBcqhId0z4mFDO8FAvg== -esbuild-linux-riscv64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.34.tgz#549bd18a9eba3135b67f7b742730b5343a1be35d" - integrity sha512-Y717ltBdQ5j5sZIHdy1DV9kieo0wMip0dCmVSTceowCPYSn1Cg33Kd6981+F/3b9FDMzNWldZFOBRILViENZSA== +esbuild-linux-riscv64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.36.tgz#e578c09b23b3b97652e60e3692bfda628b541f06" + integrity sha512-dOE5pt3cOdqEhaufDRzNCHf5BSwxgygVak9UR7PH7KPVHwSTDAZHDoEjblxLqjJYpc5XaU9+gKJ9F8mp9r5I4A== -esbuild-linux-s390x@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.34.tgz#2a6b577c437f94c2b37623c755ff5215a05c12bc" - integrity sha512-bDDgYO4LhL4+zPs+WcBkXph+AQoPcQRTv18FzZS0WhjfH8TZx2QqlVPGhmhZ6WidrY+jKthUqO6UhGyIb4MpmA== +esbuild-linux-s390x@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.36.tgz#3c9dab40d0d69932ffded0fd7317bb403626c9bc" + integrity sha512-g4FMdh//BBGTfVHjF6MO7Cz8gqRoDPzXWxRvWkJoGroKA18G9m0wddvPbEqcQf5Tbt2vSc1CIgag7cXwTmoTXg== esbuild-loader@^2.18.0: version "2.18.0" @@ -5219,61 +5219,61 @@ esbuild-loader@^2.18.0: tapable "^2.2.0" webpack-sources "^2.2.0" -esbuild-netbsd-64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.34.tgz#7f0b73229157975eb35597207723df52ba21722a" - integrity sha512-cfaFGXdRt0+vHsjNPyF0POM4BVSHPSbhLPe8mppDc7GDDxjIl08mV1Zou14oDWMp/XZMjYN1kWYRSfftiD0vvQ== +esbuild-netbsd-64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.36.tgz#e27847f6d506218291619b8c1e121ecd97628494" + integrity sha512-UB2bVImxkWk4vjnP62ehFNZ73lQY1xcnL5ZNYF3x0AG+j8HgdkNF05v67YJdCIuUJpBuTyCK8LORCYo9onSW+A== -esbuild-openbsd-64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.34.tgz#b9bc44b4f70031fb01b173b279daeffc4d4f54b7" - integrity sha512-vmy9DxXVnRiI14s8GKuYBtess+EVcDALkbpTqd5jw4XITutIzyB7n4x0Tj5utAkKsgZJB22lLWGekr0ABnSLow== +esbuild-openbsd-64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.36.tgz#c94c04c557fae516872a586eae67423da6d2fabb" + integrity sha512-NvGB2Chf8GxuleXRGk8e9zD3aSdRO5kLt9coTQbCg7WMGXeX471sBgh4kSg8pjx0yTXRt0MlrUDnjVYnetyivg== -esbuild-sunos-64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.34.tgz#512dd6085ac1a0dccc20c5f932f16a618bea409c" - integrity sha512-eNPVatNET1F7tRMhii7goL/eptfxc0ALRjrj9SPFNqp0zmxrehBFD6BaP3R4LjMn6DbMO0jOAnTLFKr8NqcJAA== +esbuild-sunos-64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.36.tgz#9b79febc0df65a30f1c9bd63047d1675511bf99d" + integrity sha512-VkUZS5ftTSjhRjuRLp+v78auMO3PZBXu6xl4ajomGenEm2/rGuWlhFSjB7YbBNErOchj51Jb2OK8lKAo8qdmsQ== -esbuild-windows-32@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.34.tgz#3ff1afd5cac08050c7c7140a59e343b06f6b037c" - integrity sha512-EFhpXyHEcnqWYe2rAHFd8dRw8wkrd9U+9oqcyoEL84GbanAYjiiIjBZsnR8kl0sCQ5w6bLpk7vCEIA2VS32Vcg== +esbuild-windows-32@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.36.tgz#910d11936c8d2122ffdd3275e5b28d8a4e1240ec" + integrity sha512-bIar+A6hdytJjZrDxfMBUSEHHLfx3ynoEZXx/39nxy86pX/w249WZm8Bm0dtOAByAf4Z6qV0LsnTIJHiIqbw0w== -esbuild-windows-64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.34.tgz#66f7b43d2a0b132f6748dfa3edac4fc939a99be0" - integrity sha512-a8fbl8Ky7PxNEjf1aJmtxdDZj32/hC7S1OcA2ckEpCJRTjiKslI9vAdPpSjrKIWhws4Galpaawy0nB7fjHYf5Q== +esbuild-windows-64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.36.tgz#21b4ce8b42a4efc63f4b58ec617f1302448aad26" + integrity sha512-+p4MuRZekVChAeueT1Y9LGkxrT5x7YYJxYE8ZOTcEfeUUN43vktSn6hUNsvxzzATrSgq5QqRdllkVBxWZg7KqQ== -esbuild-windows-arm64@0.14.34: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.34.tgz#b74a6395b7b7e53dba70b71b39542afd83352473" - integrity sha512-EYvmKbSa2B3sPnpC28UEu9jBK5atGV4BaVRE7CYGUci2Hlz4AvtV/LML+TcDMT6gBgibnN2gcltWclab3UutMg== +esbuild-windows-arm64@0.14.36: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.36.tgz#ba21546fecb7297667d0052d00150de22c044b24" + integrity sha512-fBB4WlDqV1m18EF/aheGYQkQZHfPHiHJSBYzXIo8yKehek+0BtBwo/4PNwKGJ5T0YK0oc8pBKjgwPbzSrPLb+Q== -esbuild@^0.14.34, esbuild@^0.14.6: - version "0.14.34" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.34.tgz#3610056f0a57bcfd0b63ddaafdb2e3bef1cf96e4" - integrity sha512-QIWdPT/gFF6hCaf4m7kP0cJ+JIuFkdHibI7vVFvu3eJS1HpVmYHWDulyN5WXwbRA0SX/7ZDaJ/1DH8SdY9xOJg== +esbuild@^0.14.36, esbuild@^0.14.6: + version "0.14.36" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.36.tgz#0023a73eab57886ac5605df16ee421e471a971b3" + integrity sha512-HhFHPiRXGYOCRlrhpiVDYKcFJRdO0sBElZ668M4lh2ER0YgnkLxECuFe7uWCf23FrcLc59Pqr7dHkTqmRPDHmw== optionalDependencies: - esbuild-android-64 "0.14.34" - esbuild-android-arm64 "0.14.34" - esbuild-darwin-64 "0.14.34" - esbuild-darwin-arm64 "0.14.34" - esbuild-freebsd-64 "0.14.34" - esbuild-freebsd-arm64 "0.14.34" - esbuild-linux-32 "0.14.34" - esbuild-linux-64 "0.14.34" - esbuild-linux-arm "0.14.34" - esbuild-linux-arm64 "0.14.34" - esbuild-linux-mips64le "0.14.34" - esbuild-linux-ppc64le "0.14.34" - esbuild-linux-riscv64 "0.14.34" - esbuild-linux-s390x "0.14.34" - esbuild-netbsd-64 "0.14.34" - esbuild-openbsd-64 "0.14.34" - esbuild-sunos-64 "0.14.34" - esbuild-windows-32 "0.14.34" - esbuild-windows-64 "0.14.34" - esbuild-windows-arm64 "0.14.34" + esbuild-android-64 "0.14.36" + esbuild-android-arm64 "0.14.36" + esbuild-darwin-64 "0.14.36" + esbuild-darwin-arm64 "0.14.36" + esbuild-freebsd-64 "0.14.36" + esbuild-freebsd-arm64 "0.14.36" + esbuild-linux-32 "0.14.36" + esbuild-linux-64 "0.14.36" + esbuild-linux-arm "0.14.36" + esbuild-linux-arm64 "0.14.36" + esbuild-linux-mips64le "0.14.36" + esbuild-linux-ppc64le "0.14.36" + esbuild-linux-riscv64 "0.14.36" + esbuild-linux-s390x "0.14.36" + esbuild-netbsd-64 "0.14.36" + esbuild-openbsd-64 "0.14.36" + esbuild-sunos-64 "0.14.36" + esbuild-windows-32 "0.14.36" + esbuild-windows-64 "0.14.36" + esbuild-windows-arm64 "0.14.36" escalade@^3.1.1: version "3.1.1" From b7851c577b927b136403981b9e0fef4a4049c6a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Apr 2022 09:04:47 -0700 Subject: [PATCH 03/14] Bump semver from 7.3.5 to 7.3.7 (#5259) Bumps [semver](https://github.com/npm/node-semver) from 7.3.5 to 7.3.7. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v7.3.5...v7.3.7) --- updated-dependencies: - dependency-name: semver dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 15 ++++----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 6371d26195..eb72608be7 100644 --- a/package.json +++ b/package.json @@ -259,7 +259,7 @@ "request-promise-native": "^1.0.9", "rfc6902": "^4.0.2", "selfsigned": "^2.0.1", - "semver": "^7.3.2", + "semver": "^7.3.7", "shell-env": "^3.0.1", "spdy": "^4.0.2", "tar": "^6.1.11", diff --git a/yarn.lock b/yarn.lock index 1b68df8ebd..6f3264ae45 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11739,10 +11739,10 @@ semver-diff@^3.1.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.x, semver@^7.2.1, semver@^7.3.2: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== +semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== dependencies: lru-cache "^6.0.0" @@ -11751,13 +11751,6 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4, semver@^7.3.5: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - send@0.17.2: version "0.17.2" resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" From 11f3cafac33ec6a1b1bd8f2e24acb37097382da2 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 25 Apr 2022 14:29:49 +0300 Subject: [PATCH 04/14] Expose Lens Monaco Editor component to extensions-api (#5264) * Expose Lens Monaco Editor component to public, close #5094 --- integration/__tests__/cluster-pages.tests.ts | 4 +- src/extensions/renderer-api/components.ts | 5 ++ .../monaco-editor/monaco-editor.tsx | 59 +++++++++---------- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/integration/__tests__/cluster-pages.tests.ts b/integration/__tests__/cluster-pages.tests.ts index 48767c8de2..0027588298 100644 --- a/integration/__tests__/cluster-pages.tests.ts +++ b/integration/__tests__/cluster-pages.tests.ts @@ -178,9 +178,7 @@ utils.describeIf(minikubeReady(TEST_NAMESPACE))("Minikube based tests", () => { } const testPodName = "nginx-create-pod-test"; - const monacoEditor = await frame.waitForSelector( - `.Dock.isOpen [data-test-component="monaco-editor"]`, - ); + const monacoEditor = await frame.waitForSelector(`.Dock.isOpen [data-test-id="monaco-editor"]`); await monacoEditor.click(); await monacoEditor.type("apiVersion: v1", { delay: 10 }); diff --git a/src/extensions/renderer-api/components.ts b/src/extensions/renderer-api/components.ts index 62d97c490c..21733bd85e 100644 --- a/src/extensions/renderer-api/components.ts +++ b/src/extensions/renderer-api/components.ts @@ -64,6 +64,11 @@ export * from "../../renderer/components/layout/sub-title"; export * from "../../renderer/components/input/search-input"; export * from "../../renderer/components/chart/bar-chart"; export * from "../../renderer/components/chart/pie-chart"; +export { + MonacoEditor, + type MonacoEditorProps, type MonacoEditorId, + type MonacoTheme, type MonacoCustomTheme, +} from "../../renderer/components/monaco-editor"; // kube helpers export * from "../../renderer/components/kube-detail-params"; diff --git a/src/renderer/components/monaco-editor/monaco-editor.tsx b/src/renderer/components/monaco-editor/monaco-editor.tsx index f50e49f191..6c8f3e01a6 100644 --- a/src/renderer/components/monaco-editor/monaco-editor.tsx +++ b/src/renderer/components/monaco-editor/monaco-editor.tsx @@ -9,12 +9,12 @@ import { observer } from "mobx-react"; import { action, computed, makeObservable, observable, reaction } from "mobx"; import { editor, Uri } from "monaco-editor"; import type { MonacoTheme } from "./monaco-themes"; -import type { MonacoValidator } from "./monaco-validators"; -import { monacoValidators } from "./monaco-validators"; +import { type MonacoValidator, monacoValidators } from "./monaco-validators"; import { debounce, merge } from "lodash"; -import { cssNames, disposer } from "../../utils"; +import { autoBind, cssNames, disposer } from "../../utils"; import { UserStore } from "../../../common/user-store"; import { ThemeStore } from "../../theme.store"; +import logger from "../../../main/logger"; export type MonacoEditorId = string; @@ -45,32 +45,28 @@ export const defaultEditorProps: Partial = { @observer export class MonacoEditor extends React.Component { - static defaultProps = defaultEditorProps as object; - static viewStates = new WeakMap(); + static readonly defaultProps = defaultEditorProps as object; + static readonly viewStates = new WeakMap(); static createUri(id: MonacoEditorId): Uri { return Uri.file(`/monaco-editor/${id}`); } - public staticId = `editor-id#${Math.round(1e7 * Math.random())}`; - public dispose = disposer(); - - // TODO: investigate how to replace with "common/logger" - // currently leads for stucking UI forever & infinite loop. - // e.g. happens on tab change/create, maybe some other cases too. - logger = console; + private staticId = `editor-id#${Math.round(1e7 * Math.random())}`; + private dispose = disposer(); @observable.ref containerElem: HTMLElement; @observable.ref editor: editor.IStandaloneCodeEditor; - @observable dimensions: { width?: number; height?: number } = {}; - @observable unmounting = false; + @observable readonly dimensions: { width?: number; height?: number } = {}; + @observable private unmounting = false; constructor(props: MonacoEditorProps) { super(props); makeObservable(this); + autoBind(this); } - @computed get id() { + @computed get id(): MonacoEditorId { return this.props.id ?? this.staticId; } @@ -94,7 +90,8 @@ export class MonacoEditor extends React.Component { ); } - @computed get logMetadata() { + @computed + private get logMetadata() { return { editorId: this.id, model: this.model, @@ -121,8 +118,8 @@ export class MonacoEditor extends React.Component { return () => resizeObserver.unobserve(containerElem); } - onModelChange = (model: editor.ITextModel, oldModel?: editor.ITextModel) => { - this.logger?.info("[MONACO]: model change", { model, oldModel }, this.logMetadata); + protected onModelChange(model: editor.ITextModel, oldModel?: editor.ITextModel) { + logger.info("[MONACO]: model change", { model, oldModel }, this.logMetadata); if (oldModel) { this.saveViewState(oldModel); @@ -134,18 +131,17 @@ export class MonacoEditor extends React.Component { this.editor.focus(); // keep focus in editor, e.g. when clicking between dock-tabs this.props.onModelChange?.(model, oldModel); this.validateLazy(); - }; + } /** * Save current view-model state in the editor. * This will allow restore cursor position, selected text, etc. - * @param {editor.ITextModel} model */ - private saveViewState(model: editor.ITextModel) { + protected saveViewState(model: editor.ITextModel) { MonacoEditor.viewStates.set(model.uri, this.editor.saveViewState()); } - private restoreViewState(model: editor.ITextModel) { + protected restoreViewState(model: editor.ITextModel) { const viewState = MonacoEditor.viewStates.get(model.uri); if (viewState) { @@ -156,9 +152,9 @@ export class MonacoEditor extends React.Component { componentDidMount() { try { this.createEditor(); - this.logger?.info(`[MONACO]: editor did mount`, this.logMetadata); + logger.info(`[MONACO]: editor did mount`, this.logMetadata); } catch (error) { - this.logger?.error(`[MONACO]: mounting failed: ${error}`, this.logMetadata); + logger.error(`[MONACO]: mounting failed: ${error}`, this.logMetadata); } } @@ -168,7 +164,7 @@ export class MonacoEditor extends React.Component { this.destroy(); } - private createEditor() { + protected createEditor() { if (!this.containerElem || this.editor || this.unmounting) { return; } @@ -184,7 +180,7 @@ export class MonacoEditor extends React.Component { ...this.options, }); - this.logger?.info(`[MONACO]: editor created for language=${language}, theme=${theme}`, this.logMetadata); + logger.info(`[MONACO]: editor created for language=${language}, theme=${theme}`, this.logMetadata); this.validateLazy(); // validate initial value this.restoreViewState(this.model); // restore previous state if any @@ -250,7 +246,8 @@ export class MonacoEditor extends React.Component { this.editor?.focus(); } - validate = action((value = this.getValue()) => { + @action + validate(value = this.getValue()) { const validators: MonacoValidator[] = [ monacoValidators[this.props.language], // parsing syntax check ].filter(Boolean); @@ -262,19 +259,21 @@ export class MonacoEditor extends React.Component { this.props.onError?.(error); // emit error outside } } - }); + } // avoid excessive validations during typing validateLazy = debounce(this.validate, 250); - bindRef = (elem: HTMLElement) => this.containerElem = elem; + protected bindRef(elem: HTMLElement) { + this.containerElem = elem; + } render() { const { className, style } = this.props; return (
Date: Mon, 25 Apr 2022 14:10:39 -0700 Subject: [PATCH 05/14] Fix crash in CRD display (#5256) --- package.json | 3 +- .../crd-resource-details.tsx | 8 +- .../+custom-resources/crd-resources.tsx | 26 +-- .../utils/__tests__/jsonPath.test.tsx | 162 +++++++++++++++--- src/renderer/utils/jsonPath.ts | 87 ++++++++-- yarn.lock | 46 +++-- 6 files changed, 262 insertions(+), 70 deletions(-) diff --git a/package.json b/package.json index eb72608be7..a78199c1b7 100644 --- a/package.json +++ b/package.json @@ -199,6 +199,7 @@ } }, "dependencies": { + "@astronautlabs/jsonpath": "^1.1.0", "@hapi/call": "^8.0.1", "@hapi/subtext": "^7.0.3", "@kubernetes/client-node": "^0.16.3", @@ -229,7 +230,6 @@ "joi": "^17.6.0", "js-yaml": "^4.1.0", "jsdom": "^16.7.0", - "jsonpath": "^1.1.1", "lodash": "^4.17.15", "mac-ca": "^1.0.6", "marked": "^4.0.12", @@ -299,7 +299,6 @@ "@types/jest": "^26.0.24", "@types/js-yaml": "^4.0.5", "@types/jsdom": "^16.2.14", - "@types/jsonpath": "^0.2.0", "@types/lodash": "^4.14.181", "@types/marked": "^4.0.3", "@types/md5-file": "^4.0.2", diff --git a/src/renderer/components/+custom-resources/crd-resource-details.tsx b/src/renderer/components/+custom-resources/crd-resource-details.tsx index 6ac5d61ed2..1c43769e2e 100644 --- a/src/renderer/components/+custom-resources/crd-resource-details.tsx +++ b/src/renderer/components/+custom-resources/crd-resource-details.tsx @@ -6,7 +6,6 @@ import "./crd-resource-details.scss"; import React from "react"; -import jsonPath from "jsonpath"; import { observer } from "mobx-react"; import { cssNames } from "../../utils"; import { Badge } from "../badge"; @@ -16,10 +15,11 @@ import { KubeObjectMeta } from "../kube-object-meta"; import { Input } from "../input"; import type { AdditionalPrinterColumnsV1 } from "../../../common/k8s-api/endpoints/crd.api"; import { CustomResourceDefinition } from "../../../common/k8s-api/endpoints/crd.api"; -import { parseJsonPath } from "../../utils/jsonPath"; +import { convertKubectlJsonPathToNodeJsonPath } from "../../utils/jsonPath"; import type { KubeObjectMetadata, KubeObjectStatus } from "../../../common/k8s-api/kube-object"; import { KubeObject } from "../../../common/k8s-api/kube-object"; import logger from "../../../common/logger"; +import { JSONPath } from "@astronautlabs/jsonpath"; export interface CustomResourceDetailsProps extends KubeObjectDetailsProps { crd: CustomResourceDefinition; @@ -48,9 +48,9 @@ function convertSpecValue(value: any): any { @observer export class CustomResourceDetails extends React.Component { renderAdditionalColumns(resource: KubeObject, columns: AdditionalPrinterColumnsV1[]) { - return columns.map(({ name, jsonPath: jp }) => ( + return columns.map(({ name, jsonPath }) => ( - {convertSpecValue(jsonPath.value(resource, parseJsonPath(jp.slice(1))))} + {convertSpecValue(JSONPath.query(resource, convertKubectlJsonPathToNodeJsonPath(jsonPath)))} )); } diff --git a/src/renderer/components/+custom-resources/crd-resources.tsx b/src/renderer/components/+custom-resources/crd-resources.tsx index 528f4ea0d9..08d56488bd 100644 --- a/src/renderer/components/+custom-resources/crd-resources.tsx +++ b/src/renderer/components/+custom-resources/crd-resources.tsx @@ -6,14 +6,13 @@ import "./crd-resources.scss"; import React from "react"; -import { value } from "jsonpath"; import { observer } from "mobx-react"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { IComputedValue } from "mobx"; import { computed, makeObservable } from "mobx"; import { crdStore } from "./crd.store"; import { apiManager } from "../../../common/k8s-api/api-manager"; -import { parseJsonPath } from "../../utils/jsonPath"; +import { safeJSONPathValue } from "../../utils/jsonPath"; import { TabLayout } from "../layout/tab-layout-2"; import { withInjectables } from "@ogre-tools/injectable-react"; import customResourcesRouteParametersInjectable from "./custom-resources-route-parameters.injectable"; @@ -70,7 +69,7 @@ class NonInjectedCrdResources extends React.Component { [columnId.age]: customResource => -customResource.getCreationTimestamp(), ...Object.fromEntries(extraColumns.map(({ name, jsonPath }) => [ name, - customResource => value(customResource, parseJsonPath(jsonPath.slice(1))), + customResource => safeJSONPathValue(customResource, jsonPath), ])), }} searchFilters={[ @@ -95,22 +94,11 @@ class NonInjectedCrdResources extends React.Component { })), { title: "Age", className: "age", sortBy: columnId.age, id: columnId.age }, ]} - renderTableContents={crdInstance => [ - crdInstance.getName(), - isNamespaced && crdInstance.getNs(), - ...extraColumns.map((column) => { - let rawValue = value(crdInstance, parseJsonPath(column.jsonPath.slice(1))); - - if (Array.isArray(rawValue) || typeof rawValue === "object") { - rawValue = JSON.stringify(rawValue); - } - - return { - renderBoolean: true, - children: rawValue, - }; - }), - , + renderTableContents={customResource => [ + customResource.getName(), + isNamespaced && customResource.getNs(), + ...extraColumns.map((column) => safeJSONPathValue(customResource, column.jsonPath)), + , ]} failedToLoadMessage={( <> diff --git a/src/renderer/utils/__tests__/jsonPath.test.tsx b/src/renderer/utils/__tests__/jsonPath.test.tsx index dd8cfa86b8..db5e64d208 100644 --- a/src/renderer/utils/__tests__/jsonPath.test.tsx +++ b/src/renderer/utils/__tests__/jsonPath.test.tsx @@ -3,44 +3,166 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { parseJsonPath } from "../jsonPath"; +import { convertKubectlJsonPathToNodeJsonPath, safeJSONPathValue } from "../jsonPath"; describe("parseJsonPath", () => { - test("should convert \\. to use indexed notation", () => { - const res = parseJsonPath(".metadata.labels.kubesphere\\.io/alias-name"); + it("should convert \\. to use indexed notation", () => { + const res = convertKubectlJsonPathToNodeJsonPath(".metadata.labels.kubesphere\\.io/alias-name"); - expect(res).toBe(".metadata.labels['kubesphere.io/alias-name']"); + expect(res).toBe("$.metadata.labels['kubesphere.io/alias-name']"); }); - test("should convert keys with escaped characters to use indexed notation", () => { - const res = parseJsonPath(".metadata.labels.kubesphere\\\"io/alias-name"); + it("should convert keys with escaped characters to use indexed notation", () => { + const res = convertKubectlJsonPathToNodeJsonPath(".metadata.labels.kubesphere\\\"io/alias-name"); - expect(res).toBe(".metadata.labels['kubesphere\"io/alias-name']"); + expect(res).toBe("$.metadata.labels['kubesphere\"io/alias-name']"); }); - test("should convert '-' to use indexed notation", () => { - const res = parseJsonPath(".metadata.labels.alias-name"); + it("should convert '-' to use indexed notation", () => { + const res = convertKubectlJsonPathToNodeJsonPath(".metadata.labels.alias-name"); - expect(res).toBe(".metadata.labels['alias-name']"); + expect(res).toBe("$.metadata.labels['alias-name']"); }); - test("should handle scenario when both \\. and indexed notation are present", () => { - const rest = parseJsonPath(".metadata.labels\\.serving['some.other.item']"); + it("should drop leading dot if first group is converted to index notation", () => { + const res = convertKubectlJsonPathToNodeJsonPath(".metadata\\.labels.alias-name"); - expect(rest).toBe(".metadata['labels.serving']['some.other.item']"); + expect(res).toBe("$['metadata.labels']['alias-name']"); }); + it("should handle scenario when both \\. and indexed notation are present", () => { + const rest = convertKubectlJsonPathToNodeJsonPath(".metadata.labels\\.serving['some.other.item']"); - test("should not touch given jsonPath if no invalid characters present", () => { - const res = parseJsonPath(".status.conditions[?(@.type=='Ready')].status"); - - expect(res).toBe(".status.conditions[?(@.type=='Ready')].status"); + expect(rest).toBe("$.metadata['labels.serving']['some.other.item']"); }); - test("strips '\\' away from the result", () => { - const res = parseJsonPath(".metadata.labels['serving\\.knative\\.dev/configuration']"); + it("should not touch given jsonPath if no invalid characters present", () => { + const res = convertKubectlJsonPathToNodeJsonPath(".status.conditions[?(@.type=='Ready')].status"); - expect(res).toBe(".metadata.labels['serving.knative.dev/configuration']"); + expect(res).toBe("$.status.conditions[?(@.type=='Ready')].status"); }); + it("strips '\\' away from the result", () => { + const res = convertKubectlJsonPathToNodeJsonPath(".metadata.labels['serving\\.knative\\.dev/configuration']"); + + expect(res).toBe("$.metadata.labels['serving.knative.dev/configuration']"); + }); + + it("converts all [] to [0]", () => { + const res = convertKubectlJsonPathToNodeJsonPath(".metadata.labels[].foo[]"); + + expect(res).toBe("$.metadata.labels[0].foo[0]"); + }); + + it("converts ending .. to ..*", () => { + const res = convertKubectlJsonPathToNodeJsonPath(".metadata.labels[].."); + + expect(res).toBe("$.metadata.labels[0]"); + }); + + it("converts ending ...name to ..name", () => { + const res = convertKubectlJsonPathToNodeJsonPath(".metadata.labels[]...name"); + + expect(res).toBe("$.metadata.labels[0]..name"); + }); +}); + +describe("safeJSONPathValue", () => { + let oldWarn: typeof console["warn"]; + + beforeEach(() => { + oldWarn = console.warn; + console.warn = jest.fn(); + }); + + afterEach(() => { + console.warn = oldWarn; + }); + + it("should convert boolean values to strings", () => { + const res = safeJSONPathValue({ bar: false }, ".bar"); + + expect(res).toBe("false"); + }); + + it("should convert number values to strings", () => { + const res = safeJSONPathValue({ bar: 0 }, ".bar"); + + expect(res).toBe("0"); + }); + + it("should join sliced entries with commas only", () => { + const res = safeJSONPathValue({ + bar: [ + { + foo: 1, + }, + { + foo: "hello", + }, + ], + }, ".bar[].foo"); + + expect(res).toBe("1"); + }); + + it("should join an array of values using JSON.stringify", () => { + const res = safeJSONPathValue({ + bar: [ + "world", + "hello", + ], + }, ".bar"); + + expect(res).toBe(`["world","hello"]`); + }); + + it("should stringify an object value", () => { + const res = safeJSONPathValue({ + foo: { bar: "bat" }, + }, ".foo"); + + expect(res).toBe(`{"bar":"bat"}`); + }); + + it("should use convertKubectlJsonPathToNodeJsonPath", () => { + const res = safeJSONPathValue({ + foo: { "hello.world": "bat" }, + }, ".foo.hello\\.world"); + + expect(res).toBe("bat"); + }); + + it("should not throw when given '.spec.metrics[*].external.highWatermark..'", () => { + const obj = { + spec: { + metrics: [ + { + external: { + metricName: "cpu", + highWatermark: "100", + }, + }, + { + external: { + metricName: "memory", + highWatermark: "100", + }, + }, + ], + }, + }; + + const res = safeJSONPathValue(obj, ".spec.metrics[*].external.highWatermark.."); + + expect(res).toBe("100, 100"); + }); + + it("should not throw if path is invalid jsonpath", () => { + const res = safeJSONPathValue({ + foo: { "hello.world": "bat" }, + }, "asd["); + + expect(res).toBe(""); + }); }); diff --git a/src/renderer/utils/jsonPath.ts b/src/renderer/utils/jsonPath.ts index 6bbf0c7a24..3aedbd0919 100644 --- a/src/renderer/utils/jsonPath.ts +++ b/src/renderer/utils/jsonPath.ts @@ -3,28 +3,63 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -// Helper to convert strings used for jsonPath where \. or - is present to use indexed notation, -// for example: .metadata.labels.kubesphere\.io/alias-name -> .metadata.labels['kubesphere\.io/alias-name'] +import { JSONPath } from "@astronautlabs/jsonpath"; -export function parseJsonPath(jsonPath: string) { - let pathExpression = jsonPath; +const slashDashSearch = /[\\-]/g; +const pathByBareDots = /(?<=\w)\./; +const textBeforeFirstSquare = /^.*(?=\[)/g; +const backSlash = /\\/g; +const kubectlOptionPrefix = /^\$?\.?(?.*)/; +const sliceVersion = /\[]/g; +const tripleDotName = /\.\.\.(?.)/g; +const trailingDotDot = /\.\.$/; - if (jsonPath.match(/[\\-]/g)) { // search for '\' and '-' - const [first, ...rest] = jsonPath.split(/(?<=\w)\./); // split jsonPath by '.' (\. cases are ignored) +/** + * The GO package that kubectl and kubernetes uses for its JSONpath implementation has some + * shorthand conveniences that are not part of the official spec. This function tries to convert + * those shorthands to the official spec. + * + * Known shorthands: + * - Leading `$` is optional (but implied) + * - The string `\.` is used to denote the "value of '.'" and not "next key" + * - The string `-` can be used while not in quotes + * - `[]` as shorthand for `[0]` + * - Remove `..` at the end of a path, we will just format it slightly differently + * - Allow `...foo` as well as `..foo` + */ +export function convertKubectlJsonPathToNodeJsonPath(jsonPath: string) { + const startMatch = jsonPath.match(kubectlOptionPrefix); + let start = "$"; + + if (!startMatch) { + return start; + } + + let { pathExpression } = startMatch.groups; + + if (pathExpression.match(slashDashSearch)) { + const [first, ...rest] = pathExpression.split(pathByBareDots); pathExpression = `${convertToIndexNotation(first, true)}${rest.map(value => convertToIndexNotation(value)).join("")}`; } + pathExpression = pathExpression.replace(trailingDotDot, ""); + pathExpression = pathExpression.replace(tripleDotName, "..$"); + + if (!pathExpression.startsWith("[")) { + start += "."; + } + // strip '\' characters from the result - return pathExpression.replace(/\\/g, ""); + return `${start}${pathExpression.replace(backSlash, "").replace(sliceVersion, "[0]")}`; } function convertToIndexNotation(key: string, firstItem = false) { - if (key.match(/[\\-]/g)) { // check if found '\' and '-' in key + if (key.match(slashDashSearch)) { if (key.includes("[")) { // handle cases where key contains [...] - const keyToConvert = key.match(/^.*(?=\[)/g); // get the text from the key before '[' + const keyToConvert = key.match(textBeforeFirstSquare); // get the text from the key before '[' - if (keyToConvert && keyToConvert[0].match(/[\\-]/g)) { // check if that part contains illegal characters + if (keyToConvert && keyToConvert[0].match(slashDashSearch)) { // check if that part contains illegal characters return key.replace(keyToConvert[0], `['${keyToConvert[0]}']`); // surround key with '[' and ']' } else { return `.${key}`; // otherwise return as is with leading '.' @@ -38,3 +73,35 @@ function convertToIndexNotation(key: string, firstItem = false) { return `${prefix}${key}`; } } + +function formatJSONValue(value: unknown) { + if (typeof value === "object") { + return JSON.stringify(value); + } + + return String(value); +} + +/** + * This function is a safer version of `JSONPath.value(obj, path)` with untrusted jsonpath strings + * + * This function will also stringify the value retreived from the object + */ +export function safeJSONPathValue(obj: object, path: string): string { + try { + const parsedPath = JSONPath.parse(convertKubectlJsonPathToNodeJsonPath(path)); + const isSlice = parsedPath.some((exp: any) => exp.expression.type === "slice" || "wildcard"); + const value = JSONPath.query(obj, JSONPath.stringify(parsedPath), isSlice ? Infinity : 1); + + if (isSlice) { + return value.map(formatJSONValue).join(", "); + } + + return formatJSONValue(value[0]); + } catch (error) { + // something failed + console.warn("[JSON-PATH]: failed to parse jsonpath", error); + + return ""; + } +} diff --git a/yarn.lock b/yarn.lock index 6f3264ae45..612dc8281b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,6 +7,17 @@ resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876" integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== +"@astronautlabs/jsonpath@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@astronautlabs/jsonpath/-/jsonpath-1.1.0.tgz#9b4b04603be2e858d0763619ab3f9d1050b52ef3" + integrity sha512-I4sckUQNYEeF4w6AkujiRblVzC0jo3ja+bxKHB1M2aFiaBjevSGlBdgZ80PgCX5sj65/AhKSFN9+cT908avBlQ== + dependencies: + "@types/esprima" "^4.0.2" + "@types/mkdirp" "^1.0.0" + esprima "1.2.2" + static-eval "2.0.2" + underscore "1.7.0" + "@async-fn/jest@1.5.3": version "1.5.3" resolved "https://registry.yarnpkg.com/@async-fn/jest/-/jest-1.5.3.tgz#42be6c0e8ba5ccd737e006ca600e7e319fe2a591" @@ -1449,6 +1460,13 @@ "@types/estree" "*" "@types/json-schema" "*" +"@types/esprima@^4.0.2": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/esprima/-/esprima-4.0.3.tgz#e9068297cc3dd75231fa5cdaa6d75c50d5fb632f" + integrity sha512-jo14dIWVVtF0iMsKkYek6++4cWJjwpvog+rchLulwgFJGTXqIeTdCOvY0B3yMLTaIwMcKCdJ6mQbSR6wYHy98A== + dependencies: + "@types/estree" "*" + "@types/estree@*", "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" @@ -1611,11 +1629,6 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/jsonpath@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@types/jsonpath/-/jsonpath-0.2.0.tgz#13c62db22a34d9c411364fac79fd374d63445aa1" - integrity sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ== - "@types/keyv@*": version "3.1.1" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" @@ -1662,6 +1675,13 @@ dependencies: "@types/node" "*" +"@types/mkdirp@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-1.0.2.tgz#8d0bad7aa793abe551860be1f7ae7f3198c16666" + integrity sha512-o0K1tSO0Dx5X6xlU5F1D6625FawhC3dU3iqr25lluNv/+/QIVH8RLNEiVokgIZo+mz+87w/3Mkg/VvQS+J51fQ== + dependencies: + "@types/node" "*" + "@types/mock-fs@^4.13.1": version "4.13.1" resolved "https://registry.yarnpkg.com/@types/mock-fs/-/mock-fs-4.13.1.tgz#9201554ceb23671badbfa8ac3f1fa9e0706305be" @@ -8219,15 +8239,6 @@ jsonpath-plus@^0.19.0: resolved "https://registry.yarnpkg.com/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz#b901e57607055933dc9a8bef0cc25160ee9dd64c" integrity sha512-GSVwsrzW9LsA5lzsqe4CkuZ9wp+kxBb2GwNniaWzI2YFn5Ig42rSW8ZxVpWXaAfakXNrx5pgY5AbQq7kzX29kg== -jsonpath@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.1.1.tgz#0ca1ed8fb65bb3309248cc9d5466d12d5b0b9901" - integrity sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w== - dependencies: - esprima "1.2.2" - static-eval "2.0.2" - underscore "1.12.1" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -13202,7 +13213,12 @@ undefsafe@^2.0.5: resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== -underscore@1.12.1, underscore@^1.9.1: +underscore@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + integrity sha1-a7rwh3UA02vjTsqlhODbn+8DUgk= + +underscore@^1.9.1: version "1.12.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== From 3a6a494c4fa1ec67306a6ba532cb04e76fa7324b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Apr 2022 10:56:13 -0400 Subject: [PATCH 06/14] Bump react-refresh from 0.11.0 to 0.12.0 (#5221) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index a78199c1b7..91a05f8501 100644 --- a/package.json +++ b/package.json @@ -379,7 +379,7 @@ "postcss-loader": "^6.2.1", "randomcolor": "^0.6.2", "react-beautiful-dnd": "^13.1.0", - "react-refresh": "^0.11.0", + "react-refresh": "^0.12.0", "react-refresh-typescript": "^2.0.4", "react-router-dom": "^5.3.1", "react-select": "3.2.0", diff --git a/yarn.lock b/yarn.lock index 612dc8281b..6a22b6e2d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11027,10 +11027,10 @@ react-refresh-typescript@^2.0.4: resolved "https://registry.yarnpkg.com/react-refresh-typescript/-/react-refresh-typescript-2.0.4.tgz#f20acdb3a538fc79da10c64fdd5560bea01309f1" integrity sha512-ySsBExEFik5Jjf7NoXtFbzUk2rYWM4gF5gg+wRTNmp9p7B2uMpAAa339FHWqmB8EAr0e6mzzskAXxc0Jd04fBw== -react-refresh@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" - integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== +react-refresh@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.12.0.tgz#28ac0a2c30ef2bb3433d5fd0621e69a6d774c3a4" + integrity sha512-suLIhrU2IHKL5JEKR/fAwJv7bbeq4kJ+pJopf77jHwuR+HmJS/HbrPIGsTBUVfw7tXPOmYv7UJ7PCaN49e8x4A== react-router-dom@^5.3.1: version "5.3.1" From b4866a035e11f6e1718581ca7e6a9798d245568f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Apr 2022 10:57:11 -0400 Subject: [PATCH 07/14] Bump esbuild from 0.14.36 to 0.14.38 (#5267) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 208 +++++++++++++++++++++++++-------------------------- 2 files changed, 105 insertions(+), 105 deletions(-) diff --git a/package.json b/package.json index 91a05f8501..e9c21a19cf 100644 --- a/package.json +++ b/package.json @@ -348,7 +348,7 @@ "electron": "^14.2.9", "electron-builder": "^23.0.3", "electron-notarize": "^0.3.0", - "esbuild": "^0.14.36", + "esbuild": "^0.14.38", "esbuild-loader": "^2.18.0", "eslint": "^8.11.0", "eslint-plugin-header": "^3.1.1", diff --git a/yarn.lock b/yarn.lock index 6a22b6e2d5..6ea37e7c20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5157,75 +5157,75 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -esbuild-android-64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.36.tgz#fc5f95ce78c8c3d790fa16bc71bd904f2bb42aa1" - integrity sha512-jwpBhF1jmo0tVCYC/ORzVN+hyVcNZUWuozGcLHfod0RJCedTDTvR4nwlTXdx1gtncDqjk33itjO+27OZHbiavw== +esbuild-android-64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz#5b94a1306df31d55055f64a62ff6b763a47b7f64" + integrity sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw== -esbuild-android-arm64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.36.tgz#44356fbb9f8de82a5cdf11849e011dfb3ad0a8a8" - integrity sha512-/hYkyFe7x7Yapmfv4X/tBmyKnggUmdQmlvZ8ZlBnV4+PjisrEhAvC3yWpURuD9XoB8Wa1d5dGkTsF53pIvpjsg== +esbuild-android-arm64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz#78acc80773d16007de5219ccce544c036abd50b8" + integrity sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA== -esbuild-darwin-64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.36.tgz#3d9324b21489c70141665c2e740d6e84f16f725d" - integrity sha512-kkl6qmV0dTpyIMKagluzYqlc1vO0ecgpviK/7jwPbRDEv5fejRTaBBEE2KxEQbTHcLhiiDbhG7d5UybZWo/1zQ== +esbuild-darwin-64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz#e02b1291f629ebdc2aa46fabfacc9aa28ff6aa46" + integrity sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA== -esbuild-darwin-arm64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.36.tgz#2a8040c2e465131e5281034f3c72405e643cb7b2" - integrity sha512-q8fY4r2Sx6P0Pr3VUm//eFYKVk07C5MHcEinU1BjyFnuYz4IxR/03uBbDwluR6ILIHnZTE7AkTUWIdidRi1Jjw== +esbuild-darwin-arm64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz#01eb6650ec010b18c990e443a6abcca1d71290a9" + integrity sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ== -esbuild-freebsd-64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.36.tgz#d82c387b4d01fe9e8631f97d41eb54f2dbeb68a3" - integrity sha512-Hn8AYuxXXRptybPqoMkga4HRFE7/XmhtlQjXFHoAIhKUPPMeJH35GYEUWGbjteai9FLFvBAjEAlwEtSGxnqWww== +esbuild-freebsd-64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz#790b8786729d4aac7be17648f9ea8e0e16475b5e" + integrity sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig== -esbuild-freebsd-arm64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.36.tgz#e8ce2e6c697da6c7ecd0cc0ac821d47c5ab68529" - integrity sha512-S3C0attylLLRiCcHiJd036eDEMOY32+h8P+jJ3kTcfhJANNjP0TNBNL30TZmEdOSx/820HJFgRrqpNAvTbjnDA== +esbuild-freebsd-arm64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz#b66340ab28c09c1098e6d9d8ff656db47d7211e6" + integrity sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ== -esbuild-linux-32@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.36.tgz#a4a261e2af91986ea62451f2db712a556cb38a15" - integrity sha512-Eh9OkyTrEZn9WGO4xkI3OPPpUX7p/3QYvdG0lL4rfr73Ap2HAr6D9lP59VMF64Ex01LhHSXwIsFG/8AQjh6eNw== +esbuild-linux-32@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz#7927f950986fd39f0ff319e92839455912b67f70" + integrity sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g== -esbuild-linux-64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.36.tgz#4a9500f9197e2c8fcb884a511d2c9d4c2debde72" - integrity sha512-vFVFS5ve7PuwlfgoWNyRccGDi2QTNkQo/2k5U5ttVD0jRFaMlc8UQee708fOZA6zTCDy5RWsT5MJw3sl2X6KDg== +esbuild-linux-64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz#4893d07b229d9cfe34a2b3ce586399e73c3ac519" + integrity sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q== -esbuild-linux-arm64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.36.tgz#c91c21e25b315464bd7da867365dd1dae14ca176" - integrity sha512-24Vq1M7FdpSmaTYuu1w0Hdhiqkbto1I5Pjyi+4Cdw5fJKGlwQuw+hWynTcRI/cOZxBcBpP21gND7W27gHAiftw== +esbuild-linux-arm64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz#8442402e37d0b8ae946ac616784d9c1a2041056a" + integrity sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA== -esbuild-linux-arm@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.36.tgz#90e23bca2e6e549affbbe994f80ba3bb6c4d934a" - integrity sha512-NhgU4n+NCsYgt7Hy61PCquEz5aevI6VjQvxwBxtxrooXsxt5b2xtOUXYZe04JxqQo+XZk3d1gcr7pbV9MAQ/Lg== +esbuild-linux-arm@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz#d5dbf32d38b7f79be0ec6b5fb2f9251fd9066986" + integrity sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA== -esbuild-linux-mips64le@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.36.tgz#40e11afb08353ff24709fc89e4db0f866bc131d2" - integrity sha512-hZUeTXvppJN+5rEz2EjsOFM9F1bZt7/d2FUM1lmQo//rXh1RTFYzhC0txn7WV0/jCC7SvrGRaRz0NMsRPf8SIA== +esbuild-linux-mips64le@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz#95081e42f698bbe35d8ccee0e3a237594b337eb5" + integrity sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ== -esbuild-linux-ppc64le@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.36.tgz#9e8a588c513d06cc3859f9dcc52e5fdfce8a1a5e" - integrity sha512-1Bg3QgzZjO+QtPhP9VeIBhAduHEc2kzU43MzBnMwpLSZ890azr4/A9Dganun8nsqD/1TBcqhId0z4mFDO8FAvg== +esbuild-linux-ppc64le@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz#dceb0a1b186f5df679618882a7990bd422089b47" + integrity sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q== -esbuild-linux-riscv64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.36.tgz#e578c09b23b3b97652e60e3692bfda628b541f06" - integrity sha512-dOE5pt3cOdqEhaufDRzNCHf5BSwxgygVak9UR7PH7KPVHwSTDAZHDoEjblxLqjJYpc5XaU9+gKJ9F8mp9r5I4A== +esbuild-linux-riscv64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz#61fb8edb75f475f9208c4a93ab2bfab63821afd2" + integrity sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ== -esbuild-linux-s390x@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.36.tgz#3c9dab40d0d69932ffded0fd7317bb403626c9bc" - integrity sha512-g4FMdh//BBGTfVHjF6MO7Cz8gqRoDPzXWxRvWkJoGroKA18G9m0wddvPbEqcQf5Tbt2vSc1CIgag7cXwTmoTXg== +esbuild-linux-s390x@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz#34c7126a4937406bf6a5e69100185fd702d12fe0" + integrity sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ== esbuild-loader@^2.18.0: version "2.18.0" @@ -5239,61 +5239,61 @@ esbuild-loader@^2.18.0: tapable "^2.2.0" webpack-sources "^2.2.0" -esbuild-netbsd-64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.36.tgz#e27847f6d506218291619b8c1e121ecd97628494" - integrity sha512-UB2bVImxkWk4vjnP62ehFNZ73lQY1xcnL5ZNYF3x0AG+j8HgdkNF05v67YJdCIuUJpBuTyCK8LORCYo9onSW+A== +esbuild-netbsd-64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz#322ea9937d9e529183ee281c7996b93eb38a5d95" + integrity sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q== -esbuild-openbsd-64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.36.tgz#c94c04c557fae516872a586eae67423da6d2fabb" - integrity sha512-NvGB2Chf8GxuleXRGk8e9zD3aSdRO5kLt9coTQbCg7WMGXeX471sBgh4kSg8pjx0yTXRt0MlrUDnjVYnetyivg== +esbuild-openbsd-64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz#1ca29bb7a2bf09592dcc26afdb45108f08a2cdbd" + integrity sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ== -esbuild-sunos-64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.36.tgz#9b79febc0df65a30f1c9bd63047d1675511bf99d" - integrity sha512-VkUZS5ftTSjhRjuRLp+v78auMO3PZBXu6xl4ajomGenEm2/rGuWlhFSjB7YbBNErOchj51Jb2OK8lKAo8qdmsQ== +esbuild-sunos-64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz#c9446f7d8ebf45093e7bb0e7045506a88540019b" + integrity sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA== -esbuild-windows-32@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.36.tgz#910d11936c8d2122ffdd3275e5b28d8a4e1240ec" - integrity sha512-bIar+A6hdytJjZrDxfMBUSEHHLfx3ynoEZXx/39nxy86pX/w249WZm8Bm0dtOAByAf4Z6qV0LsnTIJHiIqbw0w== +esbuild-windows-32@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz#f8e9b4602fd0ccbd48e5c8d117ec0ba4040f2ad1" + integrity sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw== -esbuild-windows-64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.36.tgz#21b4ce8b42a4efc63f4b58ec617f1302448aad26" - integrity sha512-+p4MuRZekVChAeueT1Y9LGkxrT5x7YYJxYE8ZOTcEfeUUN43vktSn6hUNsvxzzATrSgq5QqRdllkVBxWZg7KqQ== +esbuild-windows-64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz#280f58e69f78535f470905ce3e43db1746518107" + integrity sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw== -esbuild-windows-arm64@0.14.36: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.36.tgz#ba21546fecb7297667d0052d00150de22c044b24" - integrity sha512-fBB4WlDqV1m18EF/aheGYQkQZHfPHiHJSBYzXIo8yKehek+0BtBwo/4PNwKGJ5T0YK0oc8pBKjgwPbzSrPLb+Q== +esbuild-windows-arm64@0.14.38: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz#d97e9ac0f95a4c236d9173fa9f86c983d6a53f54" + integrity sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw== -esbuild@^0.14.36, esbuild@^0.14.6: - version "0.14.36" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.36.tgz#0023a73eab57886ac5605df16ee421e471a971b3" - integrity sha512-HhFHPiRXGYOCRlrhpiVDYKcFJRdO0sBElZ668M4lh2ER0YgnkLxECuFe7uWCf23FrcLc59Pqr7dHkTqmRPDHmw== +esbuild@^0.14.38, esbuild@^0.14.6: + version "0.14.38" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.38.tgz#99526b778cd9f35532955e26e1709a16cca2fb30" + integrity sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA== optionalDependencies: - esbuild-android-64 "0.14.36" - esbuild-android-arm64 "0.14.36" - esbuild-darwin-64 "0.14.36" - esbuild-darwin-arm64 "0.14.36" - esbuild-freebsd-64 "0.14.36" - esbuild-freebsd-arm64 "0.14.36" - esbuild-linux-32 "0.14.36" - esbuild-linux-64 "0.14.36" - esbuild-linux-arm "0.14.36" - esbuild-linux-arm64 "0.14.36" - esbuild-linux-mips64le "0.14.36" - esbuild-linux-ppc64le "0.14.36" - esbuild-linux-riscv64 "0.14.36" - esbuild-linux-s390x "0.14.36" - esbuild-netbsd-64 "0.14.36" - esbuild-openbsd-64 "0.14.36" - esbuild-sunos-64 "0.14.36" - esbuild-windows-32 "0.14.36" - esbuild-windows-64 "0.14.36" - esbuild-windows-arm64 "0.14.36" + esbuild-android-64 "0.14.38" + esbuild-android-arm64 "0.14.38" + esbuild-darwin-64 "0.14.38" + esbuild-darwin-arm64 "0.14.38" + esbuild-freebsd-64 "0.14.38" + esbuild-freebsd-arm64 "0.14.38" + esbuild-linux-32 "0.14.38" + esbuild-linux-64 "0.14.38" + esbuild-linux-arm "0.14.38" + esbuild-linux-arm64 "0.14.38" + esbuild-linux-mips64le "0.14.38" + esbuild-linux-ppc64le "0.14.38" + esbuild-linux-riscv64 "0.14.38" + esbuild-linux-s390x "0.14.38" + esbuild-netbsd-64 "0.14.38" + esbuild-openbsd-64 "0.14.38" + esbuild-sunos-64 "0.14.38" + esbuild-windows-32 "0.14.38" + esbuild-windows-64 "0.14.38" + esbuild-windows-arm64 "0.14.38" escalade@^3.1.1: version "3.1.1" From a09ceacfd27b9fb986b989fd45e5a509125e5a0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Apr 2022 10:57:22 -0400 Subject: [PATCH 08/14] Bump @types/react-router-dom from 5.3.2 to 5.3.3 (#5266) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index e9c21a19cf..cc11a7ef1c 100644 --- a/package.json +++ b/package.json @@ -312,7 +312,7 @@ "@types/react": "^17.0.43", "@types/react-beautiful-dnd": "^13.1.2", "@types/react-dom": "^17.0.14", - "@types/react-router-dom": "^5.3.2", + "@types/react-router-dom": "^5.3.3", "@types/react-select": "3.1.2", "@types/react-table": "^7.7.9", "@types/react-virtualized-auto-sizer": "^1.0.1", diff --git a/yarn.lock b/yarn.lock index 6ea37e7c20..916f262c6e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1525,10 +1525,10 @@ dependencies: "@types/node" "*" -"@types/history@*", "@types/history@^4.7.8": - version "4.7.8" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" - integrity sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA== +"@types/history@*", "@types/history@^4.7.11", "@types/history@^4.7.8": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== "@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": version "3.3.1" @@ -1803,12 +1803,12 @@ hoist-non-react-statics "^3.3.0" redux "^4.0.0" -"@types/react-router-dom@^5.3.2": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.2.tgz#ebd8e145cf056db5c66eb1dac63c72f52e8542ee" - integrity sha512-ELEYRUie2czuJzaZ5+ziIp9Hhw+juEw8b7C11YNA4QdLCVbQ3qLi2l4aq8XnlqM7V31LZX8dxUuFUCrzHm6sqQ== +"@types/react-router-dom@^5.3.3": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== dependencies: - "@types/history" "*" + "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router" "*" From e4b1fa2f40bff414f8c19a12d080cea0a7a4388a Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 26 Apr 2022 20:18:18 -0700 Subject: [PATCH 09/14] Fix make dev on master (#5282) - Add CI action to validate that future bump PRs don't break dev mode Signed-off-by: Sebastian Malton --- .github/workflows/test.yml | 4 ++++ Makefile | 3 +++ package.json | 2 +- yarn.lock | 8 ++++---- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1bbcb3366e..eb2278097d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -67,6 +67,10 @@ jobs: - run: make test-extensions name: Run In-tree Extension tests + - run: make ci-validate-dev + if: ${{ contains(github.event.pull_request.labels.*.name, 'dependencies') }} + name: Validate dev mode will work + - name: Install integration test dependencies id: minikube uses: medyagh/setup-minikube@5a9a7104d7322fa40424de8855c84685e89cefd7 diff --git a/Makefile b/Makefile index 1435ab5004..6db96fbc2b 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,9 @@ compile-dev: node_modules yarn compile:main --cache yarn compile:renderer --cache +.PHONY: validate-dev +ci-validate-dev: binaries/client build-extensions compile-dev + .PHONY: dev dev: binaries/client build-extensions rm -rf static/build/ diff --git a/package.json b/package.json index cc11a7ef1c..01583e195f 100644 --- a/package.json +++ b/package.json @@ -278,7 +278,7 @@ "@material-ui/core": "^4.12.3", "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.60", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.4", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", "@sentry/types": "^6.19.3", "@testing-library/jest-dom": "^5.16.3", "@testing-library/react": "^12.1.4", diff --git a/yarn.lock b/yarn.lock index 916f262c6e..972b23276a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1003,10 +1003,10 @@ resolved "https://registry.yarnpkg.com/@panva/asn1.js/-/asn1.js-1.0.0.tgz#dd55ae7b8129e02049f009408b97c61ccf9032f6" integrity sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw== -"@pmmmwh/react-refresh-webpack-plugin@^0.5.4": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz#df0d0d855fc527db48aac93c218a0bf4ada41f99" - integrity sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw== +"@pmmmwh/react-refresh-webpack-plugin@^0.5.5": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.5.tgz#e77aac783bd079f548daa0a7f080ab5b5a9741ca" + integrity sha512-RbG7h6TuP6nFFYKJwbcToA1rjC1FyPg25NR2noAZ0vKI+la01KTSRPkuVPE+U88jXv7javx2JHglUcL1MHcshQ== dependencies: ansi-html-community "^0.0.8" common-path-prefix "^3.0.0" From 22d2133ac8b44668f71ab2237816b949b40f37ac Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 27 Apr 2022 12:31:07 +0300 Subject: [PATCH 10/14] Upgrade ReactSelect to latest version (#5277) * - maintenance: upgrade react-select to latest version (5+) - fix: props.styles was ignored and didn't passed to original react-select component from abstraction wrapper --- package.json | 2 +- .../closing-preferences.test.tsx.snap | 472 ++++++++++-------- ...on-to-application-preferences.test.ts.snap | 236 +++++---- ...igation-to-editor-preferences.test.ts.snap | 354 +++++++------ ...tension-specific-preferences.test.tsx.snap | 472 ++++++++++-------- ...ion-to-kubernetes-preferences.test.ts.snap | 357 +++++++------ ...vigation-to-proxy-preferences.test.ts.snap | 236 +++++---- ...ion-to-telemetry-preferences.test.tsx.snap | 472 ++++++++++-------- ...ation-to-terminal-preferences.test.ts.snap | 295 ++++++----- ...gation-using-application-menu.test.ts.snap | 236 +++++---- .../+namespaces/namespace-select-filter.tsx | 5 +- .../+preferences/kubectl-binaries.tsx | 2 +- src/renderer/components/select/select.tsx | 43 +- yarn.lock | 224 +++++---- 14 files changed, 1959 insertions(+), 1447 deletions(-) diff --git a/package.json b/package.json index 01583e195f..6be5a730ab 100644 --- a/package.json +++ b/package.json @@ -382,7 +382,7 @@ "react-refresh": "^0.12.0", "react-refresh-typescript": "^2.0.4", "react-router-dom": "^5.3.1", - "react-select": "3.2.0", + "react-select": "^5.3.0", "react-select-event": "^5.3.0", "react-table": "^7.7.0", "react-window": "^1.8.6", diff --git a/src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap b/src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap index ec4585cb42..d0f2586641 100644 --- a/src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap +++ b/src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap @@ -120,42 +120,51 @@ exports[`preferences - closing-preferences given accessing preferences directly
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Select...
-
+ +
Download mirror for kubectl
-