diff --git a/.depcheckrc b/.depcheckrc index 1e9f93e3f..b92d86e5c 100644 --- a/.depcheckrc +++ b/.depcheckrc @@ -5,7 +5,6 @@ ignores: - "@types/jest" - "buffer" - "eslint-config-mongodb-js" - - "electron" - "mocha-junit-reporter" - "mocha-multi" - "mongodb-client-encryption" diff --git a/.github/workflows/actions/test-and-build/action.yaml b/.github/workflows/actions/test-and-build/action.yaml index ad06d2a54..07f558515 100644 --- a/.github/workflows/actions/test-and-build/action.yaml +++ b/.github/workflows/actions/test-and-build/action.yaml @@ -76,7 +76,7 @@ runs: - name: Build .vsix env: - NODE_OPTIONS: "--require ./scripts/no-npm-list-fail.js --max_old_space_size=4096" + NODE_OPTIONS: "--require ./scripts/no-npm-list-fail.js" # NOTE: --githubBranch is "The GitHub branch used to infer relative links in README.md." run: | npx vsce package --githubBranch main diff --git a/package-lock.json b/package-lock.json index c95435af8..00b800f91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,13 +11,9 @@ "dependencies": { "@babel/parser": "^7.22.6", "@babel/traverse": "^7.23.2", - "@fortawesome/fontawesome-svg-core": "^6.4.0", - "@fortawesome/free-solid-svg-icons": "^6.4.0", - "@fortawesome/react-fontawesome": "^0.2.0", - "@iconify-icons/codicon": "^1.2.25", - "@iconify/react": "^1.1.4", "@mongodb-js/compass-components": "^1.20.0", "@mongodb-js/connection-form": "^1.20.4", + "@mongodb-js/connection-info": "^0.1.1", "@mongodb-js/mongodb-constants": "^0.7.1", "@mongosh/browser-runtime-electron": "^2.0.2", "@mongosh/i18n": "^2.0.2", @@ -26,7 +22,6 @@ "@segment/analytics-node": "^1.1.4", "bson": "^6.1.0", "bson-transpilers": "^2.0.4", - "classnames": "^2.3.2", "debug": "^4.3.4", "dotenv": "^16.3.1", "lodash": "^4.17.21", @@ -35,16 +30,13 @@ "mongodb-build-info": "^1.6.2", "mongodb-cloud-info": "^2.1.0", "mongodb-connection-string-url": "^2.6.0", - "mongodb-data-service": "^22.17.1", - "mongodb-data-service-legacy": "npm:mongodb-data-service@22.8.0", + "mongodb-data-service": "^22.17.0", "mongodb-log-writer": "^1.4.0", "mongodb-query-parser": "^3.1.3", "mongodb-schema": "^11.2.2", "numeral": "^2.0.6", "react": "^17.0.2", "react-dom": "^17.0.2", - "react-redux": "^8.1.1", - "redux": "^4.2.1", "resolve-mongodb-srv": "^1.1.2", "ts-log": "^2.2.5", "uuid": "^8.3.2", @@ -63,7 +55,6 @@ "@types/babel__traverse": "^7.20.1", "@types/chai": "^4.3.5", "@types/debug": "^4.1.8", - "@types/enzyme": "^3.10.13", "@types/glob": "^7.2.0", "@types/jest": "^26.0.24", "@types/micromatch": "^4.0.2", @@ -89,7 +80,6 @@ "css-loader": "^6.8.1", "depcheck": "^1.4.3", "duplicate-package-checker-webpack-plugin": "^3.0.0", - "electron": "^23.3.9", "enzyme": "^3.11.0", "eslint": "^8.44.0", "eslint-config-mongodb-js": "^5.0.3", @@ -1752,7 +1742,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", - "devOptional": true, + "optional": true, "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -1773,7 +1763,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "devOptional": true, + "optional": true, "bin": { "semver": "bin/semver.js" } @@ -1991,51 +1981,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", - "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", - "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", - "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/react-fontawesome": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", - "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", - "dependencies": { - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1 || ~6", - "react": ">=16.3" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", @@ -2069,24 +2014,6 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "node_modules/@iconify-icons/codicon": { - "version": "1.2.25", - "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.25.tgz", - "integrity": "sha512-LSrQgwsTUsdF0HI/xlicnBQp+BpkddRDo9PtPdkEbH2gi4kkMeK3C5JLoc4P0+x+pH13Xz3FmOrE++9vvXOGag==", - "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify/react": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@iconify/react/-/react-1.1.4.tgz", - "integrity": "sha512-oxq8IMOq8q3nKGiDHbQPC8FcFuBsKve68JWBo140d5LRnj0bv5TB/FE/y01ZSvEZ7PlI2HIrnb2qivPN8kTDgw==" - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==" - }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -4749,38 +4676,28 @@ "semver": "^7.5.4" } }, - "node_modules/@mongodb-js/compass-logging": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-logging/-/compass-logging-1.1.6.tgz", - "integrity": "sha512-RR7bykVNxt8tTcK4C/XJzjhpl/+RzlkILMcxpZ8k4nMtX+fe5LvpRBMGaJPwQsZVYJno7Fare8gJUaeVxU0SGg==", - "dependencies": { - "debug": "^4.2.0", - "is-electron-renderer": "^2.0.1", - "mongodb-log-writer": "^1.2.0" - }, - "peerDependencies": { - "hadron-ipc": "^3.1.3" - } - }, "node_modules/@mongodb-js/compass-utils": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.3.5.tgz", - "integrity": "sha512-PDipyACjNaAdRsJ/OtnAEJQeDvEsaN9ZWLdzcI08bQbR0fG4Rxhb/+DP5xQBOKcyomkB+5VfqcozvPBObYM1QQ==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.5.9.tgz", + "integrity": "sha512-7l9yemfxP3uQRlRESyhjDcoAKC+11MLYRuZ0iSLjcNZI8GLzCcNqOOd2QBqNMy9vpOprh4Feo8gPa+OoiaEzoA==", "optionalDependencies": { - "@electron/remote": "^2.0.11", - "electron": "^24.8.2" + "@electron/remote": "^2.1.1", + "electron": "^28.1.0" } }, "node_modules/@mongodb-js/compass-utils/node_modules/@types/node": { - "version": "18.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", - "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==", - "optional": true + "version": "18.19.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.4.tgz", + "integrity": "sha512-xNzlUhzoHotIsnFoXmJB+yWmBvFZgKCI9TtPIEdYIMM1KWfwuY8zh7wvc1u1OAXlC7dlf6mZVx/s+Y5KfFz19A==", + "optional": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@mongodb-js/compass-utils/node_modules/electron": { - "version": "24.8.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-24.8.2.tgz", - "integrity": "sha512-wzJgxwMz/xxuQTituZw4Uoa5M5r8PfC8abkMVqGKztPgnzYvjGz+zoQcRwuXwtKBXyHf2yee7yXTDLbenoM3kA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-28.1.1.tgz", + "integrity": "sha512-HJSbGHpRl46jWCp5G4OH57KSm2F5u15tB10ixD8iFiz9dhwojqlSQTRAcjSwvga+Vqs1jv7iqwQRrolXP4DgOA==", "hasInstallScript": true, "optional": true, "dependencies": { @@ -4845,6 +4762,16 @@ "bson": "^5 || ^6" } }, + "node_modules/@mongodb-js/connection-info": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/connection-info/-/connection-info-0.1.1.tgz", + "integrity": "sha512-ULZ/N3KVKfuAhKV1JfDi/okIkJ3pEarvVUZTgatkVRqiI54uG3B02RLHfg6iKgeJGO9+HhSJNCXk3x5PiLAs/w==", + "dependencies": { + "bson": "^6.2.0", + "lodash": "^4.17.21", + "mongodb-connection-string-url": "^2.6.0" + } + }, "node_modules/@mongodb-js/devtools-connect": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-2.4.2.tgz", @@ -6151,15 +6078,6 @@ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==" }, - "node_modules/@types/cheerio": { - "version": "0.22.31", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.31.tgz", - "integrity": "sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -6169,27 +6087,6 @@ "@types/ms": "*" } }, - "node_modules/@types/enzyme": { - "version": "3.10.13", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.13.tgz", - "integrity": "sha512-FCtoUhmFsud0Yx9fmZk179GkdZ4U9B0GFte64/Md+W/agx0L5SxsIIbhLBOxIb9y2UfBA4WQnaG1Od/UsUQs9Q==", - "dev": true, - "dependencies": { - "@types/cheerio": "*", - "@types/react": "^16" - } - }, - "node_modules/@types/enzyme/node_modules/@types/react": { - "version": "16.14.43", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.43.tgz", - "integrity": "sha512-7zdjv7jvoLLQg1tTvpQsm+hyNUMT2mPlNV1+d0I8fbGhkJl82spopMyBlu4wb1dviZAxpGdk5eHu/muacknnfw==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, "node_modules/@types/eslint": { "version": "8.44.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", @@ -6249,15 +6146,6 @@ "highlight.js": "*" } }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, "node_modules/@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", @@ -6459,11 +6347,6 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "node_modules/@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" - }, "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -6509,7 +6392,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, "optional": true, "dependencies": { "@types/node": "*" @@ -7260,6 +7142,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7280,123 +7163,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ampersand-class-extend": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ampersand-class-extend/-/ampersand-class-extend-2.0.0.tgz", - "integrity": "sha512-i8hQvA4vZz9UfQAi0A4oBASYOZzlYgjFVkw0K1xpeKNSvq+KYkFOqJKkNvHCbbuKUNJnFk3kECSKPDAJ6ocEOg==", - "dependencies": { - "lodash": "^4.11.1" - } - }, - "node_modules/ampersand-collection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-collection/-/ampersand-collection-2.0.2.tgz", - "integrity": "sha512-IjDa4HTL/tdQDDL0SGyWk4AHD02iNtUSLRWkAsJ2biPvapljW9HNgIEIdbPnnR+7Gb9BJkjesaLNjVZfAMzeuA==", - "dependencies": { - "ampersand-class-extend": "^2.0.0", - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.2", - "lodash": "^4.11.1" - } - }, - "node_modules/ampersand-collection-lodash-mixin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ampersand-collection-lodash-mixin/-/ampersand-collection-lodash-mixin-4.0.0.tgz", - "integrity": "sha512-tlMUVv3gflykaThrGg6uTkBVHLF8X3T0ZJkAyD1yqD251BkORzfCJsp6zBdJtLSmXusiTWxhkWM0nzyGFI0xcQ==", - "dependencies": { - "ampersand-version": "^1.0.0", - "lodash": "^4.6.1" - } - }, - "node_modules/ampersand-collection-rest-mixin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ampersand-collection-rest-mixin/-/ampersand-collection-rest-mixin-6.0.0.tgz", - "integrity": "sha512-Pgh3wJhqffGhzoxjtoy1HfjxDSxeb7jP8IUcFIZNUrIXaVpFqH1oy1rDU4dLwB4zylb0w9UqRmH4q0n+tCNnXQ==", - "dependencies": { - "ampersand-sync": "^5.0.0", - "ampersand-version": "^1.0.2", - "lodash": "^4.11.1" - } - }, - "node_modules/ampersand-events": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-events/-/ampersand-events-2.0.2.tgz", - "integrity": "sha512-pPnVEJviRxXi9YhZA9j3GwGGBTlDLi+YIoBvrpKXgce+CO1nMlZU2aOV8OJogNuR2YPbptAUHNz7SKX+MvLj8A==", - "dependencies": { - "ampersand-version": "^1.0.2", - "lodash": "^4.6.1" - } - }, - "node_modules/ampersand-model": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ampersand-model/-/ampersand-model-8.0.1.tgz", - "integrity": "sha512-WyrqX1lwseHsYehKgnZvTx4EAq/NAOHC8DbodBm6fZPc4FsKm0ZgaVEe6grGXmkZb9nArkAxAF5I2NTIbHes4A==", - "dependencies": { - "ampersand-state": "^5.0.1", - "ampersand-sync": "^5.0.0", - "ampersand-version": "^1.0.2", - "lodash": "^4.11.1" - } - }, - "node_modules/ampersand-rest-collection": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ampersand-rest-collection/-/ampersand-rest-collection-6.0.0.tgz", - "integrity": "sha512-D0wzeFCiBz5GT970cemSUTFgc3ei1o74o4BfobZmnDVVvxirGwa1ryJiV4YqW4tI3pOI5d+07UuIDUsg566G1A==", - "dependencies": { - "ampersand-collection": "^2.0.0", - "ampersand-collection-lodash-mixin": "^4.0.0", - "ampersand-collection-rest-mixin": "^6.0.0", - "ampersand-version": "^1.0.2" - } - }, - "node_modules/ampersand-state": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/ampersand-state/-/ampersand-state-5.0.3.tgz", - "integrity": "sha512-sr904K5zvw6mkGjFHhTcfBIdpoJ6mn/HrFg7OleRmBpw3apLb3Z0gVrgRTb7kK1wOLI34vs4S+IXqNHUeqWCzw==", - "dependencies": { - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.0", - "array-next": "~0.0.1", - "key-tree-store": "^1.3.0", - "lodash": "^4.12.0" - } - }, - "node_modules/ampersand-sync": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ampersand-sync/-/ampersand-sync-5.1.0.tgz", - "integrity": "sha512-rUwhNCI8LEeQEQoRmXWmMDNDBp8tq3RDWzOSjxAHU6w9jmqDm8+cJQMrLItKb6JdTyMzAOwMAzTKnkmMLS51EQ==", - "dependencies": { - "ampersand-version": "^1.0.0", - "lodash": "^4.11.1", - "media-type": "0.3.0", - "qs": "^6.1.0", - "request": "^2.55.0", - "xhr": "^2.0.5" - } - }, - "node_modules/ampersand-version": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ampersand-version/-/ampersand-version-1.0.2.tgz", - "integrity": "sha512-FVVLY7Pghtgc8pQl0rF3A3+OS/CZ+/ILLMIYIaO1cA9v5SRkainqUMfSot3fu32svuThIsYK3q9iCsH9W5+mWQ==", - "dependencies": { - "find-root": "^0.1.1", - "through2": "^0.6.3" - } - }, - "node_modules/ampersand-version/node_modules/find-root": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-0.1.2.tgz", - "integrity": "sha512-GyDxVgA61TZcrgDJPqOqGBpi80Uf2yIstubgizi7AjC9yPdRrqBR+Y0MvK4kXnYlaoz3d+SGxDHMYVkwI/yd2w==" - }, - "node_modules/ampersand-version/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -7568,11 +7334,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-next": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-next/-/array-next-0.0.1.tgz", - "integrity": "sha512-sBOC/Iaz2hCcYi2XlyRfyZCRUxamlE5NJXEFjE9BTx23HALnWAFsPjGtfrAclt9o3G/38Het2yyeyOd3CEY7lg==" - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -7694,14 +7455,6 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -7737,7 +7490,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/atob": { "version": "2.1.2", @@ -7800,14 +7554,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "engines": { - "node": "*" - } - }, "node_modules/aws4": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", @@ -8076,51 +7822,11 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "devOptional": true, "dependencies": { "file-uri-to-path": "1.0.0" } }, - "node_modules/bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bl/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/bl/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", @@ -8173,7 +7879,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, "optional": true }, "node_modules/bowser": { @@ -8643,11 +8348,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, "node_modules/chai": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", @@ -8807,7 +8507,8 @@ "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "devOptional": true }, "node_modules/chrome-trace-event": { "version": "1.0.3", @@ -8938,11 +8639,6 @@ "node": ">=0.10.0" } }, - "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, "node_modules/cli": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", @@ -9146,6 +8842,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -9549,17 +9246,6 @@ "node": ">=0.4.0" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -9645,6 +9331,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "devOptional": true, "dependencies": { "mimic-response": "^3.1.0" }, @@ -9659,6 +9346,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "devOptional": true, "engines": { "node": ">=10" }, @@ -9867,6 +9555,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "devOptional": true, "engines": { "node": ">=4.0.0" } @@ -10070,7 +9759,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, + "devOptional": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -10099,6 +9788,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -10108,14 +9798,6 @@ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/depcheck": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.3.tgz", @@ -10214,6 +9896,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "devOptional": true, "engines": { "node": ">=8" } @@ -10231,7 +9914,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, "optional": true }, "node_modules/diff": { @@ -10328,11 +10010,6 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -10552,15 +10229,6 @@ "node": ">=4" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -10577,35 +10245,11 @@ "bson": "^4.6.3 || ^5.0.0" } }, - "node_modules/electron": { - "version": "23.3.13", - "resolved": "https://registry.npmjs.org/electron/-/electron-23.3.13.tgz", - "integrity": "sha512-BaXtHEb+KYKLouUXlUVDa/lj9pj4F5kiE0kwFdJV84Y2EU7euIDgPthfKtchhr5MVHmjtavRMIV/zAwEiSQ9rQ==", - "devOptional": true, - "hasInstallScript": true, - "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^16.11.26", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 12.20.55" - } - }, "node_modules/electron-to-chromium": { "version": "1.4.580", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.580.tgz", "integrity": "sha512-T5q3pjQon853xxxHUq3ZP68ZpvJHuSMY2+BZaW3QzjS4HvNuvsMmZ/+lU+nCrftre1jFZ+OSlExynXWBihnXzw==" }, - "node_modules/electron/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", - "devOptional": true - }, "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", @@ -10675,6 +10319,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "devOptional": true, "dependencies": { "once": "^1.4.0" } @@ -10708,7 +10353,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "devOptional": true, + "optional": true, "engines": { "node": ">=6" } @@ -10931,7 +10576,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, "optional": true }, "node_modules/escalade": { @@ -12111,6 +11755,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "devOptional": true, "engines": { "node": ">=6" } @@ -12186,11 +11831,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -12286,7 +11926,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "devOptional": true, + "optional": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -12306,7 +11946,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "devOptional": true, + "optional": true, "dependencies": { "pump": "^3.0.0" }, @@ -12317,14 +11957,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] - }, "node_modules/eyes": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", @@ -12341,7 +11973,8 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-glob": { "version": "3.3.0", @@ -12374,7 +12007,8 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -12475,7 +12109,8 @@ "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "devOptional": true }, "node_modules/fill-range": { "version": "7.0.1", @@ -12603,14 +12238,6 @@ "node": ">=0.10.0" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" - } - }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", @@ -12786,13 +12413,14 @@ "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "devOptional": true }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "devOptional": true, + "optional": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -13225,18 +12853,11 @@ "node": ">=0.10.0" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "devOptional": true }, "node_modules/glob": { "version": "7.2.3", @@ -13275,20 +12896,10 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, "node_modules/global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -13314,7 +12925,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, + "devOptional": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -13434,17 +13045,6 @@ "lodash": "^4.17.21" } }, - "node_modules/hadron-ipc": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/hadron-ipc/-/hadron-ipc-3.1.5.tgz", - "integrity": "sha512-zY+ldrsYw5Gz/5MVTnq7jpRoPFD21ucUBYa+inBlqTwuGviS/QgmCooIqHpCQ2FPOzlQGfUuJ4em7FuJvmcZog==", - "dependencies": { - "debug": "^4.2.0", - "is-electron-renderer": "^2.0.1", - "is-promise": "^2.1.0", - "lodash": "^4.17.21" - } - }, "node_modules/hadron-type-checker": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/hadron-type-checker/-/hadron-type-checker-7.1.1.tgz", @@ -13454,27 +13054,6 @@ "lodash": "^4.17.21" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -13714,19 +13293,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -13857,20 +13423,6 @@ "node": ">= 6" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -13972,7 +13524,8 @@ "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true }, "node_modules/immutable": { "version": "4.3.0", @@ -14018,6 +13571,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -14039,7 +13593,8 @@ "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "devOptional": true }, "node_modules/inquirer": { "version": "6.5.2", @@ -14333,7 +13888,8 @@ "node_modules/ipv6-normalize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ipv6-normalize/-/ipv6-normalize-1.0.1.tgz", - "integrity": "sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==" + "integrity": "sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==", + "optional": true }, "node_modules/is-accessor-descriptor": { "version": "1.0.0", @@ -14553,11 +14109,6 @@ "node": ">=8" } }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -14696,11 +14247,6 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -14805,7 +14351,8 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -15904,11 +15451,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -16003,15 +15545,11 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -16022,7 +15560,8 @@ "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "optional": true }, "node_modules/json5": { "version": "2.2.3", @@ -16045,25 +15584,11 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "devOptional": true, + "optional": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", @@ -16148,16 +15673,13 @@ "node": ">=12.9.0" } }, - "node_modules/key-tree-store": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/key-tree-store/-/key-tree-store-1.3.0.tgz", - "integrity": "sha512-qXk+lR+LXvGos3wqMxIMWweKDgCx8ZKWM6BEPm7iZkOKug5ggi66vUt+3vbtKJLBrAyOxQ4S8JRwK++Q4XZRmw==" - }, "node_modules/keytar": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, "hasInstallScript": true, + "optional": true, "dependencies": { "node-addon-api": "^4.3.0", "prebuild-install": "^7.0.1" @@ -16386,22 +15908,6 @@ "json5": "lib/cli.js" } }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "dependencies": { - "lie": "3.1.1" - } - }, - "node_modules/localforage/node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "dependencies": { - "immediate": "~3.0.5" - } - }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -16666,7 +16172,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -16703,14 +16208,6 @@ "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, - "node_modules/media-type": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-type/-/media-type-0.3.0.tgz", - "integrity": "sha512-V1FzwVfjln5IpxuqgA/9SPONtiEqnr8kV0UkXTHIB9PIIKlQI5TQ6ZGRyml3jaxSeY6i3Rco7/iuphOubmNHdQ==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -16855,14 +16352,6 @@ "node": ">=4" } }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -16962,7 +16451,8 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "devOptional": true }, "node_modules/mocha": { "version": "10.2.0", @@ -17475,35 +16965,6 @@ "node": ">=6" } }, - "node_modules/mongodb-connection-model": { - "version": "22.4.1", - "resolved": "https://registry.npmjs.org/mongodb-connection-model/-/mongodb-connection-model-22.4.1.tgz", - "integrity": "sha512-qHDE40p3be3LrTeKAbQKxJbhqJatJjfhzZ8j/mMvNuz2Yh+WO8h4u0w6k/EI5ykmu/VvUkEUVzQOzHD2h+gpuQ==", - "dependencies": { - "@mongodb-js/compass-utils": "^0.3.1", - "ampersand-model": "^8.0.1", - "ampersand-rest-collection": "^6.0.0", - "lodash": "^4.17.21", - "mongodb-connection-string-url": "^2.6.0", - "mongodb3": "npm:mongodb@^3.6.3", - "os-dns-native": "^1.2.0", - "raf": "^3.4.1", - "resolve-mongodb-srv": "^1.1.2", - "storage-mixin": "^5.1.5" - }, - "peerDependencies": { - "mongodb": "^5.5.0" - } - }, - "node_modules/mongodb-connection-model/node_modules/@mongodb-js/compass-utils": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.3.4.tgz", - "integrity": "sha512-zGrjLHk4C/fQlQ6RD+2LKoOzujhQSZEpZvGz3jLnhsHtI4jnNVnxQhl50mhQw6TjKt2B7sKYZe0EOo9F9FxoXw==", - "optionalDependencies": { - "@electron/remote": "^2.0.10", - "electron": "^23.3.12" - } - }, "node_modules/mongodb-connection-string-url": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", @@ -17569,74 +17030,6 @@ "react": "^17.0.2" } }, - "node_modules/mongodb-data-service-legacy": { - "name": "mongodb-data-service", - "version": "22.8.0", - "resolved": "https://registry.npmjs.org/mongodb-data-service/-/mongodb-data-service-22.8.0.tgz", - "integrity": "sha512-3hbGRlFyHD8WrsfFuas3X5PH6Wlk5WYuYxOttC6GFx5tvSLVjM99lZWzYZ5tax/2zFAnfXODXsz3SrCupfUjNA==", - "dependencies": { - "@mongodb-js/compass-logging": "^1.1.6", - "@mongodb-js/compass-utils": "^0.3.1", - "@mongodb-js/devtools-connect": "^2.1.0", - "@mongodb-js/oidc-plugin": "^0.2.0", - "@mongodb-js/ssh-tunnel": "^2.0.6", - "lodash": "^4.17.21", - "mongodb-build-info": "^1.5.0", - "mongodb-connection-model": "^22.4.1", - "mongodb-connection-string-url": "^2.6.0", - "mongodb-ns": "^2.4.0", - "uuid": "^8.3.2" - }, - "optionalDependencies": { - "mongodb-client-encryption": "^2.8.0" - }, - "peerDependencies": { - "mongodb": "^5.5.0" - } - }, - "node_modules/mongodb-data-service-legacy/node_modules/@mongodb-js/oidc-plugin": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-plugin/-/oidc-plugin-0.2.4.tgz", - "integrity": "sha512-rh9zed1EOy1hbB7U+C/Jt74jtGJLa9wohX+xChKzbAtHRyIR7zj1jLWV9J/l2IuhBSPvnTw/T8ta9clbNT0JTg==", - "dependencies": { - "abort-controller": "^3.0.0", - "express": "^4.18.2", - "open": "^9.1.0", - "openid-client": "^5.4.0" - }, - "engines": { - "node": ">= 14.18.0" - } - }, - "node_modules/mongodb-data-service-legacy/node_modules/mongodb-client-encryption": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.9.0.tgz", - "integrity": "sha512-OGMfTnS+JJ49ksWdExQ5048ynaQJLhPjbOi3i44PbU2sdufKH0Z4YZqn1pvd/eQ4WgLfbmSws3u9kAiFNFxpOg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.1.1", - "socks": "^2.7.1" - }, - "engines": { - "node": ">=12.9.0" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.186.0", - "gcp-metadata": "^5.2.0", - "mongodb": ">=3.4.0" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "gcp-metadata": { - "optional": true - } - } - }, "node_modules/mongodb-data-service/node_modules/@mongodb-js/compass-logging": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/@mongodb-js/compass-logging/-/compass-logging-1.2.9.tgz", @@ -17651,42 +17044,6 @@ "hadron-ipc": "^3.2.7" } }, - "node_modules/mongodb-data-service/node_modules/@mongodb-js/compass-utils": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.5.8.tgz", - "integrity": "sha512-rfpETmq5cxst+b6RlKQgT0KxdAI/V8zT2/929q/L8gULjGaZ9smW1WlAmD+ZeDv81Euqcf8S8C1leixVbkhVSw==", - "optionalDependencies": { - "@electron/remote": "^2.1.1", - "electron": "^25.9.8" - } - }, - "node_modules/mongodb-data-service/node_modules/@types/node": { - "version": "18.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", - "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", - "optional": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/mongodb-data-service/node_modules/electron": { - "version": "25.9.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.8.tgz", - "integrity": "sha512-PGgp6PH46QVENHuAHc2NT1Su8Q1qov7qIl2jI5tsDpTibwV2zD8539AeWBQySeBU4dhbj9onIl7+1bXQ0wefBg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^18.11.18", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 12.20.55" - } - }, "node_modules/mongodb-download-url": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.4.1.tgz", @@ -17980,53 +17337,6 @@ "node": ">=12" } }, - "node_modules/mongodb3": { - "name": "mongodb", - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz", - "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==", - "dependencies": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.1.8", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4" - }, - "optionalDependencies": { - "saslprep": "^1.0.0" - }, - "peerDependenciesMeta": { - "aws4": { - "optional": true - }, - "bson-ext": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "mongodb-extjson": { - "optional": true - }, - "snappy": { - "optional": true - } - } - }, - "node_modules/mongodb3/node_modules/bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", - "engines": { - "node": ">=0.6.19" - } - }, "node_modules/moo": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", @@ -18138,7 +17448,8 @@ "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "devOptional": true }, "node_modules/native-request": { "version": "1.1.0", @@ -18233,6 +17544,7 @@ "version": "3.45.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", + "devOptional": true, "dependencies": { "semver": "^7.3.5" }, @@ -18249,7 +17561,8 @@ "node_modules/node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "devOptional": true }, "node_modules/node-fetch": { "version": "2.6.12", @@ -18602,14 +17915,6 @@ "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -18739,7 +18044,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.4" } @@ -18944,17 +18249,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/optional-require": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", - "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", - "dependencies": { - "require-at": "^1.0.6" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -19058,6 +18352,7 @@ "resolved": "https://registry.npmjs.org/os-dns-native/-/os-dns-native-1.2.0.tgz", "integrity": "sha512-pnq7NYCsuZixeIOFjerXIXXFNpqJyDqiIHTu9TzefKtu+8ReUROA9OB2VQE+qk3uYhkXtxe1tf8b4dqPINtStw==", "hasInstallScript": true, + "optional": true, "dependencies": { "bindings": "^1.5.0", "debug": "^4.3.3", @@ -19190,11 +18485,6 @@ "safe-buffer": "^5.1.1" } }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -19370,7 +18660,8 @@ "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -19752,6 +19043,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "devOptional": true, "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -19815,6 +19107,7 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, "engines": { "node": ">= 0.6.0" } @@ -19909,7 +19202,8 @@ "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true }, "node_modules/public-encrypt": { "version": "4.0.3", @@ -19935,6 +19229,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -20014,6 +19309,7 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, "dependencies": { "performance-now": "^2.1.0" } @@ -20088,6 +19384,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "devOptional": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -20102,6 +19399,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -20169,49 +19467,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "node_modules/react-redux": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.1.tgz", - "integrity": "sha512-5W0QaKtEhj+3bC0Nj0NkqkhIv8gLADH/2kYFMTHxCVqQILiWzLv6MaLuV5wJU3BQEdHKzTfcvPN0WMS6SC1oyA==", - "dependencies": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" - }, - "peerDependencies": { - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4 || ^5.0.0-beta.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - }, - "redux": { - "optional": true - } - } - }, - "node_modules/react-redux/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "node_modules/react-shallow-renderer": { "version": "16.15.0", "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", @@ -20403,14 +19658,6 @@ "node": ">= 10.13.0" } }, - "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -20479,87 +19726,6 @@ "node": ">=0.10" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", - "engines": { - "node": ">=4" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -20763,7 +19929,6 @@ "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -20781,7 +19946,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, "optional": true }, "node_modules/rst-selector-parser": { @@ -21161,18 +20325,6 @@ "node": ">=0.10.0" } }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/sass": { "version": "1.63.6", "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz", @@ -21290,7 +20442,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true + "devOptional": true }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", @@ -21348,7 +20500,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -21364,7 +20515,6 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, "optional": true, "engines": { "node": ">=10" @@ -21558,6 +20708,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "devOptional": true, "funding": [ { "type": "github", @@ -21577,6 +20728,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "devOptional": true, "funding": [ { "type": "github", @@ -22192,30 +21344,6 @@ "nan": "^2.17.0" } }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -22379,38 +21507,6 @@ "node": ">= 0.4" } }, - "node_modules/storage-mixin": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/storage-mixin/-/storage-mixin-5.1.5.tgz", - "integrity": "sha512-KgOMMODS/dTEsgwU1qHpa15NN5UudLBR9ozqZ66OZSkXcGrOfC4p6oX1WR46wxn4kDkLLv/7V62L6R8JMNURNA==", - "dependencies": { - "@mongodb-js/compass-logging": "^1.1.6", - "ampersand-model": "^8.0.1", - "ampersand-rest-collection": "^6.0.0", - "async": "^3.2.2", - "debug": "^4.2.0", - "hadron-ipc": "^3.1.3", - "keytar": "^7.9.0", - "localforage": "^1.7.3", - "lodash": "^4.17.21", - "uuid": "^3.3.3", - "write-file-atomic": "^3.0.1" - } - }, - "node_modules/storage-mixin/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/storage-mixin/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", @@ -22682,7 +21778,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "devOptional": true, + "optional": true, "dependencies": { "debug": "^4.1.0" }, @@ -22841,6 +21937,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "devOptional": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -22852,6 +21949,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "devOptional": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -22862,6 +21960,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "devOptional": true, "funding": [ { "type": "github", @@ -22885,6 +21984,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "devOptional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -22898,6 +21998,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "devOptional": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -22906,6 +22007,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "devOptional": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -23491,6 +22593,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "devOptional": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -23583,6 +22686,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } @@ -23695,7 +22799,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "devOptional": true, + "optional": true, "engines": { "node": ">= 4.0.0" } @@ -23803,6 +22907,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -23839,14 +22944,6 @@ "node": ">=0.10.0" } }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -23914,24 +23011,6 @@ "node": ">= 0.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, "node_modules/vscode-jsonrpc": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", @@ -24456,6 +23535,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -24496,17 +23576,6 @@ } } }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", @@ -24551,6 +23620,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, "engines": { "node": ">=0.4" } @@ -26018,7 +25088,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", - "devOptional": true, + "optional": true, "requires": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -26034,7 +25104,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "devOptional": true + "optional": true } } }, @@ -26209,35 +25279,6 @@ "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", "dev": true }, - "@fortawesome/fontawesome-common-types": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz", - "integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==" - }, - "@fortawesome/fontawesome-svg-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz", - "integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.4.0" - } - }, - "@fortawesome/free-solid-svg-icons": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz", - "integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==", - "requires": { - "@fortawesome/fontawesome-common-types": "6.4.0" - } - }, - "@fortawesome/react-fontawesome": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", - "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", - "requires": { - "prop-types": "^15.8.1" - } - }, "@humanwhocodes/config-array": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", @@ -26261,24 +25302,6 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "@iconify-icons/codicon": { - "version": "1.2.25", - "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.25.tgz", - "integrity": "sha512-LSrQgwsTUsdF0HI/xlicnBQp+BpkddRDo9PtPdkEbH2gi4kkMeK3C5JLoc4P0+x+pH13Xz3FmOrE++9vvXOGag==", - "requires": { - "@iconify/types": "*" - } - }, - "@iconify/react": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@iconify/react/-/react-1.1.4.tgz", - "integrity": "sha512-oxq8IMOq8q3nKGiDHbQPC8FcFuBsKve68JWBo140d5LRnj0bv5TB/FE/y01ZSvEZ7PlI2HIrnb2qivPN8kTDgw==" - }, - "@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==" - }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -28668,35 +27691,28 @@ } } }, - "@mongodb-js/compass-logging": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-logging/-/compass-logging-1.1.6.tgz", - "integrity": "sha512-RR7bykVNxt8tTcK4C/XJzjhpl/+RzlkILMcxpZ8k4nMtX+fe5LvpRBMGaJPwQsZVYJno7Fare8gJUaeVxU0SGg==", - "requires": { - "debug": "^4.2.0", - "is-electron-renderer": "^2.0.1", - "mongodb-log-writer": "^1.2.0" - } - }, "@mongodb-js/compass-utils": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.3.5.tgz", - "integrity": "sha512-PDipyACjNaAdRsJ/OtnAEJQeDvEsaN9ZWLdzcI08bQbR0fG4Rxhb/+DP5xQBOKcyomkB+5VfqcozvPBObYM1QQ==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.5.9.tgz", + "integrity": "sha512-7l9yemfxP3uQRlRESyhjDcoAKC+11MLYRuZ0iSLjcNZI8GLzCcNqOOd2QBqNMy9vpOprh4Feo8gPa+OoiaEzoA==", "requires": { - "@electron/remote": "^2.0.11", - "electron": "^24.8.2" + "@electron/remote": "^2.1.1", + "electron": "^28.1.0" }, "dependencies": { "@types/node": { - "version": "18.17.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz", - "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==", - "optional": true + "version": "18.19.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.4.tgz", + "integrity": "sha512-xNzlUhzoHotIsnFoXmJB+yWmBvFZgKCI9TtPIEdYIMM1KWfwuY8zh7wvc1u1OAXlC7dlf6mZVx/s+Y5KfFz19A==", + "optional": true, + "requires": { + "undici-types": "~5.26.4" + } }, "electron": { - "version": "24.8.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-24.8.2.tgz", - "integrity": "sha512-wzJgxwMz/xxuQTituZw4Uoa5M5r8PfC8abkMVqGKztPgnzYvjGz+zoQcRwuXwtKBXyHf2yee7yXTDLbenoM3kA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-28.1.1.tgz", + "integrity": "sha512-HJSbGHpRl46jWCp5G4OH57KSm2F5u15tB10ixD8iFiz9dhwojqlSQTRAcjSwvga+Vqs1jv7iqwQRrolXP4DgOA==", "optional": true, "requires": { "@electron/get": "^2.0.0", @@ -28741,6 +27757,16 @@ } } }, + "@mongodb-js/connection-info": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/connection-info/-/connection-info-0.1.1.tgz", + "integrity": "sha512-ULZ/N3KVKfuAhKV1JfDi/okIkJ3pEarvVUZTgatkVRqiI54uG3B02RLHfg6iKgeJGO9+HhSJNCXk3x5PiLAs/w==", + "requires": { + "bson": "^6.2.0", + "lodash": "^4.17.21", + "mongodb-connection-string-url": "^2.6.0" + } + }, "@mongodb-js/devtools-connect": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/@mongodb-js/devtools-connect/-/devtools-connect-2.4.2.tgz", @@ -29779,15 +28805,6 @@ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==" }, - "@types/cheerio": { - "version": "0.22.31", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.31.tgz", - "integrity": "sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -29797,29 +28814,6 @@ "@types/ms": "*" } }, - "@types/enzyme": { - "version": "3.10.13", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.13.tgz", - "integrity": "sha512-FCtoUhmFsud0Yx9fmZk179GkdZ4U9B0GFte64/Md+W/agx0L5SxsIIbhLBOxIb9y2UfBA4WQnaG1Od/UsUQs9Q==", - "dev": true, - "requires": { - "@types/cheerio": "*", - "@types/react": "^16" - }, - "dependencies": { - "@types/react": { - "version": "16.14.43", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.43.tgz", - "integrity": "sha512-7zdjv7jvoLLQg1tTvpQsm+hyNUMT2mPlNV1+d0I8fbGhkJl82spopMyBlu4wb1dviZAxpGdk5eHu/muacknnfw==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - } - } - }, "@types/eslint": { "version": "8.44.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", @@ -29878,15 +28872,6 @@ "highlight.js": "*" } }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, "@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", @@ -30087,11 +29072,6 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" - }, "@types/uuid": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", @@ -30137,7 +29117,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, "optional": true, "requires": { "@types/node": "*" @@ -30701,6 +29680,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -30714,125 +29694,6 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "ampersand-class-extend": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ampersand-class-extend/-/ampersand-class-extend-2.0.0.tgz", - "integrity": "sha512-i8hQvA4vZz9UfQAi0A4oBASYOZzlYgjFVkw0K1xpeKNSvq+KYkFOqJKkNvHCbbuKUNJnFk3kECSKPDAJ6ocEOg==", - "requires": { - "lodash": "^4.11.1" - } - }, - "ampersand-collection": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-collection/-/ampersand-collection-2.0.2.tgz", - "integrity": "sha512-IjDa4HTL/tdQDDL0SGyWk4AHD02iNtUSLRWkAsJ2biPvapljW9HNgIEIdbPnnR+7Gb9BJkjesaLNjVZfAMzeuA==", - "requires": { - "ampersand-class-extend": "^2.0.0", - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.2", - "lodash": "^4.11.1" - } - }, - "ampersand-collection-lodash-mixin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ampersand-collection-lodash-mixin/-/ampersand-collection-lodash-mixin-4.0.0.tgz", - "integrity": "sha512-tlMUVv3gflykaThrGg6uTkBVHLF8X3T0ZJkAyD1yqD251BkORzfCJsp6zBdJtLSmXusiTWxhkWM0nzyGFI0xcQ==", - "requires": { - "ampersand-version": "^1.0.0", - "lodash": "^4.6.1" - } - }, - "ampersand-collection-rest-mixin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ampersand-collection-rest-mixin/-/ampersand-collection-rest-mixin-6.0.0.tgz", - "integrity": "sha512-Pgh3wJhqffGhzoxjtoy1HfjxDSxeb7jP8IUcFIZNUrIXaVpFqH1oy1rDU4dLwB4zylb0w9UqRmH4q0n+tCNnXQ==", - "requires": { - "ampersand-sync": "^5.0.0", - "ampersand-version": "^1.0.2", - "lodash": "^4.11.1" - } - }, - "ampersand-events": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ampersand-events/-/ampersand-events-2.0.2.tgz", - "integrity": "sha512-pPnVEJviRxXi9YhZA9j3GwGGBTlDLi+YIoBvrpKXgce+CO1nMlZU2aOV8OJogNuR2YPbptAUHNz7SKX+MvLj8A==", - "requires": { - "ampersand-version": "^1.0.2", - "lodash": "^4.6.1" - } - }, - "ampersand-model": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ampersand-model/-/ampersand-model-8.0.1.tgz", - "integrity": "sha512-WyrqX1lwseHsYehKgnZvTx4EAq/NAOHC8DbodBm6fZPc4FsKm0ZgaVEe6grGXmkZb9nArkAxAF5I2NTIbHes4A==", - "requires": { - "ampersand-state": "^5.0.1", - "ampersand-sync": "^5.0.0", - "ampersand-version": "^1.0.2", - "lodash": "^4.11.1" - } - }, - "ampersand-rest-collection": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ampersand-rest-collection/-/ampersand-rest-collection-6.0.0.tgz", - "integrity": "sha512-D0wzeFCiBz5GT970cemSUTFgc3ei1o74o4BfobZmnDVVvxirGwa1ryJiV4YqW4tI3pOI5d+07UuIDUsg566G1A==", - "requires": { - "ampersand-collection": "^2.0.0", - "ampersand-collection-lodash-mixin": "^4.0.0", - "ampersand-collection-rest-mixin": "^6.0.0", - "ampersand-version": "^1.0.2" - } - }, - "ampersand-state": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/ampersand-state/-/ampersand-state-5.0.3.tgz", - "integrity": "sha512-sr904K5zvw6mkGjFHhTcfBIdpoJ6mn/HrFg7OleRmBpw3apLb3Z0gVrgRTb7kK1wOLI34vs4S+IXqNHUeqWCzw==", - "requires": { - "ampersand-events": "^2.0.1", - "ampersand-version": "^1.0.0", - "array-next": "~0.0.1", - "key-tree-store": "^1.3.0", - "lodash": "^4.12.0" - } - }, - "ampersand-sync": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ampersand-sync/-/ampersand-sync-5.1.0.tgz", - "integrity": "sha512-rUwhNCI8LEeQEQoRmXWmMDNDBp8tq3RDWzOSjxAHU6w9jmqDm8+cJQMrLItKb6JdTyMzAOwMAzTKnkmMLS51EQ==", - "requires": { - "ampersand-version": "^1.0.0", - "lodash": "^4.11.1", - "media-type": "0.3.0", - "qs": "^6.1.0", - "request": "^2.55.0", - "xhr": "^2.0.5" - } - }, - "ampersand-version": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ampersand-version/-/ampersand-version-1.0.2.tgz", - "integrity": "sha512-FVVLY7Pghtgc8pQl0rF3A3+OS/CZ+/ILLMIYIaO1cA9v5SRkainqUMfSot3fu32svuThIsYK3q9iCsH9W5+mWQ==", - "requires": { - "find-root": "^0.1.1", - "through2": "^0.6.3" - }, - "dependencies": { - "find-root": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-0.1.2.tgz", - "integrity": "sha512-GyDxVgA61TZcrgDJPqOqGBpi80Uf2yIstubgizi7AjC9yPdRrqBR+Y0MvK4kXnYlaoz3d+SGxDHMYVkwI/yd2w==" - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -30959,11 +29820,6 @@ "is-string": "^1.0.7" } }, - "array-next": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-next/-/array-next-0.0.1.tgz", - "integrity": "sha512-sBOC/Iaz2hCcYi2XlyRfyZCRUxamlE5NJXEFjE9BTx23HALnWAFsPjGtfrAclt9o3G/38Het2yyeyOd3CEY7lg==" - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -31060,11 +29916,6 @@ } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -31091,7 +29942,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "atob": { "version": "2.1.2", @@ -31119,11 +29971,6 @@ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" - }, "aws4": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", @@ -31328,53 +30175,11 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "devOptional": true, "requires": { "file-uri-to-path": "1.0.0" } }, - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", @@ -31425,7 +30230,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, "optional": true }, "bowser": { @@ -31776,11 +30580,6 @@ "rsvp": "^4.8.4" } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, "chai": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", @@ -31898,7 +30697,8 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "devOptional": true }, "chrome-trace-event": { "version": "1.0.3", @@ -32008,11 +30808,6 @@ } } }, - "classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, "cli": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/cli/-/cli-0.4.5.tgz", @@ -32170,6 +30965,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -32499,14 +31295,6 @@ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==" }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { - "assert-plus": "^1.0.0" - } - }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -32596,6 +31384,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "devOptional": true, "requires": { "mimic-response": "^3.1.0" }, @@ -32603,7 +31392,8 @@ "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "devOptional": true } } }, @@ -32748,7 +31538,8 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "devOptional": true }, "deep-is": { "version": "0.1.4", @@ -32878,7 +31669,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, + "devOptional": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -32897,18 +31688,14 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true }, "delegate": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" }, - "denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" - }, "depcheck": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/depcheck/-/depcheck-1.4.3.tgz", @@ -32983,7 +31770,8 @@ "detect-libc": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "devOptional": true }, "detect-newline": { "version": "3.1.0", @@ -32995,7 +31783,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, "optional": true }, "diff": { @@ -33079,11 +31866,6 @@ "entities": "^4.2.0" } }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, "domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -33261,15 +32043,6 @@ } } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -33283,25 +32056,6 @@ "acorn": "^8.1.0" } }, - "electron": { - "version": "23.3.13", - "resolved": "https://registry.npmjs.org/electron/-/electron-23.3.13.tgz", - "integrity": "sha512-BaXtHEb+KYKLouUXlUVDa/lj9pj4F5kiE0kwFdJV84Y2EU7euIDgPthfKtchhr5MVHmjtavRMIV/zAwEiSQ9rQ==", - "devOptional": true, - "requires": { - "@electron/get": "^2.0.0", - "@types/node": "^16.11.26", - "extract-zip": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==", - "devOptional": true - } - } - }, "electron-to-chromium": { "version": "1.4.580", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.580.tgz", @@ -33363,6 +32117,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "devOptional": true, "requires": { "once": "^1.4.0" } @@ -33387,7 +32142,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "devOptional": true + "optional": true }, "envinfo": { "version": "7.10.0", @@ -33576,7 +32331,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, "optional": true }, "escalade": { @@ -34462,7 +33216,8 @@ "expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "devOptional": true }, "expect": { "version": "26.6.2", @@ -34531,11 +33286,6 @@ } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -34614,7 +33364,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "devOptional": true, + "optional": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -34626,18 +33376,13 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "devOptional": true, + "optional": true, "requires": { "pump": "^3.0.0" } } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - }, "eyes": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", @@ -34651,7 +33396,8 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-glob": { "version": "3.3.0", @@ -34680,7 +33426,8 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -34758,7 +33505,8 @@ "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "devOptional": true }, "fill-range": { "version": "7.0.1", @@ -34865,11 +33613,6 @@ "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" - }, "fork-ts-checker-webpack-plugin": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", @@ -34991,13 +33734,14 @@ "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "devOptional": true }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "devOptional": true, + "optional": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -35328,18 +34072,11 @@ "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { - "assert-plus": "^1.0.0" - } - }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "devOptional": true }, "glob": { "version": "7.2.3", @@ -35369,20 +34106,10 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, "global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", @@ -35402,7 +34129,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, + "devOptional": true, "requires": { "define-properties": "^1.1.3" } @@ -35495,17 +34222,6 @@ "lodash": "^4.17.21" } }, - "hadron-ipc": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/hadron-ipc/-/hadron-ipc-3.1.5.tgz", - "integrity": "sha512-zY+ldrsYw5Gz/5MVTnq7jpRoPFD21ucUBYa+inBlqTwuGviS/QgmCooIqHpCQ2FPOzlQGfUuJ4em7FuJvmcZog==", - "requires": { - "debug": "^4.2.0", - "is-electron-renderer": "^2.0.1", - "is-promise": "^2.1.0", - "lodash": "^4.17.21" - } - }, "hadron-type-checker": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/hadron-type-checker/-/hadron-type-checker-7.1.1.tgz", @@ -35515,20 +34231,6 @@ "lodash": "^4.17.21" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -35711,21 +34413,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, "hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -35830,16 +34517,6 @@ "debug": "4" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -35900,7 +34577,8 @@ "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true }, "immutable": { "version": "4.3.0", @@ -35930,7 +34608,8 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true }, "inflight": { "version": "1.0.6", @@ -35949,7 +34628,8 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "devOptional": true }, "inquirer": { "version": "6.5.2", @@ -36183,7 +34863,8 @@ "ipv6-normalize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ipv6-normalize/-/ipv6-normalize-1.0.1.tgz", - "integrity": "sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==" + "integrity": "sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==", + "optional": true }, "is-accessor-descriptor": { "version": "1.0.0", @@ -36337,11 +35018,6 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "devOptional": true }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -36431,11 +35107,6 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -36507,7 +35178,8 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true }, "is-unicode-supported": { "version": "0.1.0", @@ -37382,11 +36054,6 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -37463,15 +36130,11 @@ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -37482,7 +36145,8 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "optional": true }, "json5": { "version": "2.2.3", @@ -37499,22 +36163,11 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "devOptional": true, + "optional": true, "requires": { "graceful-fs": "^4.1.6" } }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "jsx-ast-utils": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", @@ -37594,15 +36247,12 @@ "prebuild-install": "7.1.1" } }, - "key-tree-store": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/key-tree-store/-/key-tree-store-1.3.0.tgz", - "integrity": "sha512-qXk+lR+LXvGos3wqMxIMWweKDgCx8ZKWM6BEPm7iZkOKug5ggi66vUt+3vbtKJLBrAyOxQ4S8JRwK++Q4XZRmw==" - }, "keytar": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "optional": true, "requires": { "node-addon-api": "^4.3.0", "prebuild-install": "^7.0.1" @@ -37783,24 +36433,6 @@ } } }, - "localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "requires": { - "lie": "3.1.1" - }, - "dependencies": { - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "requires": { - "immediate": "~3.0.5" - } - } - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -38026,7 +36658,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, "optional": true, "requires": { "escape-string-regexp": "^4.0.0" @@ -38060,11 +36691,6 @@ "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, - "media-type": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-type/-/media-type-0.3.0.tgz", - "integrity": "sha512-V1FzwVfjln5IpxuqgA/9SPONtiEqnr8kV0UkXTHIB9PIIKlQI5TQ6ZGRyml3jaxSeY6i3Rco7/iuphOubmNHdQ==" - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -38172,14 +36798,6 @@ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "devOptional": true }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "requires": { - "dom-walk": "^0.1.0" - } - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -38257,7 +36875,8 @@ "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "devOptional": true }, "mocha": { "version": "10.2.0", @@ -38627,34 +37246,6 @@ } } }, - "mongodb-connection-model": { - "version": "22.4.1", - "resolved": "https://registry.npmjs.org/mongodb-connection-model/-/mongodb-connection-model-22.4.1.tgz", - "integrity": "sha512-qHDE40p3be3LrTeKAbQKxJbhqJatJjfhzZ8j/mMvNuz2Yh+WO8h4u0w6k/EI5ykmu/VvUkEUVzQOzHD2h+gpuQ==", - "requires": { - "@mongodb-js/compass-utils": "0.3.4", - "ampersand-model": "^8.0.1", - "ampersand-rest-collection": "^6.0.0", - "lodash": "^4.17.21", - "mongodb-connection-string-url": "^2.6.0", - "mongodb3": "npm:mongodb@^3.6.3", - "os-dns-native": "^1.2.0", - "raf": "^3.4.1", - "resolve-mongodb-srv": "^1.1.2", - "storage-mixin": "^5.1.5" - }, - "dependencies": { - "@mongodb-js/compass-utils": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.3.4.tgz", - "integrity": "sha512-zGrjLHk4C/fQlQ6RD+2LKoOzujhQSZEpZvGz3jLnhsHtI4jnNVnxQhl50mhQw6TjKt2B7sKYZe0EOo9F9FxoXw==", - "requires": { - "@electron/remote": "^2.0.10", - "electron": "^23.3.12" - } - } - } - }, "mongodb-connection-string-url": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", @@ -38717,79 +37308,6 @@ "mongodb-log-writer": "^1.3.0", "react": "^17.0.2" } - }, - "@mongodb-js/compass-utils": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@mongodb-js/compass-utils/-/compass-utils-0.5.8.tgz", - "integrity": "sha512-rfpETmq5cxst+b6RlKQgT0KxdAI/V8zT2/929q/L8gULjGaZ9smW1WlAmD+ZeDv81Euqcf8S8C1leixVbkhVSw==", - "requires": { - "@electron/remote": "^2.1.1", - "electron": "^25.9.8" - } - }, - "@types/node": { - "version": "18.19.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz", - "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==", - "optional": true, - "requires": { - "undici-types": "~5.26.4" - } - }, - "electron": { - "version": "25.9.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.8.tgz", - "integrity": "sha512-PGgp6PH46QVENHuAHc2NT1Su8Q1qov7qIl2jI5tsDpTibwV2zD8539AeWBQySeBU4dhbj9onIl7+1bXQ0wefBg==", - "optional": true, - "requires": { - "@electron/get": "^2.0.0", - "@types/node": "^18.11.18", - "extract-zip": "^2.0.1" - } - } - } - }, - "mongodb-data-service-legacy": { - "version": "npm:mongodb-data-service@22.8.0", - "resolved": "https://registry.npmjs.org/mongodb-data-service/-/mongodb-data-service-22.8.0.tgz", - "integrity": "sha512-3hbGRlFyHD8WrsfFuas3X5PH6Wlk5WYuYxOttC6GFx5tvSLVjM99lZWzYZ5tax/2zFAnfXODXsz3SrCupfUjNA==", - "requires": { - "@mongodb-js/compass-logging": "^1.1.6", - "@mongodb-js/compass-utils": "^0.3.1", - "@mongodb-js/devtools-connect": "^2.1.0", - "@mongodb-js/oidc-plugin": "^0.2.0", - "@mongodb-js/ssh-tunnel": "^2.0.6", - "lodash": "^4.17.21", - "mongodb-build-info": "^1.5.0", - "mongodb-client-encryption": "^2.8.0", - "mongodb-connection-model": "^22.4.1", - "mongodb-connection-string-url": "^2.6.0", - "mongodb-ns": "^2.4.0", - "uuid": "^8.3.2" - }, - "dependencies": { - "@mongodb-js/oidc-plugin": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@mongodb-js/oidc-plugin/-/oidc-plugin-0.2.4.tgz", - "integrity": "sha512-rh9zed1EOy1hbB7U+C/Jt74jtGJLa9wohX+xChKzbAtHRyIR7zj1jLWV9J/l2IuhBSPvnTw/T8ta9clbNT0JTg==", - "requires": { - "abort-controller": "^3.0.0", - "express": "^4.18.2", - "open": "^9.1.0", - "openid-client": "^5.4.0" - } - }, - "mongodb-client-encryption": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.9.0.tgz", - "integrity": "sha512-OGMfTnS+JJ49ksWdExQ5048ynaQJLhPjbOi3i44PbU2sdufKH0Z4YZqn1pvd/eQ4WgLfbmSws3u9kAiFNFxpOg==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.1.1", - "socks": "^2.7.1" - } } } }, @@ -38988,26 +37506,6 @@ } } }, - "mongodb3": { - "version": "npm:mongodb@3.7.4", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.4.tgz", - "integrity": "sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==", - "requires": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.1.8", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - }, - "dependencies": { - "bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" - } - } - }, "moo": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", @@ -39100,7 +37598,8 @@ "napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "devOptional": true }, "native-request": { "version": "1.1.0", @@ -39186,6 +37685,7 @@ "version": "3.45.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", + "devOptional": true, "requires": { "semver": "^7.3.5" } @@ -39199,7 +37699,8 @@ "node-addon-api": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "devOptional": true }, "node-fetch": { "version": "2.6.12", @@ -39475,11 +37976,6 @@ "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -39577,7 +38073,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "devOptional": true }, "object-visit": { "version": "1.0.1", @@ -39724,14 +38220,6 @@ } } }, - "optional-require": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", - "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", - "requires": { - "require-at": "^1.0.6" - } - }, "optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -39810,6 +38298,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/os-dns-native/-/os-dns-native-1.2.0.tgz", "integrity": "sha512-pnq7NYCsuZixeIOFjerXIXXFNpqJyDqiIHTu9TzefKtu+8ReUROA9OB2VQE+qk3uYhkXtxe1tf8b4dqPINtStw==", + "optional": true, "requires": { "bindings": "^1.5.0", "debug": "^4.3.3", @@ -39906,11 +38395,6 @@ "safe-buffer": "^5.1.1" } }, - "parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -40049,7 +38533,8 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true }, "picocolors": { "version": "1.0.0", @@ -40307,6 +38792,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "devOptional": true, "requires": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -40348,7 +38834,8 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true }, "process-nextick-args": { "version": "2.0.1", @@ -40429,7 +38916,8 @@ "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true }, "public-encrypt": { "version": "4.0.3", @@ -40457,6 +38945,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "devOptional": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -40507,6 +38996,7 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, "requires": { "performance-now": "^2.1.0" } @@ -40572,6 +39062,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "devOptional": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -40582,7 +39073,8 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "devOptional": true } } }, @@ -40629,26 +39121,6 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "react-redux": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.1.tgz", - "integrity": "sha512-5W0QaKtEhj+3bC0Nj0NkqkhIv8gLADH/2kYFMTHxCVqQILiWzLv6MaLuV5wJU3BQEdHKzTfcvPN0WMS6SC1oyA==", - "requires": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" - }, - "dependencies": { - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - } - } - }, "react-shallow-renderer": { "version": "16.15.0", "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", @@ -40796,14 +39268,6 @@ "resolve": "^1.20.0" } }, - "redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", - "requires": { - "@babel/runtime": "^7.9.2" - } - }, "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -40854,69 +39318,6 @@ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "require-at": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", - "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==" - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -41074,7 +39475,6 @@ "version": "2.15.4", "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, "optional": true, "requires": { "boolean": "^3.0.1", @@ -41089,7 +39489,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, "optional": true } } @@ -41373,15 +39772,6 @@ } } }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, "sass": { "version": "1.63.6", "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz", @@ -41487,7 +39877,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true + "devOptional": true }, "send": { "version": "0.18.0", @@ -41530,7 +39920,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, "optional": true, "requires": { "type-fest": "^0.13.1" @@ -41540,7 +39929,6 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, "optional": true } } @@ -41695,12 +40083,14 @@ "simple-concat": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "devOptional": true }, "simple-get": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "devOptional": true, "requires": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -42205,22 +40595,6 @@ "nan": "^2.17.0" } }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -42350,36 +40724,6 @@ "internal-slot": "^1.0.4" } }, - "storage-mixin": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/storage-mixin/-/storage-mixin-5.1.5.tgz", - "integrity": "sha512-KgOMMODS/dTEsgwU1qHpa15NN5UudLBR9ozqZ66OZSkXcGrOfC4p6oX1WR46wxn4kDkLLv/7V62L6R8JMNURNA==", - "requires": { - "@mongodb-js/compass-logging": "^1.1.6", - "ampersand-model": "^8.0.1", - "ampersand-rest-collection": "^6.0.0", - "async": "^3.2.2", - "debug": "^4.2.0", - "hadron-ipc": "^3.1.3", - "keytar": "^7.9.0", - "localforage": "^1.7.3", - "lodash": "^4.17.21", - "uuid": "^3.3.3", - "write-file-atomic": "^3.0.1" - }, - "dependencies": { - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, "stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", @@ -42591,7 +40935,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "devOptional": true, + "optional": true, "requires": { "debug": "^4.1.0" } @@ -42730,6 +41074,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "devOptional": true, "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -42741,6 +41086,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "devOptional": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -42751,6 +41097,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "devOptional": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -42760,6 +41107,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "devOptional": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -42770,6 +41118,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "devOptional": true, "requires": { "safe-buffer": "~5.2.0" } @@ -42778,6 +41127,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "devOptional": true, "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -43214,6 +41564,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "devOptional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -43285,6 +41636,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "requires": { "is-typedarray": "^1.0.0" } @@ -43371,7 +41723,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "devOptional": true + "optional": true }, "unpipe": { "version": "1.0.0", @@ -43442,6 +41794,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -43474,11 +41827,6 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -43533,23 +41881,6 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - } - } - }, "vscode-jsonrpc": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", @@ -43958,6 +42289,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -43971,17 +42303,6 @@ "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, "xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", @@ -44019,7 +42340,8 @@ "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true }, "xvfb-maybe": { "version": "0.2.1", diff --git a/package.json b/package.json index 9a65eaf7e..fdd44c075 100644 --- a/package.json +++ b/package.json @@ -1036,13 +1036,9 @@ "dependencies": { "@babel/parser": "^7.22.6", "@babel/traverse": "^7.23.2", - "@fortawesome/fontawesome-svg-core": "^6.4.0", - "@fortawesome/free-solid-svg-icons": "^6.4.0", - "@fortawesome/react-fontawesome": "^0.2.0", - "@iconify-icons/codicon": "^1.2.25", - "@iconify/react": "^1.1.4", "@mongodb-js/compass-components": "^1.20.0", "@mongodb-js/connection-form": "^1.20.4", + "@mongodb-js/connection-info": "^0.1.1", "@mongodb-js/mongodb-constants": "^0.7.1", "@mongosh/browser-runtime-electron": "^2.0.2", "@mongosh/i18n": "^2.0.2", @@ -1051,7 +1047,6 @@ "@segment/analytics-node": "^1.1.4", "bson": "^6.1.0", "bson-transpilers": "^2.0.4", - "classnames": "^2.3.2", "debug": "^4.3.4", "dotenv": "^16.3.1", "lodash": "^4.17.21", @@ -1060,16 +1055,13 @@ "mongodb-build-info": "^1.6.2", "mongodb-cloud-info": "^2.1.0", "mongodb-connection-string-url": "^2.6.0", - "mongodb-data-service": "^22.17.1", - "mongodb-data-service-legacy": "npm:mongodb-data-service@22.8.0", + "mongodb-data-service": "^22.17.0", "mongodb-log-writer": "^1.4.0", "mongodb-query-parser": "^3.1.3", "mongodb-schema": "^11.2.2", "numeral": "^2.0.6", "react": "^17.0.2", "react-dom": "^17.0.2", - "react-redux": "^8.1.1", - "redux": "^4.2.1", "resolve-mongodb-srv": "^1.1.2", "ts-log": "^2.2.5", "uuid": "^8.3.2", @@ -1088,7 +1080,6 @@ "@types/babel__traverse": "^7.20.1", "@types/chai": "^4.3.5", "@types/debug": "^4.1.8", - "@types/enzyme": "^3.10.13", "@types/glob": "^7.2.0", "@types/jest": "^26.0.24", "@types/micromatch": "^4.0.2", @@ -1114,7 +1105,6 @@ "css-loader": "^6.8.1", "depcheck": "^1.4.3", "duplicate-package-checker-webpack-plugin": "^3.0.0", - "electron": "^23.3.9", "enzyme": "^3.11.0", "eslint": "^8.44.0", "eslint-config-mongodb-js": "^5.0.3", @@ -1154,11 +1144,6 @@ "webpack-merge": "^5.9.0", "xvfb-maybe": "^0.2.1" }, - "overrides": { - "mongodb-connection-model": { - "@mongodb-js/compass-utils": "0.3.4" - } - }, "precommit": [ "check" ] diff --git a/scripts/check-vsix-size.ts b/scripts/check-vsix-size.ts index 1e051fdd1..bb6ce7216 100644 --- a/scripts/check-vsix-size.ts +++ b/scripts/check-vsix-size.ts @@ -12,7 +12,7 @@ const vsixFileName = path.resolve( ); const size = fs.statSync(vsixFileName).size; -const maxSize = 8_500_000; // 8.5 MB +const maxSize = 8_000_000; if (size >= maxSize) { throw new Error( diff --git a/src/connectionController.ts b/src/connectionController.ts index 5e72ff334..6b3dee0c8 100644 --- a/src/connectionController.ts +++ b/src/connectionController.ts @@ -3,7 +3,7 @@ import { connect, createConnectionAttempt } from 'mongodb-data-service'; import type { DataService, ConnectionAttempt, - ConnectionOptions as ConnectionOptionsFromCurrentDS, + ConnectionOptions, } from 'mongodb-data-service'; import ConnectionString from 'mongodb-connection-string-url'; import { EventEmitter } from 'events'; @@ -11,20 +11,12 @@ import type { MongoClientOptions } from 'mongodb'; import { v4 as uuidv4 } from 'uuid'; import { cloneDeep, merge } from 'lodash'; import { mongoLogId } from 'mongodb-log-writer'; -import type { - ConnectionInfo as ConnectionInfoFromLegacyDS, - ConnectionOptions as ConnectionOptionsFromLegacyDS, -} from 'mongodb-data-service-legacy'; -import { - extractSecrets, - convertConnectionModelToInfo, -} from 'mongodb-data-service-legacy'; +import { extractSecrets } from '@mongodb-js/connection-info'; import { adjustConnectionOptionsBeforeConnect } from '@mongodb-js/connection-form'; import { CONNECTION_STATUS } from './views/webview-app/extension-app-message-constants'; import { createLogger } from './logging'; import formatError from './utils/formatError'; -import type LegacyConnectionModel from './views/webview-app/legacy/connection-model/legacy-connection-model'; import type { StorageController } from './storage'; import type { StatusView } from './views'; import type TelemetryService from './telemetry/telemetryService'; @@ -75,13 +67,6 @@ type RecursivePartial = { : T[P]; }; -export function launderConnectionOptionTypeFromLegacyToCurrent( - opts: ConnectionOptionsFromLegacyDS -): ConnectionOptionsFromCurrentDS { - // Ensure that, at most, the types for OIDC mismatch here. - return opts as Omit; -} - export default class ConnectionController { // This is a map of connection ids to their configurations. // These connections can be saved on the session (runtime), @@ -244,25 +229,19 @@ export default class ConnectionController { ); } - parseNewConnection( - rawConnectionModel: LegacyConnectionModel - ): ConnectionInfoFromLegacyDS { - return convertConnectionModelToInfo({ - ...rawConnectionModel, - appname: `${packageJSON.name} ${packageJSON.version}`, // Override the default connection appname. - }); - } - async saveNewConnectionAndConnect( - originalConnectionInfo: ConnectionInfoFromLegacyDS, + connection: { + connectionOptions: ConnectionOptions; + id: string; + }, connectionType: ConnectionTypes ): Promise { const savedConnectionWithoutSecrets = - await this._connectionStorage.saveNewConnection(originalConnectionInfo); + await this._connectionStorage.saveNewConnection(connection); this._connections[savedConnectionWithoutSecrets.id] = { ...savedConnectionWithoutSecrets, - connectionOptions: originalConnectionInfo.connectionOptions, // The connection options with secrets. + connectionOptions: connection.connectionOptions, // The connection options with secrets. }; log.info( @@ -326,9 +305,7 @@ export default class ConnectionController { let dataService; try { const connectionOptions = adjustConnectionOptionsBeforeConnect({ - connectionOptions: launderConnectionOptionTypeFromLegacyToCurrent( - connectionInfo.connectionOptions - ), + connectionOptions: connectionInfo.connectionOptions, defaultAppName: packageJSON.name, notifyDeviceFlow: undefined, preferences: { diff --git a/src/storage/connectionStorage.ts b/src/storage/connectionStorage.ts index 2cbfd2d46..052e88fd3 100644 --- a/src/storage/connectionStorage.ts +++ b/src/storage/connectionStorage.ts @@ -1,13 +1,10 @@ import * as vscode from 'vscode'; -import type { - ConnectionInfo as ConnectionInfoFromLegacyDS, - ConnectionOptions as ConnectionOptionsFromLegacyDS, -} from 'mongodb-data-service-legacy'; import { getConnectionTitle, extractSecrets, mergeSecrets, -} from 'mongodb-data-service-legacy'; +} from '@mongodb-js/connection-info'; +import type { ConnectionOptions } from 'mongodb-data-service'; import { createLogger } from '../logging'; import type StorageController from './storageController'; @@ -26,7 +23,7 @@ export interface StoreConnectionInfo { name: string; // Possibly user given name, not unique. storageLocation: StorageLocation; secretStorageLocation?: SecretStorageLocationType; - connectionOptions?: ConnectionOptionsFromLegacyDS; + connectionOptions?: ConnectionOptions; } type StoreConnectionInfoWithConnectionOptions = StoreConnectionInfo & @@ -46,16 +43,19 @@ export class ConnectionStorage { } // Returns the saved connection (without secrets). - async saveNewConnection(originalConnectionInfo: ConnectionInfoFromLegacyDS) { - const name = getConnectionTitle(originalConnectionInfo); + async saveNewConnection(connection: { + connectionOptions: ConnectionOptions; + id: string; + }): Promise { + const name = getConnectionTitle(connection); const newConnectionInfo = { - id: originalConnectionInfo.id, + id: connection.id, name, // To begin we just store it on the session, the storage controller // handles changing this based on user preference. storageLocation: StorageLocation.NONE, secretStorageLocation: SecretStorageLocation.SecretStorage, - connectionOptions: originalConnectionInfo.connectionOptions, + connectionOptions: connection.connectionOptions, }; return await this.saveConnectionWithSecrets(newConnectionInfo); @@ -147,7 +147,7 @@ export class ConnectionStorage { ): Promise { // We don't want to store secrets to disc. const { connectionInfo: safeConnectionInfo, secrets } = extractSecrets( - newStoreConnectionInfoWithSecrets as ConnectionInfoFromLegacyDS + newStoreConnectionInfoWithSecrets ); const savedConnectionInfo = await this.saveConnection({ ...newStoreConnectionInfoWithSecrets, diff --git a/src/test/suite/connectionController.test.ts b/src/test/suite/connectionController.test.ts index 7845d1417..a2f419755 100644 --- a/src/test/suite/connectionController.test.ts +++ b/src/test/suite/connectionController.test.ts @@ -6,10 +6,8 @@ import { afterEach, beforeEach } from 'mocha'; import assert from 'assert'; import * as mongodbDataService from 'mongodb-data-service'; -import AUTH_STRATEGY_VALUES from '../../views/webview-app/legacy/connection-model/constants/auth-strategies'; import ConnectionController, { DataServiceEventTypes, - launderConnectionOptionTypeFromLegacyToCurrent, } from '../../connectionController'; import formatError from '../../utils/formatError'; import { StorageController, StorageVariables } from '../../storage'; @@ -18,9 +16,6 @@ import { DefaultSavingLocations, SecretStorageLocation, } from '../../storage/storageController'; -import READ_PREFERENCES from '../../views/webview-app/legacy/connection-model/constants/read-preferences'; -import SSH_TUNNEL_TYPES from '../../views/webview-app/legacy/connection-model/constants/ssh-tunnel-types'; -import SSL_METHODS from '../../views/webview-app/legacy/connection-model/constants/ssl-methods'; import { StatusView } from '../../views'; import TelemetryService from '../../telemetry/telemetryService'; import { ExtensionContextStub } from './stubs'; @@ -762,9 +757,7 @@ suite('Connection Controller Test Suite', function () { await sleep(50); return mongodbDataService.connect({ - connectionOptions: launderConnectionOptionTypeFromLegacyToCurrent( - connectionOptions.connectionOptions - ), + connectionOptions: connectionOptions.connectionOptions, }); } ); @@ -868,39 +861,6 @@ suite('Connection Controller Test Suite', function () { ); }); - test('parseNewConnection converts a connection model to a connection info and overrides a default appname', () => { - const connectionInfo = testConnectionController.parseNewConnection({ - _id: 'c4871b21-92c4-40e2-a2c2-fdd551cff114', - isFavorite: false, - name: 'Local', - isSrvRecord: true, - hostname: 'host.u88dd.test.test', - port: 27017, - hosts: [ - { host: 'host-shard-00-00.u88dd.test.test', port: 27017 }, - { host: 'host-shard-00-01.u88dd.test.test', port: 27017 }, - { host: 'host-shard-00-02.u88dd.test.test', port: 27017 }, - ], - extraOptions: {}, - readPreference: READ_PREFERENCES.PRIMARY, - authStrategy: AUTH_STRATEGY_VALUES.MONGODB, - kerberosCanonicalizeHostname: false, - sslMethod: SSL_METHODS.SYSTEMCA, - sshTunnel: SSH_TUNNEL_TYPES.NONE, - sshTunnelPort: 22, - mongodbUsername: 'username', - mongodbPassword: 'somepassword', - mongodbDatabaseName: 'admin', - }); - - assert.deepStrictEqual(connectionInfo, { - id: 'c4871b21-92c4-40e2-a2c2-fdd551cff114', - connectionOptions: { - connectionString: `mongodb+srv://username:somepassword@host.u88dd.test.test/?authSource=admin&readPreference=primary&appname=mongodb-vscode+${version}&ssl=true`, - }, - }); - }); - test('getMongoClientConnectionOptions returns url and options properties', async () => { await testConnectionController.addNewConnectionStringAndConnect( TEST_DATABASE_URI diff --git a/src/test/suite/language/mongoDBService.test.ts b/src/test/suite/language/mongoDBService.test.ts index 33f7dd41e..9ce0ad064 100644 --- a/src/test/suite/language/mongoDBService.test.ts +++ b/src/test/suite/language/mongoDBService.test.ts @@ -21,7 +21,6 @@ import MongoDBService, { } from '../../../language/mongoDBService'; import { mdbTestExtension } from '../stubbableMdbExtension'; import { StreamStub } from '../stubs'; -import READ_PREFERENCES from '../../../views/webview-app/legacy/connection-model/constants/read-preferences'; import DIAGNOSTIC_CODES from '../../../language/diagnosticCodes'; import { ServerCommands } from '../../../language/serverCommands'; import LINKS from '../../../utils/links'; @@ -35,7 +34,6 @@ suite('MongoDBService Test Suite', () => { connectionId: 'pineapple', connectionString: 'mongodb://localhost:27088', connectionOptions: { - readPreference: READ_PREFERENCES.PRIMARY, productDocsLink: LINKS.extensionDocs(), productName: 'MongoDB for VS Code', }, @@ -2565,7 +2563,7 @@ suite('MongoDBService Test Suite', () => { this.timeout(INCREASED_TEST_TIMEOUT); const mongoClient = new MongoClient(params.connectionString, { - readPreference: params.connectionOptions.readPreference, + readPreference: 'primary', }); const up = new StreamStub(); const down = new StreamStub(); diff --git a/src/test/suite/storage/connectionStorage.test.ts b/src/test/suite/storage/connectionStorage.test.ts index fd576d368..8c80ea84e 100644 --- a/src/test/suite/storage/connectionStorage.test.ts +++ b/src/test/suite/storage/connectionStorage.test.ts @@ -3,16 +3,12 @@ import * as vscode from 'vscode'; import { afterEach, beforeEach } from 'mocha'; import { expect } from 'chai'; -import AUTH_STRATEGY_VALUES from '../../../views/webview-app/legacy/connection-model/constants/auth-strategies'; import { StorageController, StorageVariables } from '../../../storage'; import { StorageLocation, DefaultSavingLocations, SecretStorageLocation, } from '../../../storage/storageController'; -import READ_PREFERENCES from '../../../views/webview-app/legacy/connection-model/constants/read-preferences'; -import SSH_TUNNEL_TYPES from '../../../views/webview-app/legacy/connection-model/constants/ssh-tunnel-types'; -import SSL_METHODS from '../../../views/webview-app/legacy/connection-model/constants/ssl-methods'; import { ExtensionContextStub } from '../stubs'; import { TEST_DATABASE_URI, @@ -260,11 +256,11 @@ suite('Connection Storage Test Suite', function () { hosts: [{ host: 'localhost', port: 27017 }], extraOptions: {}, connectionType: 'NODE_DRIVER', - authStrategy: AUTH_STRATEGY_VALUES.NONE, - readPreference: READ_PREFERENCES.PRIMARY, + authStrategy: 'NONE', + readPreference: 'primary', kerberosCanonicalizeHostname: false, - sslMethod: SSL_METHODS.NONE, - sshTunnel: SSH_TUNNEL_TYPES.NONE, + sslMethod: 'NONE', + sshTunnel: 'NONE', sshTunnelPort: 22, }, }; diff --git a/src/test/suite/views/webview-app/jest-setup.js b/src/test/suite/views/webview-app/jest-setup.js index 70ecd9e8a..b8ee2780e 100644 --- a/src/test/suite/views/webview-app/jest-setup.js +++ b/src/test/suite/views/webview-app/jest-setup.js @@ -9,9 +9,6 @@ const { TextEncoder, TextDecoder } = require('util'); chai.use(require('sinon-chai')); Enzyme.configure({ adapter: new Adapter() }); -// eslint-disable-next-line no-undef -jest.mock('@iconify-icons/codicon/book', () => {}); - // Note applied with js dom so we do manually. (Required by node_modules/mongodb-connection-string-url/node_modules/whatwg-url/lib/encoding.js) Object.assign(global, { TextDecoder, TextEncoder }); diff --git a/src/test/suite/views/webview-app/legacy/components/app.test.tsx b/src/test/suite/views/webview-app/legacy/components/app.test.tsx deleted file mode 100644 index 41c1b782c..000000000 --- a/src/test/suite/views/webview-app/legacy/components/app.test.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { mount, shallow } from 'enzyme'; -import sinon from 'sinon'; -import { Provider } from 'react-redux'; -import { createStore } from 'redux'; - -import { - initialState, - rootReducer, -} from '../../../../../../views/webview-app/legacy/store/store'; -import App, { - App as NotConnectedApp, -} from '../../../../../../views/webview-app/legacy/components/app'; -import OverviewPage from '../../../../../../views/webview-app/legacy/components/overview-page/overview-page'; -import { - CONNECTION_STATUS, - MESSAGE_TYPES, -} from '../../../../../../views/webview-app/extension-app-message-constants'; - -describe('Legacy App Component Test Suite', () => { - describe('when rendered', () => { - test('it shows the overview page', () => { - const wrapper = shallow( - {}} - onFilePickerEvent={(): void => {}} - setConnectionStatus={(): void => {}} - /> - ); - assert(wrapper.find(OverviewPage).exists()); - }); - }); - - describe('when the extension sends a connection status message', () => { - let fakeVscodeWindowPostMessage; - let store; - let fakeOnEventFunction; - let fakeAddEventListener; - - beforeEach(() => { - fakeVscodeWindowPostMessage = sinon.fake.returns(null); - fakeAddEventListener = (eventName, eventFn): void => { - if (eventName === 'message') { - fakeOnEventFunction = eventFn; - } - }; - - sinon.replace( - (global as any).vscodeFake, - 'postMessage', - fakeVscodeWindowPostMessage - ); - - sinon.replace(window, 'addEventListener', fakeAddEventListener); - - store = createStore(rootReducer, initialState); - - mount( - - - - ); - }); - - afterEach(() => { - sinon.restore(); - }); - - test('it updates the connectionStatus in the store', () => { - assert(store.getState().connectionStatus === CONNECTION_STATUS.LOADING); - assert(store.getState().activeConnectionName === ''); - fakeOnEventFunction({ - data: { - command: MESSAGE_TYPES.CONNECTION_STATUS_MESSAGE, - connectionStatus: CONNECTION_STATUS.CONNECTED, - activeConnectionName: 'Nice connection', - }, - }); - assert(store.getState().connectionStatus === CONNECTION_STATUS.CONNECTED); - assert(store.getState().activeConnectionName === 'Nice connection'); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/atlas-cta/atlas-cta.test.tsx b/src/test/suite/views/webview-app/legacy/components/atlas-cta/atlas-cta.test.tsx deleted file mode 100644 index 5bf8692b8..000000000 --- a/src/test/suite/views/webview-app/legacy/components/atlas-cta/atlas-cta.test.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { mount } from 'enzyme'; -import sinon from 'sinon'; -import { createStore } from 'redux'; -import { Provider } from 'react-redux'; - -import { - initialState, - rootReducer, -} from '../../../../../../../views/webview-app/legacy/store/store'; -import AtlasCTA from '../../../../../../../views/webview-app/legacy/components/atlas-cta/atlas-cta'; -import { VSCODE_EXTENSION_SEGMENT_ANONYMOUS_ID } from '../../../../../../../views/webview-app/extension-app-message-constants'; - -describe('Resources Panel Component Test Suite', () => { - describe('when rendered', () => { - let fakeVscodeWindowPostMessage; - let wrapper; - let store; - - beforeEach(() => { - fakeVscodeWindowPostMessage = sinon.fake.returns(null); - - sinon.replace( - (global as any).vscodeFake, - 'postMessage', - fakeVscodeWindowPostMessage - ); - - store = createStore(rootReducer, initialState); - - wrapper = mount( - - - - ); - }); - - afterEach(() => { - sinon.restore(); - }); - - test('when a link is clicked it sends a telemetry event to the extension', () => { - assert(!fakeVscodeWindowPostMessage.called); - wrapper.find('a').at(0).simulate('click'); - assert(fakeVscodeWindowPostMessage.called); - assert.strictEqual( - fakeVscodeWindowPostMessage.firstCall.args[0].command, - 'EXTENSION_LINK_CLICKED' - ); - }); - - test('when a trusted link is clicked it sends an event to the extension', () => { - assert(!fakeVscodeWindowPostMessage.called); - window[VSCODE_EXTENSION_SEGMENT_ANONYMOUS_ID] = 'mockAnonymousID'; - wrapper.find('a').at(1).simulate('click'); - assert(fakeVscodeWindowPostMessage.called); - assert.strictEqual( - fakeVscodeWindowPostMessage.firstCall.args[0].command, - 'OPEN_TRUSTED_LINK' - ); - assert.strictEqual( - fakeVscodeWindowPostMessage.firstCall.args[0].linkTo.includes( - 'mongodb.com' - ), - true - ); - assert.strictEqual( - new URL( - fakeVscodeWindowPostMessage.firstCall.args[0].linkTo - ).searchParams.get('ajs_aid'), - 'mockAnonymousID' - ); - // The assert below is a bit redundant but will prevent us from redirecting to a non-https URL by mistake - assert( - fakeVscodeWindowPostMessage.firstCall.args[0].linkTo.startsWith( - 'https://' - ) === true - ); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/connect-form-modal/connect-form-modal.test.tsx b/src/test/suite/views/webview-app/legacy/components/connect-form-modal/connect-form-modal.test.tsx deleted file mode 100644 index 2546d29dc..000000000 --- a/src/test/suite/views/webview-app/legacy/components/connect-form-modal/connect-form-modal.test.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { mount, shallow } from 'enzyme'; -import sinon from 'sinon'; -import { Provider } from 'react-redux'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { createStore } from 'redux'; - -import type { AppState } from '../../../../../../../views/webview-app/legacy/store/store'; -import { - initialState, - rootReducer, -} from '../../../../../../../views/webview-app/legacy/store/store'; -import ConnectForm from '../../../../../../../views/webview-app/legacy/components/connect-form/connection-form'; -import ConnectFormModal, { - ConnectFormModal as NoStoreConnectFormModal, -} from '../../../../../../../views/webview-app/legacy/components/connect-form-modal/connect-form-modal'; - -describe('Connect Form Modal Component Test Suite', () => { - describe('when rendered', () => { - const wrapper = shallow( - {}} /> - ); - - test('it shows the connection form', () => { - assert(wrapper.find(ConnectForm).exists()); - }); - - test('it shows a close icon', () => { - assert(wrapper.find(FontAwesomeIcon).exists()); - }); - }); - - describe('store actions', () => { - let fakeVscodeWindowPostMessage; - let wrapper; - let store; - - beforeEach(() => { - fakeVscodeWindowPostMessage = sinon.fake.returns(null); - - sinon.replace( - (global as any).vscodeFake, - 'postMessage', - fakeVscodeWindowPostMessage - ); - - store = createStore(rootReducer, { - ...initialState, - showConnectForm: true, - } as AppState); - - wrapper = mount( - - - - ); - }); - - afterEach(() => { - sinon.restore(); - }); - - test('when the x is clicked it closes the connect form', () => { - assert(store.getState().showConnectForm === true); - wrapper.find('button').at(0).simulate('click'); - assert(store.getState().showConnectForm === false); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/connect-form/advanced-tab/advanced-tab.test.tsx b/src/test/suite/views/webview-app/legacy/components/connect-form/advanced-tab/advanced-tab.test.tsx deleted file mode 100644 index dd7d01ca9..000000000 --- a/src/test/suite/views/webview-app/legacy/components/connect-form/advanced-tab/advanced-tab.test.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { shallow } from 'enzyme'; - -import ReadPreferenceSelect from '../../../../../../../../views/webview-app/legacy/components/connect-form/advanced-tab/read-preference-select'; -import AdvancedTab from '../../../../../../../../views/webview-app/legacy/components/connect-form/advanced-tab/advanced-tab'; - -describe('Advanced Tab Component Test Suite', () => { - test('it shows replica set input and read preference selection', () => { - const wrapper = shallow(); - assert(wrapper.find(ReadPreferenceSelect).exists()); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/connect-form/connection-form.test.tsx b/src/test/suite/views/webview-app/legacy/components/connect-form/connection-form.test.tsx deleted file mode 100644 index 69e6702e2..000000000 --- a/src/test/suite/views/webview-app/legacy/components/connect-form/connection-form.test.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { shallow } from 'enzyme'; - -import { ConnectionForm } from '../../../../../../../views/webview-app/legacy/components/connect-form/connection-form'; -import FormActions from '../../../../../../../views/webview-app/legacy/components/form/form-actions'; -import { CONNECTION_FORM_TABS } from '../../../../../../../views/webview-app/legacy/store/constants'; -import GeneralTab from '../../../../../../../views/webview-app/legacy/components/connect-form/general-tab/general-tab'; -import SSLTab from '../../../../../../../views/webview-app/legacy/components/connect-form/ssl-tab/ssl-tab'; -import SSHTunnelTab from '../../../../../../../views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-tab'; -import AdvancedTab from '../../../../../../../views/webview-app/legacy/components/connect-form/advanced-tab/advanced-tab'; - -describe('Webview Connection Form Component Test Suite', () => { - test('it shows a connection form', () => { - const wrapper = shallow( - {}} - /> - ); - assert(wrapper.find('form').exists()); - assert(wrapper.find(FormActions).exists()); - }); - - test('it shows the general tab when the connectionFormTab prop is GENERAL', () => { - const wrapper = shallow( - {}} - /> - ); - assert(wrapper.find(GeneralTab).exists()); - }); - - test('it shows the ssl tab when the connectionFormTab prop is SSL', () => { - const wrapper = shallow( - {}} - /> - ); - assert(wrapper.find(SSLTab).exists()); - assert(!wrapper.find(GeneralTab).exists()); - }); - - test('it shows the ssh tab when the connectionFormTab prop is SSH', () => { - const wrapper = shallow( - {}} - /> - ); - assert(wrapper.find(SSHTunnelTab).exists()); - }); - - test('it shows the advanced tab when the connectionFormTab prop is ADVANCED', () => { - const wrapper = shallow( - {}} - /> - ); - assert(wrapper.find(AdvancedTab).exists()); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/connect-form/general-tab/authentication/authentication.test.tsx b/src/test/suite/views/webview-app/legacy/components/connect-form/general-tab/authentication/authentication.test.tsx deleted file mode 100644 index 85783385e..000000000 --- a/src/test/suite/views/webview-app/legacy/components/connect-form/general-tab/authentication/authentication.test.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { shallow } from 'enzyme'; - -import { Authentication } from '../../../../../../../../../views/webview-app/legacy/components/connect-form/general-tab/authentication/authentication'; -import RadioBoxGroup from '../../../../../../../../../views/webview-app/legacy/components/form/radio-box-group/radio-box-group'; -import MongodbAuthentication from '../../../../../../../../../views/webview-app/legacy/components/connect-form/general-tab/authentication/mongodb-authentication'; -import AUTH_STRATEGIES from '../../../../../../../../../views/webview-app/legacy/connection-model/constants/auth-strategies'; -import ScramSha256 from '../../../../../../../../../views/webview-app/legacy/components/connect-form/general-tab/authentication/scram-sha-256'; - -describe('Authentication Component Test Suite', () => { - test('it shows a select for the authentication method', () => { - const wrapper = shallow( - {}} - /> - ); - assert(wrapper.find(RadioBoxGroup).exists()); - assert(!wrapper.find(MongodbAuthentication).exists()); - assert(!wrapper.find(ScramSha256).exists()); - }); - - test('it renders mongodb auth when the authStrategy is set', () => { - const wrapper = shallow( - {}} - /> - ); - assert(wrapper.find(MongodbAuthentication).exists()); - }); - - test('it renders SCRAM-SHA-256 when the auth strategy is set', () => { - const wrapper = shallow( - {}} - /> - ); - assert(wrapper.find(ScramSha256).exists()); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/connect-form/general-tab/general-tab.test.tsx b/src/test/suite/views/webview-app/legacy/components/connect-form/general-tab/general-tab.test.tsx deleted file mode 100644 index 8d4a5db28..000000000 --- a/src/test/suite/views/webview-app/legacy/components/connect-form/general-tab/general-tab.test.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { shallow } from 'enzyme'; - -import { GeneralTab } from '../../../../../../../../views/webview-app/legacy/components/connect-form/general-tab/general-tab'; -import Authentication from '../../../../../../../../views/webview-app/legacy/components/connect-form/general-tab/authentication/authentication'; -import HostInput from '../../../../../../../../views/webview-app/legacy/components/connect-form/general-tab/host/host'; - -describe('General Tab Component Test Suite', () => { - test('it shows host input, srv input, and authentication', () => { - const wrapper = shallow(); - assert(wrapper.find(Authentication).exists()); - assert(wrapper.find(HostInput).exists()); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/connect-form/general-tab/host.test.tsx b/src/test/suite/views/webview-app/legacy/components/connect-form/general-tab/host.test.tsx deleted file mode 100644 index 06a5f6b47..000000000 --- a/src/test/suite/views/webview-app/legacy/components/connect-form/general-tab/host.test.tsx +++ /dev/null @@ -1,257 +0,0 @@ -import assert from 'assert'; -import type { ShallowWrapper } from 'enzyme'; -import { shallow } from 'enzyme'; -import * as React from 'react'; -import sinon from 'sinon'; -import type { SinonSpy } from 'sinon'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faMinus, faPlus } from '@fortawesome/free-solid-svg-icons'; - -import { HostInput } from '../../../../../../../../views/webview-app/legacy/components/connect-form/general-tab/host/host'; -import FormGroup from '../../../../../../../../views/webview-app/legacy/components/form/form-group'; -import RadioBoxGroup from '../../../../../../../../views/webview-app/legacy/components/form/radio-box-group/radio-box-group'; - -describe('Host Component Test Suite', () => { - test('it shows a form group', () => { - const wrapper = shallow( - {}} - onPortChanged={(): void => {}} - setReplicaSet={(): void => {}} - toggleSRVRecord={(): void => {}} - updateHosts={(): void => {}} - /> - ); - assert(wrapper.find(FormGroup).exists()); - }); - - test('it shows the three connection types (standalone, replicaset, srv)', () => { - const wrapper = shallow( - {}} - onPortChanged={(): void => {}} - setReplicaSet={(): void => {}} - toggleSRVRecord={(): void => {}} - updateHosts={(): void => {}} - /> - ); - assert(wrapper.find(RadioBoxGroup).exists()); - assert( - wrapper.find(RadioBoxGroup).props().options[0].label === 'Standalone' - ); - assert( - wrapper.find(RadioBoxGroup).props().options[1].label === 'Replica Set' - ); - assert( - wrapper.find(RadioBoxGroup).props().options[2].label === 'SRV Record' - ); - }); - - describe('when there is no replicaSet and only one host', () => { - let wrapper: ShallowWrapper; - - beforeEach(() => { - wrapper = shallow( - {}} - onPortChanged={(): void => {}} - setReplicaSet={(): void => {}} - toggleSRVRecord={(): void => {}} - updateHosts={(): void => {}} - /> - ); - }); - - test('it shows the port input', () => { - assert(wrapper.find('#port').exists()); - }); - - test('it shows the hostname input', () => { - assert(wrapper.find('#hostname').exists()); - }); - - test('it shows a plus button to add a host', () => { - assert(wrapper.find(FontAwesomeIcon).prop('icon') === faPlus); - }); - - describe('when add host is clicked', () => { - let fakeSetReplicaSet: SinonSpy; - let fakeUpdateHosts: SinonSpy; - - beforeEach(() => { - fakeSetReplicaSet = sinon.fake.returns(undefined); - fakeUpdateHosts = sinon.fake.returns(undefined); - - wrapper.setProps({ - setReplicaSet: fakeSetReplicaSet, - updateHosts: fakeUpdateHosts, - }); - - wrapper.find('button').simulate('click', { - preventDefault: () => {}, - }); - }); - - test('it calls to set the replica set to a string', () => { - assert(fakeSetReplicaSet.called); - assert(fakeSetReplicaSet.firstCall.args[0] === ''); - }); - - test('it calls to update hosts to add a new default host', () => { - assert(fakeUpdateHosts.called); - assert(fakeUpdateHosts.firstCall.args[0].length === 2); - assert(fakeUpdateHosts.firstCall.args[0][1].host === 'localhost'); - assert(fakeUpdateHosts.firstCall.args[0][1].port === 27017); - }); - }); - }); - - describe('when there is a replicaSet or more than one host', () => { - let wrapper: ShallowWrapper; - - beforeEach(() => { - wrapper = shallow( - {}} - onPortChanged={(): void => {}} - setReplicaSet={(): void => {}} - toggleSRVRecord={(): void => {}} - updateHosts={(): void => {}} - /> - ); - }); - - test('it shows hostname input', () => { - assert(wrapper.find('#host-name-0').exists()); - }); - - test('it shows the port input', () => { - assert(wrapper.find('#host-port-0').exists()); - }); - - test('it shows a plus button to add a host', () => { - assert(wrapper.find(FontAwesomeIcon).prop('icon') === faPlus); - }); - - test('it does not show a minus button to remove the host', () => { - assert(wrapper.find(FontAwesomeIcon).length === 1); - }); - - describe('when there is more than one host', () => { - beforeEach(() => { - wrapper.setProps({ - hosts: [ - { - host: 'underwaterhost', - port: 27020, - }, - { - host: 'outerspacehost', - port: 27029, - }, - ], - }); - }); - - it('shows a minus button to remove the host', () => { - assert(wrapper.find(FontAwesomeIcon).at(1).prop('icon') === faMinus); - }); - - it('shows host name input for each host', () => { - assert(wrapper.find('#host-name-0').exists()); - assert( - wrapper.find('#host-name-0').props().value === 'underwaterhost', - `Expected '${wrapper - .find('#host-name-0') - .text()}' to equal 'underwaterhost'` - ); - assert(wrapper.find('#host-name-1').exists()); - assert(wrapper.find('#host-name-1').props().value === 'outerspacehost'); - }); - - it('shows host port input for each host', () => { - assert(wrapper.find('#host-port-0').exists()); - assert(wrapper.find('#host-port-0').props().value === 27020); - assert(wrapper.find('#host-port-1').exists()); - assert(wrapper.find('#host-port-1').props().value === 27029); - }); - - describe('when remove host is clicked', () => { - let fakeUpdateHosts: SinonSpy; - - beforeEach(() => { - fakeUpdateHosts = sinon.fake.returns(undefined); - - wrapper.setProps({ - updateHosts: fakeUpdateHosts, - }); - - wrapper - .find('button') - .at(1) - .simulate('click', { - preventDefault: () => {}, - }); - }); - - test('it calls to update hosts to with one less host', () => { - assert(fakeUpdateHosts.called); - assert(fakeUpdateHosts.firstCall.args[0].length === 1); - assert( - fakeUpdateHosts.firstCall.args[0][0].host === 'outerspacehost' - ); - assert(fakeUpdateHosts.firstCall.args[0][0].port === 27029); - }); - }); - }); - }); - - describe('when srvRecord is true', () => { - let wrapper: ShallowWrapper; - - beforeEach(() => { - wrapper = shallow( - {}} - onPortChanged={(): void => {}} - setReplicaSet={(): void => {}} - toggleSRVRecord={(): void => {}} - updateHosts={(): void => {}} - /> - ); - }); - - test('it shows hostname input', () => { - assert(wrapper.find('#hostname').exists()); - }); - - test('it does not show the port input', () => { - assert(!wrapper.find('#port').exists()); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/connect-helper/connect-helper.test.tsx b/src/test/suite/views/webview-app/legacy/components/connect-helper/connect-helper.test.tsx deleted file mode 100644 index ff0fb6f48..000000000 --- a/src/test/suite/views/webview-app/legacy/components/connect-helper/connect-helper.test.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import sinon from 'sinon'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; -import { createStore } from 'redux'; - -import ConnectHelper from '../../../../../../../views/webview-app/legacy/components/connect-helper/connect-helper'; -import type { AppState } from '../../../../../../../views/webview-app/legacy/store/store'; -import { - initialState, - rootReducer, -} from '../../../../../../../views/webview-app/legacy/store/store'; - -describe('Connect Helper Component Test Suite', () => { - describe('when rendered', () => { - let fakeVscodeWindowPostMessage; - let wrapper; - let store; - - beforeEach(() => { - fakeVscodeWindowPostMessage = sinon.fake.returns(null); - - sinon.replace( - (global as any).vscodeFake, - 'postMessage', - fakeVscodeWindowPostMessage - ); - - store = createStore(rootReducer, { - ...initialState, - } as AppState); - - wrapper = mount( - - - - ); - }); - - afterEach(() => { - sinon.restore(); - }); - - test('when onOpenConnectionStringInput is clicked it posts a message to vscode to open the input', () => { - wrapper.find('button').at(0).simulate('click'); - assert(fakeVscodeWindowPostMessage.called); - assert( - fakeVscodeWindowPostMessage.firstCall.args[0].command === - 'OPEN_CONNECTION_STRING_INPUT' - ); - }); - - test('when onOpenConnectionFrom is clicked it shows the connect form modal', () => { - assert(store.getState().showConnectForm === false); - wrapper.find('button').at(1).simulate('click'); - assert(store.getState().showConnectForm); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/connection-status/connection-status.test.tsx b/src/test/suite/views/webview-app/legacy/components/connection-status/connection-status.test.tsx deleted file mode 100644 index cc80ecbcf..000000000 --- a/src/test/suite/views/webview-app/legacy/components/connection-status/connection-status.test.tsx +++ /dev/null @@ -1,175 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import sinon from 'sinon'; -import { mount, shallow } from 'enzyme'; -import { createStore } from 'redux'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faPencilAlt } from '@fortawesome/free-solid-svg-icons'; -import { Provider } from 'react-redux'; - -import ConnectionStatus, { - ConnectionStatus as PlainConnectionStatus, -} from '../../../../../../../views/webview-app/legacy/components/connection-status/connection-status'; -import { CONNECTION_STATUS } from '../../../../../../../views/webview-app/extension-app-message-constants'; -import type { AppState } from '../../../../../../../views/webview-app/legacy/store/store'; -import { - initialState, - rootReducer, -} from '../../../../../../../views/webview-app/legacy/store/store'; - -describe('Connection Status Component Test Suite', () => { - describe('connected connection status', () => { - test('it shows that it is connected to the connection name', () => { - const wrapper = shallow( - {}} - requestConnectionStatus={(): void => {}} - onClickRenameConnection={(): void => {}} - /> - ); - assert(wrapper.text().includes('Connected to:')); - assert(wrapper.text().includes('Active connection name')); - }); - - test('it shows a create playground button', () => { - const wrapper = shallow( - {}} - requestConnectionStatus={(): void => {}} - onClickRenameConnection={(): void => {}} - /> - ); - assert(wrapper.find('button').exists()); - }); - - test('it shows an edit connection name button', () => { - const wrapper = shallow( - {}} - requestConnectionStatus={(): void => {}} - onClickRenameConnection={(): void => {}} - /> - ); - assert(wrapper.find(FontAwesomeIcon).prop('icon') === faPencilAlt); - }); - - describe('with store actions', () => { - let fakeVscodeWindowPostMessage; - let wrapper; - let store; - - beforeEach(() => { - fakeVscodeWindowPostMessage = sinon.fake.returns(null); - - sinon.replace( - (global as any).vscodeFake, - 'postMessage', - fakeVscodeWindowPostMessage - ); - - store = createStore(rootReducer, { - ...initialState, - connectionStatus: CONNECTION_STATUS.CONNECTED, - } as AppState); - - wrapper = mount( - - - - ); - }); - - afterEach(() => { - sinon.restore(); - }); - - test('when the edit connection name button is clicked it posts a message to the extension to rename the connection', () => { - wrapper.find('button').at(0).simulate('click'); - assert(fakeVscodeWindowPostMessage.called); - assert( - fakeVscodeWindowPostMessage.secondCall.args[0].command === - 'RENAME_ACTIVE_CONNECTION' - ); - }); - }); - }); - - describe('disconnected', () => { - test('it shows a disconnect message', () => { - const wrapper = shallow( - {}} - requestConnectionStatus={(): void => {}} - onClickRenameConnection={(): void => {}} - /> - ); - assert(wrapper.text().includes('Not connected')); - }); - - test('it does not show a create playground button', () => { - const wrapper = shallow( - {}} - requestConnectionStatus={(): void => {}} - onClickRenameConnection={(): void => {}} - /> - ); - assert(wrapper.find('button').exists() === false); - }); - }); - - describe('connecting', () => { - test('it shows a connecting message', () => { - const wrapper = shallow( - {}} - requestConnectionStatus={(): void => {}} - onClickRenameConnection={(): void => {}} - /> - ); - assert(wrapper.text().includes('Connecting...')); - }); - }); - - describe('disconnecting', () => { - test('it shows a connecting message', () => { - const wrapper = shallow( - {}} - requestConnectionStatus={(): void => {}} - onClickRenameConnection={(): void => {}} - /> - ); - assert(wrapper.text().includes('Disconnecting...')); - }); - }); - - describe('loading', () => { - test('it shows a loading message', () => { - const wrapper = shallow( - {}} - requestConnectionStatus={(): void => {}} - onClickRenameConnection={(): void => {}} - /> - ); - assert(wrapper.text().includes('Loading...')); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/form/form-actions.test.tsx b/src/test/suite/views/webview-app/legacy/components/form/form-actions.test.tsx deleted file mode 100644 index 954f1ed18..000000000 --- a/src/test/suite/views/webview-app/legacy/components/form/form-actions.test.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import sinon from 'sinon'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; -import { createStore } from 'redux'; - -import FormActions from '../../../../../../../views/webview-app/legacy/components/form/form-actions'; -import type { AppState } from '../../../../../../../views/webview-app/legacy/store/store'; -import { - initialState, - rootReducer, -} from '../../../../../../../views/webview-app/legacy/store/store'; - -describe('Connect Form Actions Component Test Suite', () => { - describe('when rendered', () => { - let fakeVscodeWindowPostMessage; - let wrapper; - let store; - - beforeEach(() => { - fakeVscodeWindowPostMessage = sinon.fake.returns(null); - - sinon.replace( - (global as any).vscodeFake, - 'postMessage', - fakeVscodeWindowPostMessage - ); - - store = createStore(rootReducer, { - ...initialState, - showConnectForm: true, - } as AppState); - - wrapper = mount( - - - - ); - }); - - afterEach(() => { - sinon.restore(); - }); - - test('when connect is clicked it posts a message to vscode to connect', () => { - assert(!fakeVscodeWindowPostMessage.called); - wrapper.find('#connectButton').simulate('click'); - assert(fakeVscodeWindowPostMessage.called); - assert( - fakeVscodeWindowPostMessage.firstCall.args[0].command === - 'LEGACY_CONNECT' - ); - assert.deepStrictEqual( - fakeVscodeWindowPostMessage.firstCall.args[0].connectionModel, - store.getState().currentConnection - ); - }); - - test('when the cancel button is clicked it hides the connect form modal', () => { - assert(store.getState().showConnectForm === true); - wrapper.find('#cancelButton').simulate('click'); - assert(store.getState().showConnectForm === false); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/form/radio-box-group/radio-box-group.test.tsx b/src/test/suite/views/webview-app/legacy/components/form/radio-box-group/radio-box-group.test.tsx deleted file mode 100644 index 149b4cd0e..000000000 --- a/src/test/suite/views/webview-app/legacy/components/form/radio-box-group/radio-box-group.test.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { mount } from 'enzyme'; - -import RadioBoxGroup from '../../../../../../../../views/webview-app/legacy/components/form/radio-box-group/radio-box-group'; - -describe('Radio Box Group Component Test Suite', () => { - describe('when rendered', () => { - let didCallChangeHandler = false; - let changeHandlerCalledValue; - const changeHandler = (evt: React.ChangeEvent): void => { - didCallChangeHandler = true; - changeHandlerCalledValue = evt.target.value; - }; - - const wrapper = mount( - - ); - - test('it shows an input for each option', () => { - assert(wrapper.find('input').length === 2); - }); - - test('it shows the group label', () => { - assert(wrapper.find('label').at(0).text() === 'Box form label'); - }); - - test('when an option is clicked it calls the onChange prop with that value', () => { - assert(!didCallChangeHandler); - wrapper.find('input').at(0).simulate('change'); - assert(didCallChangeHandler); - assert(changeHandlerCalledValue === 'pineapple'); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/overview-page/overview-page.test.tsx b/src/test/suite/views/webview-app/legacy/components/overview-page/overview-page.test.tsx deleted file mode 100644 index 5dd930185..000000000 --- a/src/test/suite/views/webview-app/legacy/components/overview-page/overview-page.test.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { shallow } from 'enzyme'; - -import { OverviewPage } from '../../../../../../../views/webview-app/legacy/components/overview-page/overview-page'; -import ConnectHelper from '../../../../../../../views/webview-app/legacy/components/connect-helper/connect-helper'; -import ConnectionStatus from '../../../../../../../views/webview-app/legacy/components/connection-status/connection-status'; -import OverviewHeader from '../../../../../../../views/webview-app/legacy/components/overview-page/overview-header/overview-header'; -import ConnectionFormModal from '../../../../../../../views/webview-app/legacy/components/connect-form-modal/connect-form-modal'; -import ResourcesPanel from '../../../../../../../views/webview-app/legacy/components/resources-panel/resources-panel'; - -describe('Overview Page Component Test Suite', () => { - describe('when rendered', () => { - const wrapper = shallow( - - ); - - test('it shows an overview header', () => { - assert(wrapper.find(OverviewHeader).exists()); - }); - - test('it shows the connection status', () => { - assert(wrapper.find(ConnectionStatus).exists()); - }); - - test('it shows the connect helper', () => { - assert(wrapper.find(ConnectHelper).exists()); - }); - - test('it does not show the connect form modal', () => { - assert(!wrapper.find(ConnectionFormModal).exists()); - }); - - test('it does not show the resources panel', () => { - assert(!wrapper.find(ResourcesPanel).exists()); - }); - }); - - describe('when rendered with showConnectForm', () => { - const wrapper = shallow( - - ); - - test('it shows the connect form', () => { - assert(wrapper.find(ConnectionFormModal).exists()); - }); - }); - - describe('when rendered with showResourcesPanel', () => { - const wrapper = shallow( - - ); - - test('it shows the resources panel', () => { - assert(wrapper.find(ResourcesPanel).exists()); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/components/resources-panel/resources-panel.test.tsx b/src/test/suite/views/webview-app/legacy/components/resources-panel/resources-panel.test.tsx deleted file mode 100644 index 2a33e1bfb..000000000 --- a/src/test/suite/views/webview-app/legacy/components/resources-panel/resources-panel.test.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import assert from 'assert'; -import * as React from 'react'; -import { mount } from 'enzyme'; -import sinon from 'sinon'; -import { createStore } from 'redux'; -import { Provider } from 'react-redux'; - -import type { AppState } from '../../../../../../../views/webview-app/legacy/store/store'; -import { - initialState, - rootReducer, -} from '../../../../../../../views/webview-app/legacy/store/store'; -import ResourcesPanel from '../../../../../../../views/webview-app/legacy/components/resources-panel/resources-panel'; - -describe('Resources Panel Component Test Suite', () => { - describe('when rendered', () => { - let fakeVscodeWindowPostMessage; - let wrapper; - let store; - - beforeEach(() => { - fakeVscodeWindowPostMessage = sinon.fake.returns(null); - - sinon.replace( - (global as any).vscodeFake, - 'postMessage', - fakeVscodeWindowPostMessage - ); - - store = createStore(rootReducer, { - ...initialState, - showResourcesPanel: true, - } as AppState); - - wrapper = mount( - - - - ); - }); - - afterEach(() => { - sinon.restore(); - }); - - test('when the x is clicked it closes the panel', () => { - assert(store.getState().showResourcesPanel === true); - wrapper.find('button').at(0).simulate('click'); - assert(store.getState().showResourcesPanel === false); - }); - - test('when a link is clicked it sends a telemetry event to the extension', () => { - assert(!fakeVscodeWindowPostMessage.called); - wrapper.find('a').at(0).simulate('click'); - assert(fakeVscodeWindowPostMessage.called); - assert( - fakeVscodeWindowPostMessage.firstCall.args[0].command === - 'EXTENSION_LINK_CLICKED' - ); - }); - }); -}); diff --git a/src/test/suite/views/webview-app/legacy/store/store.test.ts b/src/test/suite/views/webview-app/legacy/store/store.test.ts deleted file mode 100644 index bc405b7ab..000000000 --- a/src/test/suite/views/webview-app/legacy/store/store.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import assert from 'assert'; - -import { rootReducer } from '../../../../../../views/webview-app/legacy/store/store'; - -describe('Webview Store Test Suite', () => { - test('ensure the state updates on an action call', () => { - const resultingState = rootReducer(undefined, { - type: 'CONNECTION_EVENT_OCCURED', - connectionAttemptId: null, - successfullyConnected: true, - } as any); - assert(resultingState.isConnected); - }); - - test("ensure we don't update connection status when the connectionAttemptId doesnt match the current one", () => { - const resultingState = rootReducer(undefined, { - type: 'CONNECTION_EVENT_OCCURED', - connectionAttemptId: 'aaa', - successfullyConnected: true, - } as any); - assert(!resultingState.isConnected); - }); -}); diff --git a/src/test/suite/views/webviewController.test.ts b/src/test/suite/views/webviewController.test.ts index 48417e107..1231abc2a 100644 --- a/src/test/suite/views/webviewController.test.ts +++ b/src/test/suite/views/webviewController.test.ts @@ -127,80 +127,6 @@ suite('Webview Test Suite', () => { ); }); - // TODO: VSCODE-491 - Remove this test case entirely when getting rid of legacy - test('web view listens for a legacy connect message and adds the connection', (done) => { - const extensionContextStub = new ExtensionContextStub(); - const testStorageController = new StorageController(extensionContextStub); - const testTelemetryService = new TelemetryService( - testStorageController, - extensionContextStub - ); - const testConnectionController = new ConnectionController({ - statusView: new StatusView(extensionContextStub), - storageController: testStorageController, - telemetryService: testTelemetryService, - }); - let messageReceivedSet = false; - let messageReceived; - - sandbox.stub(testTelemetryService, 'trackNewConnection'); - - const fakeWebview = { - html: '', - postMessage: async (): Promise => { - assert(testConnectionController.isCurrentlyConnected()); - assert( - testConnectionController.getActiveConnectionName() === - 'localhost:27088' - ); - - await testConnectionController.disconnect(); - done(); - }, - onDidReceiveMessage: (callback): void => { - messageReceived = callback; - messageReceivedSet = true; - }, - asWebviewUri: sandbox.fake.returns(''), - }; - - const fakeVSCodeCreateWebviewPanel = sandbox.fake.returns({ - webview: fakeWebview, - onDidDispose: sandbox.fake.returns(''), - }); - - sandbox.replace( - vscode.window, - 'createWebviewPanel', - fakeVSCodeCreateWebviewPanel - ); - - const testWebviewController = new WebviewController({ - connectionController: testConnectionController, - storageController: testStorageController, - telemetryService: testTelemetryService, - }); - - void testWebviewController.openWebview( - mdbTestExtension.extensionContextStub - ); - - assert( - messageReceivedSet, - 'Ensure it starts listening for messages from the webview.' - ); - - // Mock a connection call. - messageReceived({ - command: MESSAGE_TYPES.LEGACY_CONNECT, - connectionModel: { - port: 27088, - hostname: 'localhost', - hosts: [{ host: 'localhost', port: 27088 }], - }, - }); - }); - test('web view listens for a connect message and adds the connection', (done) => { const extensionContextStub = new ExtensionContextStub(); const testStorageController = new StorageController(extensionContextStub); @@ -340,11 +266,13 @@ suite('Webview Test Suite', () => { // Mock a connection call. messageReceived({ - command: MESSAGE_TYPES.LEGACY_CONNECT, - connectionModel: { - port: 27088, - hostname: 'localhost', - hosts: [{ host: 'localhost', port: 27088 }], + command: MESSAGE_TYPES.CONNECT, + connectionAttemptId: 'pineapple', + connectionInfo: { + id: 'test', + connectionOptions: { + connectionString: 'mongodb://localhost:27088', + }, }, }); }); @@ -402,10 +330,14 @@ suite('Webview Test Suite', () => { // Mock a connection call. messageReceived({ - command: MESSAGE_TYPES.LEGACY_CONNECT, - connectionModel: { - port: 2700002, // Bad port number. - hostname: 'localhost', + command: MESSAGE_TYPES.CONNECT, + connectionAttemptId: 'pineapple', + connectionInfo: { + id: 'test', + connectionOptions: { + // bad port number. + connectionString: 'mongodb://localhost:2700002', + }, }, }); }); @@ -469,13 +401,14 @@ suite('Webview Test Suite', () => { // Mock a connection call. messageReceived({ - command: MESSAGE_TYPES.LEGACY_CONNECT, - connectionModel: { - port: 27088, - hostname: 'shouldfail', - connectTimeoutMS: 500, - socketTimeoutMS: 500, - serverSelectionTimeoutMS: 500, + command: MESSAGE_TYPES.CONNECT, + connectionAttemptId: 'pineapple', + connectionInfo: { + id: 'test', + connectionOptions: { + connectionString: + 'mongodb://shouldfail:27088?connectTimeoutMS=500&serverSelectionTimeoutMS=500&socketTimeoutMS=500', + }, }, }); @@ -484,139 +417,6 @@ suite('Webview Test Suite', () => { ); }); - test('web view opens file picker on file picker request', (done) => { - const extensionContextStub = new ExtensionContextStub(); - const testStorageController = new StorageController(extensionContextStub); - const testTelemetryService = new TelemetryService( - testStorageController, - extensionContextStub - ); - const testConnectionController = new ConnectionController({ - statusView: new StatusView(extensionContextStub), - storageController: testStorageController, - telemetryService: testTelemetryService, - }); - const fakeVSCodeOpenDialog = sandbox.fake.resolves({ - path: '/somefilepath/test.text', - }); - let messageReceived; - - sandbox.stub(testTelemetryService, 'trackNewConnection'); - - const fakeWebview = { - html: '', - postMessage: async (): Promise => { - assert(fakeVSCodeOpenDialog.called); - assert(fakeVSCodeOpenDialog.firstCall.args[0].canSelectFiles); - - await testConnectionController.disconnect(); - done(); - }, - onDidReceiveMessage: (callback): void => { - messageReceived = callback; - }, - asWebviewUri: sandbox.fake.returns(''), - }; - - const fakeVSCodeCreateWebviewPanel = sandbox.fake.returns({ - webview: fakeWebview, - onDidDispose: sandbox.fake.returns(''), - }); - sandbox.replace( - vscode.window, - 'createWebviewPanel', - fakeVSCodeCreateWebviewPanel - ); - - sandbox.replace(vscode.window, 'showOpenDialog', fakeVSCodeOpenDialog); - - const testWebviewController = new WebviewController({ - connectionController: testConnectionController, - storageController: testStorageController, - telemetryService: testTelemetryService, - }); - - void testWebviewController.openWebview( - mdbTestExtension.extensionContextStub - ); - - // Mock a connection call. - messageReceived({ - command: MESSAGE_TYPES.OPEN_FILE_PICKER, - action: 'file_action', - }); - }); - - test('web view returns file name on file picker request', (done) => { - const extensionContextStub = new ExtensionContextStub(); - const testStorageController = new StorageController(extensionContextStub); - const testTelemetryService = new TelemetryService( - testStorageController, - extensionContextStub - ); - const testConnectionController = new ConnectionController({ - statusView: new StatusView(extensionContextStub), - storageController: testStorageController, - telemetryService: testTelemetryService, - }); - let messageReceived; - - sandbox.stub(testTelemetryService, 'trackNewConnection'); - - const fakeWebview = { - html: '', - postMessage: async (message): Promise => { - try { - assert.strictEqual(message.action, 'file_action'); - assert.strictEqual(message.files[0], '/somefilepath/test.text'); - - done(); - } catch (e) { - done(e); - } - - await testConnectionController.disconnect(); - }, - onDidReceiveMessage: (callback): void => { - messageReceived = callback; - }, - asWebviewUri: sandbox.fake.returns(''), - }; - const fakeVSCodeCreateWebviewPanel = sandbox.fake.returns({ - webview: fakeWebview, - onDidDispose: sandbox.fake.returns(''), - }); - - sandbox.replace( - vscode.window, - 'createWebviewPanel', - fakeVSCodeCreateWebviewPanel - ); - - const fakeVSCodeOpenDialog = sandbox.fake.resolves([ - { - fsPath: '/somefilepath/test.text', - }, - ]); - - sandbox.replace(vscode.window, 'showOpenDialog', fakeVSCodeOpenDialog); - - const testWebviewController = new WebviewController({ - connectionController: testConnectionController, - storageController: testStorageController, - telemetryService: testTelemetryService, - }); - - void testWebviewController.openWebview( - mdbTestExtension.extensionContextStub - ); - - messageReceived({ - command: MESSAGE_TYPES.OPEN_FILE_PICKER, - action: 'file_action', - }); - }); - test('web view runs the "connectWithURI" command when open connection string input is recieved', (done) => { const extensionContextStub = new ExtensionContextStub(); const testStorageController = new StorageController(extensionContextStub); diff --git a/src/views/webview-app/app.tsx b/src/views/webview-app/app.tsx index 756197f26..3dc496644 100644 --- a/src/views/webview-app/app.tsx +++ b/src/views/webview-app/app.tsx @@ -1,6 +1,4 @@ import React from 'react'; -import { getFeatureFlag } from '../../featureFlags'; -import LegacyApp from './legacy/app-with-store'; import OverviewPage from './overview-page'; import { LeafyGreenProvider } from '@mongodb-js/compass-components'; import { useDetectVsCodeDarkMode } from './use-detect-vscode-dark-mode'; @@ -8,9 +6,7 @@ import { useDetectVsCodeDarkMode } from './use-detect-vscode-dark-mode'; const App: React.FC = () => { const darkMode = useDetectVsCodeDarkMode(); - return getFeatureFlag('useOldConnectionForm') ? ( - - ) : ( + return ( diff --git a/src/views/webview-app/connection-form.tsx b/src/views/webview-app/connection-form.tsx index 42e339ba5..6bdbc5f26 100644 --- a/src/views/webview-app/connection-form.tsx +++ b/src/views/webview-app/connection-form.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import type { ComponentProps } from 'react'; import CompassConnectionForm from '@mongodb-js/connection-form'; import { CancelLoader, @@ -9,7 +10,6 @@ import { useDarkMode, } from '@mongodb-js/compass-components'; import { v4 as uuidv4 } from 'uuid'; -import type { ConnectionInfo } from 'mongodb-data-service-legacy'; const modalContentStyles = css({ // Override LeafyGreen width to accommodate the strict connection-form size. @@ -55,7 +55,9 @@ const initialConnectionInfo = createNewConnectionInfo(); const ConnectionForm: React.FunctionComponent<{ isConnecting: boolean; onCancelConnectClicked: () => void; - onConnectClicked: (connectionInfo: ConnectionInfo) => void; + onConnectClicked: ComponentProps< + typeof CompassConnectionForm + >['onConnectClicked']; onClose: () => void; open: boolean; connectionErrorMessage: string; diff --git a/src/views/webview-app/extension-app-message-constants.ts b/src/views/webview-app/extension-app-message-constants.ts index 27e8e5d30..aa3d71d1d 100644 --- a/src/views/webview-app/extension-app-message-constants.ts +++ b/src/views/webview-app/extension-app-message-constants.ts @@ -1,6 +1,4 @@ -import type LegacyConnectionModel from './legacy/connection-model/legacy-connection-model'; -import type { FilePickerActionTypes } from './legacy/store/actions'; -import type { ConnectionInfo } from 'mongodb-data-service-legacy'; +import type { ConnectionOptions } from 'mongodb-data-service'; export enum CONNECTION_STATUS { LOADING = 'LOADING', // When the connection status has not yet been shared from the extension. @@ -16,15 +14,12 @@ export const VSCODE_EXTENSION_SEGMENT_ANONYMOUS_ID = export enum MESSAGE_TYPES { CONNECT = 'CONNECT', CANCEL_CONNECT = 'CANCEL_CONNECT', - LEGACY_CONNECT = 'LEGACY_CONNECT', CONNECT_RESULT = 'CONNECT_RESULT', CONNECTION_STATUS_MESSAGE = 'CONNECTION_STATUS_MESSAGE', EXTENSION_LINK_CLICKED = 'EXTENSION_LINK_CLICKED', CREATE_NEW_PLAYGROUND = 'CREATE_NEW_PLAYGROUND', - FILE_PICKER_RESULTS = 'FILE_PICKER_RESULTS', GET_CONNECTION_STATUS = 'GET_CONNECTION_STATUS', OPEN_CONNECTION_STRING_INPUT = 'OPEN_CONNECTION_STRING_INPUT', - OPEN_FILE_PICKER = 'OPEN_FILE_PICKER', OPEN_TRUSTED_LINK = 'OPEN_TRUSTED_LINK', RENAME_ACTIVE_CONNECTION = 'RENAME_ACTIVE_CONNECTION', THEME_CHANGED = 'THEME_CHANGED', @@ -46,7 +41,10 @@ export interface ConnectionStatusMessage extends BasicWebviewMessage { export interface ConnectMessage extends BasicWebviewMessage { command: MESSAGE_TYPES.CONNECT; - connectionInfo: ConnectionInfo; + connectionInfo: { + id: string; + connectionOptions: ConnectionOptions; + }; connectionAttemptId: string; } @@ -54,13 +52,6 @@ export interface CancelConnectMessage extends BasicWebviewMessage { command: MESSAGE_TYPES.CANCEL_CONNECT; } -// TODO: VSCODE-491 - Remove this entirely when getting rid of legacy -export interface LegacyConnectMessage extends BasicWebviewMessage { - command: MESSAGE_TYPES.LEGACY_CONNECT; - connectionModel: LegacyConnectionModel; - connectionAttemptId: string; -} - export interface ConnectResultsMessage extends BasicWebviewMessage { command: MESSAGE_TYPES.CONNECT_RESULT; connectionSuccess: boolean; @@ -76,19 +67,6 @@ export interface OpenConnectionStringInputMessage extends BasicWebviewMessage { command: MESSAGE_TYPES.OPEN_CONNECTION_STRING_INPUT; } -// Note: In the app this is tightly coupled with 'externals.ts'. -export interface OpenFilePickerMessage extends BasicWebviewMessage { - command: MESSAGE_TYPES.OPEN_FILE_PICKER; - action: FilePickerActionTypes; - multi: boolean; -} - -export interface FilePickerResultsMessage extends BasicWebviewMessage { - command: MESSAGE_TYPES.FILE_PICKER_RESULTS; - action: FilePickerActionTypes; - files: string[] | undefined; -} - export interface LinkClickedMessage extends BasicWebviewMessage { command: MESSAGE_TYPES.EXTENSION_LINK_CLICKED; screen: string; @@ -112,17 +90,14 @@ export interface ThemeChangedMessage extends BasicWebviewMessage { export type MESSAGE_FROM_WEBVIEW_TO_EXTENSION = | ConnectMessage | CancelConnectMessage - | LegacyConnectMessage | CreateNewPlaygroundMessage | GetConnectionStatusMessage | LinkClickedMessage | OpenConnectionStringInputMessage - | OpenFilePickerMessage | OpenTrustedLinkMessage | RenameConnectionMessage; export type MESSAGE_FROM_EXTENSION_TO_WEBVIEW = | ConnectResultsMessage - | FilePickerResultsMessage | ConnectionStatusMessage | ThemeChangedMessage; diff --git a/src/views/webview-app/legacy/app-with-store.tsx b/src/views/webview-app/legacy/app-with-store.tsx deleted file mode 100644 index e4cacd22b..000000000 --- a/src/views/webview-app/legacy/app-with-store.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from 'react'; -import { Provider } from 'react-redux'; -import { createStore } from 'redux'; - -import App from './components/app'; - -import { initialState, rootReducer } from './store/store'; - -const store = createStore(rootReducer, initialState); - -export default () => ( - - - -); diff --git a/src/views/webview-app/legacy/components/app.less b/src/views/webview-app/legacy/components/app.less deleted file mode 100644 index ed1a4a6e0..000000000 --- a/src/views/webview-app/legacy/components/app.less +++ /dev/null @@ -1,27 +0,0 @@ -@import '~../styles/_variables'; - -:root { - // NOTE: This green is updated in the code dynamically - // and updates on the current color theme of vscode (light vs dark). - --mongodb-green: @green; -} - -:global(.vscode-light) { - --mongodb-green: @green-dark; -} - -a { - color: var(--mongodb-green); -} - -a:hover { - color: var(--mongodb-green); -} - -*:focus { - outline-color: @green-selected; -} - -a:focus { - outline-color: @green-selected; -} diff --git a/src/views/webview-app/legacy/components/app.tsx b/src/views/webview-app/legacy/components/app.tsx deleted file mode 100644 index 54cb208aa..000000000 --- a/src/views/webview-app/legacy/components/app.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import OverviewPage from './overview-page/overview-page'; -import type { - ConnectionEventOccuredAction, - FilePickerActions, - FilePickerActionTypes, - SetConnectionStatusAction, -} from '../store/actions'; -import { ActionTypes } from '../store/actions'; -import type { - CONNECTION_STATUS, - MESSAGE_FROM_EXTENSION_TO_WEBVIEW, -} from '../../extension-app-message-constants'; -import { MESSAGE_TYPES } from '../../extension-app-message-constants'; - -import styles from '../connect.module.less'; - -import './app.less'; - -type DispatchProps = { - onConnectedEvent: ( - connectionAttemptId: string, - successfullyConnected: boolean, - connectionMessage: string - ) => void; - onFilePickerEvent: ( - action: FilePickerActionTypes, - files: string[] | undefined - ) => void; - setConnectionStatus: ( - connectionStatus: CONNECTION_STATUS, - activeConnectionName: string - ) => void; -}; - -export class App extends React.Component { - componentDidMount(): void { - window.addEventListener('message', this.handleMessageFromExtension); - } - - componentWillUnmount() { - window.removeEventListener('message', this.handleMessageFromExtension); - } - - handleMessageFromExtension = (event) => { - const message: MESSAGE_FROM_EXTENSION_TO_WEBVIEW = event.data; - - switch (message.command) { - case MESSAGE_TYPES.CONNECT_RESULT: - this.props.onConnectedEvent( - message.connectionAttemptId, - message.connectionSuccess, - message.connectionMessage - ); - - return; - case MESSAGE_TYPES.CONNECTION_STATUS_MESSAGE: - this.props.setConnectionStatus( - message.connectionStatus, - message.activeConnectionName - ); - - return; - case MESSAGE_TYPES.FILE_PICKER_RESULTS: - this.props.onFilePickerEvent(message.action, message.files); - return; - default: - // No-op. - return; - } - }; - - render(): React.ReactNode { - return ( -
- -
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - onConnectedEvent: ( - connectionAttemptId: string, - successfullyConnected: boolean, - connectionMessage: string - ): ConnectionEventOccuredAction => ({ - type: ActionTypes.CONNECTION_EVENT_OCCURED, - connectionAttemptId, - successfullyConnected, - connectionMessage, - }), - onFilePickerEvent: ( - action: FilePickerActionTypes, - files: string[] | undefined - ): FilePickerActions => ({ - type: action, - files, - }), - setConnectionStatus: ( - connectionStatus: CONNECTION_STATUS, - activeConnectionName: string - ): SetConnectionStatusAction => ({ - type: ActionTypes.SET_CONNECTION_STATUS, - activeConnectionName, - connectionStatus, - }), -}; - -export default connect(null, mapDispatchToProps)(App); diff --git a/src/views/webview-app/legacy/components/atlas-cta/atlas-cta.less b/src/views/webview-app/legacy/components/atlas-cta/atlas-cta.less deleted file mode 100644 index e8cb4948f..000000000 --- a/src/views/webview-app/legacy/components/atlas-cta/atlas-cta.less +++ /dev/null @@ -1,41 +0,0 @@ -@import '~../../styles/_variables'; - -.atlas-cta { - display: flex; - text-align: center; - align-items: center; - width: 100%; - margin: 0 auto; -} - -.atlas-cta-text { - display: inline-block; - text-align: left; - width: 318px; - margin: 0 32px; -} - -.atlas-cta-logo { - display: inline-block; - margin-left: auto; -} - -.atlas-cta-button { - margin-right: auto; - display: inline-block; - height: 32px; - min-width: 152px; - line-height: 32px; - border-radius: 3px; - border: 1px solid var(--vscode-editor-foreground); - color: var(--vscode-editor-foreground); - background-color: transparent; - transition: 200ms all; - text-decoration: none; - - &:hover { - background-color: var(--vscode-editor-foreground); - color: var(--vscode-editor-background); - cursor: pointer; - } -} diff --git a/src/views/webview-app/legacy/components/atlas-cta/atlas-cta.tsx b/src/views/webview-app/legacy/components/atlas-cta/atlas-cta.tsx deleted file mode 100644 index a26c8edc5..000000000 --- a/src/views/webview-app/legacy/components/atlas-cta/atlas-cta.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { - LinkClickedAction, - TrustedLinkClickedAction, -} from '../../store/actions'; -import { ActionTypes } from '../../store/actions'; -import { VSCODE_EXTENSION_SEGMENT_ANONYMOUS_ID } from '../../../extension-app-message-constants'; -import AtlasLogo from './atlas-logo'; - -import styles from './atlas-cta.less'; -import LINKS from '../../../../../utils/links'; - -type DispatchProps = { - onLinkClicked: (screen: string, linkId: string) => void; - openTrustedLink: (linkTo: string) => void; -}; - -class AtlasCTA extends React.Component { - onAtlasCtaClicked = (): void => { - const telemetryUserId = window[VSCODE_EXTENSION_SEGMENT_ANONYMOUS_ID]; - const atlasLink = LINKS.createAtlasCluster(telemetryUserId); - this.props.openTrustedLink(atlasLink); - - this.onLinkClicked('overviewPage', 'freeClusterCTA'); - }; - - onLinkClicked = (screen: string, linkId: string): void => { - this.props.onLinkClicked(screen, linkId); - }; - - render(): React.ReactNode { - return ( -
-
{}
-
-
- New to MongoDB and don't have a cluster? -
-
- Create one for free using  - - MongoDB Atlas - - . -
-
- - Create free cluster - -
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - onLinkClicked: (screen, linkId): LinkClickedAction => ({ - type: ActionTypes.EXTENSION_LINK_CLICKED, - screen, - linkId, - }), - openTrustedLink: (linkTo: string): TrustedLinkClickedAction => ({ - type: ActionTypes.TRUSTED_LINK_CLICKED, - linkTo, - }), -}; - -export default connect(() => ({}), mapDispatchToProps)(AtlasCTA); diff --git a/src/views/webview-app/legacy/components/atlas-cta/atlas-logo.tsx b/src/views/webview-app/legacy/components/atlas-cta/atlas-logo.tsx deleted file mode 100644 index d22a45da5..000000000 --- a/src/views/webview-app/legacy/components/atlas-cta/atlas-logo.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from 'react'; - -export default class AtlasLogo extends React.PureComponent { - render(): React.ReactNode { - return ( - - - - - - - ); - } -} diff --git a/src/views/webview-app/legacy/components/connect-form-modal/connect-form-modal.less b/src/views/webview-app/legacy/components/connect-form-modal/connect-form-modal.less deleted file mode 100644 index 32bce3076..000000000 --- a/src/views/webview-app/legacy/components/connect-form-modal/connect-form-modal.less +++ /dev/null @@ -1,38 +0,0 @@ -.connect-form-modal { - position: absolute; - padding-bottom: 24px; - top: 54px; - width: 600px; - left: 0; - right: 0; - margin: 0 auto; - margin-bottom: 54px; - box-shadow: 4px 4px 7px rgba(0, 0, 0, 0.25); - background-color: var(--vscode-editor-background); - z-index: 10; -} - -.connect-form-modal-back { - background-color: rgba(37, 37, 38, 0.7); - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 5; -} - -.connect-form-modal-close { - position: absolute; - top: 26px; - right: 20px; - font-size: 18px; - background: none; - color: var(--vscode-editor-foreground); - transition: 250ms all; - border: none; - - &:hover { - cursor: pointer; - } -} diff --git a/src/views/webview-app/legacy/components/connect-form-modal/connect-form-modal.tsx b/src/views/webview-app/legacy/components/connect-form-modal/connect-form-modal.tsx deleted file mode 100644 index e1872ab49..000000000 --- a/src/views/webview-app/legacy/components/connect-form-modal/connect-form-modal.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faTimes } from '@fortawesome/free-solid-svg-icons'; - -import ConnectionForm from '../connect-form/connection-form'; -import type { ToggleShowConnectionFormAction } from '../../store/actions'; -import { ActionTypes } from '../../store/actions'; - -import styles from './connect-form-modal.less'; - -type DispatchProps = { - toggleShowConnectForm: () => void; -}; - -export class ConnectFormModal extends React.PureComponent { - render(): React.ReactNode { - return ( - -
this.props.toggleShowConnectForm()} - /> -
- - -
- - ); - } -} - -const mapDispatchToProps: DispatchProps = { - toggleShowConnectForm: (): ToggleShowConnectionFormAction => ({ - type: ActionTypes.TOGGLE_SHOW_CONNECTION_FORM, - }), -}; - -export default connect(null, mapDispatchToProps)(ConnectFormModal); diff --git a/src/views/webview-app/legacy/components/connect-form/advanced-tab/advanced-tab.tsx b/src/views/webview-app/legacy/components/connect-form/advanced-tab/advanced-tab.tsx deleted file mode 100644 index c3f7f309d..000000000 --- a/src/views/webview-app/legacy/components/connect-form/advanced-tab/advanced-tab.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from 'react'; - -import ReadPreferenceSelect from './read-preference-select'; - -class AdvancedTab extends React.Component { - render(): React.ReactNode { - return ( - - - - ); - } -} - -export default AdvancedTab; diff --git a/src/views/webview-app/legacy/components/connect-form/advanced-tab/read-preference-select.tsx b/src/views/webview-app/legacy/components/connect-form/advanced-tab/read-preference-select.tsx deleted file mode 100644 index c5e691619..000000000 --- a/src/views/webview-app/legacy/components/connect-form/advanced-tab/read-preference-select.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { AppState } from '../../../store/store'; -import type { ReadPreferenceChangedAction } from '../../../store/actions'; -import { ActionTypes } from '../../../store/actions'; -import RadioBoxGroup from '../../form/radio-box-group/radio-box-group'; -import READ_PREFERENCES from '../../../connection-model/constants/read-preferences'; - -type ReadPreferenceOption = { - label: string; - value: READ_PREFERENCES; -}; - -const ReadPreferencesOptions: ReadPreferenceOption[] = [ - { - label: 'Primary', - value: READ_PREFERENCES.PRIMARY, - }, - { - label: 'Primary Preferred', - value: READ_PREFERENCES.PRIMARY_PREFERRED, - }, - { - label: 'Secondary', - value: READ_PREFERENCES.SECONDARY, - }, - { - label: 'Secondary Preferred', - value: READ_PREFERENCES.SECONDARY_PREFERRED, - }, - { - label: 'Nearest', - value: READ_PREFERENCES.NEAREST, - }, -]; - -type StateProps = { - readPreference: READ_PREFERENCES; -}; - -type DispatchProps = { - onReadPreferenceChanged: (newReadPreference: READ_PREFERENCES) => void; -}; - -class ReadPreferenceSelect extends React.PureComponent< - StateProps & DispatchProps -> { - /** - * Handles a read preference change. - * - * @param {Object} evt - evt. - */ - onReadPreferenceChanged = (evt): void => { - this.props.onReadPreferenceChanged(evt.target.value); - }; - - render(): React.ReactNode { - const { readPreference } = this.props; - - return ( - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - readPreference: state.currentConnection.readPreference, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onReadPreferenceChanged: ( - newReadPreference: READ_PREFERENCES - ): ReadPreferenceChangedAction => ({ - type: ActionTypes.READ_PREFERENCE_CHANGED, - readPreference: newReadPreference, - }), -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(ReadPreferenceSelect); diff --git a/src/views/webview-app/legacy/components/connect-form/connection-form-tabs.tsx b/src/views/webview-app/legacy/components/connect-form/connection-form-tabs.tsx deleted file mode 100644 index 71e44f3bc..000000000 --- a/src/views/webview-app/legacy/components/connect-form/connection-form-tabs.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import classnames from 'classnames'; -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { SetConnectionFormTabAction } from '../../store/actions'; -import { ActionTypes } from '../../store/actions'; -import type { AppState } from '../../store/store'; -import { CONNECTION_FORM_TABS } from '../../store/constants'; - -import styles from './connection-form.less'; - -type StateProps = { - connectionFormTab: CONNECTION_FORM_TABS; -}; - -type DispatchProps = { - setConnectionFormTab: (connectionFormTab: CONNECTION_FORM_TABS) => void; -}; - -type props = StateProps & DispatchProps; - -export class ConnectionFormTabs extends React.Component { - onClickNewConnectFormTab = ( - e: React.MouseEvent, - newTab: CONNECTION_FORM_TABS - ): void => { - e.preventDefault(); - - this.props.setConnectionFormTab(newTab); - }; - - render(): React.ReactNode { - const { connectionFormTab } = this.props; - - return ( -
- - - - -
- ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - connectionFormTab: state.connectionFormTab, - }; -}; - -const mapDispatchToProps: DispatchProps = { - setConnectionFormTab: ( - connectionFormTab: CONNECTION_FORM_TABS - ): SetConnectionFormTabAction => ({ - type: ActionTypes.SET_CONNECTION_FORM_TAB, - connectionFormTab, - }), -}; - -export default connect(mapStateToProps, mapDispatchToProps)(ConnectionFormTabs); diff --git a/src/views/webview-app/legacy/components/connect-form/connection-form.less b/src/views/webview-app/legacy/components/connect-form/connection-form.less deleted file mode 100644 index 6b38e715c..000000000 --- a/src/views/webview-app/legacy/components/connect-form/connection-form.less +++ /dev/null @@ -1,103 +0,0 @@ -@import '~../../styles/_variables'; - -.connection-form { - margin-top: 0em; - padding: 15px 0; - - background-color: var(--vscode-editor-background); - color: var(--vscode-editor-foreground); - font-size: 14px; - line-height: 20px; - - display: inline-block; - width: 500px; - text-align: left; -} - -.connection-form-title { - font-size: 21px; - font-weight: 500; - font-style: normal; -} - -.connection-form-tabs-container { - list-style-type: none; - border-bottom: 1px solid rgba(75, 75, 75, 0.5); - padding: 0; - margin: 0; - margin-top: 10px; -} - -.connection-form-tab { - display: inline-block; - padding: 12px 14px; - position: relative; - font-weight: 500; - font-size: 16px; - font-style: normal; - background: none; - border: none; - outline: none; - color: var(--vscode-editor-foreground); - - &:hover { - cursor: pointer; - } - - &:focus { - &::after { - content: ''; - position: absolute; - bottom: 0px; - height: 4px; - left: -1px; - right: -1px; - pointer-events: none; - outline: none; - background-color: @green-selected; - border-top-left-radius: 3px; - border-top-right-radius: 3px; - animation-name: selectedConnectionTabAnimation; - animation-duration: 200ms; - } - } -} - -.connection-form-tab-selected { - color: @green-selected; -} - -.connection-form-tab-selected::after { - content: ''; - position: absolute; - bottom: 0px; - height: 4px; - left: -1px; - right: -1px; - margin-bottom: -1px; - pointer-events: none; - outline: none; - background-color: var(--mongodb-green); - border-top-left-radius: 3px; - border-top-right-radius: 3px; - animation-name: selectedConnectionTabAnimation; - animation-duration: 200ms; -} - -@keyframes selectedConnectionTabAnimation { - 0% { - height: 0px; - left: 50%; - right: 50%; - } - - 100% { - height: 4px; - left: -1px; - right: -1px; - } -} - -.connection-form-fields { - display: block; -} diff --git a/src/views/webview-app/legacy/components/connect-form/connection-form.tsx b/src/views/webview-app/legacy/components/connect-form/connection-form.tsx deleted file mode 100644 index ed8d9474f..000000000 --- a/src/views/webview-app/legacy/components/connect-form/connection-form.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { ConnectionFormChangedAction } from '../../store/actions'; -import { ActionTypes } from '../../store/actions'; -import SSLMethodTab from './ssl-tab/ssl-tab'; -import SSHTunnelTab from './ssh-tab/ssh-tunnel-tab'; -import FormActions from '../form/form-actions'; -import type { AppState } from '../../store/store'; -import { CONNECTION_FORM_TABS } from '../../store/constants'; -import AdvancedTab from './advanced-tab/advanced-tab'; -import GeneralTab from './general-tab/general-tab'; -import ConnectionFormTabs from './connection-form-tabs'; - -import styles from './connection-form.less'; - -type StateProps = { - connectionFormTab: CONNECTION_FORM_TABS; - connectionMessage: string; - errorMessage: string; - isConnected: boolean; - isConnecting: boolean; - isValid: boolean; - syntaxErrorMessage: string; -}; - -type DispatchProps = { - onConnectionFormChanged: () => void; -}; - -type props = StateProps & DispatchProps; - -export class ConnectionForm extends React.Component { - render(): React.ReactNode { - const { - connectionFormTab, - connectionMessage, - errorMessage, - isConnected, - isConnecting, - isValid, - onConnectionFormChanged, - syntaxErrorMessage, - } = this.props; - - return ( -
-

New connection

- - -
- {connectionFormTab === CONNECTION_FORM_TABS.GENERAL && } - {connectionFormTab === CONNECTION_FORM_TABS.SSL && } - {connectionFormTab === CONNECTION_FORM_TABS.SSH && } - {connectionFormTab === CONNECTION_FORM_TABS.ADVANCED && ( - - )} -
- - - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - connectionFormTab: state.connectionFormTab, - connectionMessage: state.connectionMessage, - errorMessage: state.errorMessage, - isConnected: state.isConnected, - isConnecting: state.isConnecting, - isValid: state.isValid, - syntaxErrorMessage: state.syntaxErrorMessage, - }; -}; - -const mapDispatchToProps: DispatchProps = { - // Resets URL validation if form was changed. - onConnectionFormChanged: (): ConnectionFormChangedAction => ({ - type: ActionTypes.CONNECTION_FORM_CHANGED, - }), -}; - -export default connect(mapStateToProps, mapDispatchToProps)(ConnectionForm); diff --git a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/authentication.tsx b/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/authentication.tsx deleted file mode 100644 index 5a01eabb0..000000000 --- a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/authentication.tsx +++ /dev/null @@ -1,136 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { AuthStrategyChangedAction } from '../../../../store/actions'; -import { ActionTypes } from '../../../../store/actions'; -import AUTH_STRATEGIES, { - AuthStrategies, -} from '../../../../connection-model/constants/auth-strategies'; -import FormGroup from '../../../form/form-group'; -import LDAP from './ldap'; -import MongoDBAuth from './mongodb-authentication'; -import ScramSha256 from './scram-sha-256'; -import X509 from './x509'; -import type { AppState } from '../../../../store/store'; -import RadioBoxGroup from '../../../form/radio-box-group/radio-box-group'; - -type StateProps = { - authStrategy: AUTH_STRATEGIES; - isValid: boolean; - ldapPassword?: string; - ldapUsername?: string; - mongodbDatabaseName?: string; - mongodbPassword?: string; - mongodbUsername?: string; - x509Username?: string; -}; - -type DispatchProps = { - onAuthStrategyChanged: (authStrategy: AUTH_STRATEGIES) => void; -}; - -export class Authentication extends React.Component< - StateProps & DispatchProps -> { - /** - * Changes an authentication strategy. - * - * @param {Object} evt - evt. - */ - onAuthStrategyChanged = (evt): void => { - this.props.onAuthStrategyChanged(evt.target.value); - }; - - /** - * Renders an authentication strategy component. - * - * @returns {React.Component} - */ - renderAuthStrategy(): React.ReactNode { - const { authStrategy, isValid } = this.props; - - if (authStrategy === AUTH_STRATEGIES.LDAP) { - const { ldapPassword, ldapUsername } = this.props; - - return ( - - ); - } - if (authStrategy === AUTH_STRATEGIES.MONGODB) { - const { mongodbDatabaseName, mongodbPassword, mongodbUsername } = - this.props; - - return ( - - ); - } - if (authStrategy === AUTH_STRATEGIES['SCRAM-SHA-256']) { - const { mongodbDatabaseName, mongodbPassword, mongodbUsername } = - this.props; - - return ( - - ); - } - if (authStrategy === AUTH_STRATEGIES.X509) { - const { x509Username } = this.props; - return ; - } - } - - render(): React.ReactNode { - const { authStrategy } = this.props; - - return ( - - ({ - label: authStrat.title, - value: authStrat.id, - }))} - onChange={this.onAuthStrategyChanged} - value={authStrategy} - /> - {this.renderAuthStrategy()} - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - authStrategy: state.currentConnection.authStrategy, - isValid: state.isValid, - ldapPassword: state.currentConnection.ldapPassword, - ldapUsername: state.currentConnection.ldapUsername, - mongodbDatabaseName: state.currentConnection.mongodbDatabaseName, - mongodbPassword: state.currentConnection.mongodbPassword, - mongodbUsername: state.currentConnection.mongodbUsername, - x509Username: state.currentConnection.x509Username, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onAuthStrategyChanged: (newAuthStrategy): AuthStrategyChangedAction => ({ - type: ActionTypes.AUTH_STRATEGY_CHANGED, - authStrategy: newAuthStrategy, - }), -}; - -export default connect(mapStateToProps, mapDispatchToProps)(Authentication); diff --git a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/ldap.tsx b/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/ldap.tsx deleted file mode 100644 index 8ee08381b..000000000 --- a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/ldap.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { - LDAPPasswordChangedAction, - LDAPUsernameChangedAction, -} from '../../../../store/actions'; -import { ActionTypes } from '../../../../store/actions'; -import FormInput from '../../../form/form-input'; -import LINKS from '../../../../../../../utils/links'; - -type DispatchProps = { - onLDAPPasswordChanged: (newPassword: string) => void; - onLDAPUsernameChanged: (newUsername: string) => void; -}; - -type props = { - isValid: boolean; - ldapPassword?: string; - ldapUsername?: string; -} & DispatchProps; - -/** - * The LDAP auth role component. - */ -class LDAP extends React.Component { - /** - * Handle the password change. - * - * @param {Event} evt - The event. - */ - onPasswordChanged = (evt): void => { - this.props.onLDAPPasswordChanged(evt.target.value); - }; - - /** - * Handle the username change. - * - * @param {Event} evt - The event. - */ - onUsernameChanged = (evt): void => { - this.props.onLDAPUsernameChanged(evt.target.value.trim()); - }; - - render(): React.ReactNode { - const { isValid, ldapPassword, ldapUsername } = this.props; - - return ( -
- - -
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - onLDAPPasswordChanged: (newPassword): LDAPPasswordChangedAction => ({ - type: ActionTypes.LDAP_PASSWORD_CHANGED, - ldapPassword: newPassword, - }), - onLDAPUsernameChanged: (newPassword): LDAPUsernameChangedAction => ({ - type: ActionTypes.LDAP_USERNAME_CHANGED, - ldapUsername: newPassword, - }), -}; - -export default connect(null, mapDispatchToProps)(LDAP); diff --git a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/mongodb-authentication.tsx b/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/mongodb-authentication.tsx deleted file mode 100644 index 161b60f84..000000000 --- a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/mongodb-authentication.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { - AuthSourceChangedAction, - PasswordChangedAction, - UsernameChangedAction, -} from '../../../../store/actions'; -import { ActionTypes } from '../../../../store/actions'; -import FormInput from '../../../form/form-input'; -import LINKS from '../../../../../../../utils/links'; - -type DispatchProps = { - onAuthSourceChanged: (newAuthSource: string) => void; - onPasswordChanged: (newPassword: string) => void; - onUsernameChanged: (newUsername: string) => void; -}; - -type props = { - isValid: boolean; - mongodbDatabaseName?: string; - mongodbPassword?: string; - mongodbUsername?: string; -} & DispatchProps; - -class MongoDBAuthentication extends React.Component { - /** - * Handles username change. - * - * @param {Object} evt - evt. - */ - onUsernameChanged = (evt): void => { - this.props.onUsernameChanged(evt.target.value.trim()); - }; - - /** - * Handles password change. - * - * @param {Object} evt - evt. - */ - onPasswordChanged = (evt): void => { - this.props.onPasswordChanged(evt.target.value); - }; - - /** - * Handles authSource change. - * - * @param {Object} evt - evt. - */ - onAuthSourceChanged = (evt): void => { - this.props.onAuthSourceChanged(evt.target.value); - }; - - render(): React.ReactNode { - const { isValid, mongodbDatabaseName, mongodbPassword, mongodbUsername } = - this.props; - - return ( -
- - - -
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - onAuthSourceChanged: (newAuthSource: string): AuthSourceChangedAction => ({ - type: ActionTypes.AUTH_SOURCE_CHANGED, - mongodbDatabaseName: newAuthSource, - }), - onPasswordChanged: (newPassword: string): PasswordChangedAction => ({ - type: ActionTypes.PASSWORD_CHANGED, - mongodbPassword: newPassword, - }), - onUsernameChanged: (newPassword: string): UsernameChangedAction => ({ - type: ActionTypes.USERNAME_CHANGED, - mongodbUsername: newPassword, - }), -}; - -export default connect(null, mapDispatchToProps)(MongoDBAuthentication); diff --git a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/scram-sha-256.tsx b/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/scram-sha-256.tsx deleted file mode 100644 index 8892d9db9..000000000 --- a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/scram-sha-256.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { - AuthSourceChangedAction, - PasswordChangedAction, - UsernameChangedAction, -} from '../../../../store/actions'; -import { ActionTypes } from '../../../../store/actions'; -import FormInput from '../../../form/form-input'; -import LINKS from '../../../../../../../utils/links'; - -type DispatchProps = { - onAuthSourceChanged: (newAuthSource: string) => void; - onPasswordChanged: (newPassword: string) => void; - onUsernameChanged: (newUsername: string) => void; -}; - -type props = { - isValid: boolean; - mongodbDatabaseName?: string; - mongodbPassword?: string; - mongodbUsername?: string; -} & DispatchProps; - -class ScramSha256 extends React.Component { - /** - * Handles username change. - * - * @param {Object} evt - evt. - */ - onUsernameChanged = (evt): void => { - this.props.onUsernameChanged(evt.target.value.trim()); - }; - - /** - * Handles password change. - * - * @param {Object} evt - evt. - */ - onPasswordChanged = (evt): void => { - this.props.onPasswordChanged(evt.target.value); - }; - - /** - * Handles authSource change. - * - * @param {Object} evt - evt. - */ - onAuthSourceChanged = (evt): void => { - this.props.onAuthSourceChanged(evt.target.value); - }; - - render(): React.ReactNode { - const { isValid, mongodbDatabaseName, mongodbPassword, mongodbUsername } = - this.props; - - return ( -
- - - -
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - onAuthSourceChanged: (newAuthSource: string): AuthSourceChangedAction => ({ - type: ActionTypes.AUTH_SOURCE_CHANGED, - mongodbDatabaseName: newAuthSource, - }), - onPasswordChanged: (newPassword: string): PasswordChangedAction => ({ - type: ActionTypes.PASSWORD_CHANGED, - mongodbPassword: newPassword, - }), - onUsernameChanged: (newPassword: string): UsernameChangedAction => ({ - type: ActionTypes.USERNAME_CHANGED, - mongodbUsername: newPassword, - }), -}; - -export default connect(null, mapDispatchToProps)(ScramSha256); diff --git a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/x509.tsx b/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/x509.tsx deleted file mode 100644 index 6ffdb1e2b..000000000 --- a/src/views/webview-app/legacy/components/connect-form/general-tab/authentication/x509.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { X509UsernameChangedAction } from '../../../../store/actions'; -import { ActionTypes } from '../../../../store/actions'; -import FormInput from '../../../form/form-input'; - -type DispatchProps = { - onX509UsernameChanged: (newUsername: string) => void; -}; - -type props = { - x509Username?: string; -} & DispatchProps; - -class X509 extends React.Component { - onUsernameChanged = (evt): void => { - this.props.onX509UsernameChanged(evt.target.value.trim()); - }; - - render(): React.ReactNode { - const { x509Username } = this.props; - - return ( -
- -
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - onX509UsernameChanged: (newUsername: string): X509UsernameChangedAction => ({ - type: ActionTypes.X509_USERNAME_CHANGED, - x509Username: newUsername, - }), -}; - -export default connect(null, mapDispatchToProps)(X509); diff --git a/src/views/webview-app/legacy/components/connect-form/general-tab/general-tab.tsx b/src/views/webview-app/legacy/components/connect-form/general-tab/general-tab.tsx deleted file mode 100644 index 6b70ea7e7..000000000 --- a/src/views/webview-app/legacy/components/connect-form/general-tab/general-tab.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import * as React from 'react'; - -import Divider from '../../form/divider/divider'; -import HostInput from './host/host'; -import Authentication from './authentication/authentication'; - -export class GeneralTab extends React.Component { - render(): React.ReactNode { - return ( - - - - - - ); - } -} - -export default GeneralTab; diff --git a/src/views/webview-app/legacy/components/connect-form/general-tab/host/host.less b/src/views/webview-app/legacy/components/connect-form/general-tab/host/host.less deleted file mode 100644 index a28f88ad4..000000000 --- a/src/views/webview-app/legacy/components/connect-form/general-tab/host/host.less +++ /dev/null @@ -1,49 +0,0 @@ -.host-input-area { - margin: 0; - margin-top: 15px; - display: flex; - flex-direction: row; - width: 100%; - align-items: center; -} - -.host-input-port { - margin: 0; - max-width: 30%; - margin-left: 10px; -} - -.host-input-host { - margin: 0; - margin-right: 10px; -} - -.host-add-host-button { - display: inline-block; - margin-left: 10px; - padding: 5px; - background: none; - color: var(--vscode-editor-foreground); - border: none; - - &:hover { - cursor: pointer; - } -} - -.first-host { - margin-top: 22px; -} - -.host-remove-host-button { - display: inline-block; - margin-left: 10px; - padding: 5px; - background: none; - color: var(--vscode-editor-foreground); - border: none; - - &:hover { - cursor: pointer; - } -} diff --git a/src/views/webview-app/legacy/components/connect-form/general-tab/host/host.tsx b/src/views/webview-app/legacy/components/connect-form/general-tab/host/host.tsx deleted file mode 100644 index 17b391b4a..000000000 --- a/src/views/webview-app/legacy/components/connect-form/general-tab/host/host.tsx +++ /dev/null @@ -1,373 +0,0 @@ -import classnames from 'classnames'; -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { - HostnameChangedAction, - HostsChangedAction, - IsSrvRecordToggledAction, - PortChangedAction, - ReplicaSetChangedAction, -} from '../../../../store/actions'; -import { ActionTypes } from '../../../../store/actions'; -import FormInput from '../../../form/form-input'; -import type { AppState } from '../../../../store/store'; -import FormGroup from '../../../form/form-group'; -import RadioBoxGroup from '../../../form/radio-box-group/radio-box-group'; -import type { Host } from '../../../../connection-model/legacy-connection-model'; -import { DEFAULT_HOST } from '../../../../connection-model/legacy-connection-model'; -import ReplicaSetInput from './replica-set-input'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faPlus, faMinus } from '@fortawesome/free-solid-svg-icons'; - -import styles from './host.less'; - -enum CONNECTION_TYPE { - STANDALONE = 'STANDALONE', - REPLICA_SET = 'REPLICA_SET', - SRV_RECORD = 'SRV_RECORD', -} - -const CONNECTION_TYPE_OPTIONS: { - [connectionType in CONNECTION_TYPE]: { - label: string; - value: CONNECTION_TYPE; - }; -} = { - [CONNECTION_TYPE.STANDALONE]: { - label: 'Standalone', - value: CONNECTION_TYPE.STANDALONE, - }, - [CONNECTION_TYPE.REPLICA_SET]: { - label: 'Replica Set', - value: CONNECTION_TYPE.REPLICA_SET, - }, - [CONNECTION_TYPE.SRV_RECORD]: { - label: 'SRV Record', - value: CONNECTION_TYPE.SRV_RECORD, - }, -}; - -type StateProps = { - hostname: string; - hosts: Host[]; - isSrvRecord: boolean; - port: number; - replicaSet?: string; -}; - -type DispatchProps = { - onHostnameChanged: (newHostName: string) => void; - onPortChanged: (newPort: number) => void; - setReplicaSet: (replicaSet?: string) => void; - toggleSRVRecord: () => void; - updateHosts: (hosts: Host[]) => void; -}; - -export class HostInput extends React.PureComponent { - onConnectionTypeChange = ( - event: React.ChangeEvent - ): void => { - switch (event.target.value as CONNECTION_TYPE) { - case CONNECTION_TYPE.STANDALONE: - this.props.setReplicaSet(); - if (this.props.hosts.length > 1) { - // Remove extra hosts when moving to standalone from replica set. - this.props.updateHosts(this.props.hosts.slice(0, 1)); - } - if (this.props.isSrvRecord) { - this.props.toggleSRVRecord(); - } - - break; - case CONNECTION_TYPE.REPLICA_SET: - if (this.props.replicaSet === undefined) { - this.props.setReplicaSet(''); - } - if (this.props.isSrvRecord) { - this.props.toggleSRVRecord(); - } - - break; - case CONNECTION_TYPE.SRV_RECORD: - this.props.setReplicaSet(); - - if (!this.props.isSrvRecord) { - this.props.toggleSRVRecord(); - } - break; - default: - break; - } - }; - - onHostChanged = (updatedHost: Host, hostIndex: number): void => { - const { hosts } = this.props; - - const newHosts = [...hosts]; - - newHosts[hostIndex] = updatedHost; - - if (hostIndex === 0) { - // Keep hostname and port synced with hosts[0]. - this.props.onHostnameChanged(newHosts[hostIndex].host); - this.props.onPortChanged(newHosts[hostIndex].port); - } - - this.props.updateHosts(newHosts); - }; - - onAddNewHost = (event: React.MouseEvent): void => { - event.preventDefault(); - - const { hosts, replicaSet } = this.props; - - this.props.updateHosts([ - ...hosts, - { - ...DEFAULT_HOST, - }, - ]); - - if (!replicaSet) { - this.props.setReplicaSet(''); - } - }; - - onHostnameChanged = (event: React.ChangeEvent): void => { - this.props.onHostnameChanged(event.target.value); - this.onHostChanged( - { - host: event.target.value, - port: this.props.hosts[0].port, - }, - 0 - ); - }; - - onPortChanged = (event: React.ChangeEvent): void => { - const port = +event.target.value; - this.props.onPortChanged(port); - this.onHostChanged( - { - host: this.props.hosts[0].host, - port, - }, - 0 - ); - }; - - onRemoveHost = ( - event: React.MouseEvent, - hostIndex: number - ): void => { - event.preventDefault(); - - const { hosts } = this.props; - - const newHosts = [...hosts]; - newHosts.splice(hostIndex, 1); - - this.props.updateHosts(newHosts); - }; - - getCurrentConnectionType = (): CONNECTION_TYPE => { - const { isSrvRecord, replicaSet } = this.props; - - if (isSrvRecord) { - return CONNECTION_TYPE.SRV_RECORD; - } else if (replicaSet !== undefined) { - return CONNECTION_TYPE.REPLICA_SET; - } - - return CONNECTION_TYPE.STANDALONE; - }; - - renderConnectionTypeOptions(): React.ReactNode { - return ( - - ); - } - - renderStandaloneHost(): React.ReactNode { - const { hostname, port } = this.props; - - return ( -
- - - -
- ); - } - - renderReplicaSetOptions(): React.ReactNode { - const { hosts } = this.props; - - return ( - - {hosts.map((host, index) => ( -
- - ): void => - this.onHostChanged( - { - host: event.target.value, - port: host.port, - }, - index - ) - } - value={host.host} - /> - - ): void => - this.onHostChanged( - { - host: host.host, - port: +event.target.value, - }, - index - ) - } - value={host.port} - type="number" - /> - - {hosts.length > 1 && ( - - )} -
- ))} - -
- ); - } - - renderSRVRecordHost(): React.ReactNode { - const { hostname } = this.props; - - return ( - - ); - } - - renderConnectionType(): React.ReactNode { - switch (this.getCurrentConnectionType()) { - case CONNECTION_TYPE.STANDALONE: - return this.renderStandaloneHost(); - case CONNECTION_TYPE.REPLICA_SET: - return this.renderReplicaSetOptions(); - case CONNECTION_TYPE.SRV_RECORD: - return this.renderSRVRecordHost(); - default: - break; - } - } - - render(): React.ReactNode { - return ( - - {this.renderConnectionTypeOptions()} - {this.renderConnectionType()} - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - hostname: state.currentConnection.hostname, - hosts: state.currentConnection.hosts, - isSrvRecord: state.currentConnection.isSrvRecord, - port: state.currentConnection.port, - replicaSet: state.currentConnection.replicaSet, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onHostnameChanged: (newHostname: string): HostnameChangedAction => ({ - type: ActionTypes.HOSTNAME_CHANGED, - hostname: newHostname, - }), - onPortChanged: (port: number): PortChangedAction => ({ - type: ActionTypes.PORT_CHANGED, - port, - }), - setReplicaSet: (replicaSet?: string): ReplicaSetChangedAction => ({ - type: ActionTypes.REPLICA_SET_CHANGED, - replicaSet, - }), - toggleSRVRecord: (): IsSrvRecordToggledAction => ({ - type: ActionTypes.IS_SRV_RECORD_TOGGLED, - }), - updateHosts: (hosts: Host[]): HostsChangedAction => ({ - type: ActionTypes.HOSTS_CHANGED, - hosts, - }), -}; - -export default connect(mapStateToProps, mapDispatchToProps)(HostInput); diff --git a/src/views/webview-app/legacy/components/connect-form/general-tab/host/replica-set-input.tsx b/src/views/webview-app/legacy/components/connect-form/general-tab/host/replica-set-input.tsx deleted file mode 100644 index 957cf0c47..000000000 --- a/src/views/webview-app/legacy/components/connect-form/general-tab/host/replica-set-input.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { ReplicaSetChangedAction } from '../../../../store/actions'; -import { ActionTypes } from '../../../../store/actions'; -import type { AppState } from '../../../../store/store'; -import FormInput from '../../../form/form-input'; - -type StateProps = { - replicaSet?: string; -}; - -type DispatchProps = { - onReplicaSetChanged: (newReplicaSetName: string) => void; -}; - -class ReplicaSetInput extends React.PureComponent { - onReplicaSetChanged = (evt: React.ChangeEvent): void => { - this.props.onReplicaSetChanged(evt.target.value); - }; - - render(): React.ReactNode { - const { replicaSet } = this.props; - - return ( - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - replicaSet: state.currentConnection.replicaSet, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onReplicaSetChanged: ( - newReplicaSetName: string - ): ReplicaSetChangedAction => ({ - type: ActionTypes.REPLICA_SET_CHANGED, - replicaSet: newReplicaSetName, - }), -}; - -export default connect(mapStateToProps, mapDispatchToProps)(ReplicaSetInput); diff --git a/src/views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-identity-file-validation.tsx b/src/views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-identity-file-validation.tsx deleted file mode 100644 index 53661f232..000000000 --- a/src/views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-identity-file-validation.tsx +++ /dev/null @@ -1,181 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { - OnChangeSSHTunnelIdentityFileAction, - SSHTunnelHostnameChangedAction, - SSHTunnelPassphraseChangedAction, - SSHTunnelPortChangedAction, - SSHTunnelUsernameChangedAction, -} from '../../../store/actions'; -import { ActionTypes } from '../../../store/actions'; -import type { AppState } from '../../../store/store'; -import FormInput from '../../form/form-input'; -import FileInputButton from '../../form/file-input-button'; -import FormGroup from '../../form/form-group'; -import LINKS from '../../../../../../utils/links'; - -type DispatchProps = { - onChangeSSHTunnelIdentityFile: () => void; - onSSHTunnelHostnameChanged: (sshTunnelHostname: string) => void; - onSSHTunnelPassphraseChanged: (sshTunnelPassphrase: string) => void; - onSSHTunnelPortChanged: (sshTunnelPort: number) => void; - onSSHTunnelUsernameChanged: (sshTunnelUsername: string) => void; -}; - -type StateProps = { - isValid: boolean; - sshTunnelHostname?: string; - sshTunnelIdentityFile?: string[]; - sshTunnelPassphrase?: string; - sshTunnelPort: number; - sshTunnelUsername?: string; -}; - -type props = StateProps & DispatchProps; - -class SSHTunnelIdentityFileValidation extends React.Component { - /** - * Handles sshTunnelHostname change. - * - * @param {Object} evt - evt. - */ - onSSHTunnelHostnameChanged = (evt): void => { - this.props.onSSHTunnelHostnameChanged(evt.target.value); - }; - - /** - * Handles sshTunnelUsername change. - * - * @param {Object} evt - evt. - */ - onSSHTunnelUsernameChanged = (evt): void => { - this.props.onSSHTunnelUsernameChanged(evt.target.value.trim()); - }; - - /** - * Handles sshTunnelIdentityFile change. - * - * @param {Object} evt - evt. - */ - onChangeSSHTunnelIdentityFile = (): void => { - this.props.onChangeSSHTunnelIdentityFile(); - }; - - /** - * Handles sshTunnelPassphrase change. - * - * @param {Object} evt - evt. - */ - onSSHTunnelPassphraseChanged = (evt): void => { - this.props.onSSHTunnelPassphraseChanged(evt.target.value); - }; - - /** - * Handles sshTunnelPort change. - * - * @param {Object} evt - evt. - */ - onSSHTunnelPortChanged = (evt): void => { - this.props.onSSHTunnelPortChanged(evt.target.value); - }; - - render(): React.ReactNode { - const { - isValid, - sshTunnelHostname, - sshTunnelIdentityFile, - sshTunnelPassphrase, - sshTunnelPort, - sshTunnelUsername, - } = this.props; - - return ( - - - - - - - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - isValid: state.isValid, - sshTunnelHostname: state.currentConnection.sshTunnelHostname, - sshTunnelIdentityFile: state.currentConnection.sshTunnelIdentityFile, - sshTunnelPassphrase: state.currentConnection.sshTunnelPassphrase, - sshTunnelPort: state.currentConnection.sshTunnelPort, - sshTunnelUsername: state.currentConnection.sshTunnelUsername, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onChangeSSHTunnelIdentityFile: (): OnChangeSSHTunnelIdentityFileAction => ({ - type: ActionTypes.ON_CHANGE_SSH_TUNNEL_IDENTITY_FILE, - }), - onSSHTunnelHostnameChanged: ( - sshTunnelHostname: string - ): SSHTunnelHostnameChangedAction => ({ - type: ActionTypes.SSH_TUNNEL_HOSTNAME_CHANGED, - sshTunnelHostname, - }), - onSSHTunnelPassphraseChanged: ( - sshTunnelPassphrase: string - ): SSHTunnelPassphraseChangedAction => ({ - type: ActionTypes.SSH_TUNNEL_PASSPHRASE_CHANGED, - sshTunnelPassphrase, - }), - onSSHTunnelPortChanged: ( - sshTunnelPort: number - ): SSHTunnelPortChangedAction => ({ - type: ActionTypes.SSH_TUNNEL_PORT_CHANGED, - sshTunnelPort, - }), - onSSHTunnelUsernameChanged: ( - sshTunnelUsername: string - ): SSHTunnelUsernameChangedAction => ({ - type: ActionTypes.SSH_TUNNEL_USERNAME_CHANGED, - sshTunnelUsername, - }), -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(SSHTunnelIdentityFileValidation); diff --git a/src/views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-password-validation.tsx b/src/views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-password-validation.tsx deleted file mode 100644 index 6fd2b1cd7..000000000 --- a/src/views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-password-validation.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { - SSHTunnelHostnameChangedAction, - SSHTunnelPasswordChangedAction, - SSHTunnelPortChangedAction, - SSHTunnelUsernameChangedAction, -} from '../../../store/actions'; -import { ActionTypes } from '../../../store/actions'; -import type { AppState } from '../../../store/store'; -import FormInput from '../../form/form-input'; -import FormGroup from '../../form/form-group'; -import LINKS from '../../../../../../utils/links'; - -type DispatchProps = { - onSSHTunnelHostnameChanged: (sshTunnelHostname: string) => void; - onSSHTunnelPasswordChanged: (sshTunnelPassword: string) => void; - onSSHTunnelPortChanged: (sshTunnelPort: number) => void; - onSSHTunnelUsernameChanged: (sshTunnelUsername: string) => void; -}; - -type StateProps = { - isValid: boolean; - sshTunnelHostname?: string; - sshTunnelPassword?: string; - sshTunnelPort: number; - sshTunnelUsername?: string; -}; - -type props = StateProps & DispatchProps; - -class SSHTunnelPasswordValidation extends React.Component { - /** - * Handles sshTunnelHostname change. - * - * @param {Object} evt - evt. - */ - onSSHTunnelHostnameChanged = (evt): void => { - this.props.onSSHTunnelHostnameChanged(evt.target.value); - }; - - /** - * Handles sshTunnelUsername change. - * - * @param {Object} evt - evt. - */ - onSSHTunnelUsernameChanged = (evt): void => { - this.props.onSSHTunnelUsernameChanged(evt.target.value.trim()); - }; - - /** - * Handles sshTunnelPassword change. - * - * @param {Object} evt - evt. - */ - onSSHTunnelPasswordChanged = (evt): void => { - this.props.onSSHTunnelPasswordChanged(evt.target.value); - }; - - /** - * Handles sshTunnelPort change. - * - * @param {Object} evt - evt. - */ - onSSHTunnelPortChanged = (evt): void => { - this.props.onSSHTunnelPortChanged(evt.target.value); - }; - - render(): React.ReactNode { - const { - isValid, - sshTunnelHostname, - sshTunnelPassword, - sshTunnelPort, - sshTunnelUsername, - } = this.props; - - return ( - - - - - - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - isValid: state.isValid, - sshTunnelHostname: state.currentConnection.sshTunnelHostname, - sshTunnelPassword: state.currentConnection.sshTunnelPassword, - sshTunnelPort: state.currentConnection.sshTunnelPort, - sshTunnelUsername: state.currentConnection.sshTunnelUsername, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onSSHTunnelHostnameChanged: ( - sshTunnelHostname: string - ): SSHTunnelHostnameChangedAction => ({ - type: ActionTypes.SSH_TUNNEL_HOSTNAME_CHANGED, - sshTunnelHostname, - }), - onSSHTunnelPasswordChanged: ( - sshTunnelPassword: string - ): SSHTunnelPasswordChangedAction => ({ - type: ActionTypes.SSH_TUNNEL_PASSWORD_CHANGED, - sshTunnelPassword, - }), - onSSHTunnelPortChanged: ( - sshTunnelPort: number - ): SSHTunnelPortChangedAction => ({ - type: ActionTypes.SSH_TUNNEL_PORT_CHANGED, - sshTunnelPort, - }), - onSSHTunnelUsernameChanged: ( - sshTunnelUsername: string - ): SSHTunnelUsernameChangedAction => ({ - type: ActionTypes.SSH_TUNNEL_USERNAME_CHANGED, - sshTunnelUsername, - }), -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(SSHTunnelPasswordValidation); diff --git a/src/views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-tab.tsx b/src/views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-tab.tsx deleted file mode 100644 index b515d380c..000000000 --- a/src/views/webview-app/legacy/components/connect-form/ssh-tab/ssh-tunnel-tab.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { SSHTunnelChangedAction } from '../../../store/actions'; -import { ActionTypes } from '../../../store/actions'; -import SSH_TUNNEL_TYPES, { - SSHTunnelOptions, -} from '../../../connection-model/constants/ssh-tunnel-types'; -import FormGroup from '../../form/form-group'; -import RadioBoxGroup from '../../form/radio-box-group/radio-box-group'; -import SSHTunnelPasswordValidation from './ssh-tunnel-password-validation'; -import SSHTunnelIdentityFileValidation from './ssh-tunnel-identity-file-validation'; -import type { AppState } from '../../../store/store'; - -type DispatchProps = { - onSSHTunnelChanged: (sshTunnel: SSH_TUNNEL_TYPES) => void; -}; - -type StateProps = { - sshTunnel: string; -}; - -class SSHTunnelTab extends React.Component { - /** - * Handles SSH tunnel change. - * - * @param {Object} evt - evt. - */ - onSSHTunnelChanged = (evt): void => { - this.props.onSSHTunnelChanged(evt.target.value); - }; - - /** - * Renders an SSL tunnel. - * - * @returns {React.Component} - */ - renderSSHTunnel(): React.ReactNode { - const { sshTunnel } = this.props; - - if (sshTunnel === SSH_TUNNEL_TYPES.USER_PASSWORD) { - return ; - } - - if (sshTunnel === SSH_TUNNEL_TYPES.IDENTITY_FILE) { - return ; - } - } - - render(): React.ReactNode { - const { sshTunnel } = this.props; - - return ( - - ({ - label: sshTunnelOption.title, - value: sshTunnelOption.id, - }))} - onChange={this.onSSHTunnelChanged} - value={sshTunnel} - /> - {this.renderSSHTunnel()} - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => ({ - sshTunnel: state.currentConnection.sshTunnel, -}); - -const mapDispatchToProps: DispatchProps = { - onSSHTunnelChanged: (newSSHTunnel): SSHTunnelChangedAction => ({ - type: ActionTypes.SSH_TUNNEL_CHANGED, - sshTunnel: newSSHTunnel, - }), -}; - -export default connect(mapStateToProps, mapDispatchToProps)(SSHTunnelTab); diff --git a/src/views/webview-app/legacy/components/connect-form/ssl-tab/ssl-server-client-validation.tsx b/src/views/webview-app/legacy/components/connect-form/ssl-tab/ssl-server-client-validation.tsx deleted file mode 100644 index e8b6ee11f..000000000 --- a/src/views/webview-app/legacy/components/connect-form/ssl-tab/ssl-server-client-validation.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import FileInputButton from '../../form/file-input-button'; -import FormInput from '../../form/form-input'; -import type { - OnChangeSSLCAAction, - OnChangeSSLCertAction, - SSLPassChangedAction, -} from '../../../store/actions'; -import { ActionTypes } from '../../../store/actions'; -import type { AppState } from '../../../store/store'; - -import styles from '../../../connect.module.less'; -import LINKS from '../../../../../../utils/links'; - -type StateProps = { - isValid: boolean; - sslCA?: string[]; - sslCert?: string[]; - sslPass?: string; -}; - -type DispatchProps = { - onChangeSSLCA: () => void; - onChangeSSLCertificate: () => void; - sslPrivateKeyPasswordChanged: (newSSLPass: string) => void; -}; - -type props = StateProps & DispatchProps; - -class SSLServerClientValidation extends React.Component { - /** - * Handles sslCA change. - */ - onCertificateAuthorityChanged = (): void => { - this.props.onChangeSSLCA(); - }; - - /** - * Handles sslCert change. - */ - onClientCertificateChanged = (): void => { - this.props.onChangeSSLCertificate(); - }; - - /** - * Handles sslPass change. - * - * @param {Object} evt - evt. - */ - onClientKeyPasswordChanged = (evt): void => { - this.props.sslPrivateKeyPasswordChanged(evt.target.value); - }; - - render(): React.ReactNode { - const { isValid, sslCA, sslCert, sslPass } = this.props; - - return ( -
- - - -
- ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - isValid: state.isValid, - sslCA: state.currentConnection.sslCA, - sslCert: state.currentConnection.sslCert, - sslPass: state.currentConnection.sslPass, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onChangeSSLCA: (): OnChangeSSLCAAction => ({ - type: ActionTypes.ON_CHANGE_SSL_CA, - }), - onChangeSSLCertificate: (): OnChangeSSLCertAction => ({ - type: ActionTypes.ON_CHANGE_SSL_CERT, - }), - sslPrivateKeyPasswordChanged: (newSSLPass: string): SSLPassChangedAction => ({ - type: ActionTypes.SSL_PASS_CHANGED, - sslPass: newSSLPass, - }), -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(SSLServerClientValidation); diff --git a/src/views/webview-app/legacy/components/connect-form/ssl-tab/ssl-server-validation.tsx b/src/views/webview-app/legacy/components/connect-form/ssl-tab/ssl-server-validation.tsx deleted file mode 100644 index 00cfd88de..000000000 --- a/src/views/webview-app/legacy/components/connect-form/ssl-tab/ssl-server-validation.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import classnames from 'classnames'; -import * as React from 'react'; -import { connect } from 'react-redux'; - -import FileInputButton from '../../form/file-input-button'; -import type { OnChangeSSLCAAction } from '../../../store/actions'; -import { ActionTypes } from '../../../store/actions'; -import type { AppState } from '../../../store/store'; - -import styles from '../../../connect.module.less'; -import LINKS from '../../../../../../utils/links'; - -type StateProps = { - isValid: boolean; - sslCA?: string[]; -}; - -type DispatchProps = { - onChangeSSLCA: () => void; -}; - -type props = StateProps & DispatchProps; - -class SSLServerValidation extends React.Component { - /** - * Handles sslCA change. - */ - onClickChangeSSLCA = (): void => { - this.props.onChangeSSLCA(); - }; - - render(): React.ReactNode { - const { isValid, sslCA } = this.props; - - return ( -
- -
- ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - isValid: state.isValid, - sslCA: state.currentConnection.sslCA, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onChangeSSLCA: (): OnChangeSSLCAAction => ({ - type: ActionTypes.ON_CHANGE_SSL_CA, - }), -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(SSLServerValidation); diff --git a/src/views/webview-app/legacy/components/connect-form/ssl-tab/ssl-tab.tsx b/src/views/webview-app/legacy/components/connect-form/ssl-tab/ssl-tab.tsx deleted file mode 100644 index 88fc67c66..000000000 --- a/src/views/webview-app/legacy/components/connect-form/ssl-tab/ssl-tab.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { SSLMethodChangedAction } from '../../../store/actions'; -import { ActionTypes } from '../../../store/actions'; -import type { AppState } from '../../../store/store'; -import SSL_METHODS, { - SSLMethodOptions, -} from '../../../connection-model/constants/ssl-methods'; -import FormGroup from '../../form/form-group'; -import RadioBoxGroup from '../../form/radio-box-group/radio-box-group'; -import SSLServerValidation from './ssl-server-validation'; -import SSLServerClientValidation from './ssl-server-client-validation'; - -type DispatchProps = { - onSSLMethodChanged: (authStrategy: SSL_METHODS) => void; -}; - -type StateProps = { - sslMethod: string; -}; - -class SSLTab extends React.Component { - /** - * Handles SSL method change. - * - * @param {Object} evt - evt. - */ - onSSLMethodChanged = (evt): void => { - this.props.onSSLMethodChanged(evt.target.value); - }; - - /** - * Renders an SSL method. - * - * @returns {React.Component} - */ - renderSSLMethod(): React.ReactNode { - const { sslMethod } = this.props; - - if (sslMethod === SSL_METHODS.SERVER) { - return ; - } - if (sslMethod === SSL_METHODS.ALL) { - return ; - } - } - - render(): React.ReactNode { - const { sslMethod } = this.props; - - return ( - - ({ - label: sslMethodOption.title, - value: sslMethodOption.id, - }))} - onChange={this.onSSLMethodChanged} - value={sslMethod} - /> - {this.renderSSLMethod()} - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - sslMethod: state.currentConnection.sslMethod, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onSSLMethodChanged: (newSSLMethod): SSLMethodChangedAction => ({ - type: ActionTypes.SSL_METHOD_CHANGED, - sslMethod: newSSLMethod, - }), -}; - -export default connect(mapStateToProps, mapDispatchToProps)(SSLTab); diff --git a/src/views/webview-app/legacy/components/connect-helper/connect-helper.less b/src/views/webview-app/legacy/components/connect-helper/connect-helper.less deleted file mode 100644 index 5bc937fc7..000000000 --- a/src/views/webview-app/legacy/components/connect-helper/connect-helper.less +++ /dev/null @@ -1,81 +0,0 @@ -@import '~../../styles/_variables'; - -.connect-helper { - margin-top: 20px; - margin-bottom: 10px; -} - -.connect-helper-connect-area { - margin: 0 auto; -} - -.connect-helper-message { - margin-top: 10px; -} - -.connect-helper-connect-option { - width: 198px; - display: inline-block; - height: 170px; - border: 1px solid transparent; - padding-top: 29px; - font-size: 14px; - line-height: 20px; -} - -.connect-helper-connect-option-button { - margin: 0 auto; - margin-top: 54px; - border: 1px solid; - width: 100px; - height: 32px; - border-radius: 3px; - color: @font-white__color; - transition: 250ms all; - - &:hover { - cursor: pointer; - } -} - -.connect-helper-connection-string-button { - background-color: #292929; - border-color: transparent; - - &:hover { - background-color: #393939; - } -} - -.connect-helper-connection-form-button { - background: none; - color: var(--vscode-editor-foreground); - border-color: var(--vscode-editor-foreground); - transition: 250ms all; - - &:hover { - background-color: #ffffff; - color: #292929; - } -} - -.connect-connection-string-area { - background-color: rgba(228, 244, 228, 0.9); - color: @font-dark__color; -} - -.connect-connection-form-area { - background-color: rgba(255, 255, 255, 0.05); -} - -body[data-vscode-theme-kind='vscode-light'] { - .connect-connection-form-area { - border-color: rgba(228, 244, 228, 0.9); - } -} - -body[data-vscode-theme-kind='vscode-high-contrast'] { - .connect-connection-form-area { - border-color: rgba(228, 244, 228, 0.9); - } -} diff --git a/src/views/webview-app/legacy/components/connect-helper/connect-helper.tsx b/src/views/webview-app/legacy/components/connect-helper/connect-helper.tsx deleted file mode 100644 index 3d834128d..000000000 --- a/src/views/webview-app/legacy/components/connect-helper/connect-helper.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import * as React from 'react'; -import classnames from 'classnames'; -import { connect } from 'react-redux'; -import type { - OpenConnectionStringInputAction, - ToggleShowConnectionFormAction, -} from '../../store/actions'; -import { ActionTypes } from '../../store/actions'; - -import styles from './connect-helper.less'; - -type DispatchProps = { - onOpenConnectionStringInput: () => void; - onOpenConnectionForm: () => void; -}; - -type props = DispatchProps; - -function getOSCommandShortcutName(): string { - if (navigator.userAgent.includes('Win')) { - return 'Ctrl'; - } - - return 'Cmd'; -} - -export class ConnectHelper extends React.Component { - render(): React.ReactNode { - const { onOpenConnectionForm, onOpenConnectionStringInput } = this.props; - - return ( -
-
-
-
Connect with
-
- Connection String -
- -
-
-
Advanced
-
- Connection Settings -
- - -
-
-
- {getOSCommandShortcutName()} + Shift + P for all - MongoDB Command Palette options -
-
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - onOpenConnectionStringInput: (): OpenConnectionStringInputAction => ({ - type: ActionTypes.OPEN_CONNECTION_STRING_INPUT, - }), - onOpenConnectionForm: (): ToggleShowConnectionFormAction => ({ - type: ActionTypes.TOGGLE_SHOW_CONNECTION_FORM, - }), -}; - -export default connect(() => ({}), mapDispatchToProps)(ConnectHelper); diff --git a/src/views/webview-app/legacy/components/connection-status/connection-status.less b/src/views/webview-app/legacy/components/connection-status/connection-status.less deleted file mode 100644 index b0f36af12..000000000 --- a/src/views/webview-app/legacy/components/connection-status/connection-status.less +++ /dev/null @@ -1,85 +0,0 @@ -@import '~../../styles/_variables'; - -.connection-status { - padding: 11.5px; -} - -.connection-status-status-message { - margin: 16px auto; -} - -.connection-status-dot { - height: 8px; - width: 8px; - display: inline-block; - margin-right: 14px; - - &:before { - position: absolute; - content: ''; - border-radius: 50%; - width: 8px; - height: 8px; - pointer-events: none; - } -} - -.connection-status-dot-connected:before { - background-color: var(--mongodb-green); -} - -.connection-status-dot-disconnected:before { - background-color: #bb2222; -} - -.connection-status-playground-area { - margin: 34px auto; -} - -.connection-status-playground-message { - margin: 0 20px; - - display: inline-block; - font-size: 18px; - line-height: 23px; - vertical-align: middle; -} - -.connection-status-create-playground-button { - display: inline-block; - border: 1px solid rgb(21, 130, 66); - border-radius: 3px; - margin: 0 20px; - margin-top: 20px; - height: 32px; - width: 161px; - transition: 150ms all; - color: white; - background-color: var(--mongodb-green); - background-image: linear-gradient(rgb(19, 170, 82), rgb(24, 150, 76)); - box-shadow: rgb(21, 130, 66) 0px -1px 0px inset; - - &:hover { - cursor: pointer; - color: white; - background-color: #109648; - background-image: linear-gradient(#129f4c, #148040); - border-color: rgb(21, 130, 66); - } -} - -.connection-status-rename { - color: var(--vscode-editor-foreground); - padding: 2px 4px; - margin-left: 4px; - vertical-align: top; - transition: 250ms all; - background: none; - border: none; - font-size: 12px; - - &:hover { - cursor: pointer; - color: @icon-button-hover__color; - } -} diff --git a/src/views/webview-app/legacy/components/connection-status/connection-status.tsx b/src/views/webview-app/legacy/components/connection-status/connection-status.tsx deleted file mode 100644 index 809b3b44b..000000000 --- a/src/views/webview-app/legacy/components/connection-status/connection-status.tsx +++ /dev/null @@ -1,189 +0,0 @@ -import classnames from 'classnames'; -import * as React from 'react'; -import { connect } from 'react-redux'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faPencilAlt } from '@fortawesome/free-solid-svg-icons'; - -import type { AppState } from '../../store/store'; -import type { - CreateNewPlaygroundAction, - RenameConnectionAction, - RequestConnectionStatusAction, -} from '../../store/actions'; -import { ActionTypes } from '../../store/actions'; -import InfoSprinkle from '../info-sprinkle/info-sprinkle'; -import { CONNECTION_STATUS } from '../../../extension-app-message-constants'; - -import styles from './connection-status.less'; -import LINKS from '../../../../../utils/links'; - -const CONNECTION_STATUS_POLLING_FREQ_MS = 1000; - -type StateProps = { - activeConnectionName: string; - connectionStatus: CONNECTION_STATUS; -}; - -type DispatchProps = { - onClickCreatePlayground: () => void; - onClickRenameConnection: () => void; - requestConnectionStatus: () => void; -}; - -export class ConnectionStatus extends React.Component< - StateProps & DispatchProps -> { - componentDidMount(): void { - this.startConnectionStatusPolling(); - } - - componentWillUnmount(): void { - this.stopConnectionStatusPolling(); - } - - connectionStatusPollingInterval: null | number = null; - - startConnectionStatusPolling = (): void => { - if (this.connectionStatusPollingInterval !== null) { - return; - } - - this.props.requestConnectionStatus(); - this.connectionStatusPollingInterval = setInterval(() => { - this.props.requestConnectionStatus(); - }, CONNECTION_STATUS_POLLING_FREQ_MS) as any; - }; - - stopConnectionStatusPolling = (): void => { - if (this.connectionStatusPollingInterval === null) { - return; - } - - clearInterval(this.connectionStatusPollingInterval); - - this.connectionStatusPollingInterval = null; - }; - - renderConnectedStatus(): React.ReactNode { - const { - activeConnectionName, - onClickCreatePlayground, - onClickRenameConnection, - } = this.props; - - return ( - -
- - Connected to: {activeConnectionName} - -
-
-
-
All set. Ready to start?
-
- Create a playground. - -
-
- -
-
- ); - } - - renderConnectingStatus(): React.ReactNode { - return ( - -
- Connecting... -
-
- ); - } - - renderDisconnectedStatus(): React.ReactNode { - return ( -
- - Not connected. -
- ); - } - - renderDisconnectingStatus(): React.ReactNode { - return ( -
- Disconnecting... -
- ); - } - - renderLoadingStatus(): React.ReactNode { - return ( -
- Loading... -
- ); - } - - render(): React.ReactNode { - const { connectionStatus } = this.props; - - return ( -
- {connectionStatus === CONNECTION_STATUS.CONNECTED && - this.renderConnectedStatus()} - {connectionStatus === CONNECTION_STATUS.CONNECTING && - this.renderConnectingStatus()} - {connectionStatus === CONNECTION_STATUS.DISCONNECTED && - this.renderDisconnectedStatus()} - {connectionStatus === CONNECTION_STATUS.DISCONNECTING && - this.renderDisconnectingStatus()} - {connectionStatus === CONNECTION_STATUS.LOADING && - this.renderLoadingStatus()} -
- ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - activeConnectionName: state.activeConnectionName, - connectionStatus: state.connectionStatus, - }; -}; - -const mapDispatchToProps: DispatchProps = { - onClickCreatePlayground: (): CreateNewPlaygroundAction => ({ - type: ActionTypes.CREATE_NEW_PLAYGROUND, - }), - onClickRenameConnection: (): RenameConnectionAction => ({ - type: ActionTypes.RENAME_CONNECTION, - }), - requestConnectionStatus: (): RequestConnectionStatusAction => ({ - type: ActionTypes.REQUEST_CONNECTION_STATUS, - }), -}; - -export default connect(mapStateToProps, mapDispatchToProps)(ConnectionStatus); diff --git a/src/views/webview-app/legacy/components/form/divider/divider.less b/src/views/webview-app/legacy/components/form/divider/divider.less deleted file mode 100644 index b7b77847c..000000000 --- a/src/views/webview-app/legacy/components/form/divider/divider.less +++ /dev/null @@ -1,9 +0,0 @@ -.form-divider { - background-color: rgba(75, 75, 75, 0.5); - height: 1px; - margin: 0; - margin-top: 24px; - margin-bottom: 24px; - padding: 0; - width: 100%; -} diff --git a/src/views/webview-app/legacy/components/form/divider/divider.tsx b/src/views/webview-app/legacy/components/form/divider/divider.tsx deleted file mode 100644 index 89cb52693..000000000 --- a/src/views/webview-app/legacy/components/form/divider/divider.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import * as React from 'react'; - -import styles from './divider.less'; - -export class Divider extends React.Component { - render(): React.ReactNode { - return
; - } -} - -export default Divider; diff --git a/src/views/webview-app/legacy/components/form/file-input-button.tsx b/src/views/webview-app/legacy/components/form/file-input-button.tsx deleted file mode 100644 index b9098bbae..000000000 --- a/src/views/webview-app/legacy/components/form/file-input-button.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import * as React from 'react'; -import classnames from 'classnames'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faInfoCircle, faFileUpload } from '@fortawesome/free-solid-svg-icons'; - -import styles from './form.less'; - -type props = { - error: boolean; - id: string; - label: string; - link?: string; - multi?: boolean; - onClick: () => void; - values?: string[]; -}; - -class FileInputButton extends React.Component { - /** - * Handles a form item file button click. - * - * @param {Object} evt - evt. - */ - onClick = (evt): void => { - evt.preventDefault(); - evt.stopPropagation(); - - this.props.onClick(); - }; - - /** - * Renders a button text. - * - * @returns {String} - */ - getButtonText(): string { - if (this.props.values && this.props.values.length > 0) { - return this.getFileNames(); - } - - return this.props.multi ? 'Select files...' : 'Select a file...'; - } - - /** - * Renders file names. - * - * @returns {String} - */ - getFileNames(): string { - const fileNames = this.props.values || []; - - return fileNames.join(', '); - } - - /** - * Renders the info sprinkle if a link handler was provided. - * - * @returns {React.Component} The info sprinkle. - */ - renderInfoSprinkle(): React.ReactNode { - if (this.props.link) { - return ( - - - - ); - } - } - - render(): React.ReactNode { - const { id, label } = this.props; - - return ( -
- - -
- ); - } -} - -export default FileInputButton; diff --git a/src/views/webview-app/legacy/components/form/form-actions.tsx b/src/views/webview-app/legacy/components/form/form-actions.tsx deleted file mode 100644 index 6771eabab..000000000 --- a/src/views/webview-app/legacy/components/form/form-actions.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import * as React from 'react'; -import classnames from 'classnames'; -import { connect } from 'react-redux'; - -import type { - ConnectAction, - ToggleShowConnectionFormAction, -} from '../../store/actions'; -import { ActionTypes } from '../../store/actions'; -import FormGroup from './form-group'; - -import styles from './form.less'; - -type DispatchProps = { - onConnectClicked: () => void; - toggleShowConnectForm: () => void; -}; - -type props = { - connectionMessage?: string; - errorMessage?: string; - isConnected?: boolean; - isConnecting?: boolean; - isValid?: boolean; - syntaxErrorMessage?: string; -} & DispatchProps; - -class FormActions extends React.Component { - /** - * Handles a connect click. - * - * @param {Object} evt - evt. - */ - onConnectClicked = (evt): void => { - evt.preventDefault(); - evt.stopPropagation(); - this.props.onConnectClicked(); - }; - - onCancelClicked = (evt): void => { - evt.preventDefault(); - evt.stopPropagation(); - this.props.toggleShowConnectForm(); - }; - - /** - * Checks for a syntax error. - * - * @returns {Boolean} True in case of a syntax error. - */ - hasSyntaxError = (): boolean => { - return !this.props.isValid && !!this.props.syntaxErrorMessage; - }; - - /** - * Checks for an server error. - * - * @returns {Boolean} True in case of a server error. - */ - hasError(): boolean { - return !this.props.isValid && !!this.props.errorMessage; - } - - /** - * Renders a component with messages. - * - * @returns {React.Component} - */ - renderMessage(): React.ReactNode { - let message: React.ReactNode = this.props.connectionMessage; - let colorStyle = styles['form-message-container-success']; - let hasMessage = false; - - if (this.props.isConnected) { - hasMessage = true; - } else if (this.props.isConnecting) { - hasMessage = true; - message = 'Connecting...'; - } else if (this.hasError()) { - hasMessage = true; - message = this.props.errorMessage; - colorStyle = styles['form-message-container-error']; - } - - if (hasMessage === true) { - return ( -
-
-
{message}
-
-
- ); - } - } - - render(): React.ReactNode { - const syntaxError = this.hasSyntaxError() ? 'disabled' : ''; - - return ( - - {this.renderMessage()} -
- - -
-
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - onConnectClicked: (): ConnectAction => ({ - type: ActionTypes.CONNECT, - }), - toggleShowConnectForm: (): ToggleShowConnectionFormAction => ({ - type: ActionTypes.TOGGLE_SHOW_CONNECTION_FORM, - }), -}; - -export default connect(null, mapDispatchToProps)(FormActions); diff --git a/src/views/webview-app/legacy/components/form/form-group.tsx b/src/views/webview-app/legacy/components/form/form-group.tsx deleted file mode 100644 index 323773d6a..000000000 --- a/src/views/webview-app/legacy/components/form/form-group.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import * as React from 'react'; -import classnames from 'classnames'; - -import styles from './form.less'; - -type props = { - id: string; - separator?: boolean; - children?: React.ReactNode; -}; - -class FormGroup extends React.PureComponent { - render(): React.ReactNode { - const { children, id, separator } = this.props; - - return ( -
- {children} -
- ); - } -} - -export default FormGroup; diff --git a/src/views/webview-app/legacy/components/form/form-input.tsx b/src/views/webview-app/legacy/components/form/form-input.tsx deleted file mode 100644 index b3eb75a5a..000000000 --- a/src/views/webview-app/legacy/components/form/form-input.tsx +++ /dev/null @@ -1,96 +0,0 @@ -import * as React from 'react'; -import classnames from 'classnames'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faInfoCircle } from '@fortawesome/free-solid-svg-icons'; - -import styles from './form.less'; - -type props = { - changeHandler: (evt: React.ChangeEvent) => void; - className?: string; - error?: boolean; - id?: string; - label?: string; - linkTo?: string; - name: string; - placeholder?: string; - type?: string; - value?: string | number; -}; - -/** - * Represents an input field within a form. - */ -class FormInput extends React.PureComponent { - /** - * Gets the error id for the tooltip. - * - * @returns {String} The error id. - */ - getErrorId(): string { - return `form-error-tooltip-${this.props.name}`; - } - - /** - * Renders the info sprinkle if a link handler was provided. - * - * @returns {React.Component} The info sprinkle. - */ - renderInfoSprinkle(): React.ReactNode { - if (this.props.linkTo) { - return ( - - - - ); - } - } - - /** - * Renders the input field. - * - * @returns {React.Component} The input field. - */ - render(): React.ReactNode { - const { - changeHandler, - className, - id, - label, - name, - placeholder, - type, - value, - } = this.props; - - return ( -
- {label && ( - - )} - -
- ); - } -} - -export default FormInput; diff --git a/src/views/webview-app/legacy/components/form/form-item-select.tsx b/src/views/webview-app/legacy/components/form/form-item-select.tsx deleted file mode 100644 index 35ea2e3ef..000000000 --- a/src/views/webview-app/legacy/components/form/form-item-select.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import * as React from 'react'; - -import styles from './form.less'; - -type props = { - label: string; - name: string; - options: object[]; - changeHandler: (evt: React.ChangeEvent) => void; - value: string; -}; - -class FormItemSelect extends React.Component { - /** - * Prepares options for the form item select. - * - * @param {Array} options - A list of options for select. - * - * @returns {React.Component} - */ - renderOptions(options): React.ReactNode { - return options.map((option, i) => { - const select = Object.keys(option)[0]; - - return ( - - ); - }); - } - - render(): React.ReactNode { - const { changeHandler, label, name, options, value } = this.props; - - return ( -
- - -
- ); - } -} - -export default FormItemSelect; diff --git a/src/views/webview-app/legacy/components/form/form.less b/src/views/webview-app/legacy/components/form/form.less deleted file mode 100644 index 38422bc7d..000000000 --- a/src/views/webview-app/legacy/components/form/form.less +++ /dev/null @@ -1,205 +0,0 @@ -@import '~../../styles/_variables'; - -@help-icon-button__color: rgba(255, 255, 255, 0.5); - -.form-group { - display: block; -} - -.form-item { - margin: 15px auto 15px; - width: 100%; - - &-has-error { - .form-control { - border: 1px solid @alertRed; - - &:focus { - border: 1px solid @alertRed; - } - } - - label { - color: @alertRed; - - i { - margin-right: 5px; - } - } - - .form-item-file-button { - border-color: @alertRed; - } - } - - label { - .help-icon { - display: inline-block; - font-size: inherit; - text-rendering: auto; - margin: 0 0 0 5px; - cursor: pointer; - color: @help-icon-button__color; - - :hover { - color: @icon-button-hover__color; - } - } - } -} - -.form-item-file-button { - width: 100%; - background: var(--vscode-input-background, transparent); - border: 1px solid - var(--vscode-searchEditor-textInputBorder, rgba(161, 161, 161, 0.5)); - border-radius: 3px; - color: var(--vscode-editor-foreground); - padding: 8px 4px 9px; - margin: 0; - - &:hover { - cursor: pointer; - } - - .file-icon { - display: inline-block; - font-size: inherit; - text-rendering: auto; - margin: 0 5px 0 0; - color: var(--vscode-editor-foreground); - } - - i.help { - display: inline-block; - font-size: inherit; - text-rendering: auto; - margin: 0 0 0 5px; - cursor: pointer; - color: @help-icon-button__color; - - :hover { - color: @icon-button-hover__color; - } - } -} - -.form-group-separator { - margin-bottom: 20px; -} - -.form-control { - display: block; - padding: 6px 10px; - font-size: 14px; - height: 32px; - line-height: 32px; - color: var(--vscode-input-foreground); - background-color: var(--vscode-input-background); - background-image: none; - border: 1px solid var(--vscode-searchEditor-textInputBorder, transparent); - width: 100%; - border-radius: 3px; - - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - - &:focus { - border: 1px solid var(--vscode-focusBorder); - } - - ::placeholder { - color: var(--vscode-input-placeholderForeground); - } -} - -.btn { - background-color: var(--mongodb-green); - padding: 9px 28px 10px; - margin: 6px 0 0 0; - display: inline-block; - text-decoration: none; - cursor: pointer; - border: none; - border-radius: 3px; - font-size: 14px; - border-radius: 3px; - text-decoration: none; - transition: all 150ms ease 0s; - overflow: hidden; - background-color: var(--vscode-editor-background); - color: var(--vscode-editor-foreground); - border: 1px solid var(--vscode-editor-foreground); - margin-left: 16px; - - &:hover { - cursor: pointer; - color: var(--vscode-editor-background); - background-color: var(--vscode-editor-foreground); - border-color: var(--vscode-editor-background); - } -} - -.btn-primary { - color: white; - background-color: var(--mongodb-green); - background-image: linear-gradient(rgb(19, 170, 82), rgb(24, 150, 76)); - - border-color: rgb(21, 130, 66); - box-shadow: rgb(21, 130, 66) 0px -1px 0px inset; - - &:hover { - color: white; - background-color: #109648; - background-image: linear-gradient(#129f4c, #148040); - border-color: rgb(21, 130, 66); - } -} - -.form-message-container { - width: 100%; - padding: 0px; - margin-top: 5px; - color: @font-dark__color; - font-size: small; - font-weight: bold; - - &-error { - background: @alertRed; - padding: 4px 10px; - border-radius: 3px; - background: #fcebe2; - border: 1px solid #f9d3c5; - word-break: break-all; - color: #8f221b; - font-size: small; - font-weight: bold; - } - - &-syntax-error { - background: @warningText; - padding: 4px 10px; - border-radius: 3px; - background: #fef7e3; - border: 1px solid #fef2c8; - word-break: break-all; - color: #86681d; - font-size: small; - font-weight: bold; - } - - &-success { - color: white; - background: var(--mongodb-green); - padding: 4px 10px; - border-radius: 3px; - } -} - -.form-actions-buttons-container { - margin: 0; - margin-top: 20px; - - text-align: right; -} diff --git a/src/views/webview-app/legacy/components/form/radio-box-group/radio-box-group.less b/src/views/webview-app/legacy/components/form/radio-box-group/radio-box-group.less deleted file mode 100644 index 0977bbbee..000000000 --- a/src/views/webview-app/legacy/components/form/radio-box-group/radio-box-group.less +++ /dev/null @@ -1,37 +0,0 @@ -@import '~../../../styles/_variables'; - -.radio-box-item { - display: inline-block; - margin: 3px; - border: 1px solid var(--vscode-searchEditor-textInputBorder, black); - padding: 8px 14px; - border-radius: 3px; - transition: all 150ms ease-in-out; - color: var(--vscode-editor-foreground); - - &:hover { - cursor: pointer; - } - - &:focus-within { - box-shadow: 0 0 5px #51cbee; - } -} - -.radio-box-item-selected { - background: @green-selected; - border-color: transparent; - color: #1e1e1e; -} - -.radio-box-item-input { - // Hidden radio button styles. - opacity: 0; - position: absolute; - pointer-events: none; -} - -.radio-box-item-label { - font-size: 14px; - font-weight: normal; -} diff --git a/src/views/webview-app/legacy/components/form/radio-box-group/radio-box-group.tsx b/src/views/webview-app/legacy/components/form/radio-box-group/radio-box-group.tsx deleted file mode 100644 index 83f54839c..000000000 --- a/src/views/webview-app/legacy/components/form/radio-box-group/radio-box-group.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import classnames from 'classnames'; -import * as React from 'react'; - -import styles from './radio-box-group.less'; -import formStyles from '../form.less'; - -type props = { - label: string; - name: string; - options: { - label: string; - value: string; - }[]; - onChange: (evt: React.ChangeEvent) => void; - value: string; -}; - -class RadioBoxGroup extends React.Component { - handleChange = (e: React.ChangeEvent): void => { - const { onChange, value } = this.props; - - // Stopped propagation to prevent event from bubbling with new target, and thus value coming back as undefined - e.stopPropagation(); - - onChange(e); - - if (!value) { - this.setState({ value: e.target.value }); - } - }; - - renderOptions(): React.ReactNode { - const { options, value } = this.props; - - return options.map((option, i) => { - const checked = value === option.value; - - return ( - - ); - }); - } - - render(): React.ReactNode { - const { label, name } = this.props; - - return ( -
- -
- {this.renderOptions()} -
-
- ); - } -} - -export default RadioBoxGroup; diff --git a/src/views/webview-app/legacy/components/info-sprinkle/info-sprinkle.less b/src/views/webview-app/legacy/components/info-sprinkle/info-sprinkle.less deleted file mode 100644 index 1485d10f2..000000000 --- a/src/views/webview-app/legacy/components/info-sprinkle/info-sprinkle.less +++ /dev/null @@ -1,21 +0,0 @@ -@import '~../../styles/_variables'; - -.info-sprinkle-icon { - display: inline-block; - font-size: 15px; - text-rendering: auto; - margin: 0; - margin-top: 3px; -} - -.info-sprinkle { - cursor: pointer; - color: var(--vscode-editor-foreground); - padding: 0px 5px; - vertical-align: top; - transition: 250ms all; - - &:hover { - color: @icon-button-hover__color; - } -} diff --git a/src/views/webview-app/legacy/components/info-sprinkle/info-sprinkle.tsx b/src/views/webview-app/legacy/components/info-sprinkle/info-sprinkle.tsx deleted file mode 100644 index 74c288b97..000000000 --- a/src/views/webview-app/legacy/components/info-sprinkle/info-sprinkle.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import * as React from 'react'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faInfoCircle } from '@fortawesome/free-solid-svg-icons'; - -import styles from './info-sprinkle.less'; - -type props = { - linkTo: string; -}; - -class InfoSprinkle extends React.Component { - render(): React.ReactNode { - return ( - - - - ); - } -} - -export default InfoSprinkle; diff --git a/src/views/webview-app/legacy/components/mongodb-logo/mongodb-logo.less b/src/views/webview-app/legacy/components/mongodb-logo/mongodb-logo.less deleted file mode 100644 index 84a47d942..000000000 --- a/src/views/webview-app/legacy/components/mongodb-logo/mongodb-logo.less +++ /dev/null @@ -1,4 +0,0 @@ -.mdb-logo-container { - margin-top: 19px; - margin-bottom: 4px; -} diff --git a/src/views/webview-app/legacy/components/mongodb-logo/mongodb-logo.tsx b/src/views/webview-app/legacy/components/mongodb-logo/mongodb-logo.tsx deleted file mode 100644 index 273331db2..000000000 --- a/src/views/webview-app/legacy/components/mongodb-logo/mongodb-logo.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from 'react'; - -import { MongoDBLogo as LeafyGreenMongoDBLogo } from '@mongodb-js/compass-components'; - -import styles from './mongodb-logo.less'; - -function MongoDBLogo() { - return ( -
- -
- ); -} - -export default MongoDBLogo; diff --git a/src/views/webview-app/legacy/components/overview-page/overview-header/overview-header.less b/src/views/webview-app/legacy/components/overview-page/overview-header/overview-header.less deleted file mode 100644 index d18cb2f22..000000000 --- a/src/views/webview-app/legacy/components/overview-page/overview-header/overview-header.less +++ /dev/null @@ -1,45 +0,0 @@ -.overview-header-content-area { - margin: 0 auto; - width: 90%; - min-width: 400px; - position: relative; - font-size: 14px; -} - -.overview-header-bar { - background-color: #3d4f58; - margin: 0 auto; - margin-top: 24px; - height: 1px; - width: 90%; - min-width: 400px; -} - -.overview-header-description { - margin-top: 12px; - max-width: 68%; - margin: 0 auto; - line-height: 20px; -} - -.resources-button { - position: absolute; - right: 0; - top: 50px; - background: none; - border: none; - text-align: center; - color: var(--vscode-editor-foreground); - - &:hover { - cursor: pointer; - } -} - -.resources-button-icon { - font-size: 24px; -} - -.resources-button-title { - font-weight: 500; -} diff --git a/src/views/webview-app/legacy/components/overview-page/overview-header/overview-header.tsx b/src/views/webview-app/legacy/components/overview-page/overview-header/overview-header.tsx deleted file mode 100644 index 9fc7b66e0..000000000 --- a/src/views/webview-app/legacy/components/overview-page/overview-header/overview-header.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; -import { Icon } from '@iconify/react'; -import bookIcon from '@iconify-icons/codicon/book'; - -import MongoDBLogo from '../../mongodb-logo/mongodb-logo'; -import type { ToggleShowResourcesPanelAction } from '../../../store/actions'; -import { ActionTypes } from '../../../store/actions'; - -import styles from './overview-header.less'; - -type DispatchProps = { - toggleShowResourcesPanel: () => void; -}; - -class OverviewHeader extends React.Component { - renderResourcesButton(): React.ReactNode { - return ( - - ); - } - - render(): React.ReactNode { - return ( -
-
- -
- Navigate your databases and collections, use playgrounds for - exploring and transforming your data -
- {this.renderResourcesButton()} -
-
-
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - toggleShowResourcesPanel: (): ToggleShowResourcesPanelAction => ({ - type: ActionTypes.TOGGLE_SHOW_RESOURCES_PANEL, - }), -}; - -export default connect(null, mapDispatchToProps)(OverviewHeader); diff --git a/src/views/webview-app/legacy/components/overview-page/overview-page.less b/src/views/webview-app/legacy/components/overview-page/overview-page.less deleted file mode 100644 index b4d95ecd0..000000000 --- a/src/views/webview-app/legacy/components/overview-page/overview-page.less +++ /dev/null @@ -1,11 +0,0 @@ -.overview { - text-align: center; - margin: 0 auto; - width: 100%; - font-size: 14px; -} - -.overview-help-panel-container { - margin-top: 69px; - margin-bottom: 30px; -} diff --git a/src/views/webview-app/legacy/components/overview-page/overview-page.tsx b/src/views/webview-app/legacy/components/overview-page/overview-page.tsx deleted file mode 100644 index ab4fa768a..000000000 --- a/src/views/webview-app/legacy/components/overview-page/overview-page.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import type { AppState } from '../../store/store'; -import OverviewHeader from './overview-header/overview-header'; -import ConnectFormModal from '../connect-form-modal/connect-form-modal'; -import ConnectHelper from '../connect-helper/connect-helper'; -import ConnectionStatus from '../connection-status/connection-status'; -import AtlasCTA from '../atlas-cta/atlas-cta'; -import ResourcesPanel from '../resources-panel/resources-panel'; - -import styles from './overview-page.less'; - -type StateProps = { - showConnectForm?: boolean; - showResourcesPanel?: boolean; -}; - -export class OverviewPage extends React.Component { - render(): React.ReactNode { - const { showConnectForm, showResourcesPanel } = this.props; - - return ( -
- {showConnectForm && } - {showResourcesPanel && } - - - -
- -
-
- ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - showConnectForm: state.showConnectForm, - showResourcesPanel: state.showResourcesPanel, - }; -}; - -export default connect(mapStateToProps, null)(OverviewPage); diff --git a/src/views/webview-app/legacy/components/resources-panel/resources-panel.less b/src/views/webview-app/legacy/components/resources-panel/resources-panel.less deleted file mode 100644 index d486e58bd..000000000 --- a/src/views/webview-app/legacy/components/resources-panel/resources-panel.less +++ /dev/null @@ -1,137 +0,0 @@ -@import '~../../styles/_variables'; - -.resources-panel { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 10; -} - -.resources-panel-background { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: -1; - background-color: rgba(0, 0, 0, 0.5); - animation-duration: 250ms; - animation-direction: forwards; - animation-name: backgroundDarkenAnimation; -} - -@keyframes backgroundDarkenAnimation { - from { - background-color: rgba(0, 0, 0, 0.1); - } - - to { - background-color: rgba(0, 0, 0, 0.5); - } -} - -.resources-panel-content { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: calc(100% - 468px); - width: 420px; - overflow: auto; - padding: 48px 24px; - background: var(--vscode-editor-background); - animation-duration: 250ms; - animation-direction: forwards; - animation-name: panelOpenAnimation; - animation-timing-function: cubic-bezier(0, 1.3, 0.7, 1); - box-shadow: -4px 0px 5px rgba(0, 0, 0, 0.25); -} - -@keyframes panelOpenAnimation { - from { - left: 100%; - } - - to { - left: calc(100% - 468px); - } -} - -.resources-panel-close { - position: absolute; - top: 26px; - right: 20px; - font-size: 18px; - background: none; - color: var(--vscode-editor-foreground); - transition: 200ms all; - border: none; - - &:hover { - cursor: pointer; - } -} - -.resources-panel-header { - font-size: 21px; - color: var(--mongodb-green); - text-align: left; -} - -.resources-panel-book-icon { - vertical-align: text-top; - font-size: 26px; - margin-right: 8px; -} - -.resources-panel-links-container { - margin-top: 70px; -} - -.resources-panel-link { - margin-top: 8px; - padding: 10px 16px; - background-color: var(--vscode-sideBar-background, rgba(50, 50, 50, 0.25)); - line-height: 20px; - color: var(--vscode-editor-foreground); - text-align: left; - text-decoration: none; - display: block; - position: relative; -} - -.resources-panel-link-icon { - font-size: 18px; - position: absolute; - right: 16px; - top: 21px; -} - -.resources-panel-footer { - margin-top: 40px; - display: flex; - flex-direction: row; - text-align: left; -} - -.resources-panel-footer-item { - display: inline-block; - width: 50%; -} -.resources-panel-footer-item:last-child { - padding-left: 10px; -} - -.resources-panel-footer-item-title { - margin: 10px 0px; - font-weight: bold; -} - -.resources-panel-footer-link { - margin: 5px 0px; - text-decoration: none; - display: block; - color: var(--vscode-editor-foreground); -} diff --git a/src/views/webview-app/legacy/components/resources-panel/resources-panel.tsx b/src/views/webview-app/legacy/components/resources-panel/resources-panel.tsx deleted file mode 100644 index 9b5e766e3..000000000 --- a/src/views/webview-app/legacy/components/resources-panel/resources-panel.tsx +++ /dev/null @@ -1,212 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faTimes, faArrowRight } from '@fortawesome/free-solid-svg-icons'; -import { Icon } from '@iconify/react'; -import bookIcon from '@iconify-icons/codicon/book'; - -import type { - LinkClickedAction, - ToggleShowResourcesPanelAction, -} from '../../store/actions'; -import { ActionTypes } from '../../store/actions'; - -import styles from './resources-panel.less'; -import LINKS from '../../../../../utils/links'; - -const ResourceLinks = [ - { - title: 'Product overview', - description: 'Get an overview on MongoDB', - linkId: 'productOverview', - url: LINKS.docs, - }, - { - title: 'Extension documentation', - description: 'Check the documentation about the extension', - linkId: 'extensionDocumentation', - url: LINKS.extensionDocs(), - }, - { - title: 'Connect to your database', - description: 'Connect in just a few steps', - linkId: 'connectInfo', - url: LINKS.extensionDocs('connect'), - }, - { - title: 'Interact with your data', - description: 'Play with your data, create queries and aggregations', - linkId: 'interactWithYourData', - url: LINKS.extensionDocs('playgrounds'), - }, -]; - -const FooterFeatures = [ - { - title: 'Navigate databases', - linkId: 'navigateDatabaseInfo', - url: LINKS.extensionDocs('databases-collections'), - }, - { - title: 'Perform CRUD operations', - linkId: 'crudInfo', - url: LINKS.extensionDocs('crud-ops'), - }, - { - title: 'Run aggregation pipelines', - linkId: 'aggPipelineInfo', - url: LINKS.extensionDocs('run-agg-pipelines'), - }, - { - title: 'Playgrounds', - linkId: 'playgroundsInfo', - url: LINKS.extensionDocs('playgrounds'), - }, -]; - -const FooterLinks = [ - { - title: 'Github', - linkId: 'github', - url: LINKS.github, - }, - { - title: 'Suggest a feature', - linkId: 'feedback', - url: LINKS.feedback, - }, - { - title: 'Report a bug', - linkId: 'reportABug', - url: LINKS.reportBug, - }, -]; - -const TELEMETRY_SCREEN_ID = 'overviewResourcesPanel'; - -type DispatchProps = { - onLinkClicked: (screen: string, linkId: string) => void; - toggleShowResourcesPanel: () => void; -}; - -class ResourcesPanel extends React.Component { - onLinkClicked = (screen: string, linkId: string): void => { - this.props.onLinkClicked(screen, linkId); - }; - - renderHeader(): React.ReactNode { - return ( - - -
- -  MongoDB resources -
-
- ); - } - - renderLinks(): React.ReactNode { - return ( - - ); - } - - renderFooter(): React.ReactNode { - return ( - - ); - } - - render(): React.ReactNode { - return ( -
-
this.props.toggleShowResourcesPanel()} - /> -
- {this.renderHeader()} - {this.renderLinks()} - {this.renderFooter()} -
-
- ); - } -} - -const mapDispatchToProps: DispatchProps = { - onLinkClicked: (screen, linkId): LinkClickedAction => ({ - type: ActionTypes.EXTENSION_LINK_CLICKED, - screen, - linkId, - }), - toggleShowResourcesPanel: (): ToggleShowResourcesPanelAction => ({ - type: ActionTypes.TOGGLE_SHOW_RESOURCES_PANEL, - }), -}; - -export default connect(null, mapDispatchToProps)(ResourcesPanel); diff --git a/src/views/webview-app/legacy/connect.module.less b/src/views/webview-app/legacy/connect.module.less deleted file mode 100644 index 902c87cd6..000000000 --- a/src/views/webview-app/legacy/connect.module.less +++ /dev/null @@ -1,69 +0,0 @@ -@import '~./styles/_variables'; - -.page { - display: flex; - flex-direction: row; - align-items: stretch; - flex: 1; - background-color: var(--vscode-editor-background); - color: var(--vscode-editor-foreground); -} - -.panel { - border: 1px solid transparent; -} - -.form-toggle { - margin-top: 5px; - - div { - border: none; - background-color: var( - --vscode-searchEditor-textInputBorder, - rgba(161, 161, 161, 0.5) - ); - } -} - -.connect-form-help-panel { - margin: 30px; - display: inline-block; - vertical-align: top; -} - -.connect { - min-width: 700px; - - label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; - } - - &-is-connected { - border: 2px solid var(--mongodb-green); - } - - ::-webkit-scrollbar { - width: 10px; - - &:horizontal { - height: 10px; - } - } - - ::-webkit-scrollbar-track { - background-color: none; - - &:hover { - background-color: rgba(0, 0, 0, 0.16); - } - } - - ::-webkit-scrollbar-thumb { - background-color: rgba(255, 255, 255, 0.25); - -webkit-border-radius: 10px; - border-radius: 10px; - } -} diff --git a/src/views/webview-app/legacy/connection-model/constants/auth-mechanism-to-auth-strategy.ts b/src/views/webview-app/legacy/connection-model/constants/auth-mechanism-to-auth-strategy.ts deleted file mode 100644 index bf8f52662..000000000 --- a/src/views/webview-app/legacy/connection-model/constants/auth-mechanism-to-auth-strategy.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Maps `authMechanism` to `authStrategy` -export default { - DEFAULT: 'MONGODB', - 'SCRAM-SHA-1': 'MONGODB', - 'SCRAM-SHA-256': 'SCRAM-SHA-256', - 'MONGODB-CR': 'MONGODB', - 'MONGODB-X509': 'X509', - PLAIN: 'LDAP', - LDAP: 'LDAP', -}; diff --git a/src/views/webview-app/legacy/connection-model/constants/auth-strategies.ts b/src/views/webview-app/legacy/connection-model/constants/auth-strategies.ts deleted file mode 100644 index 835c52488..000000000 --- a/src/views/webview-app/legacy/connection-model/constants/auth-strategies.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Allowed values for the `authStrategy` field. -export enum AUTH_STRATEGY_VALUES { - /** - * Use no authentication strategy. - */ - NONE = 'NONE', - /** - * Allow the driver to autodetect and select SCRAM-SHA-1 - * or MONGODB-CR depending on server capabilities. - */ - MONGODB = 'MONGODB', - /** - * @enterprise - * @see http://bit.ly/mongodb-node-driver-x509 - */ - X509 = 'X509', - /** - * @enterprise - * @see http://bit.ly/mongodb-node-driver-ldap - */ - LDAP = 'LDAP', - 'SCRAM-SHA-256' = 'SCRAM-SHA-256', -} - -type AuthStrategy = { - id: AUTH_STRATEGY_VALUES; - title: string; -}; - -export const AuthStrategies: AuthStrategy[] = [ - { - id: AUTH_STRATEGY_VALUES.NONE, - title: 'None', - }, - { - id: AUTH_STRATEGY_VALUES.MONGODB, - title: 'Username / Password', - }, - { - id: AUTH_STRATEGY_VALUES['SCRAM-SHA-256'], - title: 'SCRAM-SHA-256', - }, - { - id: AUTH_STRATEGY_VALUES.LDAP, - title: 'LDAP', - }, - { - id: AUTH_STRATEGY_VALUES.X509, - title: 'X.509', - }, -]; - -export default AUTH_STRATEGY_VALUES; diff --git a/src/views/webview-app/legacy/connection-model/constants/auth-strategy-to-auth-mechanism.ts b/src/views/webview-app/legacy/connection-model/constants/auth-strategy-to-auth-mechanism.ts deleted file mode 100644 index df4485ee3..000000000 --- a/src/views/webview-app/legacy/connection-model/constants/auth-strategy-to-auth-mechanism.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Maps `authStrategy` to driver `authMechanism`. -export default { - NONE: undefined, - MONGODB: 'DEFAULT', - X509: 'MONGODB-X509', - LDAP: 'PLAIN', - 'SCRAM-SHA-256': 'SCRAM-SHA-256', -}; diff --git a/src/views/webview-app/legacy/connection-model/constants/auth-strategy-to-field-names.ts b/src/views/webview-app/legacy/connection-model/constants/auth-strategy-to-field-names.ts deleted file mode 100644 index 226fee6d5..000000000 --- a/src/views/webview-app/legacy/connection-model/constants/auth-strategy-to-field-names.ts +++ /dev/null @@ -1,21 +0,0 @@ -// Array of field names associated with each `authStrategy`. -export default { - NONE: [], - MONGODB: [ - 'mongodbUsername', // required - 'mongodbPassword', // required - 'mongodbDatabaseName', // optional - ], - 'SCRAM-SHA-256': [ - 'mongodbUsername', // required - 'mongodbPassword', // required - 'mongodbDatabaseName', // optional - ], - X509: [ - 'x509Username', // required - ], - LDAP: [ - 'ldapUsername', // required - 'ldapPassword', // required - ], -}; diff --git a/src/views/webview-app/legacy/connection-model/constants/connection-types.ts b/src/views/webview-app/legacy/connection-model/constants/connection-types.ts deleted file mode 100644 index 76714aa50..000000000 --- a/src/views/webview-app/legacy/connection-model/constants/connection-types.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Allowed values for the `connectionType` field. -enum CONNECTION_TYPES { - NODE_DRIVER = 'NODE_DRIVER', - STITCH_ON_PREM = 'STITCH_ON_PREM', - STITCH_ATLAS = 'STITCH_ATLAS', -} - -export default CONNECTION_TYPES; diff --git a/src/views/webview-app/legacy/connection-model/constants/read-preferences.ts b/src/views/webview-app/legacy/connection-model/constants/read-preferences.ts deleted file mode 100644 index d846e033e..000000000 --- a/src/views/webview-app/legacy/connection-model/constants/read-preferences.ts +++ /dev/null @@ -1,9 +0,0 @@ -enum READ_PREFERENCES { - PRIMARY = 'primary', - PRIMARY_PREFERRED = 'primaryPreferred', - SECONDARY = 'secondary', - SECONDARY_PREFERRED = 'secondaryPreferred', - NEAREST = 'nearest', -} - -export default READ_PREFERENCES; diff --git a/src/views/webview-app/legacy/connection-model/constants/ssh-tunnel-types.ts b/src/views/webview-app/legacy/connection-model/constants/ssh-tunnel-types.ts deleted file mode 100644 index 25e08593b..000000000 --- a/src/views/webview-app/legacy/connection-model/constants/ssh-tunnel-types.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Allowed values for the `sshTunnel` field. -export enum SSH_TUNNEL_TYPES { - /** - * Do not use SSH tunneling. - */ - NONE = 'NONE', - /** - * The tunnel is created with username and password only. - */ - USER_PASSWORD = 'USER_PASSWORD', - /** - * The tunnel is created using an identity file. - */ - IDENTITY_FILE = 'IDENTITY_FILE', -} - -type SSHTunnelOption = { - id: SSH_TUNNEL_TYPES; - title: string; -}; - -export const SSHTunnelOptions: SSHTunnelOption[] = [ - { - id: SSH_TUNNEL_TYPES.NONE, - title: 'None', - }, - { - id: SSH_TUNNEL_TYPES.USER_PASSWORD, - title: 'Use Password', - }, - { - id: SSH_TUNNEL_TYPES.IDENTITY_FILE, - title: 'Use Identity File', - }, -]; - -export default SSH_TUNNEL_TYPES; diff --git a/src/views/webview-app/legacy/connection-model/constants/ssl-methods.ts b/src/views/webview-app/legacy/connection-model/constants/ssl-methods.ts deleted file mode 100644 index 4f837935e..000000000 --- a/src/views/webview-app/legacy/connection-model/constants/ssl-methods.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Allowed values for the `sslMethod` field. -export enum SSL_METHODS { - /** - * Do not use SSL for anything. - */ - NONE = 'NONE', - /** - * Use system CA. - */ - SYSTEMCA = 'SYSTEMCA', - /** - * Use SSL if available. - */ - IFAVAILABLE = 'IFAVAILABLE', - /** - * Use SSL but do not perform any validation of the certificate chain. - */ - UNVALIDATED = 'UNVALIDATED', - /** - * The driver should validate the server certificate and fail to connect if validation fails. - */ - SERVER = 'SERVER', - /** - * The driver must present a valid certificate and validate the server certificate. - */ - ALL = 'ALL', -} - -type SSLMethod = { - id: SSL_METHODS; - title: string; -}; - -export const SSLMethodOptions: SSLMethod[] = [ - { - id: SSL_METHODS.NONE, - title: 'None', - }, - { - id: SSL_METHODS.SYSTEMCA, - title: 'System CA / Atlas Deployment', - }, - { - id: SSL_METHODS.SERVER, - title: 'Server Validation', - }, - { - id: SSL_METHODS.ALL, - title: 'Server and Client Validation', - }, - { - id: SSL_METHODS.UNVALIDATED, - title: 'Unvalidated (insecure)', - }, -]; - -export default SSL_METHODS; diff --git a/src/views/webview-app/legacy/connection-model/legacy-connection-model.ts b/src/views/webview-app/legacy/connection-model/legacy-connection-model.ts deleted file mode 100644 index 76b4e48ea..000000000 --- a/src/views/webview-app/legacy/connection-model/legacy-connection-model.ts +++ /dev/null @@ -1,234 +0,0 @@ -import AUTH_STRATEGIES from './constants/auth-strategies'; -import READ_PREFERENCES from './constants/read-preferences'; -import SSL_METHODS from './constants/ssl-methods'; -import SSH_TUNNEL_TYPES from './constants/ssh-tunnel-types'; - -import { v4 as uuidv4 } from 'uuid'; - -// Defaults. -const AUTH_STRATEGY_DEFAULT = AUTH_STRATEGIES.NONE; -const READ_PREFERENCE_DEFAULT = READ_PREFERENCES.PRIMARY; -const SSL_DEFAULT = SSL_METHODS.NONE; -const SSH_TUNNEL_DEFAULT = SSH_TUNNEL_TYPES.NONE; - -type port = number; - -export interface Host { - host: string; - port: port; -} - -export const DEFAULT_HOST: Host = { host: 'localhost', port: 27017 }; - -// NOTE: This is currently tightly coupled with `mongodb-connection-model`. -class LegacyConnectionModel { - _id = uuidv4(); - isFavorite = false; - name = 'Local'; - isSrvRecord = false; - hostname = 'localhost'; - port: port = 27017; - hosts: Host[] = [{ ...DEFAULT_HOST }]; - extraOptions = {}; - replicaSet?: string; - readPreference: READ_PREFERENCES = READ_PREFERENCE_DEFAULT; - - /** - * Authentication. - */ - authStrategy: AUTH_STRATEGIES = AUTH_STRATEGY_DEFAULT; - kerberosCanonicalizeHostname = false; - kerberosPassword?: string; - kerberosPrincipal?: string; - kerberosServiceName?: string; - ldapPassword?: string; - ldapUsername?: string; - mongodbDatabaseName?: string; - mongodbPassword?: string; - mongodbUsername?: string; - x509Username?: string; - - /** - * SSL - */ - sslMethod: SSL_METHODS = SSL_DEFAULT; - /** - * Array of valid certificates either as Buffers or Strings - * (needs to have a mongod server with ssl support, 2.4 or higher). - */ - sslCA?: string[]; - /** - * String or buffer containing the certificate we wish to present - * (needs to have a mongod server with ssl support, 2.4 or higher). - */ - sslCert?: string[]; - /** - * String or buffer containing the certificate private key we wish to present - * (needs to have a mongod server with ssl support, 2.4 or higher). - */ - sslKey?: string[]; - /** - * String or buffer containing the certificate password - * (needs to have a mongod server with ssl support, 2.4 or higher). - */ - sslPass?: string; - - /** - * SSH TUNNEL - */ - sshTunnel: SSH_TUNNEL_TYPES = SSH_TUNNEL_DEFAULT; - // The hostname of the SSH remote host. - sshTunnelHostname?: string; - // The SSH port of the remote host. - sshTunnelPort: port = 22; - // Bind the localhost endpoint of the SSH Tunnel to this port. - sshTunnelBindToLocalPort?: port; - // The optional SSH username for the remote host. - sshTunnelUsername?: string; - // The optional SSH password for the remote host. - sshTunnelPassword?: string; - // The optional path to the SSH identity file for the remote host. - sshTunnelIdentityFile?: string[]; - // The optional passphrase for `sshTunnelIdentityFile`. - sshTunnelPassphrase?: string; -} - -/** - * Enforce constraints for SSL. - * @param {Object} attrs - Incoming attributes. - */ -const validateSsl = (attrs: LegacyConnectionModel): void => { - if ( - !attrs.sslMethod || - ['NONE', 'UNVALIDATED', 'IFAVAILABLE', 'SYSTEMCA'].includes(attrs.sslMethod) - ) { - return; - } - - if (attrs.sslMethod === SSL_METHODS.SERVER && !attrs.sslCA) { - throw new TypeError('sslCA is required when ssl is SERVER.'); - } else if (attrs.sslMethod === SSL_METHODS.ALL) { - if (!attrs.sslCA) { - throw new TypeError('sslCA is required when ssl is ALL.'); - } - - if (!attrs.sslCert) { - throw new TypeError('sslCert is required when ssl is ALL.'); - } - } -}; - -const validateMongodb = (attrs: LegacyConnectionModel): void => { - if ( - attrs.authStrategy === AUTH_STRATEGIES.MONGODB || - attrs.authStrategy === AUTH_STRATEGIES['SCRAM-SHA-256'] - ) { - if (!attrs.mongodbUsername) { - throw new TypeError( - 'The mongodbUsername field is required when ' + - 'using MONGODB or SCRAM-SHA-256 for authStrategy.' - ); - } - - if (!attrs.mongodbPassword) { - throw new TypeError( - 'The mongodbPassword field is required when ' + - 'using MONGODB or SCRAM-SHA-256 for authStrategy.' - ); - } - } -}; - -const validateX509 = (attrs: LegacyConnectionModel): void => { - if ( - attrs.authStrategy === AUTH_STRATEGIES.X509 && - attrs.sslMethod !== SSL_METHODS.ALL - ) { - throw new TypeError( - "SSL method is required to be set to 'Server and Client' when using x509 authentication" - ); - } -}; - -const validateLdap = (attrs: LegacyConnectionModel): void => { - if (attrs.authStrategy === AUTH_STRATEGIES.LDAP) { - if (!attrs.ldapUsername) { - throw new TypeError( - 'The ldapUsername field is required when using LDAP for authStrategy.' - ); - } - if (!attrs.ldapPassword) { - throw new TypeError( - 'The ldapPassword field is required when using LDAP for authStrategy.' - ); - } - } -}; - -const validateStandardSshTunnelOptions = ( - attrs: LegacyConnectionModel -): void => { - if (attrs.sshTunnel !== SSH_TUNNEL_TYPES.NONE && attrs.isSrvRecord) { - throw new TypeError( - 'SSH Tunnel connections are not currently supported with srv records, please specify an individual server to connect to.' - ); - } - - if (!attrs.sshTunnelUsername) { - throw new TypeError( - 'sslTunnelUsername is required when sshTunnel is not NONE.' - ); - } - - if (!attrs.sshTunnelHostname) { - throw new TypeError( - 'sslTunnelHostname is required when sshTunnel is not NONE.' - ); - } - - if (!attrs.sshTunnelPort) { - throw new TypeError( - 'sslTunnelPort is required when sshTunnel is not NONE.' - ); - } -}; - -const validateSshTunnel = (attrs: LegacyConnectionModel): void => { - if (!attrs.sshTunnel || attrs.sshTunnel === SSH_TUNNEL_DEFAULT) { - return; - } - - if (attrs.sshTunnel === SSH_TUNNEL_TYPES.USER_PASSWORD) { - validateStandardSshTunnelOptions(attrs); - - if (!attrs.sshTunnelPassword) { - throw new TypeError( - 'sslTunnelPassword is required when sshTunnel is USER_PASSWORD.' - ); - } - } else if (attrs.sshTunnel === SSH_TUNNEL_TYPES.IDENTITY_FILE) { - validateStandardSshTunnelOptions(attrs); - - if (!attrs.sshTunnelIdentityFile) { - throw new TypeError( - 'sslTunnelIdentityFile is required when sshTunnel is IDENTITY_FILE.' - ); - } - } -}; - -export const validateConnectionModel = ( - attrs: LegacyConnectionModel -): Error | undefined => { - try { - validateSsl(attrs); - validateMongodb(attrs); - validateX509(attrs); - validateLdap(attrs); - validateSshTunnel(attrs); - } catch (error) { - return error as Error; - } -}; - -export default LegacyConnectionModel; diff --git a/src/views/webview-app/legacy/connection-model/local-port-generator.ts b/src/views/webview-app/legacy/connection-model/local-port-generator.ts deleted file mode 100644 index ed3d62b26..000000000 --- a/src/views/webview-app/legacy/connection-model/local-port-generator.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Choose a random ephemeral port to serve our (perhaps many) SSH Tunnels. - * IANA says 29170-29998 is unassigned, - * but Nintendo used 29900+ according to Wikipedia. - * https://en.wikipedia.org/wiki/Ephemeral_port - * https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers - * http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?&page=127 - * - * @returns {Number} Random port - */ -export default (): number => { - const startPort = 29170; - const endPort = 29899; - const randomPort = ( - Math.random() * (endPort - startPort + 1) + - startPort - ).toString(); - - return parseInt(randomPort, 10); -}; diff --git a/src/views/webview-app/legacy/externals.ts b/src/views/webview-app/legacy/externals.ts deleted file mode 100644 index 34956ed88..000000000 --- a/src/views/webview-app/legacy/externals.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.less' { - const resource: { [key: string]: string }; - - export default resource; -} diff --git a/src/views/webview-app/legacy/store/actions.ts b/src/views/webview-app/legacy/store/actions.ts deleted file mode 100644 index c68690b7d..000000000 --- a/src/views/webview-app/legacy/store/actions.ts +++ /dev/null @@ -1,297 +0,0 @@ -import type READ_PREFERENCES from '../connection-model/constants/read-preferences'; -import type AUTH_STRATEGIES from '../connection-model/constants/auth-strategies'; -import type SSL_METHODS from '../connection-model/constants/ssl-methods'; -import type SSH_TUNNEL_TYPES from '../connection-model/constants/ssh-tunnel-types'; -import type { CONNECTION_STATUS } from '../../extension-app-message-constants'; -import type { CONNECTION_FORM_TABS } from './constants'; -import type { Host } from '../connection-model/legacy-connection-model'; - -export enum ActionTypes { - AUTH_SOURCE_CHANGED = 'AUTH_SOURCE_CHANGED', - AUTH_STRATEGY_CHANGED = 'AUTH_STRATEGY_CHANGED', - CONNECT = 'CONNECT', - CONNECTION_EVENT_OCCURED = 'CONNECTION_EVENT_OCCURED', - CONNECTION_FORM_CHANGED = 'CONNECTION_FORM_CHANGED', - CREATE_NEW_PLAYGROUND = 'CREATE_NEW_PLAYGROUND', - HOSTNAME_CHANGED = 'HOSTNAME_CHANGED', - HOSTS_CHANGED = 'HOSTS_CHANGED', - IS_SRV_RECORD_TOGGLED = 'IS_SRV_RECORD_TOGGLED', - EXTENSION_LINK_CLICKED = 'EXTENSION_LINK_CLICKED', - LDAP_PASSWORD_CHANGED = 'LDAP_PASSWORD_CHANGED', - LDAP_USERNAME_CHANGED = 'LDAP_USERNAME_CHANGED', - ON_CHANGE_SSH_TUNNEL_IDENTITY_FILE = 'ON_CHANGE_SSH_TUNNEL_IDENTITY_FILE', - ON_CHANGE_SSL_CA = 'ON_CHANGE_SSL_CA', - ON_CHANGE_SSL_CERT = 'ON_CHANGE_SSL_CERT', - OPEN_CONNECTION_STRING_INPUT = 'OPEN_CONNECTION_STRING_INPUT', - PASSWORD_CHANGED = 'PASSWORD_CHANGED', - PORT_CHANGED = 'PORT_CHANGED', - READ_PREFERENCE_CHANGED = 'READ_PREFERENCE_CHANGED', - RENAME_CONNECTION = 'RENAME_CONNECTION', - REPLICA_SET_CHANGED = 'REPLICA_SET_CHANGED', - REQUEST_CONNECTION_STATUS = 'REQUEST_CONNECTION_STATUS', - SET_CONNECTION_FORM_TAB = 'SET_CONNECTION_FORM_TAB', - SET_CONNECTION_STATUS = 'SET_CONNECTION_STATUS', - SSH_TUNNEL_CHANGED = 'SSH_TUNNEL_CHANGED', - SSH_TUNNEL_IDENTITY_FILE_CHANGED = 'SSH_TUNNEL_IDENTITY_FILE_CHANGED', - SSH_TUNNEL_HOSTNAME_CHANGED = 'SSH_TUNNEL_HOSTNAME_CHANGED', - SSH_TUNNEL_PASSPHRASE_CHANGED = 'SSH_TUNNEL_PASSPHRASE_CHANGED', - SSH_TUNNEL_PASSWORD_CHANGED = 'SSH_TUNNEL_PASSWORD_CHANGED', - SSH_TUNNEL_PORT_CHANGED = 'SSH_TUNNEL_PORT_CHANGED', - SSH_TUNNEL_USERNAME_CHANGED = 'SSH_TUNNEL_USERNAME_CHANGED', - SSL_CA_CHANGED = 'SSL_CA_CHANGED', - SSL_CERT_CHANGED = 'SSL_CERT_CHANGED', - SSL_METHOD_CHANGED = 'SSL_METHOD_CHANGED', - SSL_PASS_CHANGED = 'SSL_PASS_CHANGED', - TOGGLE_SHOW_CONNECTION_FORM = 'TOGGLE_SHOW_CONNECTION_FORM', - TOGGLE_SHOW_RESOURCES_PANEL = 'TOGGLE_SHOW_RESOURCES_PANEL', - TRUSTED_LINK_CLICKED = 'TRUSTED_LINK_CLICKED', - USERNAME_CHANGED = 'USERNAME_CHANGED', - X509_USERNAME_CHANGED = 'X509_USERNAME_CHANGED', -} - -export type FilePickerActionTypes = - | ActionTypes.SSH_TUNNEL_IDENTITY_FILE_CHANGED - | ActionTypes.SSL_CA_CHANGED - | ActionTypes.SSL_CERT_CHANGED; - -export interface BaseAction { - type: ActionTypes; -} - -export interface LinkClickedAction extends BaseAction { - type: ActionTypes.EXTENSION_LINK_CLICKED; - screen: string; - linkId: string; -} - -export interface AuthSourceChangedAction extends BaseAction { - type: ActionTypes.AUTH_SOURCE_CHANGED; - mongodbDatabaseName?: string; -} - -export interface AuthStrategyChangedAction extends BaseAction { - type: ActionTypes.AUTH_STRATEGY_CHANGED; - authStrategy: AUTH_STRATEGIES; -} - -export interface ConnectAction extends BaseAction { - type: ActionTypes.CONNECT; -} - -export interface ConnectionEventOccuredAction extends BaseAction { - type: ActionTypes.CONNECTION_EVENT_OCCURED; - successfullyConnected: boolean; - connectionMessage: string; - connectionAttemptId: string; -} - -export interface ConnectionFormChangedAction extends BaseAction { - type: ActionTypes.CONNECTION_FORM_CHANGED; -} - -export interface CreateNewPlaygroundAction extends BaseAction { - type: ActionTypes.CREATE_NEW_PLAYGROUND; -} - -export interface HostnameChangedAction extends BaseAction { - type: ActionTypes.HOSTNAME_CHANGED; - hostname: string; -} - -export interface HostsChangedAction extends BaseAction { - type: ActionTypes.HOSTS_CHANGED; - hosts: Host[]; -} - -export interface IsSrvRecordToggledAction extends BaseAction { - type: ActionTypes.IS_SRV_RECORD_TOGGLED; -} - -export interface LDAPPasswordChangedAction extends BaseAction { - type: ActionTypes.LDAP_PASSWORD_CHANGED; - ldapPassword: string; -} -export interface LDAPUsernameChangedAction extends BaseAction { - type: ActionTypes.LDAP_USERNAME_CHANGED; - ldapUsername: string; -} - -export interface OnChangeSSHTunnelIdentityFileAction extends BaseAction { - type: ActionTypes.ON_CHANGE_SSH_TUNNEL_IDENTITY_FILE; -} - -export interface OnChangeSSLCAAction extends BaseAction { - type: ActionTypes.ON_CHANGE_SSL_CA; -} - -export interface OnChangeSSLCertAction extends BaseAction { - type: ActionTypes.ON_CHANGE_SSL_CERT; -} - -export interface OpenConnectionStringInputAction extends BaseAction { - type: ActionTypes.OPEN_CONNECTION_STRING_INPUT; -} - -export interface PasswordChangedAction extends BaseAction { - type: ActionTypes.PASSWORD_CHANGED; - mongodbPassword: string; -} - -export interface PortChangedAction extends BaseAction { - type: ActionTypes.PORT_CHANGED; - port: number; -} - -export interface ReadPreferenceChangedAction extends BaseAction { - type: ActionTypes.READ_PREFERENCE_CHANGED; - readPreference: READ_PREFERENCES; -} - -export interface RenameConnectionAction extends BaseAction { - type: ActionTypes.RENAME_CONNECTION; -} - -export interface ReplicaSetChangedAction extends BaseAction { - type: ActionTypes.REPLICA_SET_CHANGED; - replicaSet?: string; -} - -export interface RequestConnectionStatusAction extends BaseAction { - type: ActionTypes.REQUEST_CONNECTION_STATUS; -} - -export interface SetConnectionFormTabAction extends BaseAction { - type: ActionTypes.SET_CONNECTION_FORM_TAB; - connectionFormTab: CONNECTION_FORM_TABS; -} - -export interface SetConnectionStatusAction extends BaseAction { - type: ActionTypes.SET_CONNECTION_STATUS; - connectionStatus: CONNECTION_STATUS; - activeConnectionName: string; -} - -export interface SSHTunnelChangedAction extends BaseAction { - type: ActionTypes.SSH_TUNNEL_CHANGED; - sshTunnel: SSH_TUNNEL_TYPES; -} - -export interface SSHTunnelHostnameChangedAction extends BaseAction { - type: ActionTypes.SSH_TUNNEL_HOSTNAME_CHANGED; - sshTunnelHostname: string; -} - -export interface SSHTunnelIdentityFileChangedAction extends BaseAction { - type: ActionTypes.SSH_TUNNEL_IDENTITY_FILE_CHANGED; - files: string[] | undefined; -} - -export interface SSHTunnelPassphraseChangedAction extends BaseAction { - type: ActionTypes.SSH_TUNNEL_PASSPHRASE_CHANGED; - sshTunnelPassphrase: string; -} - -export interface SSHTunnelPasswordChangedAction extends BaseAction { - type: ActionTypes.SSH_TUNNEL_PASSWORD_CHANGED; - sshTunnelPassword: string; -} - -export interface SSHTunnelPortChangedAction extends BaseAction { - type: ActionTypes.SSH_TUNNEL_PORT_CHANGED; - sshTunnelPort: number; -} - -export interface SSHTunnelUsernameChangedAction extends BaseAction { - type: ActionTypes.SSH_TUNNEL_USERNAME_CHANGED; - sshTunnelUsername: string; -} - -export interface SSLCAChangedAction extends BaseAction { - type: ActionTypes.SSL_CA_CHANGED; - files: string[] | undefined; -} - -export interface SSLCertChangedAction extends BaseAction { - type: ActionTypes.SSL_CERT_CHANGED; - files: string[] | undefined; -} - -export interface SSLMethodChangedAction extends BaseAction { - type: ActionTypes.SSL_METHOD_CHANGED; - sslMethod: SSL_METHODS; -} - -export interface SSLPassChangedAction extends BaseAction { - type: ActionTypes.SSL_PASS_CHANGED; - sslPass: string; -} - -export interface ToggleShowConnectionFormAction extends BaseAction { - type: ActionTypes.TOGGLE_SHOW_CONNECTION_FORM; -} - -export interface ToggleShowResourcesPanelAction extends BaseAction { - type: ActionTypes.TOGGLE_SHOW_RESOURCES_PANEL; -} - -export interface TrustedLinkClickedAction extends BaseAction { - type: ActionTypes.TRUSTED_LINK_CLICKED; - linkTo: string; -} - -export interface UsernameChangedAction extends BaseAction { - type: ActionTypes.USERNAME_CHANGED; - mongodbUsername: string; -} - -export interface X509UsernameChangedAction extends BaseAction { - type: ActionTypes.X509_USERNAME_CHANGED; - x509Username: string; -} - -export type FilePickerActions = - | SSHTunnelIdentityFileChangedAction - | SSLCAChangedAction - | SSLCertChangedAction; - -export type Actions = - | AuthSourceChangedAction - | AuthStrategyChangedAction - | ConnectAction - | ConnectionEventOccuredAction - | ConnectionFormChangedAction - | CreateNewPlaygroundAction - | HostnameChangedAction - | HostsChangedAction - | IsSrvRecordToggledAction - | LDAPPasswordChangedAction - | LDAPUsernameChangedAction - | LinkClickedAction - | OnChangeSSHTunnelIdentityFileAction - | OnChangeSSLCAAction - | OnChangeSSLCertAction - | OpenConnectionStringInputAction - | PasswordChangedAction - | PortChangedAction - | ReadPreferenceChangedAction - | RenameConnectionAction - | ReplicaSetChangedAction - | RequestConnectionStatusAction - | SetConnectionFormTabAction - | SetConnectionStatusAction - | SSHTunnelChangedAction - | SSHTunnelHostnameChangedAction - | SSHTunnelIdentityFileChangedAction - | SSHTunnelPassphraseChangedAction - | SSHTunnelPasswordChangedAction - | SSHTunnelPortChangedAction - | SSHTunnelUsernameChangedAction - | SSLCAChangedAction - | SSLCertChangedAction - | SSLMethodChangedAction - | SSLPassChangedAction - | ToggleShowConnectionFormAction - | ToggleShowResourcesPanelAction - | TrustedLinkClickedAction - | UsernameChangedAction - | X509UsernameChangedAction; diff --git a/src/views/webview-app/legacy/store/constants.ts b/src/views/webview-app/legacy/store/constants.ts deleted file mode 100644 index ded06b180..000000000 --- a/src/views/webview-app/legacy/store/constants.ts +++ /dev/null @@ -1,6 +0,0 @@ -export enum CONNECTION_FORM_TABS { - GENERAL = 'GENERAL', - SSL = 'SSL', - SSH = 'SSH', - ADVANCED = 'ADVANCED', -} diff --git a/src/views/webview-app/legacy/store/store.ts b/src/views/webview-app/legacy/store/store.ts deleted file mode 100644 index b8ecf56a1..000000000 --- a/src/views/webview-app/legacy/store/store.ts +++ /dev/null @@ -1,484 +0,0 @@ -import type { Actions, FilePickerActionTypes } from './actions'; -import { ActionTypes } from './actions'; -import { v4 as uuidv4 } from 'uuid'; - -import LegacyConnectionModel, { - DEFAULT_HOST, - validateConnectionModel, -} from '../connection-model/legacy-connection-model'; -import SSL_METHODS from '../connection-model/constants/ssl-methods'; -import { - CONNECTION_STATUS, - MESSAGE_TYPES, -} from '../../extension-app-message-constants'; -import { CONNECTION_FORM_TABS } from './constants'; -import vscode from '../../vscode-api'; - -export interface AppState { - activeConnectionName: string; - connectionAttemptId: null | string; - connectionFormTab: CONNECTION_FORM_TABS; - connectionMessage: string; - connectionStatus: CONNECTION_STATUS; - currentConnection: LegacyConnectionModel; - isValid: boolean; - isConnecting: boolean; - isConnected: boolean; - errorMessage: string; - showConnectForm: boolean; - showResourcesPanel: boolean; - syntaxErrorMessage: string; - savedMessage: string; -} - -export const initialState: AppState = { - activeConnectionName: '', - connectionAttemptId: null, - connectionFormTab: CONNECTION_FORM_TABS.GENERAL, - connectionMessage: '', - connectionStatus: CONNECTION_STATUS.LOADING, - currentConnection: new LegacyConnectionModel(), - isValid: true, - isConnecting: false, - isConnected: false, - errorMessage: '', - showConnectForm: false, - showResourcesPanel: false, - syntaxErrorMessage: '', - savedMessage: '', -}; - -const showFilePicker = ( - action: FilePickerActionTypes, - multi: boolean -): void => { - vscode.postMessage({ - command: MESSAGE_TYPES.OPEN_FILE_PICKER, - action, - multi, - }); -}; - -// TODO: VSCODE-491 - Remove this entirely when getting rid of legacy -const sendLegacyConnectToExtension = ( - connectionModel: LegacyConnectionModel -): string => { - const connectionAttemptId = uuidv4(); - - vscode.postMessage({ - command: MESSAGE_TYPES.LEGACY_CONNECT, - connectionModel, - connectionAttemptId, - }); - - return connectionAttemptId; -}; - -// eslint-disable-next-line complexity -export const rootReducer = ( - state: AppState = initialState, - action: Actions -): AppState => { - switch (action.type) { - case ActionTypes.AUTH_SOURCE_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - mongodbDatabaseName: action.mongodbDatabaseName, - }, - }; - - case ActionTypes.AUTH_STRATEGY_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - authStrategy: action.authStrategy, - - // Reset the auth fields. - mongodbUsername: undefined, - mongodbPassword: undefined, - mongodbDatabaseName: undefined, - x509Username: undefined, - ldapUsername: undefined, - ldapPassword: undefined, - }, - }; - - case ActionTypes.CONNECT: - if (validateConnectionModel(state.currentConnection)) { - return { - ...state, - isValid: false, - errorMessage: ( - validateConnectionModel(state.currentConnection) || { - message: 'The required fields can not be empty.', - } - ).message, - }; - } - - return { - ...state, - // The form may be displaying a previous error message from a failed connect. - isValid: true, - isConnecting: true, - isConnected: false, - connectionAttemptId: sendLegacyConnectToExtension( - state.currentConnection - ), - }; - - case ActionTypes.CREATE_NEW_PLAYGROUND: - vscode.postMessage({ - command: MESSAGE_TYPES.CREATE_NEW_PLAYGROUND, - }); - - return { ...state }; - - case ActionTypes.EXTENSION_LINK_CLICKED: - vscode.postMessage({ - command: MESSAGE_TYPES.EXTENSION_LINK_CLICKED, - screen: action.screen, - linkId: action.linkId, - }); - - return { ...state }; - - case ActionTypes.CONNECTION_FORM_CHANGED: - return { - ...state, - connectionMessage: '', - errorMessage: '', - isValid: true, - isConnected: false, - syntaxErrorMessage: '', - }; - - case ActionTypes.CONNECTION_EVENT_OCCURED: - if (state.connectionAttemptId === action.connectionAttemptId) { - // Only update to show the connection attempt result - // when we it is the most recent connection attempt. - return { - ...state, - isConnecting: false, - isConnected: action.successfullyConnected, - isValid: action.successfullyConnected ? state.isValid : false, - errorMessage: action.successfullyConnected - ? '' - : action.connectionMessage, - connectionMessage: action.connectionMessage, - }; - } - return { ...state }; - - case ActionTypes.HOSTNAME_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - hostname: action.hostname.trim(), - sslMethod: /mongodb\.net/i.exec(action.hostname) - ? SSL_METHODS.SYSTEMCA - : state.currentConnection.sslMethod, - }, - }; - - case ActionTypes.HOSTS_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - hosts: [...(action.hosts ? action.hosts : [DEFAULT_HOST])], - }, - }; - - case ActionTypes.IS_SRV_RECORD_TOGGLED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - isSrvRecord: !state.currentConnection.isSrvRecord, - }, - }; - - case ActionTypes.LDAP_PASSWORD_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - ldapPassword: action.ldapPassword, - }, - }; - - case ActionTypes.LDAP_USERNAME_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - ldapUsername: action.ldapUsername, - }, - }; - - case ActionTypes.ON_CHANGE_SSH_TUNNEL_IDENTITY_FILE: - showFilePicker(ActionTypes.SSH_TUNNEL_IDENTITY_FILE_CHANGED, true); - - return { - ...state, - currentConnection: { - ...state.currentConnection, - sshTunnelIdentityFile: undefined, - }, - }; - - case ActionTypes.ON_CHANGE_SSL_CA: - showFilePicker(ActionTypes.SSL_CA_CHANGED, true); - - return { - ...state, - currentConnection: { - ...state.currentConnection, - sslCA: undefined, - }, - }; - - case ActionTypes.ON_CHANGE_SSL_CERT: - showFilePicker(ActionTypes.SSL_CERT_CHANGED, true); - - return { - ...state, - currentConnection: { - ...state.currentConnection, - sslCert: undefined, - }, - }; - - case ActionTypes.OPEN_CONNECTION_STRING_INPUT: - vscode.postMessage({ - command: MESSAGE_TYPES.OPEN_CONNECTION_STRING_INPUT, - }); - - return { - ...state, - isConnected: false, - }; - - case ActionTypes.PASSWORD_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - mongodbPassword: action.mongodbPassword, - }, - }; - - case ActionTypes.PORT_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - port: action.port, - }, - }; - - case ActionTypes.READ_PREFERENCE_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - readPreference: action.readPreference, - }, - }; - - case ActionTypes.RENAME_CONNECTION: - vscode.postMessage({ - command: MESSAGE_TYPES.RENAME_ACTIVE_CONNECTION, - }); - - return { ...state }; - - case ActionTypes.REPLICA_SET_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - replicaSet: action.replicaSet, - }, - }; - - case ActionTypes.REQUEST_CONNECTION_STATUS: - vscode.postMessage({ - command: MESSAGE_TYPES.GET_CONNECTION_STATUS, - }); - - return { ...state }; - - case ActionTypes.SET_CONNECTION_FORM_TAB: - return { - ...state, - connectionFormTab: action.connectionFormTab, - }; - - case ActionTypes.SET_CONNECTION_STATUS: - return { - ...state, - activeConnectionName: action.activeConnectionName, - connectionStatus: action.connectionStatus, - }; - - case ActionTypes.SSH_TUNNEL_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sshTunnel: action.sshTunnel, - sshTunnelHostname: undefined, - sshTunnelPort: 22, - sshTunnelBindToLocalPort: undefined, - sshTunnelUsername: undefined, - sshTunnelPassword: undefined, - sshTunnelIdentityFile: undefined, - sshTunnelPassphrase: undefined, - replicaSet: undefined, - }, - }; - - case ActionTypes.SSH_TUNNEL_HOSTNAME_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sshTunnelHostname: action.sshTunnelHostname, - }, - }; - - case ActionTypes.SSH_TUNNEL_IDENTITY_FILE_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sshTunnelIdentityFile: action.files, - }, - }; - - case ActionTypes.SSH_TUNNEL_PASSPHRASE_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sshTunnelPassphrase: action.sshTunnelPassphrase, - }, - }; - - case ActionTypes.SSH_TUNNEL_PASSWORD_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sshTunnelPassword: action.sshTunnelPassword, - }, - }; - - case ActionTypes.SSH_TUNNEL_PORT_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sshTunnelPort: action.sshTunnelPort, - }, - }; - - case ActionTypes.SSH_TUNNEL_USERNAME_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sshTunnelUsername: action.sshTunnelUsername, - }, - }; - - case ActionTypes.SSL_CA_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sslCA: action.files, - }, - }; - - case ActionTypes.SSL_CERT_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sslCert: action.files, - sslKey: action.files, - }, - }; - - case ActionTypes.SSL_METHOD_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sslMethod: action.sslMethod, - // Reset the ssl fields: - sslCA: undefined, - sslCert: undefined, - sslKey: undefined, - sslPass: undefined, - }, - }; - - case ActionTypes.SSL_PASS_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - sslPass: action.sslPass, - }, - }; - - case ActionTypes.TOGGLE_SHOW_CONNECTION_FORM: - return { - ...state, - showConnectForm: !state.showConnectForm, - }; - - case ActionTypes.TOGGLE_SHOW_RESOURCES_PANEL: - return { - ...state, - showResourcesPanel: !state.showResourcesPanel, - }; - - case ActionTypes.TRUSTED_LINK_CLICKED: - vscode.postMessage({ - command: MESSAGE_TYPES.OPEN_TRUSTED_LINK, - linkTo: action.linkTo, - }); - - return { ...state }; - - case ActionTypes.USERNAME_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - mongodbUsername: action.mongodbUsername, - }, - }; - - case ActionTypes.X509_USERNAME_CHANGED: - return { - ...state, - currentConnection: { - ...state.currentConnection, - x509Username: action.x509Username, - }, - }; - - default: - return state; - } -}; diff --git a/src/views/webview-app/legacy/styles/_variables.less b/src/views/webview-app/legacy/styles/_variables.less deleted file mode 100644 index 27bda0d41..000000000 --- a/src/views/webview-app/legacy/styles/_variables.less +++ /dev/null @@ -1,10 +0,0 @@ -@font-dark__color: #21313c; -@font-white__color: #ffffff; -@alertRed: #cf4a22; -@warningText: #ffdd49; -@green: #00ed64; -@green-dark: #00684a; -@green-hover: #3f864b; -@green-selected: #c3e7ca; -@gray: #5d6c74; -@icon-button-hover__color: #fbb129; diff --git a/src/views/webview-app/overview-page.tsx b/src/views/webview-app/overview-page.tsx index c2159d25e..c60b247d0 100644 --- a/src/views/webview-app/overview-page.tsx +++ b/src/views/webview-app/overview-page.tsx @@ -62,7 +62,12 @@ const OverviewPage: React.FC = () => { + handleConnectClicked({ + id, + connectionOptions, + }) + } onClose={closeConnectionForm} open={connectionFormOpened} connectionErrorMessage={connectionErrorMessage} diff --git a/src/views/webview-app/use-connection-form.ts b/src/views/webview-app/use-connection-form.ts index de969300a..1e9f44427 100644 --- a/src/views/webview-app/use-connection-form.ts +++ b/src/views/webview-app/use-connection-form.ts @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { v4 as uuidv4 } from 'uuid'; -import type { ConnectionInfo } from 'mongodb-data-service-legacy'; +import type { ConnectionOptions } from 'mongodb-data-service'; import { sendConnectToExtension, sendCancelConnectToExtension, @@ -45,14 +45,17 @@ export default function useConnectionForm() { handleCancelConnectClicked: () => { sendCancelConnectToExtension(); }, - handleConnectClicked: (connectionInfo: ConnectionInfo) => { + handleConnectClicked: (connectionAttempt: { + id: string; + connectionOptions: ConnectionOptions; + }) => { // Clears the error message from previous connect attempt setConnectionErrorMessage(''); const nextAttemptId = uuidv4(); setConnectionAttemptId(nextAttemptId); setIsConnecting(true); - sendConnectToExtension(connectionInfo, nextAttemptId); + sendConnectToExtension(connectionAttempt, nextAttemptId); }, }; } diff --git a/src/views/webview-app/vscode-api.ts b/src/views/webview-app/vscode-api.ts index 51bec255e..9759caf45 100644 --- a/src/views/webview-app/vscode-api.ts +++ b/src/views/webview-app/vscode-api.ts @@ -1,7 +1,7 @@ -import type { ConnectionInfo } from 'mongodb-data-service-legacy'; import { MESSAGE_TYPES, type MESSAGE_FROM_WEBVIEW_TO_EXTENSION, + type ConnectMessage, } from './extension-app-message-constants'; interface VSCodeApi { @@ -12,7 +12,7 @@ declare const acquireVsCodeApi: () => VSCodeApi; const vscode = acquireVsCodeApi(); export const sendConnectToExtension = ( - connectionInfo: ConnectionInfo, + connectionInfo: ConnectMessage['connectionInfo'], connectionAttemptId: string ) => { vscode.postMessage({ diff --git a/src/views/webviewController.ts b/src/views/webviewController.ts index a7aae281f..c7ed454c6 100644 --- a/src/views/webviewController.ts +++ b/src/views/webviewController.ts @@ -1,17 +1,13 @@ import * as vscode from 'vscode'; import path from 'path'; import crypto from 'crypto'; -import type { ConnectionInfo } from 'mongodb-data-service-legacy'; +import type { ConnectionOptions } from 'mongodb-data-service'; import type ConnectionController from '../connectionController'; import { ConnectionTypes } from '../connectionController'; -import type LegacyConnectionModel from './webview-app/legacy/connection-model/legacy-connection-model'; import { createLogger } from '../logging'; import EXTENSION_COMMANDS from '../commands'; -import type { - MESSAGE_FROM_WEBVIEW_TO_EXTENSION, - OpenFilePickerMessage, -} from './webview-app/extension-app-message-constants'; +import type { MESSAGE_FROM_WEBVIEW_TO_EXTENSION } from './webview-app/extension-app-message-constants'; import { MESSAGE_TYPES, VSCODE_EXTENSION_SEGMENT_ANONYMOUS_ID, @@ -27,16 +23,6 @@ const getNonce = () => { return crypto.randomBytes(16).toString('base64'); }; -const openFileOptions = { - canSelectFiles: true, - canSelectFolders: false, - canSelectMany: false, // Can be overridden. - openLabel: 'Open', - filters: { - 'All files': ['*'], - }, -}; - export const getReactAppUri = ( extensionPath: string, webview: vscode.Webview @@ -110,57 +96,18 @@ export default class WebviewController { this._themeChangedSubscription?.dispose(); } - // TODO: VSCODE-491 - Remove this entirely when getting rid of legacy - handleWebviewLegacyConnectAttempt = async ( - panel: vscode.WebviewPanel, - rawConnectionModel: LegacyConnectionModel, - connectionAttemptId: string - ): Promise => { - try { - const connectionInfo = - this._connectionController.parseNewConnection(rawConnectionModel); - const { successfullyConnected, connectionErrorMessage } = - await this._connectionController.saveNewConnectionAndConnect( - connectionInfo, - ConnectionTypes.CONNECTION_FORM - ); - - try { - // The webview may have been closed in which case this will throw. - void panel.webview.postMessage({ - command: MESSAGE_TYPES.CONNECT_RESULT, - connectionAttemptId, - connectionSuccess: successfullyConnected, - connectionMessage: successfullyConnected - ? `Successfully connected to ${this._connectionController.getActiveConnectionName()}.` - : connectionErrorMessage, - }); - } catch (err) { - log.error('Unable to send connection result to webview', err); - } - } catch (error) { - void vscode.window.showErrorMessage( - `Unable to load connection: ${error}` - ); - - void panel.webview.postMessage({ - command: MESSAGE_TYPES.CONNECT_RESULT, - connectionAttemptId, - connectionSuccess: false, - connectionMessage: `Unable to load connection: ${error}`, - }); - } - }; - handleWebviewConnectAttempt = async ( panel: vscode.WebviewPanel, - connectionInfo: ConnectionInfo, + connection: { + connectionOptions: ConnectionOptions; + id: string; + }, connectionAttemptId: string ) => { try { const { successfullyConnected, connectionErrorMessage } = await this._connectionController.saveNewConnectionAndConnect( - connectionInfo, + connection, ConnectionTypes.CONNECTION_FORM ); @@ -191,38 +138,12 @@ export default class WebviewController { } }; - handleWebviewOpenFilePickerRequest = async ( - message: OpenFilePickerMessage, - panel: vscode.WebviewPanel - ): Promise => { - const files = await vscode.window.showOpenDialog({ - ...openFileOptions, - canSelectMany: message.multi, - }); - void panel.webview.postMessage({ - command: MESSAGE_TYPES.FILE_PICKER_RESULTS, - action: message.action, - files: - files && files.length > 0 - ? files.map((file) => file.fsPath) - : undefined, - }); - }; - // eslint-disable-next-line complexity handleWebviewMessage = async ( message: MESSAGE_FROM_WEBVIEW_TO_EXTENSION, panel: vscode.WebviewPanel ): Promise => { switch (message.command) { - // TODO: VSCODE-491 - Remove this case entirely when getting rid of legacy - case MESSAGE_TYPES.LEGACY_CONNECT: - await this.handleWebviewLegacyConnectAttempt( - panel, - message.connectionModel, - message.connectionAttemptId - ); - return; case MESSAGE_TYPES.CONNECT: await this.handleWebviewConnectAttempt( panel, @@ -246,9 +167,6 @@ export default class WebviewController { this._connectionController.getActiveConnectionName(), }); return; - case MESSAGE_TYPES.OPEN_FILE_PICKER: - await this.handleWebviewOpenFilePickerRequest(message, panel); - return; case MESSAGE_TYPES.OPEN_CONNECTION_STRING_INPUT: void vscode.commands.executeCommand( EXTENSION_COMMANDS.MDB_CONNECT_WITH_URI diff --git a/webpack.config.js b/webpack.config.js index abb98f0b5..4d26adcbb 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -52,7 +52,9 @@ module.exports = (env, argv) => { keytar: 'keytar', // Electron: + electron: 'electron', '@electron/remote': '@electron/remote', + 'hadron-ipc': 'hadron-ipc', // MongoDB node driver externals: snappy: 'snappy',