diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b6447487..97d5f13c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -73,13 +73,13 @@ steps: displayName: 'Set extension_version variable from package.json version' - bash: | vsixFilename=./mongodb-vscode-$(extension_version).vsix - maxsize=5000000 # 5MB + maxsize=6000000 # 6MB filesize=$(stat -c%s "$vsixFilename") echo "Size of $vsixFilename = $filesize bytes." if (( filesize > maxsize )); then - echo "File is over 5MB." + echo "File is over 6MB." exit 1 fi displayName: 'Check .vsix filesize' diff --git a/package-lock.json b/package-lock.json index e8dd7d55..54dd8b46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,33 +53,201 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.13.tgz", + "integrity": "sha512-Vs/e9wv7rakKYeywsmEBSRC9KtmE7Px+YBlESekLeJOF0zbGUicGfXSNi3o+tfXSNS48U/7K9mIOOCR79Cl3+Q==", + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/generator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.13.tgz", + "integrity": "sha512-9qQ8Fgo8HaSvHEt6A5+BATP7XktD/AdAnObUeTRz5/e2y3kbrxZgz32qUJJsdmwUvBJzF4AeV21nGTNwv05Mpw==", + "requires": { + "@babel/types": "^7.12.13", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.13.tgz", + "integrity": "sha512-B+7nN0gIL8FZ8SvMcF+EPyB21KnCcZHQZFczCxbiNGV/O0rsrSBlWGLzmtBJ3GMjSVMIm4lpFhR+VdVBuIsUcQ==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz", + "integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.13.tgz", + "integrity": "sha512-z7n7ybOUzaRc3wwqLpAX8UFIXsrVXUJhtNGBwAnLz6d1KUapqyq7ad2La8gZ6CXhHmGAIL32cop8Tst4/PNWLw==" + }, + "@babel/traverse": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz", + "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/highlight": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz", + "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.13.tgz", + "integrity": "sha512-z7n7ybOUzaRc3wwqLpAX8UFIXsrVXUJhtNGBwAnLz6d1KUapqyq7ad2La8gZ6CXhHmGAIL32cop8Tst4/PNWLw==" + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/types": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz", + "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-member-expression-to-functions": { @@ -125,7 +293,8 @@ "@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "dev": true }, "@babel/helper-replace-supers": { "version": "7.12.5", @@ -160,9 +329,9 @@ "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" }, "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", + "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==" }, "@babel/helpers": { "version": "7.12.5", @@ -185,9 +354,9 @@ } }, "@babel/parser": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", - "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==" + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -298,31 +467,52 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", - "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz", + "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==" + } } }, "@babel/plugin-transform-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", - "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.13.tgz", + "integrity": "sha512-z1VWskPJxK9tfxoYvePWvzSJC+4pxXr8ArmRm5ofqgi+mwpKg6lvtomkIngBYMJVnKhsFYVysCQLDn//v2RHcg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.12.1" + "@babel/helper-create-class-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-typescript": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz", + "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==" + } } }, "@babel/preset-typescript": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz", - "integrity": "sha512-nOoIqIqBmHBSEgBXWR4Dv/XBehtIFcw9PqZw6rFYuKrzsZmOQm3PR5siLBnKZFEsDb03IegG8nSjU/iXXXYRmw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.13.tgz", + "integrity": "sha512-gYry7CeXwD2wtw5qHzrtzKaShEhOfTmKb4i0ZxeYBcBosN5VuAudsNbjX7Oj5EAfQ3K4s4HsVMQRRcqGsPvs2A==", "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.1", - "@babel/plugin-transform-typescript": "^7.12.1" + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-validator-option": "^7.12.11", + "@babel/plugin-transform-typescript": "^7.12.13" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz", + "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==" + } } }, "@babel/runtime": { @@ -344,19 +534,80 @@ } }, "@babel/traverse": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", - "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "requires": { + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "requires": { + "@babel/types": "^7.12.11", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "requires": { + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "requires": { + "@babel/types": "^7.12.10" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "requires": { + "@babel/types": "^7.12.11" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + }, + "@babel/types": { + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/types": { @@ -444,30 +695,30 @@ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.32", - "resolved": "https://npm.fontawesome.com/@fortawesome/fontawesome-common-types/-/0.2.32/fontawesome-common-types-0.2.32.tgz", - "integrity": "sha512-ux2EDjKMpcdHBVLi/eWZynnPxs0BtFVXJkgHIxXRl+9ZFaHPvYamAfCzeeQFqHRjuJtX90wVnMRaMQAAlctz3w==" + "version": "0.2.34", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.34.tgz", + "integrity": "sha512-XcIn3iYbTEzGIxD0/dY5+4f019jIcEIWBiHc3KrmK/ROahwxmZ/s+tdj97p/5K0klz4zZUiMfUlYP0ajhSJjmA==" }, "@fortawesome/fontawesome-svg-core": { - "version": "1.2.32", - "resolved": "https://npm.fontawesome.com/@fortawesome/fontawesome-svg-core/-/1.2.32/fontawesome-svg-core-1.2.32.tgz", - "integrity": "sha512-XjqyeLCsR/c/usUpdWcOdVtWFVjPbDFBTQkn2fQRrWhhUoxriQohO2RWDxLyUM8XpD+Zzg5xwJ8gqTYGDLeGaQ==", + "version": "1.2.34", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.34.tgz", + "integrity": "sha512-0KNN0nc5eIzaJxlv43QcDmTkDY1CqeN6J7OCGSs+fwGPdtv0yOQqRjieopBCmw+yd7uD3N2HeNL3Zm5isDleLg==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.32" + "@fortawesome/fontawesome-common-types": "^0.2.34" } }, "@fortawesome/free-solid-svg-icons": { - "version": "5.15.1", - "resolved": "https://npm.fontawesome.com/@fortawesome/free-solid-svg-icons/-/5.15.1/free-solid-svg-icons-5.15.1.tgz", - "integrity": "sha512-EFMuKtzRMNbvjab/SvJBaOOpaqJfdSap/Nl6hst7CgrJxwfORR1drdTV6q1Ib/JVzq4xObdTDcT6sqTaXMqfdg==", + "version": "5.15.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.2.tgz", + "integrity": "sha512-ZfCU+QjaFsdNZmOGmfqEWhzI3JOe37x5dF4kz9GeXvKn/sTxhqMtZ7mh3lBf76SvcYY5/GKFuyG7p1r4iWMQqw==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.32" + "@fortawesome/fontawesome-common-types": "^0.2.34" } }, "@fortawesome/react-fontawesome": { - "version": "0.1.13", - "resolved": "https://npm.fontawesome.com/@fortawesome/react-fontawesome/-/0.1.13/react-fontawesome-0.1.13.tgz", - "integrity": "sha512-/HrLnIft5Ks2511Pz6TxHBIctC9QalVscAC64sufQ4sJH/sXaQlG3uR9LCu6VpEwkBemgcBLrz/QPNP/ddbjDg==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz", + "integrity": "sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==", "requires": { "prop-types": "^15.7.2" } @@ -478,9 +729,9 @@ "integrity": "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==" }, "@iconify-icons/codicon": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.1.1.tgz", - "integrity": "sha512-5tfn3RFY4VvLAwB0ha3cHfSKOboNjMV8e82dkpzSHURPyMO3qVWZxFjL4p3h8QHHvxFd4t0pwb9OvzfzTz6+pw==" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.1.5.tgz", + "integrity": "sha512-6Uy2dgZ0b3nIiYsOCI8Lu7Ej2hx8fFzd38S+APAfYkTvIIW0eXQg9xt3P72fxv27Ss62tn8HiLvSpZSxHn371w==" }, "@iconify/react": { "version": "1.1.3", @@ -1457,9 +1708,9 @@ "integrity": "sha512-elh8S1OxmEGe8/wbr6ky//dHhV2ld6oZV8/M9lgozJsL/6Aqm8j5+ElquzoX9k9l3Q+dohuX/SIGR/kTRZHS4g==" }, "@mongosh/async-rewriter": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/async-rewriter/-/async-rewriter-0.5.2.tgz", - "integrity": "sha512-z4FyqZq4hsYmFqOhG70VdiesfF7L8SoOvJzqG6O2cZ8BFzZeL8DPLGDc67irbjsghjOkuoq2edR1YuXrXgj3YA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/async-rewriter/-/async-rewriter-0.6.1.tgz", + "integrity": "sha512-poX1hO/zsvD+DOMyRLwQmMrn7PB7LXZESpK2UfXgtwMM77XBIcuFp8WMtw+K/Ndj+qV9R/LSdWjN5MVHAGMlqw==", "requires": { "@babel/core": "^7.9.0", "@babel/parser": "^7.9.4", @@ -1467,7 +1718,7 @@ "@babel/template": "^7.8.6", "@babel/traverse": "^7.9.0", "@babel/types": "^7.9.0", - "@mongosh/errors": "^0.5.2", + "@mongosh/errors": "^0.6.1", "@types/babel__core": "^7.1.6", "@types/babel__traverse": "^7.0.9", "acorn": "^7.2.0", @@ -1475,83 +1726,62 @@ "acorn-numeric-separator": "0.3.2", "acorn-private-methods": "0.3.1", "acorn-static-class-features": "0.2.1", - "acorn-walk": "^7.1.1", - "ts-node": "^8.8.1", - "typescript": "^3.8.3" - }, - "dependencies": { - "ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, - "typescript": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz", - "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==" - } + "acorn-walk": "^7.1.1" } }, "@mongosh/autocomplete": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/autocomplete/-/autocomplete-0.5.2.tgz", - "integrity": "sha512-O2cr+bQ8dwwmHe4ZD7uqbhdVVf7DlBLHLQXM1+Nzqim8CqHUp5h5Ig5wBp4WiUhN3H81iKduqUXsQ2+hI9qWMA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/autocomplete/-/autocomplete-0.6.1.tgz", + "integrity": "sha512-JqgMcndqMuH8nequdVYJHEF5wNA8NiT7JKhlMKDsYcZigtIhV8ngwdHjzrHxPJLMbHvhDxndUmtvU5OfNIvfcg==", "requires": { - "@mongosh/shell-api": "^0.5.2", + "@mongosh/shell-api": "^0.6.1", "mongodb-ace-autocompleter": "^0.4.8", "semver": "^7.3.2" } }, "@mongosh/browser-runtime-core": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/browser-runtime-core/-/browser-runtime-core-0.5.2.tgz", - "integrity": "sha512-NgCNHBkFu6yRHtTfCYJOl0cGUQJCrraHq3ZNGKDbLxXOwiiDuZL42R9vU54ljUE0/GO6oxqM2lPMFKZIRr8wPg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/browser-runtime-core/-/browser-runtime-core-0.6.1.tgz", + "integrity": "sha512-tDVxCgWmV/53c5CiS8XFkTj5ry4BnqYTof/BvXtpOyC+EsuxD+MG/U+sfG8sYU70Z3V30hwAeXEGCjQZrNz7sA==", "requires": { "@babel/generator": "^7.9.4", "@babel/parser": "^7.9.4", - "@mongosh/autocomplete": "^0.5.2", - "@mongosh/cli-repl": "^0.5.2", - "@mongosh/service-provider-core": "^0.5.2", - "@mongosh/shell-api": "^0.5.2", - "@mongosh/shell-evaluator": "^0.5.2" + "@mongosh/autocomplete": "^0.6.1", + "@mongosh/cli-repl": "^0.6.1", + "@mongosh/service-provider-core": "^0.6.1", + "@mongosh/shell-api": "^0.6.1", + "@mongosh/shell-evaluator": "^0.6.1" } }, "@mongosh/browser-runtime-electron": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/browser-runtime-electron/-/browser-runtime-electron-0.5.2.tgz", - "integrity": "sha512-3QsO+cy4ET2xJdmfmT2ZEttmuH5MLqO4zZYMbvvBMB566Ud2eNftDZNksL+BmeCe+3B9Wb4NlHIMLNT3iip6mw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/browser-runtime-electron/-/browser-runtime-electron-0.6.1.tgz", + "integrity": "sha512-u/1YTAhW9yny1lEiDvtqFNFL9GzHARIfpoR4Baw+kgP5HdaRogrFJCYwNQqavE9/lrn8xg40nohFlmeECQis5Q==", "requires": { - "@mongosh/browser-runtime-core": "^0.5.2", - "@mongosh/service-provider-core": "^0.5.2", - "@mongosh/shell-evaluator": "^0.5.2" + "@mongosh/browser-runtime-core": "^0.6.1", + "@mongosh/service-provider-core": "^0.6.1", + "@mongosh/shell-evaluator": "^0.6.1" } }, "@mongosh/cli-repl": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/cli-repl/-/cli-repl-0.5.2.tgz", - "integrity": "sha512-pr5HZ1wu1eTWHqzr5bxtJppiVeX+5eGx01gv0IxlLbxpO+i9XDvEe8jOhd+BZCCpG+94+Cg8NR5is9yKHk1ZSw==", - "requires": { - "@mongosh/autocomplete": "^0.5.2", - "@mongosh/errors": "^0.5.2", - "@mongosh/history": "^0.5.2", - "@mongosh/i18n": "^0.5.2", - "@mongosh/service-provider-core": "^0.5.2", - "@mongosh/service-provider-server": "^0.5.2", - "@mongosh/shell-api": "^0.5.2", - "@mongosh/shell-evaluator": "^0.5.2", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/cli-repl/-/cli-repl-0.6.1.tgz", + "integrity": "sha512-sxaNSUYzPjX+22SQuuxM/0gcl9DDxk0QXwQp2Ry5jenTBP02dhKw3y3en6dI0kmf2BuyrpVryKESbxkdmfqChg==", + "requires": { + "@mongosh/autocomplete": "^0.6.1", + "@mongosh/errors": "^0.6.1", + "@mongosh/history": "^0.6.1", + "@mongosh/i18n": "^0.6.1", + "@mongosh/service-provider-core": "^0.6.1", + "@mongosh/service-provider-server": "^0.6.1", + "@mongosh/shell-api": "^0.6.1", + "@mongosh/shell-evaluator": "^0.6.1", "analytics-node": "^3.4.0-beta.1", "ansi-escape-sequences": "^5.1.2", + "askpassword": "^1.2.1", "is-recoverable-error": "^1.0.2", "lodash.set": "^4.3.2", "minimist": "^1.2.5", - "mkdirp": "^1.0.3", "mongodb-ace-autocompleter": "^0.4.1", "mongodb-build-info": "^1.1.0", "mongodb-redact": "^0.2.2", @@ -1560,54 +1790,53 @@ "pino-pretty": "^4.0.0", "pretty-bytes": "^5.3.0", "pretty-repl": "^2.3.1", - "read": "^1.0.7", "semver": "^7.1.2", "text-table": "^0.2.0" } }, "@mongosh/errors": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/errors/-/errors-0.5.2.tgz", - "integrity": "sha512-T+ajDBoTIOjJN0ObjQyelSneClzKRD6/s3j31d/pY7Qa6BijsE0Qo0b7wZzSrvLPLF2Ef2osqdICxy3xY41/VQ==" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/errors/-/errors-0.6.1.tgz", + "integrity": "sha512-artOyInyuVjIYTc514yvbmqy7EGoMaZ7jI05+DUa5d2xx5dhzlH80WhsKQscwwA7O95IUh3hweC/UYzGBUE36A==" }, "@mongosh/history": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/history/-/history-0.5.2.tgz", - "integrity": "sha512-Z00fhNy0abci73fBDJq/nyhyLJghJ2AdGpDBteo3zvkcpBTpbTykpZqmrAKtb84o/iIjh5/lwSJ2i0jgoPNtZw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/history/-/history-0.6.1.tgz", + "integrity": "sha512-Wgm55RNVdsxFnUrFsloe15/blG4PuVHI9jooTyYCXjM1au7meDGusXIcWD2cyYobEmU96qJUepIdMFabyxYzmQ==", "requires": { "mongodb-redact": "^0.2.2" } }, "@mongosh/i18n": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/i18n/-/i18n-0.5.2.tgz", - "integrity": "sha512-KnrOvwADQ1m2BAJFpbzHyxfiQQwGUedVuDX/jWFgmXIpjLvcyOj+UY4U2c1x/cZ7W1sRSt7XgdZOTvWC1R8BAQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/i18n/-/i18n-0.6.1.tgz", + "integrity": "sha512-8Jsf1nKGNwLuQkM/WYFgKbr9Zvaqg6YBujuYe1rzKeHN51ihKTTPpI4U5Ytl+1HsgMbjTcNegpsz8EsDg5xp/Q==", "requires": { - "@mongosh/errors": "^0.5.2", + "@mongosh/errors": "^0.6.1", "mustache": "^4.0.0" } }, "@mongosh/service-provider-core": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/service-provider-core/-/service-provider-core-0.5.2.tgz", - "integrity": "sha512-BmqSc1y74m4ORfscnyqAh4gdJ+r3BKhSodfA81+t3RwrjV9syBYoGZ5R60cDnj00ZHwtmYMuRaKzHhsfEZc8ZQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/service-provider-core/-/service-provider-core-0.6.1.tgz", + "integrity": "sha512-xN2xztw+p2/jjMD/ucJ1XkIBBU0y4FFfYYy2vsoPGlT6022iSqc7zm5n9frtdiVv3VqSEQdjVXZsgVHTUD2/wA==", "requires": { - "@mongosh/errors": "^0.5.2", - "@mongosh/i18n": "^0.5.2", + "@mongosh/errors": "^0.6.1", + "@mongosh/i18n": "^0.6.1", "bson": "^4.2.0", "mongodb-build-info": "^1.1.1" } }, "@mongosh/service-provider-server": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/service-provider-server/-/service-provider-server-0.5.2.tgz", - "integrity": "sha512-3foGsLo1livOnAhFVIumP0JYVz+YX8bWkipt2EzwKNNGC3/EH5vA+Jx8EGBHCV1eSDWs6XMTsSSEvibFY+Vjag==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/service-provider-server/-/service-provider-server-0.6.1.tgz", + "integrity": "sha512-8pwNo7WeuM0keiSNZtk53AL6oCr3jXoOPSJDkduahKLHqW/lkwROlnonXAZ15aJZvn12Z5DVQg0V7DSwOPjqyA==", "requires": { - "@mongosh/errors": "^0.5.2", - "@mongosh/service-provider-core": "^0.5.2", + "@mongosh/errors": "^0.6.1", + "@mongosh/service-provider-core": "^0.6.1", "@types/sinon": "^7.5.1", "@types/sinon-chai": "^3.2.3", - "mongodb": "^3.6.1", + "mongodb": "^3.6.3", "saslprep": "github:mongodb-js/saslprep#v1.0.4" }, "dependencies": { @@ -1619,52 +1848,52 @@ } }, "@mongosh/shell-api": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/shell-api/-/shell-api-0.5.2.tgz", - "integrity": "sha512-Ewxok3poXXb9MCFmoDpx44M/2Onx2/e6w8yvP+WoEBQKyht9d4qIy+RMQDEMtShEah3lPvgSsARE3lFdhPNFUw==", - "requires": { - "@mongosh/async-rewriter": "^0.5.2", - "@mongosh/errors": "^0.5.2", - "@mongosh/history": "^0.5.2", - "@mongosh/i18n": "^0.5.2", - "@mongosh/service-provider-core": "^0.5.2", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/shell-api/-/shell-api-0.6.1.tgz", + "integrity": "sha512-wR3sTGIpn+RWBboIbuwr9Vs6pyTAEAf90WDT+J1nsUdVvJ9tmC2tLjWLAPzT1SmLgef4vAFv4LfjruydnlqcJA==", + "requires": { + "@mongosh/async-rewriter": "^0.6.1", + "@mongosh/errors": "^0.6.1", + "@mongosh/history": "^0.6.1", + "@mongosh/i18n": "^0.6.1", + "@mongosh/service-provider-core": "^0.6.1", "mongodb-redact": "^0.2.2" } }, "@mongosh/shell-evaluator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mongosh/shell-evaluator/-/shell-evaluator-0.5.2.tgz", - "integrity": "sha512-wzcK1PjRqSKRUNvFl1+o1RHGXwoHnDwCMgGsb/b33RBxDqgXeddKhGDSLmqknydSvwslH2PyWG8h6XAsqKwKKQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@mongosh/shell-evaluator/-/shell-evaluator-0.6.1.tgz", + "integrity": "sha512-qeMgfG6CgElyMJMqaJy6y5FKGI5rA9j0dlj0iBKUJ1gsUH4N6cv8ajjbhMVhWaBiQRd7V8pYMIIyvXCXyh7f5g==", "requires": { - "@mongosh/async-rewriter": "^0.5.2", - "@mongosh/history": "^0.5.2", - "@mongosh/service-provider-core": "^0.5.2", - "@mongosh/shell-api": "^0.5.2" + "@mongosh/async-rewriter": "^0.6.1", + "@mongosh/history": "^0.6.1", + "@mongosh/service-provider-core": "^0.6.1", + "@mongosh/shell-api": "^0.6.1" } }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" } }, @@ -1744,6 +1973,12 @@ "@testing-library/dom": "^5.6.1" } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@types/analytics-node": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.4.tgz", @@ -2024,9 +2259,9 @@ "dev": true }, "@types/node": { - "version": "14.14.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", + "version": "14.14.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", + "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==", "dev": true }, "@types/normalize-package-data": { @@ -2113,6 +2348,12 @@ "integrity": "sha512-NtJmi+XbYocrLb5Au4Q64srX4FlCPDvrSF/OnK3H0QJwrw40tIUoQPDoUHnZ5wpAB2KThtVyeS+kOEQyZabORg==", "dev": true }, + "@types/uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", + "dev": true + }, "@types/vscode": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.52.0.tgz", @@ -2142,13 +2383,13 @@ "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" }, "@typescript-eslint/eslint-plugin": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.13.0.tgz", - "integrity": "sha512-ygqDUm+BUPvrr0jrXqoteMqmIaZ/bixYOc3A4BRwzEPTZPi6E+n44rzNZWaB0YvtukgP+aoj0i/fyx7FkM2p1w==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.14.2.tgz", + "integrity": "sha512-uMGfG7GFYK/nYutK/iqYJv6K/Xuog/vrRRZX9aEP4Zv1jsYXuvFUMDFLhUnc8WFv3D2R5QhNQL3VYKmvLS5zsQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.13.0", - "@typescript-eslint/scope-manager": "4.13.0", + "@typescript-eslint/experimental-utils": "4.14.2", + "@typescript-eslint/scope-manager": "4.14.2", "debug": "^4.1.1", "functional-red-black-tree": "^1.0.1", "lodash": "^4.17.15", @@ -2158,130 +2399,70 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.13.0.tgz", - "integrity": "sha512-/ZsuWmqagOzNkx30VWYV3MNB/Re/CGv/7EzlqZo5RegBN8tMuPaBgNK6vPBCQA8tcYrbsrTdbx3ixMRRKEEGVw==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.14.2.tgz", + "integrity": "sha512-mV9pmET4C2y2WlyHmD+Iun8SAEqkLahHGBkGqDVslHkmoj3VnxnGP4ANlwuxxfq1BsKdl/MPieDbohCEQgKrwA==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.13.0", - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/typescript-estree": "4.13.0", + "@typescript-eslint/scope-manager": "4.14.2", + "@typescript-eslint/types": "4.14.2", + "@typescript-eslint/typescript-estree": "4.14.2", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" - }, - "dependencies": { - "@typescript-eslint/typescript-estree": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.13.0.tgz", - "integrity": "sha512-9A0/DFZZLlGXn5XA349dWQFwPZxcyYyCFX5X88nWs2uachRDwGeyPz46oTsm9ZJE66EALvEns1lvBwa4d9QxMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/visitor-keys": "4.13.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } } }, "@typescript-eslint/parser": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.13.0.tgz", - "integrity": "sha512-KO0J5SRF08pMXzq9+abyHnaGQgUJZ3Z3ax+pmqz9vl81JxmTTOUfQmq7/4awVfq09b6C4owNlOgOwp61pYRBSg==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.14.2.tgz", + "integrity": "sha512-ipqSP6EuUsMu3E10EZIApOJgWSpcNXeKZaFeNKQyzqxnQl8eQCbV+TSNsl+s2GViX2d18m1rq3CWgnpOxDPgHg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.13.0", - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/typescript-estree": "4.13.0", + "@typescript-eslint/scope-manager": "4.14.2", + "@typescript-eslint/types": "4.14.2", + "@typescript-eslint/typescript-estree": "4.14.2", "debug": "^4.1.1" - }, - "dependencies": { - "@typescript-eslint/typescript-estree": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.13.0.tgz", - "integrity": "sha512-9A0/DFZZLlGXn5XA349dWQFwPZxcyYyCFX5X88nWs2uachRDwGeyPz46oTsm9ZJE66EALvEns1lvBwa4d9QxMg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/visitor-keys": "4.13.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } } }, "@typescript-eslint/scope-manager": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.13.0.tgz", - "integrity": "sha512-UpK7YLG2JlTp/9G4CHe7GxOwd93RBf3aHO5L+pfjIrhtBvZjHKbMhBXTIQNkbz7HZ9XOe++yKrXutYm5KmjWgQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.14.2.tgz", + "integrity": "sha512-cuV9wMrzKm6yIuV48aTPfIeqErt5xceTheAgk70N1V4/2Ecj+fhl34iro/vIssJlb7XtzcaD07hWk7Jk0nKghg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/visitor-keys": "4.13.0" + "@typescript-eslint/types": "4.14.2", + "@typescript-eslint/visitor-keys": "4.14.2" } }, "@typescript-eslint/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.13.0.tgz", - "integrity": "sha512-/+aPaq163oX+ObOG00M0t9tKkOgdv9lq0IQv/y4SqGkAXmhFmCfgsELV7kOCTb2vVU5VOmVwXBXJTDr353C1rQ==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.14.2.tgz", + "integrity": "sha512-LltxawRW6wXy4Gck6ZKlBD05tCHQUj4KLn4iR69IyRiDHX3d3NCAhO+ix5OR2Q+q9bjCrHE/HKt+riZkd1At8Q==", "dev": true }, + "@typescript-eslint/typescript-estree": { + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.2.tgz", + "integrity": "sha512-ESiFl8afXxt1dNj8ENEZT12p+jl9PqRur+Y19m0Z/SPikGL6rqq4e7Me60SU9a2M28uz48/8yct97VQYaGl0Vg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.14.2", + "@typescript-eslint/visitor-keys": "4.14.2", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, "@typescript-eslint/visitor-keys": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.13.0.tgz", - "integrity": "sha512-6RoxWK05PAibukE7jElqAtNMq+RWZyqJ6Q/GdIxaiUj2Ept8jh8+FUVlbq9WxMYxkmEOPvCE5cRSyupMpwW31g==", + "version": "4.14.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.2.tgz", + "integrity": "sha512-KBB+xLBxnBdTENs/rUgeUKO0UkPBRs2vD09oMRRIkj5BEN8PX1ToXV532desXfpQnZsYTyLLviS7JrPhdL154w==", "dev": true, "requires": { - "@typescript-eslint/types": "4.13.0", + "@typescript-eslint/types": "4.14.2", "eslint-visitor-keys": "^2.0.0" }, "dependencies": { @@ -2563,12 +2744,12 @@ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" }, "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "debug": "4" } }, "airbnb-prop-types": { @@ -2736,12 +2917,12 @@ } }, "analytics-node": { - "version": "3.4.0-beta.3", - "resolved": "https://registry.npmjs.org/analytics-node/-/analytics-node-3.4.0-beta.3.tgz", - "integrity": "sha512-NIdpxiwlZ4cKgs9MDlDe89b5bg/pMq2W7XTA+cjzCM66IwW3ujZhVE49vk+zG6Yrxk0s/DXmennJ+cCQIsTKMA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/analytics-node/-/analytics-node-3.5.0.tgz", + "integrity": "sha512-XgQq6ejZHCehUSnZS4V7QJPLIP7S9OAWwQDYl4WTLtsRvc5fCxIwzK/yihzmIW51v9PnyBmrl9dMcqvwfOE8WA==", "requires": { "@segment/loosely-validate-event": "^2.0.0", - "axios": "^0.19.2", + "axios": "^0.21.1", "axios-retry": "^3.0.2", "lodash.isstring": "^4.0.1", "md5": "^2.2.1", @@ -2879,7 +3060,8 @@ "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "argparse": { "version": "1.0.10", @@ -3050,6 +3232,11 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, + "askpassword": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/askpassword/-/askpassword-1.2.1.tgz", + "integrity": "sha512-b/yF3tgDZK0QuCRVCW/BYoFC+t8UpughpB+bih2KjpgF9YC0t9bNo7atxlHyHUpH3pZxJRKJgQq2ZIB3IpzsJQ==" + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -3196,11 +3383,11 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", "requires": { - "follow-redirects": "1.5.10" + "follow-redirects": "^1.10.0" } }, "axios-retry": { @@ -3495,12 +3682,28 @@ "tweetnacl": "^0.14.3" } }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "dev": true + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", @@ -3565,9 +3768,9 @@ } }, "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", "dev": true }, "bn.js": { @@ -3807,12 +4010,24 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==" }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, "builtin-modules": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", @@ -3848,6 +4063,12 @@ "y18n": "^4.0.0" }, "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -4081,6 +4302,15 @@ "tv4": "^1.3.0" } }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4488,6 +4718,15 @@ "safe-buffer": "~5.1.1" } }, + "copy-anything": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.1.tgz", + "integrity": "sha512-lA57e7viQHOdPQcrytv5jFeudZZOXuyk47lZym279FiDQ8jeZomXiGuVf6ffMKkJ+3TIai3J1J3yi6M+/4U35g==", + "dev": true, + "requires": { + "is-what": "^3.7.1" + } + }, "copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", @@ -5365,7 +5604,8 @@ "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true }, "diff-sequences": { "version": "26.6.2", @@ -5873,16 +6113,16 @@ } }, "enzyme-adapter-react-16": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.5.tgz", - "integrity": "sha512-33yUJGT1nHFQlbVI5qdo5Pfqvu/h4qPwi1o0a6ZZsjpiqq92a3HjynDhwd1IeED+Su60HDWV8mxJqkTnLYdGkw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz", + "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==", "dev": true, "requires": { - "enzyme-adapter-utils": "^1.13.1", + "enzyme-adapter-utils": "^1.14.0", "enzyme-shallow-equal": "^1.0.4", "has": "^1.0.3", - "object.assign": "^4.1.0", - "object.values": "^1.1.1", + "object.assign": "^4.1.2", + "object.values": "^1.1.2", "prop-types": "^15.7.2", "react-is": "^16.13.1", "react-test-renderer": "^16.0.0-0", @@ -5898,15 +6138,16 @@ } }, "enzyme-adapter-utils": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.1.tgz", - "integrity": "sha512-5A9MXXgmh/Tkvee3bL/9RCAAgleHqFnsurTYCbymecO4ohvtNO5zqIhHxV370t7nJAwaCfkgtffarKpC0GPt0g==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.0.tgz", + "integrity": "sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg==", "dev": true, "requires": { "airbnb-prop-types": "^2.16.0", - "function.prototype.name": "^1.1.2", - "object.assign": "^4.1.0", - "object.fromentries": "^2.0.2", + "function.prototype.name": "^1.1.3", + "has": "^1.0.3", + "object.assign": "^4.1.2", + "object.fromentries": "^2.0.3", "prop-types": "^15.7.2", "semver": "^5.7.1" }, @@ -6025,15 +6266,6 @@ "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, "es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -7174,9 +7406,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -7209,9 +7441,9 @@ "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, "fastq": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", - "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", + "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -7596,27 +7828,9 @@ } }, "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", + "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==" }, "for-in": { "version": "1.0.2", @@ -7705,6 +7919,17 @@ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "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==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -7729,6 +7954,38 @@ "dev": true, "optional": true }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7974,6 +8231,28 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, "got": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", @@ -8352,30 +8631,14 @@ "dev": true }, "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" } }, "http-signature": { @@ -8395,24 +8658,13 @@ "dev": true }, "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "agent-base": "6", + "debug": "4" } }, "human-signals": { @@ -9059,6 +9311,12 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, + "is-what": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.12.0.tgz", + "integrity": "sha512-2ilQz5/f/o9V7WRWJQmpFYNmQFZ9iM+OXRonZKcYgTkCzjb949Vi4h282PD1UfmgHk666rcWonbRJ++KI41VGw==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -12202,11 +12460,12 @@ } }, "less": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", - "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/less/-/less-3.13.1.tgz", + "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", "dev": true, "requires": { + "copy-anything": "^2.0.1", "errno": "^0.1.1", "graceful-fs": "^4.1.2", "image-size": "~0.5.0", @@ -12313,6 +12572,12 @@ "uc.micro": "^1.0.1" } }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -12605,7 +12870,8 @@ "lodash.chunk": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" + "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=", + "optional": true }, "lodash.clone": { "version": "3.0.3", @@ -12815,12 +13081,6 @@ "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", "dev": true }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -13076,7 +13336,8 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "makeerror": { "version": "1.0.11", @@ -13548,7 +13809,8 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "mkdirp-classic": { "version": "0.5.3", @@ -13962,6 +14224,7 @@ "version": "4.5.1", "resolved": "https://registry.npmjs.org/mongodb-collection-sample/-/mongodb-collection-sample-4.5.1.tgz", "integrity": "sha512-tUCdRLToheOh2Tn+KVdhYtbLifxCo60+wVMf0zxtbZLKPYbZqQaYmyrYTsEunePNJyxIutBWdayX79VJ/Fb2hg==", + "optional": true, "requires": { "bson": "^4.0.3", "debug": "^4.1.1", @@ -14052,7 +14315,8 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "optional": true }, "string-width": { "version": "4.2.0", @@ -14129,9 +14393,9 @@ } }, "mongodb-connection-model": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-model/-/mongodb-connection-model-18.1.0.tgz", - "integrity": "sha512-u6k4yAq3rT4AGOyC8kuVrbd5pUErNv8o420oFjA4Y9Ese5ZQo9ZA0r0dQJcVChrzOhqutvVueow7RGEs3MoFvQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-model/-/mongodb-connection-model-19.0.2.tgz", + "integrity": "sha512-0wFhxk248kLG287NlbPzT7pbHgtFUaj0fl10UBFHLDLw4mfuGxgRa0IOOxiyz30we3Rv4AfAth4/iM5oVnjEIw==", "requires": { "ampersand-model": "^8.0.0", "ampersand-rest-collection": "^6.0.0", @@ -14167,29 +14431,18 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==", "dev": true - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "dev": true, - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } } } }, "mongodb-data-service": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/mongodb-data-service/-/mongodb-data-service-18.1.0.tgz", - "integrity": "sha512-oox+0t6J508ovbpuLUVLhE06CJGjGJegWkfEoxM8Qblq4CAgRMaw6vwBYVaLOfjmd6enpZBBYSc0l5RJLVQOYA==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/mongodb-data-service/-/mongodb-data-service-19.0.0.tgz", + "integrity": "sha512-4j7FWkLzR/UnaNLYqFrGoVMi+jP4O06FTX3cpnzLVZgEAgZl1WFrWaV5w6eqIdmjNzfs/SIvYKAdx7XkyrumVQ==", "requires": { "async": "^3.2.0", "debug": "^4.2.0", "lodash": "^4.17.20", "mongodb-build-info": "^1.1.1", - "mongodb-collection-sample": "^4.5.1", "mongodb-index-model": "^2.6.1", "mongodb-js-errors": "^0.5.0", "mongodb-ns": "^2.2.0", @@ -14497,9 +14750,9 @@ } }, "mongodb-runner": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.8.0.tgz", - "integrity": "sha512-wFTjkqVCkH9MK05t8kSDVP3oSmFq43AYwDBqVWndpggsO+Jr7sBqgf2VlNKlP5xzWF9rX2gqjESyc1Q3QxsXOw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.8.1.tgz", + "integrity": "sha512-1jv7EEyh+ajvGmLwDMXY5BjT/Xqdxgf+AwPK99JHhgeoAISffS3l9Z1c/IIOsSCulMlL7KlR10TyUdzSHZqMhg==", "dev": true, "requires": { "async": "^3.1.0", @@ -14524,17 +14777,6 @@ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": 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==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -15062,14 +15304,15 @@ } }, "mustache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.1.tgz", - "integrity": "sha512-yL5VE97+OXn4+Er3THSmTdCFCtx5hHWzrolvH+JObZnUYwuaG7XV+Ch4fR2cIrcYI0tFHxS7iyFYl14bW8y2sA==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.1.0.tgz", + "integrity": "sha512-0FsgP/WVq4mKyjolIyX+Z9Bd+3WS8GOwoUTyKXT5cTYMGeauNTi2HPCwERqseC1IHAy0Z7MDZnJBfjabd4O8GQ==" }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "nan": { "version": "2.14.1", @@ -16322,9 +16565,9 @@ } }, "pino-pretty": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.3.0.tgz", - "integrity": "sha512-uEc9SUCCGVEs0goZvyznKXBHtI1PNjGgqHviJHxOCEFEWZN6Z/IQKv5pO9gSdm/b+WfX+/dfheWhtZUyScqjlQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.5.0.tgz", + "integrity": "sha512-TtIzAq3JrPT4cYMZcXHypAXYV+MTE7ncAPUFoaz/1enVD2Loj+hV6RZsypYo85dm7SbBolW6fcIydOF28iGjsg==", "requires": { "@hapi/bourne": "^2.0.0", "args": "^5.0.1", @@ -16742,9 +16985,9 @@ "dev": true }, "pretty-bytes": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.4.1.tgz", - "integrity": "sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA==" + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.5.0.tgz", + "integrity": "sha512-p+T744ZyjjiaFlMUZZv6YPC5JrkNj8maRmPaQCWFJFplUAzpIUTRaTcS+7wmZtUoFXHtESJb23ISliaWyz3SHA==" }, "pretty-format": { "version": "24.9.0", @@ -17126,6 +17369,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, "requires": { "mute-stream": "~0.0.4" } @@ -17947,14 +18191,14 @@ } }, "sinon": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.3.tgz", - "integrity": "sha512-m+DyAWvqVHZtjnjX/nuShasykFeiZ+nPuEfD4G3gpvKGkXRhkF/6NSt2qN2FjZhfrcHXFzUzI+NLnk+42fnLEw==", + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", + "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", "dev": true, "requires": { "@sinonjs/commons": "^1.8.1", "@sinonjs/fake-timers": "^6.0.1", - "@sinonjs/samsam": "^5.3.0", + "@sinonjs/samsam": "^5.3.1", "diff": "^4.0.2", "nise": "^4.0.4", "supports-color": "^7.1.0" @@ -18191,6 +18435,7 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -18199,12 +18444,14 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -18879,9 +19126,9 @@ } }, "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -19165,6 +19412,12 @@ "punycode": "^2.1.1" } }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, "trim-newlines": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", @@ -19181,9 +19434,9 @@ } }, "ts-jest": { - "version": "26.4.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", - "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", + "version": "26.5.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.0.tgz", + "integrity": "sha512-Ya4IQgvIFNa2Mgq52KaO8yBw2W8tWp61Ecl66VjF0f5JaV8u50nGoptHVILOPGoI7SDnShmEqnYQEmyHdQ+56g==", "dev": true, "requires": { "@types/jest": "26.x", @@ -19192,7 +19445,7 @@ "fast-json-stable-stringify": "2.x", "jest-util": "^26.1.0", "json5": "2.x", - "lodash.memoize": "4.x", + "lodash": "4.x", "make-error": "1.x", "mkdirp": "1.x", "semver": "7.x", @@ -19314,9 +19567,9 @@ "dev": true }, "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz", + "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -19526,6 +19779,56 @@ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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" + } + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -19621,9 +19924,9 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { "version": "2.2.0", @@ -19676,9 +19979,9 @@ "dev": true }, "vsce": { - "version": "1.83.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.83.0.tgz", - "integrity": "sha512-gyF/xtCOFcKO+EvC0FQu5jPECHz2XKMWcw62gqwJJ22lVvlj58t49sWe1IGl9S5NpxCek+QMm6V9i/cDwGWs/Q==", + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.85.0.tgz", + "integrity": "sha512-YVFwjXWvHRwk75mm3iL4Wr3auCdbBPTv2amtLf97ccqH0hkt0ZVBddu7iOs4HSEbSr9xiiaZwQHUsqMm6Ks0ag==", "dev": true, "requires": { "azure-devops-node-api": "^7.2.0", @@ -19738,12 +20041,12 @@ "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==" }, "vscode-languageclient": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.1.3.tgz", - "integrity": "sha512-YciJxk08iU5LmWu7j5dUt9/1OLjokKET6rME3cI4BRpiF6HZlusm2ZwPt0MYJ0lV5y43sZsQHhyon2xBg4ZJVA==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.1.4.tgz", + "integrity": "sha512-EUOU+bJu6axmt0RFNo3nrglQLPXMfanbYViJee3Fbn2VuQoX0ZOI4uTYhSRvYLP2vfwTP/juV62P/mksCdTZMA==", "requires": { "semver": "^6.3.0", - "vscode-languageserver-protocol": "^3.15.3" + "vscode-languageserver-protocol": "3.15.3" }, "dependencies": { "semver": { @@ -19781,25 +20084,15 @@ "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==" }, "vscode-test": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.4.1.tgz", - "integrity": "sha512-Ls7+JyC06cUCuomlTYk4aNJI00Rri09hgtkNl3zfQ1bj6meXglpSPpuzJ/RPNetlUHFMm4eGs0Xr/H5pFPVwfQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.0.tgz", + "integrity": "sha512-svwE/mhBBqrB77C1U7pkUKfUmxnkzg0dLGi1vEmitsleu88oNsqZEhG3ANZrL/Ia4m0CW0oYEKRw2EojpFxLlQ==", "dev": true, "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.4", - "rimraf": "^2.6.3" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" } }, "vue-template-compiler": { @@ -20135,9 +20428,9 @@ "dev": true }, "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -20148,7 +20441,7 @@ "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", + "enhanced-resolve": "^4.5.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", @@ -20200,6 +20493,29 @@ } } }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -20759,9 +21075,9 @@ } }, "ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==" + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==" }, "xhr": { "version": "2.6.0", @@ -20949,7 +21265,8 @@ "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true }, "yocto-queue": { "version": "0.1.0", diff --git a/package.json b/package.json index 8e5fbe68..f576d0e6 100644 --- a/package.json +++ b/package.json @@ -850,18 +850,18 @@ } }, "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/traverse": "^7.9.6", - "@fortawesome/fontawesome-svg-core": "^1.2.28", - "@fortawesome/free-solid-svg-icons": "^5.13.0", - "@fortawesome/react-fontawesome": "^0.1.9", - "@iconify-icons/codicon": "^1.0.6", + "@babel/parser": "^7.12.11", + "@babel/traverse": "^7.12.12", + "@fortawesome/fontawesome-svg-core": "^1.2.34", + "@fortawesome/free-solid-svg-icons": "^5.15.2", + "@fortawesome/react-fontawesome": "^0.1.14", + "@iconify-icons/codicon": "^1.1.5", "@iconify/react": "^1.1.3", "@leafygreen-ui/toggle": "3.0.1", - "@mongosh/browser-runtime-electron": "^0.5.2", - "@mongosh/service-provider-server": "^0.5.2", - "@mongosh/shell-api": "^0.5.2", - "analytics-node": "^3.4.0-beta.1", + "@mongosh/browser-runtime-electron": "^0.6.1", + "@mongosh/service-provider-server": "^0.6.1", + "@mongosh/shell-api": "^0.6.1", + "analytics-node": "^3.5.0", "bson": "^4.2.0", "classnames": "^2.2.6", "debug": "^4.1.1", @@ -869,8 +869,8 @@ "micromatch": "^4.0.2", "mongodb": "^3.6.3", "mongodb-cloud-info": "^1.1.2", - "mongodb-connection-model": "^18.1.0", - "mongodb-data-service": "^18.1.0", + "mongodb-connection-model": "^19.0.2", + "mongodb-data-service": "^19.0.0", "mongodb-ns": "^2.2.0", "mongodb-schema": "^8.2.5", "numeral": "^2.0.6", @@ -879,11 +879,11 @@ "react-redux": "^7.2.0", "redux": "^4.0.5", "ts-log": "^2.1.4", - "uuid": "^8.0.2", - "vscode-languageclient": "^6.1.3", + "uuid": "^8.3.2", + "vscode-languageclient": "^6.1.4", "vscode-languageserver": "^6.1.1", "vscode-languageserver-textdocument": "^1.0.1", - "ws": "^7.2.3" + "ws": "^7.4.2" }, "devDependencies": { "@types/analytics-node": "^3.1.4", @@ -896,14 +896,15 @@ "@types/glob": "^7.1.3", "@types/jest": "^26.0.20", "@types/mocha": "^8.2.0", - "@types/node": "^14.14.20", + "@types/node": "^14.14.22", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/sinon": "^9.0.10", + "@types/uuid": "^8.3.0", "@types/vscode": "^1.49.0", "@types/ws": "^7.4.0", - "@typescript-eslint/eslint-plugin": "^4.13.0", - "@typescript-eslint/parser": "^4.13.0", + "@typescript-eslint/eslint-plugin": "^4.14.2", + "@typescript-eslint/parser": "^4.14.2", "autoprefixer": "^9.7.5", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", @@ -914,7 +915,7 @@ "depcheck": "^1.3.1", "download": "^8.0.0", "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.5", + "enzyme-adapter-react-16": "^1.15.6", "eslint": "^6.8.0", "eslint-config-mongodb-js": "^5.0.3", "eslint-plugin-mocha": "^8.0.0", @@ -922,7 +923,7 @@ "jest": "^26.5.2", "jest-junit": "^12.0.0", "jest-transform-stub": "^2.0.0", - "less": "^3.11.1", + "less": "^3.13.1", "less-loader": "^5.0.0", "meow": "^6.0.1", "mkdirp": "^1.0.4", @@ -930,22 +931,22 @@ "mocha-junit-reporter": "^2.0.0", "mocha-multi": "^1.1.3", "mongodb-ace-autocompleter": "^0.4.14", - "mongodb-runner": "^4.8.0", + "mongodb-runner": "^4.8.1", "node-loader": "^0.6.0", "npm-run-all": "^4.1.5", "ora": "^4.0.3", "postcss-loader": "^3.0.0", "pre-commit": "^1.2.2", - "sinon": "^9.2.3", + "sinon": "^9.2.4", "sinon-chai": "^3.5.0", "style-loader": "^1.1.3", - "ts-jest": "^26.4.4", + "ts-jest": "^26.5.0", "ts-loader": "^8.0.14", "ts-node": "^9.1.1", "typescript": "^4.1.3", - "vsce": "^1.83.0", - "vscode-test": "^1.4.1", - "webpack": "^4.42.0", + "vsce": "^1.85.0", + "vscode-test": "^1.5.0", + "webpack": "^4.46.0", "webpack-cli": "^3.3.11", "xvfb-maybe": "^0.2.1" }, diff --git a/src/connectionController.ts b/src/connectionController.ts index be4e9c47..52198ea7 100644 --- a/src/connectionController.ts +++ b/src/connectionController.ts @@ -1,19 +1,19 @@ -import { v4 as uuidv4 } from 'uuid'; import * as vscode from 'vscode'; +import { v4 as uuidv4 } from 'uuid'; import Connection from 'mongodb-connection-model/lib/model'; import DataService from 'mongodb-data-service'; +import { EventEmitter } from 'events'; -import { ConnectionModelType } from './connectionModelType'; -import { DataServiceType } from './dataServiceType'; +import { CONNECTION_STATUS } from './views/webview-app/extension-app-message-constants'; +import { ConnectionModel } from './types/connectionModelType'; import { createLogger } from './logging'; +import { DataServiceType } from './types/dataServiceType'; +import { ext } from './extensionConstants'; +import { SavedConnection, StorageScope } from './storage/storageController'; +import SSH_TUNNEL_TYPES from './views/webview-app/connection-model/constants/ssh-tunnel-types'; import { StatusView } from './views'; -import { EventEmitter } from 'events'; import { StorageController, StorageVariables } from './storage'; -import { SavedConnection, StorageScope } from './storage/storageController'; import TelemetryService from './telemetry/telemetryService'; -import { ext } from './extensionConstants'; -import { CONNECTION_STATUS } from './views/webview-app/extension-app-message-constants'; -import SSH_TUNNEL_TYPES from './views/webview-app/connection-model/constants/ssh-tunnel-types'; const { name, version } = require('../package.json'); const log = createLogger('connection controller'); @@ -31,7 +31,7 @@ export enum ConnectionTypes { } export type SavedConnectionInformation = { - connectionModel: ConnectionModelType; + connectionModel: ConnectionModel; }; // A loaded connection contains connection information. @@ -57,7 +57,7 @@ export default class ConnectionController { private readonly _serviceName = 'mdb.vscode.savedConnections'; _activeDataService: null | DataServiceType = null; - _activeConnectionModel: null | ConnectionModelType = null; + _activeConnectionModel: null | ConnectionModel = null; private _currentConnectionId: null | string = null; // When we are connecting to a server we save a connection version to @@ -229,7 +229,7 @@ export default class ConnectionController { return new Promise((resolve, reject) => { Connection.from( connectionString, - (error: Error | undefined, newConnectionModel: ConnectionModelType) => { + (error: Error | undefined, newConnectionModel: ConnectionModel) => { if (error) { return reject(new Error(`Unable to create connection: ${error}`)); } @@ -257,11 +257,11 @@ export default class ConnectionController { } public parseNewConnection = ( - newConnectionModel: ConnectionModelType - ): ConnectionModelType => { + newConnectionModel: ConnectionModel + ): ConnectionModel => { // Here we re-parse the connection, as it can be loaded from storage or // passed by the connection model without the class methods. - const connectionModel: ConnectionModelType = new Connection( + const connectionModel: ConnectionModel = new Connection( newConnectionModel ); @@ -269,7 +269,7 @@ export default class ConnectionController { }; public getConnectionNameFromConnectionModel = ( - connectionModel: ConnectionModelType + connectionModel: ConnectionModel ): string => { const { sshTunnelOptions } = connectionModel.getAttributes({ derived: true @@ -300,7 +300,7 @@ export default class ConnectionController { }; public saveNewConnectionAndConnect = async ( - connectionModel: ConnectionModelType, + connectionModel: ConnectionModel, connectionType: ConnectionTypes ): Promise => { const connectionId = uuidv4(); @@ -340,7 +340,7 @@ export default class ConnectionController { public connect = async ( connectionId: string, - connectionModel: ConnectionModelType, + connectionModel: ConnectionModel, connectionType: ConnectionTypes ): Promise => { log.info( @@ -424,7 +424,7 @@ export default class ConnectionController { public connectWithConnectionId = (connectionId: string): Promise => { if (this._connections[connectionId]) { - let connectionModel: ConnectionModelType; + let connectionModel: ConnectionModel; try { const savedConnectionModel = this._connections[connectionId] @@ -731,7 +731,7 @@ export default class ConnectionController { return this._activeDataService; } - public getActiveConnectionModel(): null | ConnectionModelType { + public getActiveConnectionModel(): null | ConnectionModel { return this._activeConnectionModel; } diff --git a/src/connectionModelType.ts b/src/connectionModelType.ts deleted file mode 100644 index a2dc8895..00000000 --- a/src/connectionModelType.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { EJSON } from 'bson'; -import { Host } from './views/webview-app/connection-model/connection-model'; -import SSH_TUNNEL_TYPES from './views/webview-app/connection-model/constants/ssh-tunnel-types'; - -type ConnectionAttributes = { - driverUrl: string; - driverUrlWithSsh: string; - driverOptions: EJSON.SerializableTypes; - sshTunnelOptions: { - host?: string; - port?: number; - }; -}; - -export type ConnectionModelType = { - appname: string; - hosts: Host[]; - hostname: string; - isSrvRecord: boolean; - port: number; - driverUrl: string; - driverUrlWithSsh: string; - sshTunnel?: SSH_TUNNEL_TYPES; - getAttributes(options?: EJSON.SerializableTypes): ConnectionAttributes; - disconnect(callback: (n: Error | undefined) => void): void; -}; diff --git a/src/utils/documentSource.ts b/src/documentSource.ts similarity index 100% rename from src/utils/documentSource.ts rename to src/documentSource.ts diff --git a/src/editors/collectionDocumentsOperationsStore.ts b/src/editors/collectionDocumentsOperationsStore.ts index 736db17e..c178f3c3 100644 --- a/src/editors/collectionDocumentsOperationsStore.ts +++ b/src/editors/collectionDocumentsOperationsStore.ts @@ -20,7 +20,7 @@ export default class CollectionDocumentsOperationsStore { operations: { [key: string]: CollectionDocumentsOperation } = {}; createNewOperation(): string { - const operationId = uuidv4() as string; + const operationId = uuidv4(); const initialDocumentsLimit = vscode.workspace .getConfiguration('mdb') diff --git a/src/editors/editDocumentCodeLensProvider.ts b/src/editors/editDocumentCodeLensProvider.ts index a1112d96..e71a06c5 100644 --- a/src/editors/editDocumentCodeLensProvider.ts +++ b/src/editors/editDocumentCodeLensProvider.ts @@ -1,16 +1,18 @@ import * as vscode from 'vscode'; -import EXTENSION_COMMANDS from '../commands'; -import type { OutputItem, ResultCodeLensInfo } from '../utils/types'; -import ConnectionController from '../connectionController'; -import { DocumentSource } from '../utils/documentSource'; import { EJSON } from 'bson'; + +import ConnectionController from '../connectionController'; +import { DocumentSource } from '../documentSource'; +import type { EditDocumentInfo } from '../types/editDocumentInfoType'; +import EXTENSION_COMMANDS from '../commands'; import { PLAYGROUND_RESULT_URI } from './playgroundResultProvider'; +import type { PlaygroundResult } from '../types/playgroundType'; export default class EditDocumentCodeLensProvider implements vscode.CodeLensProvider { _onDidChangeCodeLenses: vscode.EventEmitter = new vscode.EventEmitter(); _codeLenses: vscode.CodeLens[] = []; - _codeLensesInfo: { [name: string]: ResultCodeLensInfo[] } | {}; + _codeLensesInfo: { [name: string]: EditDocumentInfo[] } | {} = {}; _connectionController: ConnectionController; readonly onDidChangeCodeLenses: vscode.Event = this @@ -18,7 +20,6 @@ implements vscode.CodeLensProvider { constructor(connectionController: ConnectionController) { this._connectionController = connectionController; - this._codeLensesInfo = {}; vscode.workspace.onDidChangeConfiguration(() => { this._onDidChangeCodeLenses.fire(); @@ -30,7 +31,7 @@ implements vscode.CodeLensProvider { namespace: string | null, uri: vscode.Uri }) { - let resultCodeLensesInfo: ResultCodeLensInfo[] = []; + let resultCodeLensesInfo: EditDocumentInfo[] = []; resultCodeLensesInfo = this._updateCodeLensesForCursor({ ...data, @@ -40,9 +41,9 @@ implements vscode.CodeLensProvider { this._codeLensesInfo[data.uri.toString()] = resultCodeLensesInfo; } - updateCodeLensesForPlayground(playgroundResult: OutputItem) { + updateCodeLensesForPlayground(playgroundResult: PlaygroundResult) { const source = DocumentSource.DOCUMENT_SOURCE_PLAYGROUND; - let resultCodeLensesInfo: ResultCodeLensInfo[] = []; + let resultCodeLensesInfo: EditDocumentInfo[] = []; if (!playgroundResult || !playgroundResult.content) { this._codeLensesInfo[PLAYGROUND_RESULT_URI.toString()] = []; @@ -68,8 +69,8 @@ implements vscode.CodeLensProvider { content: any, namespace: string | null, source: DocumentSource - }): ResultCodeLensInfo[] { - const resultCodeLensesInfo: ResultCodeLensInfo[] = []; + }): EditDocumentInfo[] { + const resultCodeLensesInfo: EditDocumentInfo[] = []; if (Array.isArray(data.content)) { const connectionId = this._connectionController.getActiveConnectionId(); @@ -106,9 +107,9 @@ implements vscode.CodeLensProvider { content: any, namespace: string | null, source: DocumentSource - }): ResultCodeLensInfo[] { + }): EditDocumentInfo[] { const { content, namespace, source } = data; - const resultCodeLensesInfo: ResultCodeLensInfo[] = []; + const resultCodeLensesInfo: EditDocumentInfo[] = []; if (content._id && namespace) { const connectionId = this._connectionController.getActiveConnectionId(); @@ -139,7 +140,7 @@ implements vscode.CodeLensProvider { const command: { title: string; command: EXTENSION_COMMANDS; - arguments: ResultCodeLensInfo[]; + arguments: EditDocumentInfo[]; } = { title: 'Edit Document', command: EXTENSION_COMMANDS.MDB_OPEN_MONGODB_DOCUMENT_FROM_CODE_LENS, diff --git a/src/editors/editorsController.ts b/src/editors/editorsController.ts index 6e36bab8..083304be 100644 --- a/src/editors/editorsController.ts +++ b/src/editors/editorsController.ts @@ -1,33 +1,34 @@ import * as vscode from 'vscode'; import { EJSON } from 'bson'; + +import ActiveConnectionCodeLensProvider from './activeConnectionCodeLensProvider'; +import ConnectionController from '../connectionController'; import CollectionDocumentsCodeLensProvider from './collectionDocumentsCodeLensProvider'; import CollectionDocumentsOperationsStore from './collectionDocumentsOperationsStore'; -import ActiveConnectionCodeLensProvider from './activeConnectionCodeLensProvider'; -import PartialExecutionCodeLensProvider from './partialExecutionCodeLensProvider'; import CollectionDocumentsProvider, { CONNECTION_ID_URI_IDENTIFIER, OPERATION_ID_URI_IDENTIFIER, NAMESPACE_URI_IDENTIFIER, VIEW_COLLECTION_SCHEME } from './collectionDocumentsProvider'; -import ConnectionController from '../connectionController'; import { createLogger } from '../logging'; -import { StatusView } from '../views'; -import PlaygroundController from './playgroundController'; import DocumentIdStore from './documentIdStore'; +import { DocumentSource } from '../documentSource'; +import EditDocumentCodeLensProvider from './editDocumentCodeLensProvider'; +import type { EditDocumentInfo } from '../types/editDocumentInfoType'; +import { MemoryFileSystemProvider } from './memoryFileSystemProvider'; import MongoDBDocumentService, { DOCUMENT_ID_URI_IDENTIFIER, DOCUMENT_SOURCE_URI_IDENTIFIER, VIEW_DOCUMENT_SCHEME } from './mongoDBDocumentService'; -import { MemoryFileSystemProvider } from './memoryFileSystemProvider'; -import TelemetryService from '../telemetry/telemetryService'; +import PartialExecutionCodeLensProvider from './partialExecutionCodeLensProvider'; +import PlaygroundController from './playgroundController'; import PlaygroundResultProvider, { PLAYGROUND_RESULT_SCHEME } from './playgroundResultProvider'; -import type { ResultCodeLensInfo } from '../utils/types'; -import EditDocumentCodeLensProvider from './editDocumentCodeLensProvider'; -import { DocumentSource } from '../utils/documentSource'; +import { StatusView } from '../views'; +import TelemetryService from '../telemetry/telemetryService'; const log = createLogger('editors controller'); @@ -105,7 +106,7 @@ export default class EditorsController { log.info('activated.'); } - async openMongoDBDocument(data: ResultCodeLensInfo): Promise { + async openMongoDBDocument(data: EditDocumentInfo): Promise { try { let fileDocumentId = EJSON.stringify(data.documentId); diff --git a/src/editors/mongoDBDocumentService.ts b/src/editors/mongoDBDocumentService.ts index d338c8ac..83ae07b7 100644 --- a/src/editors/mongoDBDocumentService.ts +++ b/src/editors/mongoDBDocumentService.ts @@ -1,13 +1,14 @@ import * as vscode from 'vscode'; import { EJSON } from 'bson'; -import DocumentIdStore from './documentIdStore'; +import util from 'util'; + import ConnectionController from '../connectionController'; +import { createLogger } from '../logging'; +import DocumentIdStore from './documentIdStore'; +import { DocumentSource } from '../documentSource'; +import type { EditDocumentInfo } from '../types/editDocumentInfoType'; import { StatusView } from '../views'; import TelemetryService from '../telemetry/telemetryService'; -import { DocumentSource } from '../utils/documentSource'; -import { createLogger } from '../logging'; -import util from 'util'; -import type { ResultCodeLensInfo } from '../utils/types'; export const DOCUMENT_ID_URI_IDENTIFIER = 'documentId'; @@ -113,7 +114,7 @@ export default class MongoDBDocumentService { } async fetchDocument( - data: ResultCodeLensInfo + data: EditDocumentInfo ): Promise { log.info('fetch document from MongoDB', data); diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index 3dd099ff..3e082e49 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -1,24 +1,24 @@ import * as vscode from 'vscode'; +import { EJSON } from 'bson'; + +import ActiveConnectionCodeLensProvider from './activeConnectionCodeLensProvider'; import ConnectionController, { DataServiceEventTypes } from '../connectionController'; +import { createLogger } from '../logging'; import { LanguageServerController } from '../language'; -import TelemetryService from '../telemetry/telemetryService'; -import ActiveConnectionCodeLensProvider from './activeConnectionCodeLensProvider'; -import PartialExecutionCodeLensProvider from './partialExecutionCodeLensProvider'; import { OutputChannel, ProgressLocation, TextEditor } from 'vscode'; -import playgroundTemplate from '../templates/playgroundTemplate'; -import playgroundSearchTemplate from '../templates/playgroundSearchTemplate'; +import PartialExecutionCodeLensProvider from './partialExecutionCodeLensProvider'; import playgroundCreateIndexTemplate from '../templates/playgroundCreateIndexTemplate'; -import { createLogger } from '../logging'; -import type { ExecuteAllResult } from '../utils/types'; +import type { PlaygroundResult, ShellExecuteAllResult } from '../types/playgroundType'; import PlaygroundResultProvider, { PLAYGROUND_RESULT_SCHEME, PLAYGROUND_RESULT_URI } from './playgroundResultProvider'; -import type { OutputItem } from '../utils/types'; +import playgroundSearchTemplate from '../templates/playgroundSearchTemplate'; +import playgroundTemplate from '../templates/playgroundTemplate'; import { StatusView } from '../views'; -import { EJSON } from 'bson'; +import TelemetryService from '../telemetry/telemetryService'; const log = createLogger('playground controller'); @@ -28,7 +28,7 @@ const log = createLogger('playground controller'); export default class PlaygroundController { _connectionController: ConnectionController; _activeTextEditor?: TextEditor; - _playgroundResult?: OutputItem; + _playgroundResult?: PlaygroundResult; _context: vscode.ExtensionContext; _languageServerController: LanguageServerController; _telemetryService: TelemetryService; @@ -38,7 +38,7 @@ export default class PlaygroundController { _connectionString?: string; _connectionOptions?: EJSON.SerializableTypes; _selectedText?: string; - _codeToEvaluate: string; + _codeToEvaluate = ''; _isPartialRun: boolean; _playgroundResultViewColumn?: vscode.ViewColumn; _playgroundResultTextDocument?: vscode.TextDocument; @@ -56,7 +56,6 @@ export default class PlaygroundController { partialExecutionCodeLensProvider: PartialExecutionCodeLensProvider ) { this._context = context; - this._codeToEvaluate = ''; this._isPartialRun = false; this._connectionController = connectionController; this._languageServerController = languageServerController; @@ -164,8 +163,7 @@ export default class PlaygroundController { await this._languageServerController.connectToServiceProvider({ connectionString: this._connectionString, - connectionOptions: this._connectionOptions, - extensionPath: this._context.extensionPath + connectionOptions: this._connectionOptions }); } @@ -242,11 +240,11 @@ export default class PlaygroundController { } } - async _evaluate(codeToEvaluate: string): Promise { + async _evaluate(codeToEvaluate: string): Promise { this._statusView.showMessage('Getting results...'); // Send a request to the language server to execute scripts from a playground. - const result: ExecuteAllResult = await this._languageServerController.executeAll( + const result: ShellExecuteAllResult = await this._languageServerController.executeAll( codeToEvaluate ); @@ -268,7 +266,7 @@ export default class PlaygroundController { return this._activeTextEditor?.document.getText(selection) || ''; } - _evaluateWithCancelModal(): Promise { + _evaluateWithCancelModal(): Promise { if (!this._connectionString) { return Promise.reject( new Error('Please connect to a database before running a playground.') @@ -295,7 +293,7 @@ export default class PlaygroundController { }); // Run all playground scripts. - const result: ExecuteAllResult = await this._evaluate( + const result: ShellExecuteAllResult = await this._evaluate( this._codeToEvaluate ); @@ -397,7 +395,7 @@ export default class PlaygroundController { this._outputChannel.clear(); - const evaluateResponse: ExecuteAllResult = await this._evaluateWithCancelModal(); + const evaluateResponse: ShellExecuteAllResult = await this._evaluateWithCancelModal(); if (evaluateResponse?.outputLines?.length) { for (const line of evaluateResponse.outputLines) { diff --git a/src/editors/playgroundResultProvider.ts b/src/editors/playgroundResultProvider.ts index cb223b1f..877c859e 100644 --- a/src/editors/playgroundResultProvider.ts +++ b/src/editors/playgroundResultProvider.ts @@ -1,7 +1,8 @@ import * as vscode from 'vscode'; -import EditDocumentCodeLensProvider from './editDocumentCodeLensProvider'; -import type { OutputItem } from '../utils/types'; + import ConnectionController from '../connectionController'; +import EditDocumentCodeLensProvider from './editDocumentCodeLensProvider'; +import type { PlaygroundResult } from '../types/playgroundType'; export const PLAYGROUND_RESULT_SCHEME = 'PLAYGROUND_RESULT_SCHEME'; @@ -13,7 +14,7 @@ export default class PlaygroundResultProvider implements vscode.TextDocumentContentProvider { _connectionController: ConnectionController; _editDocumentCodeLensProvider: EditDocumentCodeLensProvider; - _playgroundResult: OutputItem; + _playgroundResult: PlaygroundResult; constructor( connectionController: ConnectionController, @@ -31,7 +32,7 @@ implements vscode.TextDocumentContentProvider { onDidChangeEmitter = new vscode.EventEmitter(); onDidChange = this.onDidChangeEmitter.event; - setPlaygroundResult(playgroundResult?: OutputItem): void { + setPlaygroundResult(playgroundResult?: PlaygroundResult): void { if (playgroundResult) { this._playgroundResult = playgroundResult; } @@ -42,6 +43,10 @@ implements vscode.TextDocumentContentProvider { } provideTextDocumentContent(): string { + if (!this._playgroundResult) { + return 'undefined'; + } + const { type, content } = this._playgroundResult; if (type === 'undefined') { diff --git a/src/language/languageServerController.ts b/src/language/languageServerController.ts index 074a751b..1c0e2ff5 100644 --- a/src/language/languageServerController.ts +++ b/src/language/languageServerController.ts @@ -1,6 +1,6 @@ import * as vscode from 'vscode'; import * as path from 'path'; -import { workspace, ExtensionContext, OutputChannel } from 'vscode'; +import { EJSON } from 'bson'; import { LanguageClient, LanguageClientOptions, @@ -9,11 +9,12 @@ import { CancellationTokenSource } from 'vscode-languageclient'; import WebSocket from 'ws'; -import type { ExecuteAllResult } from '../utils/types'; +import { workspace, ExtensionContext, OutputChannel } from 'vscode'; import { createLogger } from '../logging'; -import { ServerCommands, PlaygroundRunParameters } from './serverCommands'; -import { EJSON } from 'bson'; +import { PlaygroundExecuteParameters } from '../types/playgroundType'; +import { ServerCommands } from './serverCommands'; +import type { ShellExecuteAllResult } from '../types/playgroundType'; const log = createLogger('LanguageServerController'); let socket: WebSocket | null; @@ -24,16 +25,15 @@ let socket: WebSocket | null; export default class LanguageServerController { _context: ExtensionContext; _source?: CancellationTokenSource; - _isExecutingInProgress: boolean; + _isExecutingInProgress = false; _client: LanguageClient; constructor(context: ExtensionContext) { this._context = context; - this._isExecutingInProgress = false; // The server is implemented in node. const serverModule = path.join( - context.extensionPath, + this._context.extensionPath, 'dist', 'languageServer.js' ); @@ -118,6 +118,10 @@ export default class LanguageServerController { // Subscribe on notifications from the server when the client is ready await this._client.onReady(); + await this._client.sendRequest( + ServerCommands.SET_EXTENSION_PATH, + this._context.extensionPath + ); this._client.onNotification('showInformationMessage', (messsage) => { vscode.window.showInformationMessage(messsage); @@ -137,7 +141,7 @@ export default class LanguageServerController { this._client.stop(); } - async executeAll(codeToEvaluate: string): Promise { + async executeAll(codeToEvaluate: string): Promise { this._isExecutingInProgress = true; await this._client.onReady(); @@ -148,11 +152,11 @@ export default class LanguageServerController { // Send a request with a cancellation token // to the language server server to execute scripts from a playground // and return results to the playground controller when ready - const result: ExecuteAllResult = await this._client.sendRequest( + const result: ShellExecuteAllResult = await this._client.sendRequest( ServerCommands.EXECUTE_ALL_FROM_PLAYGROUND, { codeToEvaluate - } as PlaygroundRunParameters, + } as PlaygroundExecuteParameters, this._source.token ); @@ -164,7 +168,6 @@ export default class LanguageServerController { async connectToServiceProvider(params: { connectionString?: string; connectionOptions?: EJSON.SerializableTypes; - extensionPath: string; }): Promise { await this._client.onReady(); await this._client.sendRequest( diff --git a/src/language/mongoDBService.ts b/src/language/mongoDBService.ts index a63eca1a..e61fe4f9 100644 --- a/src/language/mongoDBService.ts +++ b/src/language/mongoDBService.ts @@ -1,31 +1,36 @@ -import { CompletionItemKind, CancellationToken } from 'vscode-languageserver'; -import { Worker as WorkerThreads } from 'worker_threads'; -import { signatures } from '@mongosh/shell-api'; +/* eslint-disable no-sync */ import * as util from 'util'; -import { Visitor } from './visitor'; -import { ServerCommands, PlaygroundRunParameters } from './serverCommands'; +import { CompletionItemKind, CancellationToken, Connection, CompletionItem } from 'vscode-languageserver'; +import fs from 'fs'; +import path from 'path'; +import { signatures } from '@mongosh/shell-api'; +import { Worker as WorkerThreads } from 'worker_threads'; -const path = require('path'); -const fs = require('fs'); +import { CollectionItem } from '../types/collectionItemType'; +import { ConnectionOptions } from '../types/connectionOptionsType'; +import { ServerCommands } from './serverCommands'; +import { ShellExecuteAllResult, PlaygroundExecuteParameters } from '../types/playgroundType'; +import { Visitor } from './visitor'; export const languageServerWorkerFileName = 'languageServerWorker.js'; +export type ShellCompletionItem = { + [symbol: string]: CompletionItem[] | [] +}; + export default class MongoDBService { - _connection: any; + _connection: Connection; _connectionString?: string; - _connectionOptions?: any; - _cachedFields: object; - _cachedDatabases: []; - _cachedCollections: object; - _cachedShellSymbols: any; + _connectionOptions?: ConnectionOptions; + _cachedDatabases: CompletionItem[] | [] = []; + _cachedFields: { [namespace: string]: CompletionItem[] } | {} = {}; + _cachedCollections: { [database: string]: CollectionItem[] } | {} = {}; + _cachedShellSymbols: ShellCompletionItem; _extensionPath?: string; _visitor: Visitor; - constructor(connection) { + constructor(connection: Connection) { this._connection = connection; - this._cachedFields = {}; - this._cachedDatabases = []; - this._cachedCollections = []; this._cachedShellSymbols = this._getShellCompletionItems(); this._visitor = new Visitor(); } @@ -35,11 +40,11 @@ export default class MongoDBService { return this._connectionString; } - get connectionOptions(): object | undefined { + get connectionOptions(): ConnectionOptions | undefined { return this._connectionOptions; } - _isSslConnection(connectionOptions: any): boolean { + _isSslConnection(connectionOptions: ConnectionOptions): boolean { return !!( connectionOptions && (connectionOptions.sslCA || @@ -48,42 +53,47 @@ export default class MongoDBService { ); } - _readSslFileSync(sslOption: string | string[]): any { + _readSslFileSync(sslOption: string | string[]): string | undefined { if (Array.isArray(sslOption)) { - return fs.readFileSync(sslOption[0]); + sslOption = sslOption[0]; } - if (typeof sslOption !== 'string') { - return; + if (typeof sslOption === 'string') { + return fs.readFileSync(sslOption).toString(); } - - return fs.readFileSync(sslOption); } _loadSslBinaries(): void { - if (this._connectionOptions.sslCA) { + if (this._connectionOptions?.sslCA) { this._connectionOptions.sslCA = this._readSslFileSync( this._connectionOptions.sslCA ); } - if (this._connectionOptions.sslKey) { + if (this._connectionOptions?.sslKey) { this._connectionOptions.sslKey = this._readSslFileSync( this._connectionOptions.sslKey ); } - if (this._connectionOptions.sslCert) { + if (this._connectionOptions?.sslCert) { this._connectionOptions.sslCert = this._readSslFileSync( this._connectionOptions.sslCert ); } } + setExtensionPath(extensionPath: string): void { + if (!extensionPath) { + this._connection.console.log('Set extensionPath error: extensionPath is undefined'); + } else { + this._extensionPath = extensionPath; + } + } + async connectToServiceProvider(params: { connectionString?: string; - connectionOptions?: any; - extensionPath: string; + connectionOptions?: ConnectionOptions; }): Promise { this._clearCurrentSessionConnection(); this._clearCurrentSessionFields(); @@ -92,7 +102,6 @@ export default class MongoDBService { this._connectionString = params.connectionString; this._connectionOptions = params.connectionOptions || {}; - this._extensionPath = params.extensionPath; if (!this._connectionString) { return Promise.resolve(false); @@ -132,143 +141,192 @@ export default class MongoDBService { // ------ EXECUTION ------ // executeAll( - executionParameters: PlaygroundRunParameters, + executionParameters: PlaygroundExecuteParameters, token: CancellationToken - ): Promise { + ): Promise { this._clearCurrentSessionFields(); return new Promise((resolve) => { - // Use Node worker threads to run a playground to be able to cancel infinite loops. - // - // There is an issue with support for `.ts` files. - // Trying to run a `.ts` file in a worker thread returns the error: - // `The worker script extension must be “.js” or “.mjs”. Received “.ts”` - // As a workaround require `.js` file from the out folder. - // - // TODO: After webpackifying the extension replace - // the workaround with some similar 3rd-party plugin. - const worker = new WorkerThreads( - path.resolve(this._extensionPath, 'dist', languageServerWorkerFileName), - { - // The workerData parameter sends data to the created worker. - workerData: { - codeToEvaluate: executionParameters.codeToEvaluate, - connectionString: this._connectionString, - connectionOptions: this._connectionOptions - } - } - ); - - this._connection.console.log( - `MONGOSH execute all body: "${executionParameters.codeToEvaluate}"` - ); + if (!this._extensionPath) { + this._connection.console.log('MONGOSH execute all error: extensionPath is undefined'); - // Evaluate runtime in the worker thread. - worker.postMessage(ServerCommands.EXECUTE_ALL_FROM_PLAYGROUND); - - // Listen for results from the worker thread. - worker.on('message', ([error, result]) => { - if (error) { - this._connection.console.log( - `MONGOSH execute all error: ${util.inspect(error)}` - ); - this._connection.sendNotification('showErrorMessage', error.message); - } + return resolve(undefined); + } - worker.terminate().then(() => resolve(result)); - }); + try { + // Use Node worker threads to run a playground to be able to cancel infinite loops. + // + // There is an issue with support for `.ts` files. + // Trying to run a `.ts` file in a worker thread returns the error: + // `The worker script extension must be “.js” or “.mjs”. Received “.ts”` + // As a workaround require `.js` file from the out folder. + // + // TODO: After webpackifying the extension replace + // the workaround with some similar 3rd-party plugin. + const worker = new WorkerThreads( + path.resolve(this._extensionPath, 'dist', languageServerWorkerFileName), + { + // The workerData parameter sends data to the created worker. + workerData: { + codeToEvaluate: executionParameters.codeToEvaluate, + connectionString: this._connectionString, + connectionOptions: this._connectionOptions + } + } + ); - // Listen for cancellation request from the language server client. - token.onCancellationRequested(async () => { - this._connection.console.log('PLAYGROUND cancellation requested'); - this._connection.sendNotification( - 'showInformationMessage', - 'The running playground operation was canceled.' + this._connection.console.log( + `MONGOSH execute all body: "${executionParameters.codeToEvaluate}"` ); - // If there is a situation that mongoClient is unresponsive, - // try to close mongoClient after each runtime evaluation - // and after the cancelation of the runtime - // to make sure that all resources are free and can be used with a new request. - // - // (serviceProvider as any)?.mongoClient.close(false); - // - // The mongoClient.close method closes the underlying connector, - // which in turn closes all open connections. - // Once called, this mongodb instance can no longer be used. - // - // See: https://github.com/mongodb-js/vscode/pull/54 + // Evaluate runtime in the worker thread. + worker.postMessage(ServerCommands.EXECUTE_ALL_FROM_PLAYGROUND); - // Stop the worker and all JavaScript execution - // in the worker thread as soon as possible. - await worker.terminate(); + // Listen for results from the worker thread. + worker.on('message', (response: [Error, ShellExecuteAllResult | undefined]) => { + const [error, result] = response; - return resolve([]); - }); - }); - } + if (error) { + const printableError = error as { message: string }; - // ------ GET DATA FOR COMPLETION ------ // - _getDatabasesCompletionItems(): void { - const worker = new WorkerThreads( - path.resolve(this._extensionPath, 'dist', languageServerWorkerFileName), - { - workerData: { - connectionString: this._connectionString, - connectionOptions: this._connectionOptions - } - } - ); + this._connection.console.log( + `MONGOSH execute all error: ${util.inspect(error)}` + ); + this._connection.sendNotification('showErrorMessage', printableError.message); + } - this._connection.console.log('MONGOSH get list databases...'); - worker.postMessage(ServerCommands.GET_LIST_DATABASES); + worker.terminate().then(() => { + resolve(result); + }); + }); + + // Listen for cancellation request from the language server client. + token.onCancellationRequested(async () => { + this._connection.console.log('PLAYGROUND cancellation requested'); + this._connection.sendNotification( + 'showInformationMessage', + 'The running playground operation was canceled.' + ); - worker.on('message', ([error, result]) => { - if (error) { + // If there is a situation that mongoClient is unresponsive, + // try to close mongoClient after each runtime evaluation + // and after the cancelation of the runtime + // to make sure that all resources are free and can be used with a new request. + // + // (serviceProvider as any)?.mongoClient.close(false); + // + // The mongoClient.close method closes the underlying connector, + // which in turn closes all open connections. + // Once called, this mongodb instance can no longer be used. + // + // See: https://github.com/mongodb-js/vscode/pull/54 + + // Stop the worker and all JavaScript execution + // in the worker thread as soon as possible. + await worker.terminate(); + + return resolve(undefined); + }); + } catch (error) { this._connection.console.log( - `MONGOSH get list databases error: ${util.inspect(error)}` + `MONGOSH execute all error: ${util.inspect(error)}` ); + return resolve(undefined); } - - worker.terminate().then(() => { - this._connection.console.log(`MONGOSH found ${result.length} databases`); - this._updateCurrentSessionDatabases(result); - }); }); } - _getCollectionsCompletionItems(databaseName: string): Promise { - return new Promise((resolve) => { + // ------ GET DATA FOR COMPLETION ------ // + _getDatabasesCompletionItems(): void { + if (!this._extensionPath) { + this._connection.console.log('MONGOSH get list databases error: extensionPath is undefined'); + + return; + } + + try { const worker = new WorkerThreads( path.resolve(this._extensionPath, 'dist', languageServerWorkerFileName), { workerData: { connectionString: this._connectionString, - connectionOptions: this._connectionOptions, - databaseName + connectionOptions: this._connectionOptions } } ); - this._connection.console.log('MONGOSH get list collections...'); - worker.postMessage(ServerCommands.GET_LIST_COLLECTIONS); + this._connection.console.log('MONGOSH get list databases...'); + worker.postMessage(ServerCommands.GET_LIST_DATABASES); + + worker.on('message', (response: [Error, CompletionItem[] | []]) => { + const [error, result] = response; - worker.on('message', ([error, result]) => { if (error) { this._connection.console.log( - `MONGOSH get list collections error: ${util.inspect(error)}` + `MONGOSH get list databases error: ${util.inspect(error)}` ); } worker.terminate().then(() => { - this._connection.console.log( - `MONGOSH found ${result.length} collections` - ); - this._updateCurrentSessionCollections(databaseName, result); - - return resolve(true); + this._connection.console.log(`MONGOSH found ${result.length} databases`); + this._updateCurrentSessionDatabases(result); }); }); + } catch (error) { + this._connection.console.log( + `MONGOSH get list databases error: ${util.inspect(error)}` + ); + } + } + + _getCollectionsCompletionItems(databaseName: string): Promise { + return new Promise((resolve) => { + if (!this._extensionPath) { + this._connection.console.log('MONGOSH get list collections error: extensionPath is undefined'); + + return resolve(false); + } + + try { + const worker = new WorkerThreads( + path.resolve(this._extensionPath, 'dist', languageServerWorkerFileName), + { + workerData: { + connectionString: this._connectionString, + connectionOptions: this._connectionOptions, + databaseName + } + } + ); + + this._connection.console.log('MONGOSH get list collections...'); + worker.postMessage(ServerCommands.GET_LIST_COLLECTIONS); + + worker.on('message', (response: [Error, CollectionItem[] | []]) => { + const [error, result] = response; + + if (error) { + this._connection.console.log( + `MONGOSH get list collections error: ${util.inspect(error)}` + ); + } + + worker.terminate().then(() => { + this._connection.console.log( + `MONGOSH found ${result.length} collections` + ); + this._updateCurrentSessionCollections(databaseName, result); + + return resolve(true); + }); + }); + } catch (error) { + this._connection.console.log( + `MONGOSH get list collections error: ${util.inspect(error)}` + ); + + return resolve(false); + } }); } @@ -277,39 +335,53 @@ export default class MongoDBService { collectionName: string ): Promise { return new Promise((resolve) => { - const namespace = `${databaseName}.${collectionName}`; - const worker = new WorkerThreads( - path.resolve(this._extensionPath, 'dist', languageServerWorkerFileName), - { - workerData: { - connectionString: this._connectionString, - connectionOptions: this._connectionOptions, - databaseName, - collectionName + if (!this._extensionPath) { + this._connection.console.log('SCHEMA error: extensionPath is undefined'); + + return resolve(false); + } + + try { + const namespace = `${databaseName}.${collectionName}`; + const worker = new WorkerThreads( + path.resolve(this._extensionPath, 'dist', languageServerWorkerFileName), + { + workerData: { + connectionString: this._connectionString, + connectionOptions: this._connectionOptions, + databaseName, + collectionName + } } - } - ); + ); - this._connection.console.log(`SCHEMA for namespace: "${namespace}"`); - worker.postMessage(ServerCommands.GET_FIELDS_FROM_SCHEMA); + this._connection.console.log(`SCHEMA for namespace: "${namespace}"`); + worker.postMessage(ServerCommands.GET_FIELDS_FROM_SCHEMA); - worker.on('message', ([error, fields]) => { - if (error) { - this._connection.console.log(`SCHEMA error: ${util.inspect(error)}`); - } + worker.on('message', (response: [Error, CompletionItem[] | []]) => { + const [error, result] = response; - worker.terminate().then(() => { - this._connection.console.log(`SCHEMA found ${fields.length} fields`); - this._updateCurrentSessionFields(namespace, fields); + if (error) { + this._connection.console.log(`SCHEMA error: ${util.inspect(error)}`); + } + + worker.terminate().then(() => { + this._connection.console.log(`SCHEMA found ${result.length} fields`); + this._updateCurrentSessionFields(namespace, result); - return resolve(true); + return resolve(true); + }); }); - }); + } catch (error) { + this._connection.console.log(`SCHEMA error: ${util.inspect(error)}`); + + return resolve(false); + } }); } // Get shell API symbols/methods completion from mongosh. - _getShellCompletionItems(): object { + _getShellCompletionItems(): ShellCompletionItem { const shellSymbols = {}; Object.keys(signatures).map((symbol) => { @@ -332,13 +404,15 @@ export default class MongoDBService { _prepareCollectionsItems( textFromEditor: string, - collections: Array, + collections: Array, position: { line: number; character: number } - ): any { + ): CompletionItem[] { if (!collections) { return []; } + this._connection.console.log(`collections: ${util.inspect(collections)}`); + return collections.map((item) => { if (this._isValidPropertyName(item.name)) { return { @@ -382,7 +456,7 @@ export default class MongoDBService { async provideCompletionItems( textFromEditor: string, position: { line: number; character: number } - ): Promise<[]> { + ): Promise { // eslint-disable-next-line complexity this._connection.console.log( `LS text from editor: ${util.inspect(textFromEditor)}` @@ -397,11 +471,11 @@ export default class MongoDBService { `VISITOR completion state: ${util.inspect(state)}` ); - if (state.databaseName && !this._cachedCollections[state.databaseName]) { + if (this.connectionString && state.databaseName && !this._cachedCollections[state.databaseName]) { await this._getCollectionsCompletionItems(state.databaseName); } - if (state.databaseName && state.collectionName) { + if (this.connectionString && state.databaseName && state.collectionName) { const namespace = `${state.databaseName}.${state.collectionName}`; if (!this._cachedFields[namespace]) { @@ -414,7 +488,7 @@ export default class MongoDBService { if (state.isObjectKey) { this._connection.console.log('VISITOR found field names completion'); - return this._cachedFields[namespace]; + return this._cachedFields[namespace] as CompletionItem[]; } } @@ -443,7 +517,7 @@ export default class MongoDBService { } if (state.isDbCallExpression) { - let dbCompletions: any = [...this._cachedShellSymbols.Database]; + let dbCompletions: CompletionItem[] = [...this._cachedShellSymbols.Database]; if (state.databaseName) { this._connection.console.log( @@ -494,24 +568,17 @@ export default class MongoDBService { this._cachedFields = {}; } - _updateCurrentSessionFields( - namespace: string, - fields: [{ label: string; kind: number }] - ): [] { - if (!this._cachedFields[namespace]) { - this._cachedFields[namespace] = {}; + _updateCurrentSessionFields(namespace: string, fields: CompletionItem[]): void { + if (namespace) { + this._cachedFields[namespace] = fields ? fields : []; } - - this._cachedFields[namespace] = fields; - - return this._cachedFields[namespace]; } _clearCurrentSessionDatabases(): void { this._cachedDatabases = []; } - _updateCurrentSessionDatabases(databases: any): void { + _updateCurrentSessionDatabases(databases: CompletionItem[]): void { this._cachedDatabases = databases ? databases : []; } @@ -519,14 +586,10 @@ export default class MongoDBService { this._cachedCollections = {}; } - _updateCurrentSessionCollections(database: string, collections: any): [] { + _updateCurrentSessionCollections(database: string, collections: CollectionItem[]): void { if (database) { - this._cachedCollections[database] = collections; - - return this._cachedFields[database]; + this._cachedCollections[database] = collections ? collections : []; } - - return []; } _clearCurrentSessionConnection(): void { diff --git a/src/language/server.ts b/src/language/server.ts index a6c4085e..6e7c4233 100644 --- a/src/language/server.ts +++ b/src/language/server.ts @@ -9,16 +9,18 @@ import { CompletionItem, TextDocumentPositionParams, RequestType, - TextDocumentSyncKind + TextDocumentSyncKind, + Connection } from 'vscode-languageserver'; import { TextDocument } from 'vscode-languageserver-textdocument'; import MongoDBService from './mongoDBService'; -import { ServerCommands, PlaygroundRunParameters } from './serverCommands'; +import { ServerCommands } from './serverCommands'; +import { PlaygroundExecuteParameters } from '../types/playgroundType'; // Create a connection for the server. The connection uses Node's IPC as a transport. // Also include all preview / proposed LSP features. -const connection = createConnection(ProposedFeatures.all); +const connection: Connection = createConnection(ProposedFeatures.all); // Create a simple text document manager. // The text document manager supports full document sync only. @@ -232,11 +234,15 @@ connection.onDidChangeWatchedFiles((/* _change */) => { // Execute the entire playground script. connection.onRequest( ServerCommands.EXECUTE_ALL_FROM_PLAYGROUND, - (executionParameters: PlaygroundRunParameters, token) => { + (executionParameters: PlaygroundExecuteParameters, token) => { return mongoDBService.executeAll(executionParameters, token); } ); +connection.onRequest(ServerCommands.SET_EXTENSION_PATH, (extensionPath) => { + return mongoDBService.setExtensionPath(extensionPath); +}); + // Connect to CliServiceProvider to enable shell completions. connection.onRequest(ServerCommands.CONNECT_TO_SERVICE_PROVIDER, (params) => { return mongoDBService.connectToServiceProvider(params); diff --git a/src/language/serverCommands.ts b/src/language/serverCommands.ts index fbd7efdc..655aaf52 100644 --- a/src/language/serverCommands.ts +++ b/src/language/serverCommands.ts @@ -5,7 +5,8 @@ export enum ServerCommands { EXECUTE_RANGE_FROM_PLAYGROUND = 'EXECUTE_RANGE_FROM_PLAYGROUND', GET_FIELDS_FROM_SCHEMA = 'GET_FIELDS_FROM_SCHEMA', GET_LIST_DATABASES = 'GET_LIST_DATABASES', - GET_LIST_COLLECTIONS = 'GET_LIST_COLLECTIONS' + GET_LIST_COLLECTIONS = 'GET_LIST_COLLECTIONS', + SET_EXTENSION_PATH = 'SET_EXTENSION_PATH' } export type PlaygroundRunParameters = { diff --git a/src/language/worker.ts b/src/language/worker.ts index e958cecc..7d64f28a 100644 --- a/src/language/worker.ts +++ b/src/language/worker.ts @@ -1,21 +1,21 @@ -import { parentPort, workerData } from 'worker_threads'; -import { ElectronRuntime } from '@mongosh/browser-runtime-electron'; import { CliServiceProvider, NodeOptions } from '@mongosh/service-provider-server'; -import parseSchema = require('mongodb-schema'); -import { ServerCommands } from './serverCommands'; import { CompletionItemKind } from 'vscode-languageserver'; -import type { OutputItem } from '../utils/types'; +import { EJSON } from 'bson'; +import { ElectronRuntime } from '@mongosh/browser-runtime-electron'; +import parseSchema = require('mongodb-schema'); +import { parentPort, workerData } from 'worker_threads'; -const { EJSON } = require('bson'); +import type { PlaygroundResult, PlaygroundDebug, ShellExecuteAllResult } from '../types/playgroundType'; +import { ServerCommands } from './serverCommands'; type EvaluationResult = { printable: any; type: string | null; }; -type WorkerResult = any; +type WorkerResult = ShellExecuteAllResult; type WorkerError = any | null; const executeAll = async ( @@ -33,7 +33,7 @@ const executeAll = async ( connectionOptions ); - const outputLines: OutputItem[] = []; + const outputLines: PlaygroundDebug = []; // Create a new instance of the runtime and evaluate code from a playground. const runtime: ElectronRuntime = new ElectronRuntime(serviceProvider); runtime.setEvaluationListener({ @@ -56,7 +56,7 @@ const executeAll = async ( typeof printable === 'string' ? printable : JSON.parse(EJSON.stringify(printable)); - const result = { + const result: PlaygroundResult = { namespace, type: type ? type : typeof printable, content diff --git a/src/mdbExtensionController.ts b/src/mdbExtensionController.ts index 7a6ca9d7..e6941646 100644 --- a/src/mdbExtensionController.ts +++ b/src/mdbExtensionController.ts @@ -4,9 +4,18 @@ * Activated from `./src/extension.ts` */ import * as vscode from 'vscode'; + +import ActiveConnectionCodeLensProvider from './editors/activeConnectionCodeLensProvider'; import ConnectionController from './connectionController'; -import launchMongoShell from './commands/launchMongoShell'; +import ConnectionTreeItem from './explorer/connectionTreeItem'; +import { createLogger } from './logging'; +import DatabaseTreeItem from './explorer/databaseTreeItem'; +import DocumentListTreeItem from './explorer/documentListTreeItem'; +import { DocumentSource } from './documentSource'; +import DocumentTreeItem from './explorer/documentTreeItem'; +import EditDocumentCodeLensProvider from './editors/editDocumentCodeLensProvider'; import { EditorsController, PlaygroundController } from './editors'; +import type { EditDocumentInfo } from './types/editDocumentInfoType'; import { ExplorerController, PlaygroundsExplorer, @@ -14,26 +23,18 @@ import { CollectionTreeItem } from './explorer'; import EXTENSION_COMMANDS from './commands'; +import FieldTreeItem from './explorer/fieldTreeItem'; +import IndexListTreeItem from './explorer/indexListTreeItem'; import { LanguageServerController } from './language'; -import TelemetryService from './telemetry/telemetryService'; +import launchMongoShell from './commands/launchMongoShell'; +import SchemaTreeItem from './explorer/schemaTreeItem'; import { StatusView } from './views'; -import { createLogger } from './logging'; import { StorageController, StorageVariables } from './storage'; -import ConnectionTreeItem from './explorer/connectionTreeItem'; -import DatabaseTreeItem from './explorer/databaseTreeItem'; -import SchemaTreeItem from './explorer/schemaTreeItem'; -import DocumentListTreeItem from './explorer/documentListTreeItem'; -import DocumentTreeItem from './explorer/documentTreeItem'; -import WebviewController from './views/webviewController'; -import FieldTreeItem from './explorer/fieldTreeItem'; -import IndexListTreeItem from './explorer/indexListTreeItem'; +import TelemetryService from './telemetry/telemetryService'; +import PartialExecutionCodeLensProvider from './editors/partialExecutionCodeLensProvider'; import PlaygroundsTreeItem from './explorer/playgroundsTreeItem'; import PlaygroundResultProvider from './editors/playgroundResultProvider'; -import ActiveConnectionCodeLensProvider from './editors/activeConnectionCodeLensProvider'; -import PartialExecutionCodeLensProvider from './editors/partialExecutionCodeLensProvider'; -import type { ResultCodeLensInfo } from './utils/types'; -import { DocumentSource } from './utils/documentSource'; -import EditDocumentCodeLensProvider from './editors/editDocumentCodeLensProvider'; +import WebviewController from './views/webviewController'; const log = createLogger('commands'); @@ -186,7 +187,7 @@ export default class MDBExtensionController implements vscode.Disposable { ); this.registerCommand( EXTENSION_COMMANDS.MDB_OPEN_MONGODB_DOCUMENT_FROM_CODE_LENS, - (data: ResultCodeLensInfo) => { + (data: EditDocumentInfo) => { this._telemetryService.trackDocumentOpenedInEditor(data.source); return this._editorsController.openMongoDBDocument(data); diff --git a/src/services/README.md b/src/services/README.md deleted file mode 100644 index 161be5ee..00000000 --- a/src/services/README.md +++ /dev/null @@ -1,5 +0,0 @@ -- completion proivders -- codelens provider -- language service -- playground executor service -- diff --git a/src/telemetry/telemetryService.ts b/src/telemetry/telemetryService.ts index fc3a77e8..89f4451c 100644 --- a/src/telemetry/telemetryService.ts +++ b/src/telemetry/telemetryService.ts @@ -1,18 +1,20 @@ -import * as vscode from 'vscode'; -import { createLogger } from '../logging'; -import SegmentAnalytics from 'analytics-node'; import * as path from 'path'; +import * as util from 'util'; +import * as vscode from 'vscode'; import { config } from 'dotenv'; -import { StorageController } from '../storage'; -import { ConnectionTypes } from '../connectionController'; -import { getCloudInfo } from 'mongodb-cloud-info'; -import { DataServiceType } from '../dataServiceType'; -import type { ExecuteAllResult, CloudInfoResult } from '../utils/types'; -import type { InstanceInfoResult } from '../instanceInfoResultType'; -import { ConnectionModelType } from '../connectionModelType'; -import { DocumentSource } from '../utils/documentSource'; import fs from 'fs'; -import * as util from 'util'; +import { getCloudInfo } from 'mongodb-cloud-info'; +import SegmentAnalytics from 'analytics-node'; + +import type { CloudInfo } from '../types/cloudInfoType'; +import { ConnectionModel } from '../types/connectionModelType'; +import { ConnectionTypes } from '../connectionController'; +import { createLogger } from '../logging'; +import { DataServiceType } from '../types/dataServiceType'; +import { DocumentSource } from '../documentSource'; +import type { InstanceInfoResult } from '../types/instanceInfoResultType'; +import type { ShellExecuteAllResult } from '../types/playgroundType'; +import { StorageController } from '../storage'; const { version } = require('../../package.json'); @@ -33,11 +35,6 @@ export type SegmentProperties = { properties: any; }; -type CloudInfo = { - isPublicCloud?: boolean; - publicCloudName?: string | null; -}; - type LinkClickedTelemetryEventProperties = { screen: string; link_id: string; // eslint-disable-line camelcase @@ -224,14 +221,14 @@ export default class TelemetryService { private async getCloudInfoFromDataService( firstServerHostname: string - ): Promise { + ): Promise<{ isPublicCloud?: boolean; publicCloudName?: string | null }> { if (!this._isTelemetryFeatureEnabled()) { return {}; } try { // eslint-disable-next-line @typescript-eslint/no-unsafe-call - const cloudInfo: CloudInfoResult = (await getCloudInfo(firstServerHostname)) as CloudInfoResult; + const cloudInfo = (await getCloudInfo(firstServerHostname)) as CloudInfo; if (cloudInfo.isAws) { return { @@ -271,7 +268,7 @@ export default class TelemetryService { try { const data = await instance({}) as InstanceInfoResult; - const dataServiceClient = dataService.client as { model: ConnectionModelType }; + const dataServiceClient = dataService.client as { model: ConnectionModel }; if (data) { const firstServerHostname = dataServiceClient.model.hosts[0].host; @@ -312,7 +309,7 @@ export default class TelemetryService { this.track(TelemetryEventTypes.EXTENSION_COMMAND_RUN, { command }); } - getPlaygroundResultType(res: ExecuteAllResult): string { + getPlaygroundResultType(res: ShellExecuteAllResult): string { if (!res || !res.result || !res.result.type) { return 'other'; } @@ -340,7 +337,7 @@ export default class TelemetryService { } trackPlaygroundCodeExecuted( - result: ExecuteAllResult, + result: ShellExecuteAllResult, partial: boolean, error: boolean ): void { diff --git a/src/test/suite/connectionController.test.ts b/src/test/suite/connectionController.test.ts index 49978346..b8faeaec 100644 --- a/src/test/suite/connectionController.test.ts +++ b/src/test/suite/connectionController.test.ts @@ -17,7 +17,7 @@ import { import { StatusView } from '../../views'; import { TestExtensionContext } from './stubs'; import { TEST_DATABASE_URI } from './dbTestHelper'; -import { ConnectionModelType } from '../../connectionModelType'; +import { ConnectionModel } from '../../types/connectionModelType'; const testDatabaseConnectionName = 'localhost:27018'; const testDatabaseURI2WithTimeout = @@ -27,7 +27,7 @@ const sleep = (ms: number): Promise => { return new Promise((resolve) => setTimeout(resolve, ms)); }; -const getConnection = (dbUri): Promise => +const getConnection = (dbUri): Promise => new Promise((resolve, reject) => { Connection.from(dbUri, (err, connectionModel) => { if (err) { @@ -538,7 +538,7 @@ suite('Connection Controller Test Suite', function () { test('"getConnectionNameFromConnectionModel" returns a connection\'s name', () => { const testConnections: { - model: ConnectionModelType; + model: ConnectionModel; name: string; }[] = [ { diff --git a/src/test/suite/editors/collectionDocumentsProvider.test.ts b/src/test/suite/editors/collectionDocumentsProvider.test.ts index 6cfa2a5f..608d81ad 100644 --- a/src/test/suite/editors/collectionDocumentsProvider.test.ts +++ b/src/test/suite/editors/collectionDocumentsProvider.test.ts @@ -3,12 +3,12 @@ import { afterEach } from 'mocha'; import assert from 'assert'; import sinon from 'sinon'; -import { DocumentSource } from '../../../utils/documentSource'; +import { DocumentSource } from '../../../documentSource'; import CollectionDocumentsOperationsStore from '../../../editors/collectionDocumentsOperationsStore'; import CollectionDocumentsProvider, { VIEW_COLLECTION_SCHEME } from '../../../editors/collectionDocumentsProvider'; import Connection from 'mongodb-connection-model/lib/model'; import ConnectionController from '../../../connectionController'; -import { ConnectionModelType } from '../../../connectionModelType'; +import { ConnectionModel } from '../../../types/connectionModelType'; import EditDocumentCodeLensProvider from '../../../editors/editDocumentCodeLensProvider'; import { StatusView } from '../../../views'; import { StorageController } from '../../../storage'; @@ -17,7 +17,7 @@ import TelemetryService from '../../../telemetry/telemetryService'; import { TEST_DATABASE_URI } from '../dbTestHelper'; import { TestExtensionContext, mockTextEditor } from '../stubs'; -const getConnection = (dbUri): Promise => +const getConnection = (dbUri): Promise => new Promise((resolve, reject) => { Connection.from(dbUri, (err, connectionModel) => { if (err) { diff --git a/src/test/suite/editors/editDocumentCodeLensProvider.test.ts b/src/test/suite/editors/editDocumentCodeLensProvider.test.ts index 05ccd45d..218ea117 100644 --- a/src/test/suite/editors/editDocumentCodeLensProvider.test.ts +++ b/src/test/suite/editors/editDocumentCodeLensProvider.test.ts @@ -6,7 +6,7 @@ import { ObjectId } from 'bson'; import sinon from 'sinon'; import ConnectionController from '../../../connectionController'; -import { DocumentSource } from '../../../utils/documentSource'; +import { DocumentSource } from '../../../documentSource'; import EditDocumentCodeLensProvider from '../../../editors/editDocumentCodeLensProvider'; import { mockTextEditor } from '../stubs'; import { StatusView } from '../../../views'; diff --git a/src/test/suite/editors/mongoDBDocumentService.test.ts b/src/test/suite/editors/mongoDBDocumentService.test.ts index 96a32601..bb6ef55b 100644 --- a/src/test/suite/editors/mongoDBDocumentService.test.ts +++ b/src/test/suite/editors/mongoDBDocumentService.test.ts @@ -8,7 +8,7 @@ import { StatusView } from '../../../views'; import TelemetryService from '../../../telemetry/telemetryService'; import { afterEach } from 'mocha'; import { EJSON } from 'bson'; -import { DocumentSource } from '../../../utils/documentSource'; +import { DocumentSource } from '../../../documentSource'; import sinon from 'sinon'; import chai from 'chai'; diff --git a/src/test/suite/language/mongoDBService.test.ts b/src/test/suite/language/mongoDBService.test.ts index 47c2b4d8..0c35fc81 100644 --- a/src/test/suite/language/mongoDBService.test.ts +++ b/src/test/suite/language/mongoDBService.test.ts @@ -1,32 +1,19 @@ -import { - CancellationTokenSource, - CompletionItemKind -} from 'vscode-languageclient'; import { before } from 'mocha'; +import { CancellationTokenSource, CompletionItemKind, CompletionItem } from 'vscode-languageclient'; +import chai from 'chai'; +import { createConnection } from 'vscode-languageserver'; +import fs from 'fs'; +import path from 'path'; -const chai = require('chai'); -const path = require('path'); -const fs = require('fs'); - -import MongoDBService, { - languageServerWorkerFileName -} from '../../../language/mongoDBService'; - +import MongoDBService, { languageServerWorkerFileName } from '../../../language/mongoDBService'; import { mdbTestExtension } from '../stubbableMdbExtension'; +import { TestStream } from '../stubs'; const expect = chai.expect; const INCREASED_TEST_TIMEOUT = 5000; suite('MongoDBService Test Suite', () => { - const connection = { - console: { log: (): void => {} }, - sendRequest: (): void => {}, - sendNotification: (): void => {} - }; - const params = { - connectionString: 'mongodb://localhost:27018', - extensionPath: mdbTestExtension.testExtensionContext.extensionPath - }; + const params = { connectionString: 'mongodb://localhost:27018' }; test('the language server worker dependency bundle exists', () => { const languageServerModuleBundlePath = path.join( @@ -39,10 +26,53 @@ suite('MongoDBService Test Suite', () => { expect(fs.existsSync(languageServerModuleBundlePath)).to.equal(true); }); + suite('Extension path', () => { + const up = new TestStream(); + const down = new TestStream(); + const connection = createConnection(up, down); + + connection.listen(); + + const testMongoDBService = new MongoDBService(connection); + + before(async () => { + testMongoDBService._extensionPath = ''; + await testMongoDBService.connectToServiceProvider(params); + }); + + test('catches error when executeAll is called and extension path is empty string', async () => { + const source = new CancellationTokenSource(); + const result = await testMongoDBService.executeAll( + { codeToEvaluate: '1 + 1' }, + source.token + ); + + expect(result).to.be.equal(undefined); + }); + + test('catches error when _getCollectionsCompletionItems is called and extension path is empty string', async () => { + const result = await testMongoDBService._getCollectionsCompletionItems('testDB'); + + expect(result).to.be.equal(false); + }); + + test('catches error when _getFieldsCompletionItems is called and extension path is empty string', async () => { + const result = await testMongoDBService._getFieldsCompletionItems('testDB', 'testCol'); + + expect(result).to.be.equal(false); + }); + }); + suite('Connect', () => { - test('connect and disconnect from cli service provider', async () => { - const testMongoDBService = new MongoDBService(connection); + const up = new TestStream(); + const down = new TestStream(); + const connection = createConnection(up, down); + + connection.listen(); + + const testMongoDBService = new MongoDBService(connection); + test('connect and disconnect from cli service provider', async () => { await testMongoDBService.connectToServiceProvider(params); expect(testMongoDBService.connectionString).to.be.equal( @@ -57,11 +87,15 @@ suite('MongoDBService Test Suite', () => { }); suite('Complete', () => { - let testMongoDBService: MongoDBService; + const up = new TestStream(); + const down = new TestStream(); + const connection = createConnection(up, down); - before(async () => { - testMongoDBService = new MongoDBService(connection); + connection.listen(); + + const testMongoDBService = new MongoDBService(connection); + before(async () => { testMongoDBService._getDatabasesCompletionItems = (): void => {}; testMongoDBService._getCollectionsCompletionItems = (): Promise => Promise.resolve(true); @@ -76,9 +110,7 @@ suite('MongoDBService Test Suite', () => { 'db.test.', { line: 0, character: 8 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'find' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'find'); expect(findCompletion).to.have.property( 'kind', @@ -91,9 +123,7 @@ suite('MongoDBService Test Suite', () => { 'const name = () => { db.test. }', { line: 0, character: 29 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'find' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'find'); expect(findCompletion).to.have.property( 'kind', @@ -106,9 +136,7 @@ suite('MongoDBService Test Suite', () => { ['use("test");', 'db["test"].'].join('\n'), { line: 1, character: 11 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'find' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'find'); expect(findCompletion).to.have.property( 'kind', @@ -121,9 +149,7 @@ suite('MongoDBService Test Suite', () => { ["use('test');", "db['test']."].join('\n'), { line: 1, character: 11 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'find' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'find'); expect(findCompletion).to.have.property( 'kind', @@ -136,10 +162,7 @@ suite('MongoDBService Test Suite', () => { line: 0, character: 3 }); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => - itme.label === 'getCollectionNames' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'getCollectionNames'); expect(findCompletion).to.have.property( 'kind', @@ -155,10 +178,7 @@ suite('MongoDBService Test Suite', () => { character: 1 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => - itme.label === 'getCollectionNames' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'getCollectionNames'); expect(findCompletion).to.have.property( 'kind', @@ -171,10 +191,7 @@ suite('MongoDBService Test Suite', () => { line: 0, character: 4 }); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => - itme.label === 'getCollectionNames' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'getCollectionNames'); expect(findCompletion).to.have.property( 'kind', @@ -187,13 +204,8 @@ suite('MongoDBService Test Suite', () => { 'db.collection.aggregate().', { line: 0, character: 26 } ); - const aggCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'toArray' - ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => - itme.label === 'allowPartialResults' - ); + const aggCompletion = result.find((itme: CompletionItem) => itme.label === 'toArray'); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'allowPartialResults'); expect(aggCompletion).to.have.property('kind', CompletionItemKind.Method); expect(findCompletion).to.be.undefined; @@ -204,10 +216,7 @@ suite('MongoDBService Test Suite', () => { 'db.collection.find().', { line: 0, character: 21 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => - itme.label === 'allowPartialResults' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'allowPartialResults'); expect(findCompletion).to.have.property( 'kind', @@ -222,10 +231,7 @@ suite('MongoDBService Test Suite', () => { ), { line: 2, character: 36 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => - itme.label === 'allowPartialResults' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'allowPartialResults'); expect(findCompletion).to.have.property( 'kind', @@ -244,10 +250,7 @@ suite('MongoDBService Test Suite', () => { ].join('\n'), { line: 4, character: 3 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => - itme.label === 'allowPartialResults' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'allowPartialResults'); expect(findCompletion).to.have.property( 'kind', @@ -267,9 +270,7 @@ suite('MongoDBService Test Suite', () => { 'use("test"); db.collection.find({ j});', { line: 0, character: 35 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); expect(findCompletion).to.have.property('kind', CompletionItemKind.Field); }); @@ -286,9 +287,7 @@ suite('MongoDBService Test Suite', () => { 'use("test");db.collection.find({j});', { line: 0, character: 33 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); expect(findCompletion).to.have.property('kind', CompletionItemKind.Field); }); @@ -310,9 +309,7 @@ suite('MongoDBService Test Suite', () => { ].join('\n'), { line: 2, character: 24 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); expect(findCompletion).to.have.property('kind', CompletionItemKind.Field); }); @@ -329,9 +326,7 @@ suite('MongoDBService Test Suite', () => { ['use("test");', '', 'db.collection.find({', ' j', '});'].join('\n'), { line: 3, character: 3 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); expect(findCompletion).to.have.property('kind', CompletionItemKind.Field); }); @@ -348,9 +343,7 @@ suite('MongoDBService Test Suite', () => { 'use("test"); db.collection.find({ j });', { line: 0, character: 35 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); expect(findCompletion).to.have.property('kind', CompletionItemKind.Field); }); @@ -374,12 +367,8 @@ suite('MongoDBService Test Suite', () => { { line: 0, character: 51 } ); - const jsCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); - const tsCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'TypeScript' - ); + const jsCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); + const tsCompletion = result.find((itme: CompletionItem) => itme.label === 'TypeScript'); expect(jsCompletion).to.be.undefined; expect(tsCompletion).to.have.property('kind', CompletionItemKind.Field); @@ -397,10 +386,7 @@ suite('MongoDBService Test Suite', () => { 'use("test"); const name = () => { db.collection.find({ j}); }', { line: 0, character: 56 } ); - - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); expect(findCompletion).to.have.property('kind', CompletionItemKind.Field); }); @@ -417,10 +403,7 @@ suite('MongoDBService Test Suite', () => { 'use("test"); db.collection.aggregate([ { $match: { j} } ])', { line: 0, character: 52 } ); - - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); expect(findCompletion).to.have.property('kind', CompletionItemKind.Field); }); @@ -443,10 +426,7 @@ suite('MongoDBService Test Suite', () => { 'use("test"); db.firstCollection.find({ j});', { line: 0, character: 40 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => - itme.label === 'JavaScript First' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript First'); expect(findCompletion).to.have.property('kind', CompletionItemKind.Field); }); @@ -463,9 +443,7 @@ suite('MongoDBService Test Suite', () => { 'db.collection.find({ j});', { line: 0, character: 22 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); expect(findCompletion).to.be.undefined; }); @@ -482,9 +460,7 @@ suite('MongoDBService Test Suite', () => { 'use("test"); db.collection(j);', { line: 0, character: 28 } ); - const findCompletion = result.find( - (itme: { label: string; kind: number }) => itme.label === 'JavaScript' - ); + const findCompletion = result.find((itme: CompletionItem) => itme.label === 'JavaScript'); expect(findCompletion).to.be.undefined; }); @@ -582,9 +558,7 @@ suite('MongoDBService Test Suite', () => { 'use("test"); db.', { line: 0, character: 16 } ); - const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'empty' - ); + const findCollectionCompletion = result.find((itme: CompletionItem) => itme.label === 'empty'); expect(findCollectionCompletion).to.have.property( 'kind', @@ -603,9 +577,7 @@ suite('MongoDBService Test Suite', () => { "use('berlin'); db.", { line: 0, character: 18 } ); - const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'coll-name' - ); + const findCollectionCompletion = result.find((itme: CompletionItem) => itme.label === 'coll-name'); expect(findCollectionCompletion).to.have.property( 'kind', @@ -626,9 +598,7 @@ suite('MongoDBService Test Suite', () => { ["use('berlin');", '', 'let a = db.'].join('\n'), { line: 2, character: 11 } ); - const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'cocktailbars' - ); + const findCollectionCompletion = result.find((itme: CompletionItem) => itme.label === 'cocktailbars'); expect(findCollectionCompletion).to.have.property( 'label', @@ -651,12 +621,8 @@ suite('MongoDBService Test Suite', () => { "use('berlin'); db.", { line: 0, character: 18 } ); - const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'coll-name' - ); - const findShellCompletion = result.find( - (itme: any) => itme.label === 'getCollectionNames' - ); + const findCollectionCompletion = result.find((itme: CompletionItem) => itme.label === 'coll-name'); + const findShellCompletion = result.find((itme: CompletionItem) => itme.label === 'getCollectionNames'); expect(findCollectionCompletion).to.have.property( 'kind', @@ -685,15 +651,9 @@ suite('MongoDBService Test Suite', () => { ].join('\n'), { line: 4, character: 3 } ); - const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'cocktailbars' - ); - const findShellCompletion = result.find( - (itme: any) => itme.label === 'getCollectionNames' - ); - const findCursorCompletion = result.find( - (itme: any) => itme.label === 'toArray' - ); + const findCollectionCompletion = result.find((itme: CompletionItem) => itme.label === 'cocktailbars'); + const findShellCompletion = result.find((itme: CompletionItem) => itme.label === 'getCollectionNames'); + const findCursorCompletion = result.find((itme: CompletionItem) => itme.label === 'toArray'); expect(findCollectionCompletion).to.have.property( 'kind', @@ -724,13 +684,13 @@ suite('MongoDBService Test Suite', () => { { line: 4, character: 3 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'cocktailbars' + (itme: CompletionItem) => itme.label === 'cocktailbars' ); const findShellCompletion = result.find( - (itme: any) => itme.label === 'getCollectionNames' + (itme: CompletionItem) => itme.label === 'getCollectionNames' ); const findCursorCompletion = result.find( - (itme: any) => itme.label === 'toArray' + (itme: CompletionItem) => itme.label === 'toArray' ); expect(findCollectionCompletion).to.have.property( @@ -756,13 +716,13 @@ suite('MongoDBService Test Suite', () => { { line: 0, character: 18 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'cocktails' + (itme: CompletionItem) => itme.label === 'cocktails' ); const findShellCompletion = result.find( - (itme: any) => itme.label === 'getCollectionNames' + (itme: CompletionItem) => itme.label === 'getCollectionNames' ); const findCursorCompletion = result.find( - (itme: any) => itme.label === 'close' + (itme: CompletionItem) => itme.label === 'close' ); expect(findCollectionCompletion).to.have.property( @@ -785,7 +745,7 @@ suite('MongoDBService Test Suite', () => { { line: 0, character: 18 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'coll-name' + (itme: CompletionItem) => itme.label === 'coll-name' ); expect(findCollectionCompletion) @@ -805,7 +765,7 @@ suite('MongoDBService Test Suite', () => { { line: 3, character: 3 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'collection' + (itme: CompletionItem) => itme.label === 'collection' ); expect(findCollectionCompletion).to.have.property('label', 'collection'); @@ -827,7 +787,7 @@ suite('MongoDBService Test Suite', () => { { line: 3, character: 3 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'collection' + (itme: CompletionItem) => itme.label === 'collection' ); expect(findCollectionCompletion).to.have.property('label', 'collection'); @@ -849,7 +809,7 @@ suite('MongoDBService Test Suite', () => { { line: 5, character: 3 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'collection' + (itme: CompletionItem) => itme.label === 'collection' ); expect(findCollectionCompletion).to.have.property('label', 'collection'); @@ -871,7 +831,7 @@ suite('MongoDBService Test Suite', () => { { line: 2, character: 3 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'collection' + (itme: CompletionItem) => itme.label === 'collection' ); expect(findCollectionCompletion).to.have.property('label', 'collection'); @@ -893,7 +853,7 @@ suite('MongoDBService Test Suite', () => { { line: 2, character: 3 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'collection' + (itme: CompletionItem) => itme.label === 'collection' ); expect(findCollectionCompletion).to.have.property('label', 'collection'); @@ -915,7 +875,7 @@ suite('MongoDBService Test Suite', () => { { line: 4, character: 6 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'collection' + (itme: CompletionItem) => itme.label === 'collection' ); expect(findCollectionCompletion).to.have.property('label', 'collection'); @@ -937,7 +897,7 @@ suite('MongoDBService Test Suite', () => { { line: 2, character: 3 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'collection' + (itme: CompletionItem) => itme.label === 'collection' ); expect(findCollectionCompletion).to.have.property('label', 'collection'); @@ -959,7 +919,7 @@ suite('MongoDBService Test Suite', () => { { line: 2, character: 3 } ); const findCollectionCompletion = result.find( - (itme: any) => itme.label === 'collection' + (itme: CompletionItem) => itme.label === 'collection' ); expect(findCollectionCompletion).to.have.property('label', 'collection'); @@ -970,20 +930,23 @@ suite('MongoDBService Test Suite', () => { }); }); - suite('Evaluate', () => { - let testMongoDBService: MongoDBService; + suite('Evaluate', function () { + this.timeout(INCREASED_TEST_TIMEOUT); + + const up = new TestStream(); + const down = new TestStream(); + const connection = createConnection(up, down); - before(async function () { - this.timeout(INCREASED_TEST_TIMEOUT); + connection.listen(); - testMongoDBService = new MongoDBService(connection); + const testMongoDBService = new MongoDBService(connection); + before(async () => { + testMongoDBService._extensionPath = mdbTestExtension.testExtensionContext.extensionPath; await testMongoDBService.connectToServiceProvider(params); }); - test('evaluate should sum numbers', async function () { - this.timeout(INCREASED_TEST_TIMEOUT); - + test('evaluate should sum numbers', async () => { const source = new CancellationTokenSource(); const result = await testMongoDBService.executeAll( { @@ -999,9 +962,7 @@ suite('MongoDBService Test Suite', () => { expect(result).to.deep.equal(expectedResult); }); - test('evaluate multiplies commands at once', async function () { - this.timeout(INCREASED_TEST_TIMEOUT); - + test('evaluate multiplies commands at once', async () => { const source = new CancellationTokenSource(); const result = await testMongoDBService.executeAll( { @@ -1017,9 +978,7 @@ suite('MongoDBService Test Suite', () => { expect(result).to.deep.equal(expectedResult); }); - test('create each time a new runtime', async function () { - this.timeout(INCREASED_TEST_TIMEOUT); - + test('create each time a new runtime', async () => { const source = new CancellationTokenSource(); const firstEvalResult = await testMongoDBService.executeAll( { @@ -1048,9 +1007,7 @@ suite('MongoDBService Test Suite', () => { expect(secondEvalResult).to.deep.equal(secondRes); }); - test('evaluate returns valid EJSON', async function () { - this.timeout(INCREASED_TEST_TIMEOUT); - + test('evaluate returns valid EJSON', async () => { const source = new CancellationTokenSource(); const result = await testMongoDBService.executeAll( { @@ -1076,9 +1033,7 @@ suite('MongoDBService Test Suite', () => { expect(result).to.deep.equal(expectedResult); }); - test('evaluate returns single line strings', async function () { - this.timeout(INCREASED_TEST_TIMEOUT); - + test('evaluate returns single line strings', async () => { const source = new CancellationTokenSource(); const result = await testMongoDBService.executeAll( { @@ -1099,9 +1054,7 @@ suite('MongoDBService Test Suite', () => { expect(result).to.deep.equal(expectedResult); }); - test('evaluate returns multiline strings', async function () { - this.timeout(INCREASED_TEST_TIMEOUT); - + test('evaluate returns multiline strings', async () => { const source = new CancellationTokenSource(); const result = await testMongoDBService.executeAll( { @@ -1126,9 +1079,7 @@ suite('MongoDBService Test Suite', () => { expect(result).to.deep.equal(expectedResult); }); - test('includes results from print() and console.log()', async function () { - this.timeout(INCREASED_TEST_TIMEOUT); - + test('includes results from print() and console.log()', async () => { const source = new CancellationTokenSource(); const result = await testMongoDBService.executeAll( { diff --git a/src/test/suite/stubs.ts b/src/test/suite/stubs.ts index ab7c96d0..702a0bc4 100644 --- a/src/test/suite/stubs.ts +++ b/src/test/suite/stubs.ts @@ -1,9 +1,11 @@ import * as vscode from 'vscode'; +import { CancellationTokenSource } from 'vscode-languageclient'; +import { Duplex } from 'stream'; import path = require('path'); -import { CancellationTokenSource } from 'vscode-languageclient'; import { StorageController } from '../../storage'; -import type { ExecuteAllResult } from '../../utils/types'; + +import type { ShellExecuteAllResult } from '../../types/playgroundType'; // Bare mock of the extension context for vscode. class TestExtensionContext implements vscode.ExtensionContext { @@ -220,7 +222,7 @@ class MockLanguageServerController { return; } - async executeAll(/* codeToEvaluate: string*/): Promise { + async executeAll(/* codeToEvaluate: string*/): Promise { return Promise.resolve({ outputLines: [], result: { namespace: null, type: null, content: 'Result' } @@ -248,6 +250,15 @@ class MockLanguageServerController { } } +class TestStream extends Duplex { + _write(chunk: string, _encoding: string, done: () => void) { + this.emit('data', chunk); + done(); + } + + _read() {} +} + export { mockSelection, mockDocuments, @@ -257,5 +268,6 @@ export { mockVSCodeTextDocument, DataServiceStub, TestExtensionContext, - MockLanguageServerController + MockLanguageServerController, + TestStream }; diff --git a/src/test/suite/telemetry/telemetryService.test.ts b/src/test/suite/telemetry/telemetryService.test.ts index b69ee46a..c55f8fbe 100644 --- a/src/test/suite/telemetry/telemetryService.test.ts +++ b/src/test/suite/telemetry/telemetryService.test.ts @@ -17,7 +17,7 @@ import { SegmentProperties, TelemetryEventTypes } from '../../../telemetry/telemetryService'; -import { DocumentSource } from '../../../utils/documentSource'; +import { DocumentSource } from '../../../documentSource'; import { mdbTestExtension } from '../stubbableMdbExtension'; const { version } = require('../../../../package.json'); diff --git a/src/types/cloudInfoType.ts b/src/types/cloudInfoType.ts new file mode 100644 index 00000000..4140a612 --- /dev/null +++ b/src/types/cloudInfoType.ts @@ -0,0 +1,5 @@ +export type CloudInfo = { + isAws: boolean; + isGcp: boolean; + isAzure: boolean; +}; diff --git a/src/types/collectionItemType.ts b/src/types/collectionItemType.ts new file mode 100644 index 00000000..b0e22ccc --- /dev/null +++ b/src/types/collectionItemType.ts @@ -0,0 +1,7 @@ +export type CollectionItem = { + name: string; + type?: string; + options?: object, + info?: { readOnly: boolean; uuid: object[] }, + idIndex?: { v: number; key: object[]; name: string; ns: string } +}; diff --git a/src/types/connectionModelType.ts b/src/types/connectionModelType.ts new file mode 100644 index 00000000..bdaa2fdd --- /dev/null +++ b/src/types/connectionModelType.ts @@ -0,0 +1,24 @@ +import { EJSON } from 'bson'; +import { Host } from '../views/webview-app/connection-model/connection-model'; +import SSH_TUNNEL_TYPES from '../views/webview-app/connection-model/constants/ssh-tunnel-types'; + +export type ConnectionModel = { + appname: string; + hosts: Host[]; + hostname: string; + isSrvRecord: boolean; + port: number; + driverUrl: string; + driverUrlWithSsh: string; + sshTunnel?: SSH_TUNNEL_TYPES; + getAttributes(options?: EJSON.SerializableTypes): { + driverUrl: string; + driverUrlWithSsh: string; + driverOptions: EJSON.SerializableTypes; + sshTunnelOptions: { + host?: string; + port?: number; + }; + }; + disconnect(callback: (n: Error | undefined) => void): void; +}; diff --git a/src/types/connectionOptionsType.ts b/src/types/connectionOptionsType.ts new file mode 100644 index 00000000..6eeac189 --- /dev/null +++ b/src/types/connectionOptionsType.ts @@ -0,0 +1,13 @@ +export type ConnectionOptions = { + appname?: string; + auth?: { + user: string; + password: string; + }; + authSource?: string; + authMechanism?: string; + sslCA?: string; + sslKey?: string; + sslCert?: string; + sslPass?: string; +}; diff --git a/src/dataServiceType.ts b/src/types/dataServiceType.ts similarity index 100% rename from src/dataServiceType.ts rename to src/types/dataServiceType.ts diff --git a/src/types/editDocumentInfoType.ts b/src/types/editDocumentInfoType.ts new file mode 100644 index 00000000..c5c9f763 --- /dev/null +++ b/src/types/editDocumentInfoType.ts @@ -0,0 +1,10 @@ +import { EJSON } from 'bson'; +import { DocumentSource } from '../documentSource'; + +export type EditDocumentInfo = { + source: DocumentSource; + line: number; + documentId: EJSON.SerializableTypes; + namespace: string; + connectionId: string | null; +}; diff --git a/src/instanceInfoResultType.ts b/src/types/instanceInfoResultType.ts similarity index 100% rename from src/instanceInfoResultType.ts rename to src/types/instanceInfoResultType.ts diff --git a/src/types/playgroundType.ts b/src/types/playgroundType.ts new file mode 100644 index 00000000..cc472cba --- /dev/null +++ b/src/types/playgroundType.ts @@ -0,0 +1,18 @@ +export type OutputItem = { + namespace: string | null; + type: string | null; + content: any; +}; + +export type PlaygroundDebug = OutputItem[] | undefined; + +export type PlaygroundResult = OutputItem | undefined; + +export type ShellExecuteAllResult = { + outputLines: PlaygroundDebug; + result: PlaygroundResult +} | undefined; + +export type PlaygroundExecuteParameters = { + codeToEvaluate: string; +}; diff --git a/src/utils/types.ts b/src/utils/types.ts deleted file mode 100644 index 7ad69e97..00000000 --- a/src/utils/types.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { EJSON } from 'bson'; -import { DocumentSource } from './documentSource'; - -export type OutputItem = { - namespace: string | null; - type: string | null; - content: any; -}; - -export type ExecuteAllResult = { - outputLines: OutputItem[] | undefined; - result: OutputItem | undefined; -}; - -export type ResultCodeLensInfo = { - source: DocumentSource; - line: number; - documentId: EJSON.SerializableTypes; - namespace: string; - connectionId: string | null; -}; - -export type CloudInfoResult = { - isAws: boolean; - isGcp: boolean; - isAzure: boolean; -};