From bcb63b9099e58cb8c4cc899f571d81c02cfb9cde Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 23 Jan 2023 19:46:21 +0100 Subject: [PATCH 01/31] feat: replace mongodb language with javascript in playgrounds --- package.json | 47 +++++----------- .../activeConnectionCodeLensProvider.ts | 13 +++++ src/editors/codeActionProvider.ts | 11 +++- src/editors/editorsController.ts | 4 +- src/editors/playgroundController.ts | 56 ++++++++++--------- src/language/languageServerController.ts | 4 +- 6 files changed, 71 insertions(+), 64 deletions(-) diff --git a/package.json b/package.json index 87f9910b1..34bfb74f1 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "onView:mongoDBConnectionExplorer", "onView:mongoDBPlaygroundsExplorer", "onLanguage:json", - "onLanguage:mongodb" + "onLanguage:javasript" ], "contributes": { "viewsContainers": { @@ -125,17 +125,6 @@ } ], "languages": [ - { - "id": "mongodb", - "aliases": [ - "MongoDB", - "mongodb" - ], - "extensions": [ - ".mongodb" - ], - "configuration": "./languages/mongodb-language-configuration.json" - }, { "id": "terraform", "aliases": [ @@ -147,18 +136,7 @@ ] } ], - "grammars": [ - { - "language": "mongodb", - "path": "./syntaxes/mongodb.tmLanguage.json", - "scopeName": "source.mongodb" - } - ], "snippets": [ - { - "language": "mongodb", - "path": "./snippets/stage-autocompleter.json" - }, { "language": "terraform", "path": "./snippets/atlas-terraform.json" @@ -632,7 +610,7 @@ { "command": "mdb.runPlayground", "group": "navigation", - "when": "editorLangId == mongodb" + "when": "mdb.showRunPlaygroundButton == true" } ], "commandPalette": [ @@ -642,27 +620,27 @@ }, { "command": "mdb.runSelectedPlaygroundBlocks", - "when": "editorLangId == mongodb" + "when": "mdb.showRunPlaygroundButton == true" }, { "command": "mdb.runAllPlaygroundBlocks", - "when": "editorLangId == mongodb" + "when": "mdb.showRunPlaygroundButton == true" }, { "command": "mdb.exportToPython", - "when": "editorLangId == mongodb" + "when": "mdb.showRunPlaygroundButton == true" }, { "command": "mdb.exportToJava", - "when": "editorLangId == mongodb" + "when": "mdb.showRunPlaygroundButton == true" }, { "command": "mdb.exportToCsharp", - "when": "editorLangId == mongodb" + "when": "mdb.showRunPlaygroundButton == true" }, { "command": "mdb.exportToNode", - "when": "editorLangId == mongodb" + "when": "mdb.showRunPlaygroundButton == true" }, { "command": "mdb.refreshPlaygroundsFromTreeView", @@ -815,13 +793,13 @@ "command": "mdb.runSelectedPlaygroundBlocks", "key": "ctrl+alt+s", "mac": "cmd+alt+s", - "when": "editorLangId == mongodb" + "when": "mdb.showRunPlaygroundButton == true" }, { "command": "mdb.runAllPlaygroundBlocks", "key": "ctrl+alt+r", "mac": "cmd+alt+r", - "when": "editorLangId == mongodb" + "when": "mdb.showRunPlaygroundButton == true" }, { "command": "mdb.saveMongoDBDocument", @@ -1032,10 +1010,11 @@ "@types/react-dom": "^17.0.17", "@types/sinon": "^9.0.11", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.71.0", + "@types/vscode": "^1.74.0", "@typescript-eslint/eslint-plugin": "^5.38.0", "@typescript-eslint/parser": "^5.38.0", "@vscode/test-electron": "^2.1.5", + "@vscode/vsce": "^2.16.0", "autoprefixer": "^9.8.8", "buffer": "^6.0.3", "chai": "^4.3.6", @@ -1085,7 +1064,7 @@ "ts-loader": "^9.4.1", "ts-node": "^10.9.1", "typescript": "^4.8.3", - "vsce": "^2.11.0", + "vscode-html-languageservice": "^5.0.3", "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "xvfb-maybe": "^0.2.1", diff --git a/src/editors/activeConnectionCodeLensProvider.ts b/src/editors/activeConnectionCodeLensProvider.ts index 0013db8e3..4e61ddc5b 100644 --- a/src/editors/activeConnectionCodeLensProvider.ts +++ b/src/editors/activeConnectionCodeLensProvider.ts @@ -1,4 +1,5 @@ import * as vscode from 'vscode'; +import { TextEditor } from 'vscode'; import EXTENSION_COMMANDS from '../commands'; import ConnectionController from '../connectionController'; @@ -8,6 +9,7 @@ export default class ActiveConnectionCodeLensProvider _connectionController: ConnectionController; _onDidChangeCodeLenses: vscode.EventEmitter = new vscode.EventEmitter(); + _activeTextEditor?: TextEditor; readonly onDidChangeCodeLenses: vscode.Event = this._onDidChangeCodeLenses.event; @@ -18,6 +20,12 @@ export default class ActiveConnectionCodeLensProvider vscode.workspace.onDidChangeConfiguration(() => { this._onDidChangeCodeLenses.fire(); }); + + vscode.window.onDidChangeActiveTextEditor((editor: vscode.TextEditor | undefined) => { + if (editor?.document.languageId !== 'Log') { + this._activeTextEditor = editor; + } + }); } refresh(): void { @@ -25,6 +33,11 @@ export default class ActiveConnectionCodeLensProvider } provideCodeLenses(): vscode.CodeLens[] { + const editorUri = this._activeTextEditor?.document.uri; + if (editorUri?.fragment !== 'mongodb' && editorUri?.path.split('.').pop() !== 'mongodb') { + return []; + } + const codeLens = new vscode.CodeLens(new vscode.Range(0, 0, 0, 0)); let message = ''; diff --git a/src/editors/codeActionProvider.ts b/src/editors/codeActionProvider.ts index 453339f64..017e0f439 100644 --- a/src/editors/codeActionProvider.ts +++ b/src/editors/codeActionProvider.ts @@ -1,4 +1,5 @@ import * as vscode from 'vscode'; +import { TextEditor } from 'vscode'; import EXTENSION_COMMANDS from '../commands'; import { ExportToLanguageMode } from '../types/playgroundType'; @@ -8,6 +9,7 @@ export default class CodeActionProvider implements vscode.CodeActionProvider { new vscode.EventEmitter(); selection?: vscode.Selection; mode?: ExportToLanguageMode; + _activeTextEditor?: TextEditor; static readonly providedCodeActionKinds = [vscode.CodeActionKind.QuickFix]; @@ -15,6 +17,12 @@ export default class CodeActionProvider implements vscode.CodeActionProvider { vscode.workspace.onDidChangeConfiguration(() => { this._onDidChangeCodeCodeAction.fire(); }); + + vscode.window.onDidChangeActiveTextEditor((editor: vscode.TextEditor | undefined) => { + if (editor?.document.languageId !== 'Log') { + this._activeTextEditor = editor; + } + }); } readonly onDidChangeCodeLenses: vscode.Event = @@ -33,7 +41,8 @@ export default class CodeActionProvider implements vscode.CodeActionProvider { } provideCodeActions(): vscode.CodeAction[] | undefined { - if (!this.selection) { + const editorUri = this._activeTextEditor?.document.uri; + if (!this.selection || (editorUri?.fragment !== 'mongodb' && editorUri?.path.split('.').pop() !== 'mongodb')) { return; } diff --git a/src/editors/editorsController.ts b/src/editors/editorsController.ts index caa8ed2d6..af7fec2f7 100644 --- a/src/editors/editorsController.ts +++ b/src/editors/editorsController.ts @@ -400,7 +400,7 @@ export default class EditorsController { ); this._context.subscriptions.push( vscode.languages.registerCodeLensProvider( - { language: 'mongodb' }, + { language: 'javascript' }, this._activeConnectionCodeLensProvider ) ); @@ -432,7 +432,7 @@ export default class EditorsController { ); this._context.subscriptions.push( vscode.languages.registerCodeActionsProvider( - 'mongodb', + 'javascript', this._codeActionProvider, { providedCodeActionKinds: CodeActionProvider.providedCodeActionKinds, diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index f19bfd41b..5093becaf 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -2,6 +2,9 @@ import * as vscode from 'vscode'; import { OutputChannel, ProgressLocation, TextEditor } from 'vscode'; import vm from 'vm'; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import * as util from 'util'; + import ActiveConnectionCodeLensProvider from './activeConnectionCodeLensProvider'; import CodeActionProvider from './codeActionProvider'; import ConnectionController, { @@ -151,6 +154,12 @@ export default class PlaygroundController { this._playgroundResultTextDocument = editor?.document; } + if (editor?.document.uri.fragment === 'mongodb' || editor?.document.uri.path.split('.').pop() === 'mongodb') { + void vscode.commands.executeCommand('setContext', 'mdb.showRunPlaygroundButton', true); + } else { + void vscode.commands.executeCommand('setContext', 'mdb.showRunPlaygroundButton', false); + } + if (editor?.document.languageId !== 'Log') { this._activeTextEditor = editor; log.info('Active editor path', editor?.document.uri?.path); @@ -162,7 +171,7 @@ export default class PlaygroundController { vscode.window.onDidChangeTextEditorSelection( async (changeEvent: vscode.TextEditorSelectionChangeEvent) => { - if (changeEvent?.textEditor?.document?.languageId !== 'mongodb') { + if (changeEvent?.textEditor?.document?.uri.fragment !== 'mongodb') { return; } @@ -230,12 +239,24 @@ export default class PlaygroundController { content: string | undefined ): Promise { try { - const document = await vscode.workspace.openTextDocument({ - language: 'mongodb', - content, - }); + // Create untitled file. + const numberUntitledDocuments = vscode.workspace.textDocuments.filter((doc) => (doc.uri.scheme === 'untitled')).length; + const fileName = `Untitled-${numberUntitledDocuments + 1}`; + const newUri = vscode.Uri.file(fileName).with({ scheme: 'untitled', fragment: 'mongodb' }); - await vscode.window.showTextDocument(document); + const document = await vscode.workspace.openTextDocument(newUri); + await vscode.languages.setTextDocumentLanguage( + document, + 'javascript' + ); + + // Fill in initial content. + const edit = new vscode.WorkspaceEdit(); + edit.insert(newUri, new vscode.Position(0, 0), `${content}`); + await vscode.workspace.applyEdit(edit); + + // Actually show the editor. + await vscode.commands.executeCommand('vscode.open', newUri); return true; } catch (error) { @@ -302,23 +323,8 @@ export default class PlaygroundController { const useDefaultTemplate = !!vscode.workspace .getConfiguration('mdb') .get('useDefaultTemplateForPlayground'); - - try { - const document = await vscode.workspace.openTextDocument({ - language: 'mongodb', - content: useDefaultTemplate ? playgroundTemplate : '', - }); - - await vscode.window.showTextDocument(document); - - return true; - } catch (error) { - void vscode.window.showErrorMessage( - `Unable to create a playground: ${formatError(error).message}` - ); - - return false; - } + const content = useDefaultTemplate ? playgroundTemplate : ''; + return this._createPlaygroundFileWithContent(content); } async _evaluate(codeToEvaluate: string): Promise { @@ -538,7 +544,7 @@ export default class PlaygroundController { runAllPlaygroundBlocks(): Promise { if ( !this._activeTextEditor || - this._activeTextEditor.document.languageId !== 'mongodb' + this._activeTextEditor.document.uri.fragment !== 'mongodb' ) { void vscode.window.showErrorMessage( "Please open a '.mongodb' playground file before running it." @@ -556,7 +562,7 @@ export default class PlaygroundController { runAllOrSelectedPlaygroundBlocks(): Promise { if ( !this._activeTextEditor || - this._activeTextEditor.document.languageId !== 'mongodb' + this._activeTextEditor.document.uri.fragment !== 'mongodb' ) { void vscode.window.showErrorMessage( "Please open a '.mongodb' playground file before running it." diff --git a/src/language/languageServerController.ts b/src/language/languageServerController.ts index c079fa0b2..749d7697b 100644 --- a/src/language/languageServerController.ts +++ b/src/language/languageServerController.ts @@ -61,8 +61,8 @@ export default class LanguageServerController { const clientOptions: LanguageClientOptions = { // Register the server for mongodb documents documentSelector: [ - { scheme: 'untitled', language: 'mongodb' }, - { scheme: 'file', language: 'mongodb' }, + { scheme: 'untitled', language: 'javascript' }, + { scheme: 'file', language: 'javascript' }, ], synchronize: { // Notify the server about file changes in the workspace From 74411256776bd50f01bdb764863f9e233b2ec815 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 24 Jan 2023 12:41:18 +0100 Subject: [PATCH 02/31] feat: use js grammar only --- .prettierignore | 1 - CONTRIBUTING.md | 1 - package.json | 20 +- scripts/update-grammar.ts | 60 - src/editors/playgroundController.ts | 21 +- .../playgroundCloneDocumentTemplate.ts | 3 +- .../playgroundCreateCollectionTemplate.ts | 3 +- .../playgroundCreateIndexTemplate.ts | 3 +- src/templates/playgroundSearchTemplate.ts | 3 +- src/templates/playgroundTemplate.ts | 3 +- syntaxes/mongodb.tmLanguage.json | 7263 ----------------- 11 files changed, 33 insertions(+), 7348 deletions(-) delete mode 100755 scripts/update-grammar.ts delete mode 100644 syntaxes/mongodb.tmLanguage.json diff --git a/.prettierignore b/.prettierignore index 6de1b6b4d..d969a3158 100644 --- a/.prettierignore +++ b/.prettierignore @@ -9,7 +9,6 @@ out playgrounds resources snippets -syntaxes CHANGELOG.md README.md constants.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9b6097208..0ac81eff8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,7 +40,6 @@ npm run watch - `out` compiled extension code - `images` Icons, logos, etc. - `snippets` [Bundled MongoDB Snippets][snippet guide] -- `syntaxes` [Syntax highlighting for `.mongodb` files][syntax guide] - `src` - `test/suite` where tests live with files names `*.test.ts` - `scripts` project helper scripts diff --git a/package.json b/package.json index 34bfb74f1..255654606 100644 --- a/package.json +++ b/package.json @@ -36,12 +36,11 @@ "scripts": { "clean": "rimraf ./out/* ./dist/* ", "lint": "eslint . && prettier --check .", - "update-grammar": "ts-node ./scripts/update-grammar.ts", "update-snippets": "ts-node ./scripts/update-snippets.ts", "precompile": "npm run clean", "compile": "npm-run-all compile:*", "compile:keyfile": "ts-node ./scripts/generate-keyfile.ts", - "compile:resources": "npm run update-grammar && npm run update-snippets", + "compile:resources": "npm run update-snippets", "compile:extension": "tsc -p ./", "compile:extension-bundles": "webpack --mode development", "watch": "npm run compile && npm-run-all -p watch:*", @@ -67,23 +66,10 @@ "npm": "^8.8.0" }, "activationEvents": [ - "onCommand:mdb.connect", - "onCommand:mdb.connectWithURI", - "onCommand:mdb.openOverviewPage", - "onCommand:mdb.createPlayground", - "onCommand:mdb.addConnection", - "onCommand:mdb.addConnectionWithURI", - "onCommand:mdb.disconnect", - "onCommand:mdb.removeConnection", - "onCommand:mdb.openMongoDBShell", - "onCommand:mdb.saveMongoDBDocument", - "onCommand:mdb.insertObjectIdToEditor", - "onCommand:mdb.generateObjectIdToClipboard", "onView:mongoDB", - "onView:mongoDBConnectionExplorer", - "onView:mongoDBPlaygroundsExplorer", "onLanguage:json", - "onLanguage:javasript" + "onLanguage:javasript", + "onLanguage:plaintext" ], "contributes": { "viewsContainers": { diff --git a/scripts/update-grammar.ts b/scripts/update-grammar.ts deleted file mode 100755 index c838da410..000000000 --- a/scripts/update-grammar.ts +++ /dev/null @@ -1,60 +0,0 @@ -#! /usr/bin/env ts-node - -import path = require('path'); -import mkdirp = require('mkdirp'); -import ora = require('ora'); -import download = require('download'); -import meow = require('meow'); - -import formatError from '../src/utils/formatError'; - -const DEFAULT_DEST = path.join(__dirname, '..', 'syntaxes'); - -const languageURL = - 'https://raw.githubusercontent.com/mongodb-js/vscode-mongodb-language/master/syntaxes/mongodb.tmLanguage.json'; - -const cli = meow( - ` - Downloads the latest mongodb.tmLanguage.json from mongodb-js/vscode-mongodb-language - - Usage - $ update-grammar.ts - - Options - --dest Directory to download to [Default: ${DEFAULT_DEST}] - --src URL of mongodb.tmLanguage.json [Default: ${languageURL}] - - Examples - $ ./update-grammar.ts - ℹ Downlading latest mongodb.tmLanguage.json - ✔ Downloaded to /Users/lucas/vsc/syntaxes/mongodb.tmLanguage.json -`, - { - flags: { - dest: { - default: DEFAULT_DEST, - }, - url: { - default: languageURL, - }, - }, - } -); - -(async () => { - await mkdirp(DEFAULT_DEST); - - const ui = ora().info('Downlading latest mongodb.tmLanguage.json').start(); - - try { - await download(cli.flags.url, cli.flags.dest); - ui.succeed( - `Downloaded to ${path.join( - cli.flags.dest as string, - 'mongodb.tmLanguage.json' - )}` - ); - } catch (error) { - ui.fail(`Download failed: ${formatError(error).message}`); - } -})(); diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index 5093becaf..d6e5e83f2 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -166,9 +166,27 @@ export default class PlaygroundController { } }; + vscode.workspace.textDocuments.forEach((document) => { + if (document.uri.path.split('.').pop() === 'mongodb') { + void vscode.languages.setTextDocumentLanguage( + document, + 'javascript' + ); + } + }); + vscode.window.onDidChangeActiveTextEditor(onDidChangeActiveTextEditor); onDidChangeActiveTextEditor(vscode.window.activeTextEditor); + vscode.workspace.onDidOpenTextDocument(async (document) => { + if (document.uri.path.split('.').pop() === 'mongodb') { + await vscode.languages.setTextDocumentLanguage( + document, + 'javascript' + ); + } + }); + vscode.window.onDidChangeTextEditorSelection( async (changeEvent: vscode.TextEditorSelectionChangeEvent) => { if (changeEvent?.textEditor?.document?.uri.fragment !== 'mongodb') { @@ -242,8 +260,9 @@ export default class PlaygroundController { // Create untitled file. const numberUntitledDocuments = vscode.workspace.textDocuments.filter((doc) => (doc.uri.scheme === 'untitled')).length; const fileName = `Untitled-${numberUntitledDocuments + 1}`; - const newUri = vscode.Uri.file(fileName).with({ scheme: 'untitled', fragment: 'mongodb' }); + const newUri = vscode.Uri.file(fileName).with({ scheme: 'untitled', fragment: 'mongodb' }); // http://localhost/?#mongodb + // Before: vscode.workspace.openTextDocument({ language: 'mongodb', content }); const document = await vscode.workspace.openTextDocument(newUri); await vscode.languages.setTextDocumentLanguage( document, diff --git a/src/templates/playgroundCloneDocumentTemplate.ts b/src/templates/playgroundCloneDocumentTemplate.ts index b31770f48..bf34936b2 100644 --- a/src/templates/playgroundCloneDocumentTemplate.ts +++ b/src/templates/playgroundCloneDocumentTemplate.ts @@ -1,4 +1,5 @@ -const template = `// MongoDB Playground +const template = `/* global use, db */ +// MongoDB Playground // Use Ctrl+Space inside a snippet or a string literal to trigger completions. // The current database to use. diff --git a/src/templates/playgroundCreateCollectionTemplate.ts b/src/templates/playgroundCreateCollectionTemplate.ts index dc0b5d842..340bb2f09 100644 --- a/src/templates/playgroundCreateCollectionTemplate.ts +++ b/src/templates/playgroundCreateCollectionTemplate.ts @@ -1,4 +1,5 @@ -const template = `// MongoDB Playground +const template = `/* global use, db */ +// MongoDB Playground // Use Ctrl+Space inside a snippet or a string literal to trigger completions. const database = 'NEW_DATABASE_NAME'; diff --git a/src/templates/playgroundCreateIndexTemplate.ts b/src/templates/playgroundCreateIndexTemplate.ts index 7cd380722..122644de3 100644 --- a/src/templates/playgroundCreateIndexTemplate.ts +++ b/src/templates/playgroundCreateIndexTemplate.ts @@ -1,4 +1,5 @@ -const template = `// MongoDB Playground +const template = `/* global use, db */ +// MongoDB Playground // Use Ctrl+Space inside a snippet or a string literal to trigger completions. // The current database to use. diff --git a/src/templates/playgroundSearchTemplate.ts b/src/templates/playgroundSearchTemplate.ts index 81d3cd404..be3ddb573 100644 --- a/src/templates/playgroundSearchTemplate.ts +++ b/src/templates/playgroundSearchTemplate.ts @@ -1,4 +1,5 @@ -const template = `// MongoDB Playground +const template = `/* global use, db */ +// MongoDB Playground // Use Ctrl+Space inside a snippet or a string literal to trigger completions. // The current database to use. diff --git a/src/templates/playgroundTemplate.ts b/src/templates/playgroundTemplate.ts index 2e0a78d5b..6a3f9b26d 100644 --- a/src/templates/playgroundTemplate.ts +++ b/src/templates/playgroundTemplate.ts @@ -1,4 +1,5 @@ -const template = `// MongoDB Playground +const template = `/* global use, db */ +// MongoDB Playground // To disable this template go to Settings | MongoDB | Use Default Template For Playground. // Make sure you are connected to enable completions and to be able to run a playground. // Use Ctrl+Space inside a snippet or a string literal to trigger completions. diff --git a/syntaxes/mongodb.tmLanguage.json b/syntaxes/mongodb.tmLanguage.json deleted file mode 100644 index f8cc8b640..000000000 --- a/syntaxes/mongodb.tmLanguage.json +++ /dev/null @@ -1,7263 +0,0 @@ -{ - "name": "MongoDB", - "uuid": "ef98eb90-bf9b-11e4-bb52-0800200c9a66", - "scopeName": "source.mongodb", - "fileTypes": [ - "mongodb" - ], - "patterns": [ - { - "include": "#directives" - }, - { - "include": "#statements" - }, - { - "name": "comment.line.shebang.mongodb", - "match": "\\A(#!).*(?=$)", - "captures": { - "1": { - "name": "punctuation.definition.comment.mongodb" - } - } - } - ], - "repository": { - "statements": { - "patterns": [ - { - "include": "#declaration" - }, - { - "include": "#control-statement" - }, - { - "include": "#after-operator-block-as-object-literal" - }, - { - "include": "#decl-block" - }, - { - "include": "#label" - }, - { - "include": "#expression" - }, - { - "include": "#punctuation-semicolon" - }, - { - "include": "#string" - }, - { - "include": "#comment" - } - ] - }, - "declaration": { - "patterns": [ - { - "include": "#decorator" - }, - { - "include": "#var-expr" - }, - { - "include": "#function-declaration" - }, - { - "include": "#class-declaration" - }, - { - "include": "#interface-declaration" - }, - { - "include": "#enum-declaration" - }, - { - "include": "#namespace-declaration" - }, - { - "include": "#type-alias-declaration" - }, - { - "include": "#import-equals-declaration" - }, - { - "include": "#import-declaration" - }, - { - "include": "#export-declaration" - }, - { - "name": "storage.modifier.mongodb", - "match": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", - "beginCaptures": { - "1": { - "name": "meta.definition.variable.mongodb entity.name.function.mongodb" - }, - "2": { - "name": "keyword.operator.definiteassignment.mongodb" - } - }, - "end": "(?=$|^|[;,=}]|((?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", - "beginCaptures": { - "1": { - "name": "meta.definition.variable.mongodb variable.other.constant.mongodb entity.name.function.mongodb" - } - }, - "end": "(?=$|^|[;,=}]|((?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", - "captures": { - "1": { - "name": "storage.modifier.mongodb" - }, - "2": { - "name": "keyword.operator.rest.mongodb" - }, - "3": { - "name": "entity.name.function.mongodb variable.language.this.mongodb" - }, - "4": { - "name": "entity.name.function.mongodb" - }, - "5": { - "name": "keyword.operator.optional.mongodb" - } - } - }, - { - "match": "(?x)(?:(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", - "captures": { - "1": { - "name": "meta.definition.property.mongodb entity.name.function.mongodb" - }, - "2": { - "name": "keyword.operator.optional.mongodb" - }, - "3": { - "name": "keyword.operator.definiteassignment.mongodb" - } - } - }, - { - "name": "meta.definition.property.mongodb variable.object.property.mongodb", - "match": "\\#?[_$[:alpha:]][_$[:alnum:]]*" - }, - { - "name": "keyword.operator.optional.mongodb", - "match": "\\?" - }, - { - "name": "keyword.operator.definiteassignment.mongodb", - "match": "\\!" - } - ] - }, - "variable-initializer": { - "patterns": [ - { - "begin": "(?\\s*$)", - "beginCaptures": { - "1": { - "name": "keyword.operator.assignment.mongodb" - } - }, - "end": "(?=$|^|[,);}\\]]|((?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])", - "beginCaptures": { - "1": { - "name": "storage.modifier.mongodb" - }, - "2": { - "name": "storage.modifier.mongodb" - }, - "3": { - "name": "storage.modifier.async.mongodb" - }, - "4": { - "name": "keyword.operator.new.mongodb" - }, - "5": { - "name": "keyword.generator.asterisk.mongodb" - } - }, - "end": "(?=\\}|;|,|$)|(?<=\\})", - "patterns": [ - { - "include": "#method-declaration-name" - }, - { - "include": "#function-body" - } - ] - }, - { - "name": "meta.method.declaration.mongodb", - "begin": "(?x)(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])", - "beginCaptures": { - "1": { - "name": "storage.modifier.mongodb" - }, - "2": { - "name": "storage.modifier.mongodb" - }, - "3": { - "name": "storage.modifier.async.mongodb" - }, - "4": { - "name": "storage.type.property.mongodb" - }, - "5": { - "name": "keyword.generator.asterisk.mongodb" - } - }, - "end": "(?=\\}|;|,|$)|(?<=\\})", - "patterns": [ - { - "include": "#method-declaration-name" - }, - { - "include": "#function-body" - } - ] - } - ] - }, - "object-literal-method-declaration": { - "name": "meta.method.declaration.mongodb", - "begin": "(?x)(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])", - "beginCaptures": { - "1": { - "name": "storage.modifier.async.mongodb" - }, - "2": { - "name": "storage.type.property.mongodb" - }, - "3": { - "name": "keyword.generator.asterisk.mongodb" - } - }, - "end": "(?=\\}|;|,)|(?<=\\})", - "patterns": [ - { - "include": "#method-declaration-name" - }, - { - "include": "#function-body" - }, - { - "begin": "(?x)(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?[\\(])", - "beginCaptures": { - "1": { - "name": "storage.modifier.async.mongodb" - }, - "2": { - "name": "storage.type.property.mongodb" - }, - "3": { - "name": "keyword.generator.asterisk.mongodb" - } - }, - "end": "(?=\\(|\\<)", - "patterns": [ - { - "include": "#method-declaration-name" - } - ] - } - ] - }, - "method-declaration-name": { - "begin": "(?x)(?=((\\b(?)", - "captures": { - "1": { - "name": "storage.modifier.async.mongodb" - }, - "2": { - "name": "variable.parameter.mongodb" - } - } - }, - { - "name": "meta.arrow.mongodb", - "begin": "(?x) (?:\n (? is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n )\n)", - "beginCaptures": { - "1": { - "name": "storage.modifier.async.mongodb" - } - }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", - "patterns": [ - { - "include": "#comment" - }, - { - "include": "#type-parameters" - }, - { - "include": "#function-parameters" - }, - { - "include": "#arrow-return-type" - }, - { - "include": "#possibly-arrow-return-type" - } - ] - }, - { - "name": "meta.arrow.mongodb", - "begin": "=>", - "beginCaptures": { - "0": { - "name": "storage.type.function.arrow.mongodb" - } - }, - "end": "((?<=\\}|\\S)(?)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])", - "patterns": [ - { - "include": "#single-line-comment-consuming-line-ending" - }, - { - "include": "#decl-block" - }, - { - "include": "#expression" - } - ] - } - ] - }, - "indexer-declaration": { - "name": "meta.indexer.declaration.mongodb", - "begin": "(?:(?]|^await|[^\\._$[:alnum:]]await|^return|[^\\._$[:alnum:]]return|^yield|[^\\._$[:alnum:]]yield|^throw|[^\\._$[:alnum:]]throw|^in|[^\\._$[:alnum:]]in|^of|[^\\._$[:alnum:]]of|^typeof|[^\\._$[:alnum:]]typeof|&&|\\|\\||\\*)\\s*(\\{)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.block.mongodb" - } - }, - "end": "\\}", - "endCaptures": { - "0": { - "name": "punctuation.definition.block.mongodb" - } - }, - "patterns": [ - { - "include": "#object-member" - } - ] - }, - "object-literal": { - "name": "meta.objectliteral.mongodb", - "begin": "\\{", - "beginCaptures": { - "0": { - "name": "punctuation.definition.block.mongodb" - } - }, - "end": "\\}", - "endCaptures": { - "0": { - "name": "punctuation.definition.block.mongodb" - } - }, - "patterns": [ - { - "include": "#object-member" - } - ] - }, - "object-member": { - "patterns": [ - { - "name": "meta.object.member.mongodb", - "match": "\\$undefined\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.undefined.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$timestamp\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.timestamp.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$regularExpression\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.regularExpression.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$regex\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.regex.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$oid\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.oid.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$numberLong\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.numberLong.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$numberInt\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.numberInt.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$numberDouble\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.numberDouble.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$numberDecimal\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.numberDecimal.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$minKey\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.minKey.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$maxKey\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.maxKey.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$date\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.date.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$binary\\b", - "captures": { - "0": { - "name": "keyword.other.aggBSON.binary.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$unwind\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.unwind.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$sortByCount\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.sortByCount.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$sort\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.sort.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$skip\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.skip.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$setWindowFields\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.setWindowFields.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$searchMeta\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.searchMeta.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$sample\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.sample.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$replaceRoot\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.replaceRoot.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$redact\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.redact.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$project\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.project.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$out\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.out.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$match\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.match.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$lookup\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.lookup.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$limit\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.limit.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$indexStats\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.indexStats.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$group\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.group.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$graphLookup\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.graphLookup.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$geoNear\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.geoNear.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$facet\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.facet.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$documents\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.documents.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$densify\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.densify.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$count\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.count.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$collStats\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.collStats.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$bucketAuto\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.bucketAuto.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$bucket\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.bucket.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$addFields\\b", - "captures": { - "0": { - "name": "keyword.other.aggStageOperators.addFields.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$where\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.where.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$type\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.type.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$text\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.text.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$slice\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.slice.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$size\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.size.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$regex\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.regex.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$or\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.or.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$nor\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.nor.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$not\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.not.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$nin\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.nin.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$nearSphere\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.nearSphere.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$near\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.near.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$ne\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.ne.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$mod\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.mod.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$lte\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.lte.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$lt\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.lt.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$jsonSchema\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.jsonSchema.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$in\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.in.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$gte\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.gte.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$gt\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.gt.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$geoWithin\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.geoWithin.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$geoIntersects\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.geoIntersects.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$expr\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.expr.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$exists\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.exists.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$eq\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.eq.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$elemMatch\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.elemMatch.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$comment\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.comment.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$bitsAnySet\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.bitsAnySet.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$bitsAnyClear\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.bitsAnyClear.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$bitsAllSet\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.bitsAllSet.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$bitsAllClear\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.bitsAllClear.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$and\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.and.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$all\\b", - "captures": { - "0": { - "name": "keyword.other.QueryOperators.all.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$zip\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.zip.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$year\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.year.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$week\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.week.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$type\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.type.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$trunc\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.trunc.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$tsIncrement\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.tsIncrement.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$tsSecond\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.tsSecond.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toUpper\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.toUpper.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toLower\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.toLower.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$switch\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.switch.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$subtract\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.subtract.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$substrCP\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.substrCP.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$substrBytes\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.substrBytes.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$substr\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.substr.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$strLenCP\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.strLenCP.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$strLenBytes\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.strLenBytes.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$strcasecmp\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.strcasecmp.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$sqrt\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.sqrt.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$split\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.split.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$slice\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.slice.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$size\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.size.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$setUnion\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.setUnion.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$setIsSubset\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.setIsSubset.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$setIntersection\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.setIntersection.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$setEquals\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.setEquals.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$setDifference\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.setDifference.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$second\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.second.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$reverseArray\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.reverseArray.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$reduce\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.reduce.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$range\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.range.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$pow\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.pow.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$or\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.or.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$objectToArray\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.objectToArray.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$not\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.not.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$new\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.new.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$multiply\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.multiply.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$month\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.month.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$mod\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.mod.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$minute\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.minute.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$millisecond\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.millisecond.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$meta\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.meta.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$mergeObjects\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.mergeObjects.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$map\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.map.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$log10\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.log10.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$log\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.log.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$ln\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.ln.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$lt\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.lt.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$literal\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.literal.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$let\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.let.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$isoWeekYear\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.isoWeekYear.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$isoWeek\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.isoWeek.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$isoDayOfWeek\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.isoDayOfWeek.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$isArray\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.isArray.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$indexOfCP\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.indexOfCP.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$indexOfBytes\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.indexOfBytes.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$indexOfArray\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.indexOfArray.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$in\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.in.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$ifNull\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.ifNull.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$hour\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.hour.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$gte\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.gte.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$gt\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.gt.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$getField\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.getField.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$floor\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.floor.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$filter\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.filter.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$exp\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.exp.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$eq\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.eq.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$divide\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.divide.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dayOfYear\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dayOfYear.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dayOfWeek\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dayOfWeek.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dayOfMonth\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dayOfMonth.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dateTrunc\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dateTrunc.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dateToString\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dateToString.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dateToParts\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dateToParts.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dateSubtract\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dateSubtract.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dateFromString\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dateFromString.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dateFromParts\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dateFromParts.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dateDiff\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dateDiff.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$dateAdd\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.dateAdd.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$cond\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.cond.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$concatArrays\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.concatArrays.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$concat\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.concat.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$cmp\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.cmp.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$ceil\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.ceil.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$arrayToObject\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.arrayToObject.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$arrayElemAt\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.arrayElemAt.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$anyElementTrue\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.anyElementTrue.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$and\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.and.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$allElementsTrue\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.allElementsTrue.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$add\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.add.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$abs\\b", - "captures": { - "0": { - "name": "keyword.other.aggExpressionOperators.abs.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$trim\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.trim.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toString\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.toString.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toObjectId\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.toObjectId.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toLong\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.toLong.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toInt\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.toInt.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toDouble\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.toDouble.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toDecimal\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.toDecimal.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toDate\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.toDate.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$toBool\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.toBool.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$rtrim\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.rtrim.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$ltrim\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.ltrim.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$convert\\b", - "captures": { - "0": { - "name": "keyword.other.aggConverters.convert.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$sum\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.sum.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$shift\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.shift.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$stdDevSamp\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.stdDevSamp.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$stdDevPop\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.stdDevPop.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$rank\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.rank.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$push\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.push.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$min\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.min.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$max\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.max.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$last\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.last.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$integral\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.integral.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$first\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.first.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$expMovingAvg\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.expMovingAvg.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$documentNumber\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.documentNumber.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$denseRank\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.denseRank.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$derivative\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.derivative.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$count\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.count.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$covarianceSamp\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.covarianceSamp.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$covariancePop\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.covariancePop.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$avg\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.avg.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "\\$addToSet\\b", - "captures": { - "0": { - "name": "keyword.other.aggAccumulators.addToSet.mongodb" - } - } - }, - { - "include": "#comment" - }, - { - "include": "#object-literal-method-declaration" - }, - { - "name": "meta.object.member.mongodb meta.object-literal.key.mongodb", - "begin": "(?=\\[)", - "end": "(?=:)|((?<=[\\]])(?=\\s*[\\(\\<]))", - "patterns": [ - { - "include": "#comment" - }, - { - "include": "#array-literal" - } - ] - }, - { - "name": "meta.object.member.mongodb meta.object-literal.key.mongodb", - "begin": "(?=[\\'\\\"\\`])", - "end": "(?=:)|((?<=[\\'\\\"\\`])(?=((\\s*[\\(\\<,}])|(\\s+(as)\\s+))))", - "patterns": [ - { - "include": "#comment" - }, - { - "include": "#string" - } - ] - }, - { - "name": "meta.object.member.mongodb meta.object-literal.key.mongodb", - "begin": "(?x)(?=(\\b(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", - "captures": { - "0": { - "name": "meta.object-literal.key.mongodb" - }, - "1": { - "name": "entity.name.function.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "(?:[_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*:)", - "captures": { - "0": { - "name": "meta.object-literal.key.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "begin": "\\.\\.\\.", - "beginCaptures": { - "0": { - "name": "keyword.operator.spread.mongodb" - } - }, - "end": "(?=,|\\})", - "patterns": [ - { - "include": "#expression" - } - ] - }, - { - "name": "meta.object.member.mongodb", - "match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=,|\\}|$|\\/\\/|\\/\\*)", - "captures": { - "1": { - "name": "variable.other.readwrite.mongodb" - } - } - }, - { - "name": "meta.object.member.mongodb", - "match": "(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))", - "beginCaptures": { - "1": { - "name": "storage.modifier.async.mongodb" - } - }, - "end": "(?<=\\))", - "patterns": [ - { - "include": "#type-parameters" - }, - { - "begin": "\\(", - "beginCaptures": { - "0": { - "name": "meta.brace.round.mongodb" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "meta.brace.round.mongodb" - } - }, - "patterns": [ - { - "include": "#expression-inside-possibly-arrow-parens" - } - ] - } - ] - }, - { - "begin": "(?<=:)\\s*(async)?\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))", - "beginCaptures": { - "1": { - "name": "storage.modifier.async.mongodb" - }, - "2": { - "name": "meta.brace.round.mongodb" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "meta.brace.round.mongodb" - } - }, - "patterns": [ - { - "include": "#expression-inside-possibly-arrow-parens" - } - ] - }, - { - "begin": "(?<=:)\\s*(async)?\\s*(?=\\<\\s*$)", - "beginCaptures": { - "1": { - "name": "storage.modifier.async.mongodb" - } - }, - "end": "(?<=\\>)", - "patterns": [ - { - "include": "#type-parameters" - } - ] - }, - { - "begin": "(?<=\\>)\\s*(\\()(?=\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))", - "beginCaptures": { - "1": { - "name": "meta.brace.round.mongodb" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "meta.brace.round.mongodb" - } - }, - "patterns": [ - { - "include": "#expression-inside-possibly-arrow-parens" - } - ] - }, - { - "include": "#possibly-arrow-return-type" - }, - { - "include": "#expression" - } - ] - }, - { - "include": "#punctuation-comma" - } - ] - }, - "ternary-expression": { - "begin": "(?!\\?\\.\\s*[^[:digit:]])(\\?)(?!\\?)", - "beginCaptures": { - "1": { - "name": "keyword.operator.ternary.mongodb" - } - }, - "end": "\\s*(:)", - "endCaptures": { - "1": { - "name": "keyword.operator.ternary.mongodb" - } - }, - "patterns": [ - { - "include": "#expression" - } - ] - }, - "function-call": { - "begin": "(?=(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?\\()", - "end": "(?<=\\))(?!(((([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))|(?<=[\\)]))\\s*(?:(\\?\\.\\s*)|(\\!))?(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?\\()", - "patterns": [ - { - "name": "meta.function-call.mongodb", - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*)(\\s*\\??\\.\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*))*)|(\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*))", - "end": "(?=\\s*(?:(\\?\\.\\s*)|(\\!))?(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?\\()", - "patterns": [ - { - "include": "#support-function-call-identifiers" - }, - { - "name": "entity.name.function.mongodb", - "match": "(\\#?[_$[:alpha:]][_$[:alnum:]]*)" - } - ] - }, - { - "include": "#comment" - }, - { - "name": "meta.function-call.mongodb punctuation.accessor.optional.mongodb", - "match": "\\?\\." - }, - { - "name": "meta.function-call.mongodb keyword.operator.definiteassignment.mongodb", - "match": "\\!" - }, - { - "include": "#type-arguments" - }, - { - "include": "#paren-expression" - } - ] - }, - "support-function-call-identifiers": { - "patterns": [ - { - "include": "#literal" - }, - { - "include": "#support-objects" - }, - { - "include": "#object-identifiers" - }, - { - "include": "#punctuation-accessor" - }, - { - "name": "keyword.operator.expression.import.mongodb", - "match": "(?:(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?\\(\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))", - "beginCaptures": { - "1": { - "name": "storage.modifier.async.mongodb" - } - }, - "end": "(?<=\\))", - "patterns": [ - { - "include": "#paren-expression-possibly-arrow-with-typeparameters" - } - ] - }, - { - "begin": "(?<=[(=,]|=>|^return|[^\\._$[:alnum:]]return)\\s*(async)?(?=\\s*((((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*))?\\()|(<))\\s*$)", - "beginCaptures": { - "1": { - "name": "storage.modifier.async.mongodb" - } - }, - "end": "(?<=\\))", - "patterns": [ - { - "include": "#paren-expression-possibly-arrow-with-typeparameters" - } - ] - }, - { - "include": "#possibly-arrow-return-type" - } - ] - }, - "paren-expression-possibly-arrow-with-typeparameters": { - "patterns": [ - { - "include": "#type-parameters" - }, - { - "begin": "\\(", - "beginCaptures": { - "0": { - "name": "meta.brace.round.mongodb" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "meta.brace.round.mongodb" - } - }, - "patterns": [ - { - "include": "#expression-inside-possibly-arrow-parens" - } - ] - } - ] - }, - "expression-inside-possibly-arrow-parens": { - "patterns": [ - { - "include": "#expressionWithoutIdentifiers" - }, - { - "include": "#comment" - }, - { - "include": "#string" - }, - { - "include": "#decorator" - }, - { - "include": "#destructuring-parameter" - }, - { - "match": "(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)) |\n# typeannotation is fn type: < | () | (... | (param: | (param, | (param? | (param= | (param) =>\n(:\\s*(\n (<) |\n ([(]\\s*(\n ([)]) |\n (\\.\\.\\.) |\n ([_$[:alnum:]]+\\s*(\n ([:,?=])|\n ([)]\\s*=>)\n ))\n ))\n)) |\n(:\\s*(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))) |\n(:\\s*(=>|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(<[^<>]*>)|[^<>(),=])+=\\s*(\n ((async\\s+)?(\n (function\\s*[(<*]) |\n (function\\s+) |\n ([_$[:alpha:]][_$[:alnum:]]*\\s*=>)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n)))", - "captures": { - "1": { - "name": "storage.modifier.mongodb" - }, - "2": { - "name": "keyword.operator.rest.mongodb" - }, - "3": { - "name": "entity.name.function.mongodb variable.language.this.mongodb" - }, - "4": { - "name": "entity.name.function.mongodb" - }, - "5": { - "name": "keyword.operator.optional.mongodb" - } - } - }, - { - "match": "(?x)(?:(?)", - "captures": { - "1": { - "name": "meta.brace.angle.mongodb" - }, - "2": { - "name": "storage.modifier.mongodb" - }, - "3": { - "name": "meta.brace.angle.mongodb" - } - } - }, - { - "name": "cast.expr.mongodb", - "begin": "(?:(?*?\\&\\|\\^]|[^_$[:alnum:]](?:\\+\\+|\\-\\-)|[^\\+]\\+|[^\\-]\\-))\\s*(<)(?!)", - "endCaptures": { - "1": { - "name": "meta.brace.angle.mongodb" - } - }, - "patterns": [ - { - "include": "#type" - } - ] - }, - { - "name": "cast.expr.mongodb", - "begin": "(?:(?<=^))\\s*(<)(?=[_$[:alpha:]][_$[:alnum:]]*\\s*>)", - "beginCaptures": { - "1": { - "name": "meta.brace.angle.mongodb" - } - }, - "end": "(\\>)", - "endCaptures": { - "1": { - "name": "meta.brace.angle.mongodb" - } - }, - "patterns": [ - { - "include": "#type" - } - ] - } - ] - }, - "expression-operators": { - "patterns": [ - { - "name": "keyword.control.flow.mongodb", - "match": "(?>=|>>>=|\\|=" - }, - { - "name": "keyword.operator.bitwise.shift.mongodb", - "match": "<<|>>>|>>" - }, - { - "name": "keyword.operator.comparison.mongodb", - "match": "===|!==|==|!=" - }, - { - "name": "keyword.operator.relational.mongodb", - "match": "<=|>=|<>|<|>" - }, - { - "match": "(\\!)\\s*(/)(?![/*])", - "captures": { - "1": { - "name": "keyword.operator.logical.mongodb" - }, - "2": { - "name": "keyword.operator.arithmetic.mongodb" - } - } - }, - { - "name": "keyword.operator.logical.mongodb", - "match": "\\!|&&|\\|\\||\\?\\?" - }, - { - "name": "keyword.operator.bitwise.mongodb", - "match": "\\&|~|\\^|\\|" - }, - { - "name": "keyword.operator.assignment.mongodb", - "match": "\\=" - }, - { - "name": "keyword.operator.decrement.mongodb", - "match": "--" - }, - { - "name": "keyword.operator.increment.mongodb", - "match": "\\+\\+" - }, - { - "name": "keyword.operator.arithmetic.mongodb", - "match": "%|\\*|/|-|\\+" - }, - { - "begin": "(?<=[_$[:alnum:])\\]])\\s*(?=(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)+(/)(?![/*]))", - "end": "(/)(?!\\*([^\\*]|(\\*[^\\/]))*\\*\\/)", - "endCaptures": { - "1": { - "name": "keyword.operator.arithmetic.mongodb" - } - }, - "patterns": [ - { - "include": "#comment" - } - ] - }, - { - "match": "(?<=[_$[:alnum:])\\]])\\s*(/)(?![/*])", - "captures": { - "1": { - "name": "keyword.operator.arithmetic.mongodb" - } - } - } - ] - }, - "typeof-operator": { - "name": "keyword.operator.expression.typeof.mongodb", - "match": "(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\\())\n |\n (?:(EPSILON|MAX_SAFE_INTEGER|MAX_VALUE|MIN_SAFE_INTEGER|MIN_VALUE|NEGATIVE_INFINITY|POSITIVE_INFINITY)\\b(?!\\$)))", - "captures": { - "1": { - "name": "punctuation.accessor.mongodb" - }, - "2": { - "name": "punctuation.accessor.optional.mongodb" - }, - "3": { - "name": "support.variable.property.mongodb" - }, - "4": { - "name": "support.constant.mongodb" - } - } - }, - { - "match": "(?x) (?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\\()", - "captures": { - "1": { - "name": "punctuation.accessor.mongodb" - }, - "2": { - "name": "punctuation.accessor.optional.mongodb" - }, - "3": { - "name": "support.constant.dom.mongodb" - }, - "4": { - "name": "support.variable.property.dom.mongodb" - } - } - }, - { - "name": "support.class.node.mongodb", - "match": "(?x)(?)\n )) |\n ((async\\s*)?(\n ((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))))) |\n # sure shot arrow functions even if => is on new line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?\n [(]\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*\n (\n ([)]\\s*:) | # ():\n ((\\.\\.\\.\\s*)?[_$[:alpha:]][_$[:alnum:]]*\\s*:) # [(]param: | [(]...param:\n )\n) |\n\n# arrow function possible to detect only with => on same line\n(\n (<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)? # typeparameters\n \\(\\s*(\\/\\*([^\\*]|(\\*[^\\/]))*\\*\\/\\s*)*(([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\.\\.\\.\\s*[_$[:alpha:]]))([^()]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\)))*)?\\) # parameters\n (\\s*:\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+)? # return type\n \\s*=> # arrow operator\n)\n ))\n))", - "captures": { - "1": { - "name": "punctuation.accessor.mongodb" - }, - "2": { - "name": "punctuation.accessor.optional.mongodb" - }, - "3": { - "name": "entity.name.function.mongodb" - } - } - }, - { - "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])", - "captures": { - "1": { - "name": "punctuation.accessor.mongodb" - }, - "2": { - "name": "punctuation.accessor.optional.mongodb" - }, - "3": { - "name": "variable.other.constant.property.mongodb" - } - } - }, - { - "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(\\#?[_$[:alpha:]][_$[:alnum:]]*)", - "captures": { - "1": { - "name": "punctuation.accessor.mongodb" - }, - "2": { - "name": "punctuation.accessor.optional.mongodb" - }, - "3": { - "name": "variable.other.property.mongodb" - } - } - }, - { - "name": "variable.other.constant.mongodb", - "match": "([[:upper:]][_$[:digit:][:upper:]]*)(?![_$[:alnum:]])" - }, - { - "name": "variable.other.readwrite.mongodb", - "match": "[_$[:alpha:]][_$[:alnum:]]*" - } - ] - }, - "object-identifiers": { - "patterns": [ - { - "name": "support.class.mongodb", - "match": "([_$[:alpha:]][_$[:alnum:]]*)(?=\\s*\\??\\.\\s*prototype\\b(?!\\$))" - }, - { - "match": "(?x)(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))\\s*(?:\n (\\#?[[:upper:]][_$[:digit:][:upper:]]*) |\n (\\#?[_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)", - "captures": { - "1": { - "name": "punctuation.accessor.mongodb" - }, - "2": { - "name": "punctuation.accessor.optional.mongodb" - }, - "3": { - "name": "variable.other.constant.object.property.mongodb" - }, - "4": { - "name": "variable.other.object.property.mongodb" - } - } - }, - { - "match": "(?x)(?:\n ([[:upper:]][_$[:digit:][:upper:]]*) |\n ([_$[:alpha:]][_$[:alnum:]]*)\n)(?=\\s*\\??\\.\\s*\\#?[_$[:alpha:]][_$[:alnum:]]*)", - "captures": { - "1": { - "name": "variable.other.constant.object.mongodb" - }, - "2": { - "name": "variable.other.object.mongodb" - } - } - } - ] - }, - "type-annotation": { - "patterns": [ - { - "name": "meta.type.annotation.mongodb", - "begin": "(:)(?=\\s*\\S)", - "beginCaptures": { - "1": { - "name": "keyword.operator.type.annotation.mongodb" - } - }, - "end": "(?])|((?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))", - "patterns": [ - { - "include": "#type" - } - ] - }, - { - "name": "meta.type.annotation.mongodb", - "begin": "(:)", - "beginCaptures": { - "1": { - "name": "keyword.operator.type.annotation.mongodb" - } - }, - "end": "(?])|(?=^\\s*$)|((?<=\\S)(?=\\s*$))|((?<=[\\}>\\]\\)]|[_$[:alpha:]])\\s*(?=\\{)))", - "patterns": [ - { - "include": "#type" - } - ] - } - ] - }, - "parameter-type-annotation": { - "patterns": [ - { - "name": "meta.type.annotation.mongodb", - "begin": "(:)", - "beginCaptures": { - "1": { - "name": "keyword.operator.type.annotation.mongodb" - } - }, - "end": "(?=[,)])|(?==[^>])", - "patterns": [ - { - "include": "#type" - } - ] - } - ] - }, - "return-type": { - "patterns": [ - { - "name": "meta.return.type.mongodb", - "begin": "(?<=\\))\\s*(:)(?=\\s*\\S)", - "beginCaptures": { - "1": { - "name": "keyword.operator.type.annotation.mongodb" - } - }, - "end": "(?|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", - "patterns": [ - { - "include": "#arrow-return-type-body" - } - ] - }, - "possibly-arrow-return-type": { - "begin": "(?<=\\)|^)\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)", - "beginCaptures": { - "1": { - "name": "meta.arrow.mongodb meta.return.type.arrow.mongodb keyword.operator.type.annotation.mongodb" - } - }, - "end": "(?==>|\\{|(^\\s*(export|function|class|interface|let|var|const|import|enum|namespace|module|type|abstract|declare)\\s+))", - "contentName": "meta.arrow.mongodb meta.return.type.arrow.mongodb", - "patterns": [ - { - "include": "#arrow-return-type-body" - } - ] - }, - "arrow-return-type-body": { - "patterns": [ - { - "begin": "(?<=[:])(?=\\s*\\{)", - "end": "(?<=\\})", - "patterns": [ - { - "include": "#type-object" - } - ] - }, - { - "include": "#type-predicate-operator" - }, - { - "include": "#type" - } - ] - }, - "type-parameters": { - "name": "meta.type.parameters.mongodb", - "begin": "(<)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.typeparameters.begin.mongodb" - } - }, - "end": "(>)", - "endCaptures": { - "1": { - "name": "punctuation.definition.typeparameters.end.mongodb" - } - }, - "patterns": [ - { - "include": "#comment" - }, - { - "name": "storage.modifier.mongodb", - "match": "(?)" - } - ] - }, - "type-arguments": { - "name": "meta.type.parameters.mongodb", - "begin": "\\<", - "beginCaptures": { - "0": { - "name": "punctuation.definition.typeparameters.begin.mongodb" - } - }, - "end": "\\>", - "endCaptures": { - "0": { - "name": "punctuation.definition.typeparameters.end.mongodb" - } - }, - "patterns": [ - { - "include": "#type-arguments-body" - } - ] - }, - "type-arguments-body": { - "patterns": [ - { - "match": "(?)\n ))\n ))\n)) |\n(:\\s*(?]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*\\>)*>\\s*)?[\\(]\\s*((([\\{\\[]\\s*)?$)|((\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})\\s*((:\\s*\\{?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*)))|((\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])\\s*((:\\s*\\[?$)|((\\s*([^<>\\(\\)\\{\\}]|\\<([^<>]|\\<[^<>]+\\>)+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*)?=\\s*))))))))", - "captures": { - "1": { - "name": "storage.modifier.mongodb" - }, - "2": { - "name": "keyword.operator.rest.mongodb" - }, - "3": { - "name": "entity.name.function.mongodb variable.language.this.mongodb" - }, - "4": { - "name": "entity.name.function.mongodb" - }, - "5": { - "name": "keyword.operator.optional.mongodb" - } - } - }, - { - "match": "(?x)(?:(?)", - "patterns": [ - { - "include": "#comment" - }, - { - "include": "#type-parameters" - } - ] - }, - { - "name": "meta.type.constructor.mongodb", - "begin": "(?)\n ))\n )\n )\n)", - "end": "(?<=\\))", - "patterns": [ - { - "include": "#function-parameters" - } - ] - } - ] - }, - "type-function-return-type": { - "patterns": [ - { - "name": "meta.type.function.return.mongodb", - "begin": "(=>)(?=\\s*\\S)", - "beginCaptures": { - "1": { - "name": "storage.type.function.arrow.mongodb" - } - }, - "end": "(?)(?:\\?]|//|$)", - "patterns": [ - { - "include": "#type-function-return-type-core" - } - ] - }, - { - "name": "meta.type.function.return.mongodb", - "begin": "=>", - "beginCaptures": { - "0": { - "name": "storage.type.function.arrow.mongodb" - } - }, - "end": "(?)(?]|//|^\\s*$)|((?<=\\S)(?=\\s*$)))", - "patterns": [ - { - "include": "#type-function-return-type-core" - } - ] - } - ] - }, - "type-function-return-type-core": { - "patterns": [ - { - "include": "#comment" - }, - { - "begin": "(?<==>)(?=\\s*\\{)", - "end": "(?<=\\})", - "patterns": [ - { - "include": "#type-object" - } - ] - }, - { - "include": "#type-predicate-operator" - }, - { - "include": "#type" - } - ] - }, - "type-operators": { - "patterns": [ - { - "include": "#typeof-operator" - }, - { - "begin": "([&|])(?=\\s*\\{)", - "beginCaptures": { - "0": { - "name": "keyword.operator.type.mongodb" - } - }, - "end": "(?<=\\})", - "patterns": [ - { - "include": "#type-object" - } - ] - }, - { - "begin": "[&|]", - "beginCaptures": { - "0": { - "name": "keyword.operator.type.mongodb" - } - }, - "end": "(?=\\S)" - }, - { - "name": "keyword.operator.expression.keyof.mongodb", - "match": "(?)", - "endCaptures": { - "1": { - "name": "meta.type.parameters.mongodb punctuation.definition.typeparameters.end.mongodb" - } - }, - "contentName": "meta.type.parameters.mongodb", - "patterns": [ - { - "include": "#type-arguments-body" - } - ] - }, - { - "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(<)", - "beginCaptures": { - "1": { - "name": "entity.name.type.mongodb" - }, - "2": { - "name": "meta.type.parameters.mongodb punctuation.definition.typeparameters.begin.mongodb" - } - }, - "end": "(>)", - "endCaptures": { - "1": { - "name": "meta.type.parameters.mongodb punctuation.definition.typeparameters.end.mongodb" - } - }, - "contentName": "meta.type.parameters.mongodb", - "patterns": [ - { - "include": "#type-arguments-body" - } - ] - }, - { - "match": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))", - "captures": { - "1": { - "name": "entity.name.type.module.mongodb" - }, - "2": { - "name": "punctuation.accessor.mongodb" - }, - "3": { - "name": "punctuation.accessor.optional.mongodb" - } - } - }, - { - "name": "entity.name.type.mongodb", - "match": "[_$[:alpha:]][_$[:alnum:]]*" - } - ] - }, - "punctuation-comma": { - "name": "punctuation.separator.comma.mongodb", - "match": "," - }, - "punctuation-semicolon": { - "name": "punctuation.terminator.statement.mongodb", - "match": ";" - }, - "punctuation-accessor": { - "match": "(?:(\\.)|(\\?\\.(?!\\s*[[:digit:]])))", - "captures": { - "1": { - "name": "punctuation.accessor.mongodb" - }, - "2": { - "name": "punctuation.accessor.optional.mongodb" - } - } - }, - "string": { - "patterns": [ - { - "include": "#qstring-single" - }, - { - "include": "#qstring-double" - }, - { - "include": "#template" - } - ] - }, - "qstring-double": { - "name": "string.quoted.double.mongodb", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.mongodb" - } - }, - "end": "(\")|((?:[^\\\\\\n])$)", - "endCaptures": { - "1": { - "name": "punctuation.definition.string.end.mongodb" - }, - "2": { - "name": "invalid.illegal.newline.mongodb" - } - }, - "patterns": [ - { - "include": "#string-character-escape" - } - ] - }, - "qstring-single": { - "name": "string.quoted.single.mongodb", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.mongodb" - } - }, - "end": "(\\')|((?:[^\\\\\\n])$)", - "endCaptures": { - "1": { - "name": "punctuation.definition.string.end.mongodb" - }, - "2": { - "name": "invalid.illegal.newline.mongodb" - } - }, - "patterns": [ - { - "include": "#string-character-escape" - } - ] - }, - "string-character-escape": { - "name": "constant.character.escape.mongodb", - "match": "\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|u\\{[0-9A-Fa-f]+\\}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)" - }, - "template": { - "patterns": [ - { - "name": "string.template.mongodb", - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?`)", - "end": "(?=`)", - "patterns": [ - { - "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))", - "end": "(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)?`)", - "patterns": [ - { - "include": "#support-function-call-identifiers" - }, - { - "name": "entity.name.function.tagged-template.mongodb", - "match": "([_$[:alpha:]][_$[:alnum:]]*)" - } - ] - }, - { - "include": "#type-arguments" - } - ] - }, - { - "name": "string.template.mongodb", - "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))(([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer|typeof|readonly)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?))*(?)*(?\\s*)`)", - "beginCaptures": { - "1": { - "name": "entity.name.function.tagged-template.mongodb" - } - }, - "end": "(?=`)", - "patterns": [ - { - "include": "#type-arguments" - } - ] - }, - { - "name": "string.template.mongodb", - "begin": "([_$[:alpha:]][_$[:alnum:]]*)?(`)", - "beginCaptures": { - "1": { - "name": "entity.name.function.tagged-template.mongodb" - }, - "2": { - "name": "punctuation.definition.string.template.begin.mongodb" - } - }, - "end": "`", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.template.end.mongodb" - } - }, - "patterns": [ - { - "include": "#template-substitution-element" - }, - { - "include": "#string-character-escape" - } - ] - } - ] - }, - "template-substitution-element": { - "name": "meta.template.expression.mongodb", - "begin": "\\$\\{", - "beginCaptures": { - "0": { - "name": "punctuation.definition.template-expression.begin.mongodb" - } - }, - "end": "\\}", - "endCaptures": { - "0": { - "name": "punctuation.definition.template-expression.end.mongodb" - } - }, - "patterns": [ - { - "include": "#expression" - } - ], - "contentName": "meta.embedded.line.mongodb" - }, - "regex": { - "patterns": [ - { - "name": "string.regexp.mongodb", - "begin": "(?|&&|\\|\\||\\*\\/)\\s*(\\/)(?![\\/*])(?=(?:[^\\/\\\\\\[\\()]|\\\\.|\\[([^\\]\\\\]|\\\\.)+\\]|\\(([^\\)\\\\]|\\\\.)+\\))+\\/([gimsuy]+|(?![\\/\\*])|(?=\\/\\*))(?!\\s*[a-zA-Z0-9_$]))", - "beginCaptures": { - "1": { - "name": "punctuation.definition.string.begin.mongodb" - } - }, - "end": "(/)([gimsuy]*)", - "endCaptures": { - "1": { - "name": "punctuation.definition.string.end.mongodb" - }, - "2": { - "name": "keyword.other.mongodb" - } - }, - "patterns": [ - { - "include": "#regexp" - } - ] - }, - { - "name": "string.regexp.mongodb", - "begin": "((?", - "captures": { - "0": { - "name": "keyword.other.back-reference.regexp" - }, - "1": { - "name": "variable.other.regexp" - } - } - }, - { - "name": "keyword.operator.quantifier.regexp", - "match": "[?+*]|\\{(\\d+,\\d+|\\d+,|,\\d+|\\d+)\\}\\??" - }, - { - "name": "keyword.operator.or.regexp", - "match": "\\|" - }, - { - "name": "meta.group.assertion.regexp", - "begin": "(\\()((\\?=)|(\\?!)|(\\?<=)|(\\?))?", - "beginCaptures": { - "0": { - "name": "punctuation.definition.group.regexp" - }, - "1": { - "name": "punctuation.definition.group.no-capture.regexp" - }, - "2": { - "name": "variable.other.regexp" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "punctuation.definition.group.regexp" - } - }, - "patterns": [ - { - "include": "#regexp" - } - ] - }, - { - "name": "constant.other.character-class.set.regexp", - "begin": "(\\[)(\\^)?", - "beginCaptures": { - "1": { - "name": "punctuation.definition.character-class.regexp" - }, - "2": { - "name": "keyword.operator.negation.regexp" - } - }, - "end": "(\\])", - "endCaptures": { - "1": { - "name": "punctuation.definition.character-class.regexp" - } - }, - "patterns": [ - { - "name": "constant.other.character-class.range.regexp", - "match": "(?:.|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))\\-(?:[^\\]\\\\]|(\\\\(?:[0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}))|(\\\\c[A-Z])|(\\\\.))", - "captures": { - "1": { - "name": "constant.character.numeric.regexp" - }, - "2": { - "name": "constant.character.control.regexp" - }, - "3": { - "name": "constant.character.escape.backslash.regexp" - }, - "4": { - "name": "constant.character.numeric.regexp" - }, - "5": { - "name": "constant.character.control.regexp" - }, - "6": { - "name": "constant.character.escape.backslash.regexp" - } - } - }, - { - "include": "#regex-character-class" - } - ] - }, - { - "include": "#regex-character-class" - } - ] - }, - "regex-character-class": { - "patterns": [ - { - "name": "constant.other.character-class.regexp", - "match": "\\\\[wWsSdDtrnvf]|\\." - }, - { - "name": "constant.character.numeric.regexp", - "match": "\\\\([0-7]{3}|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4})" - }, - { - "name": "constant.character.control.regexp", - "match": "\\\\c[A-Z]" - }, - { - "name": "constant.character.escape.backslash.regexp", - "match": "\\\\." - } - ] - }, - "comment": { - "patterns": [ - { - "name": "comment.block.documentation.mongodb", - "begin": "/\\*\\*(?!/)", - "beginCaptures": { - "0": { - "name": "punctuation.definition.comment.mongodb" - } - }, - "end": "\\*/", - "endCaptures": { - "0": { - "name": "punctuation.definition.comment.mongodb" - } - }, - "patterns": [ - { - "include": "#docblock" - } - ] - }, - { - "name": "comment.block.mongodb", - "begin": "(/\\*)(?:\\s*((@)internal)(?=\\s|(\\*/)))?", - "beginCaptures": { - "1": { - "name": "punctuation.definition.comment.mongodb" - }, - "2": { - "name": "storage.type.internaldeclaration.mongodb" - }, - "3": { - "name": "punctuation.decorator.internaldeclaration.mongodb" - } - }, - "end": "\\*/", - "endCaptures": { - "0": { - "name": "punctuation.definition.comment.mongodb" - } - } - }, - { - "begin": "(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)", - "beginCaptures": { - "1": { - "name": "punctuation.whitespace.comment.leading.mongodb" - }, - "2": { - "name": "comment.line.double-slash.mongodb" - }, - "3": { - "name": "punctuation.definition.comment.mongodb" - }, - "4": { - "name": "storage.type.internaldeclaration.mongodb" - }, - "5": { - "name": "punctuation.decorator.internaldeclaration.mongodb" - } - }, - "end": "(?=$)", - "contentName": "comment.line.double-slash.mongodb" - } - ] - }, - "single-line-comment-consuming-line-ending": { - "begin": "(^[ \\t]+)?((//)(?:\\s*((@)internal)(?=\\s|$))?)", - "beginCaptures": { - "1": { - "name": "punctuation.whitespace.comment.leading.mongodb" - }, - "2": { - "name": "comment.line.double-slash.mongodb" - }, - "3": { - "name": "punctuation.definition.comment.mongodb" - }, - "4": { - "name": "storage.type.internaldeclaration.mongodb" - }, - "5": { - "name": "punctuation.decorator.internaldeclaration.mongodb" - } - }, - "end": "(?=^)", - "contentName": "comment.line.double-slash.mongodb" - }, - "directives": { - "name": "comment.line.triple-slash.directive.mongodb", - "begin": "^(///)\\s*(?=<(reference|amd-dependency|amd-module)(\\s+(path|types|no-default-lib|lib|name)\\s*=\\s*((\\'([^\\'\\\\]|\\\\.)*\\')|(\\\"([^\\\"\\\\]|\\\\.)*\\\")|(\\`([^\\`\\\\]|\\\\.)*\\`)))+\\s*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.comment.mongodb" - } - }, - "end": "(?=$)", - "patterns": [ - { - "name": "meta.tag.mongodb", - "begin": "(<)(reference|amd-dependency|amd-module)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.directive.mongodb" - }, - "2": { - "name": "entity.name.tag.directive.mongodb" - } - }, - "end": "/>", - "endCaptures": { - "0": { - "name": "punctuation.definition.tag.directive.mongodb" - } - }, - "patterns": [ - { - "name": "entity.other.attribute-name.directive.mongodb", - "match": "path|types|no-default-lib|lib|name" - }, - { - "name": "keyword.operator.assignment.mongodb", - "match": "=" - }, - { - "include": "#string" - } - ] - } - ] - }, - "docblock": { - "patterns": [ - { - "match": "(?x)\n((@)(?:access|api))\n\\s+\n(private|protected|public)\n\\b", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "constant.language.access-type.jsdoc" - } - } - }, - { - "match": "(?x)\n((@)author)\n\\s+\n(\n [^@\\s<>*/]\n (?:[^@<>*/]|\\*[^/])*\n)\n(?:\n \\s*\n (<)\n ([^>\\s]+)\n (>)\n)?", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "entity.name.type.instance.jsdoc" - }, - "4": { - "name": "punctuation.definition.bracket.angle.begin.jsdoc" - }, - "5": { - "name": "constant.other.email.link.underline.jsdoc" - }, - "6": { - "name": "punctuation.definition.bracket.angle.end.jsdoc" - } - } - }, - { - "match": "(?x)\n((@)borrows) \\s+\n((?:[^@\\s*/]|\\*[^/])+) # \n\\s+ (as) \\s+ # as\n((?:[^@\\s*/]|\\*[^/])+) # ", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "entity.name.type.instance.jsdoc" - }, - "4": { - "name": "keyword.operator.control.jsdoc" - }, - "5": { - "name": "entity.name.type.instance.jsdoc" - } - } - }, - { - "name": "meta.example.jsdoc", - "begin": "((@)example)\\s+", - "end": "(?=@|\\*/)", - "beginCaptures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - } - }, - "patterns": [ - { - "match": "^\\s\\*\\s+" - }, - { - "contentName": "constant.other.description.jsdoc", - "begin": "\\G(<)caption(>)", - "beginCaptures": { - "0": { - "name": "entity.name.tag.inline.jsdoc" - }, - "1": { - "name": "punctuation.definition.bracket.angle.begin.jsdoc" - }, - "2": { - "name": "punctuation.definition.bracket.angle.end.jsdoc" - } - }, - "end": "()|(?=\\*/)", - "endCaptures": { - "0": { - "name": "entity.name.tag.inline.jsdoc" - }, - "1": { - "name": "punctuation.definition.bracket.angle.begin.jsdoc" - }, - "2": { - "name": "punctuation.definition.bracket.angle.end.jsdoc" - } - } - }, - { - "match": "[^\\s@*](?:[^*]|\\*[^/])*", - "captures": { - "0": { - "name": "source.embedded.mongodb" - } - } - } - ] - }, - { - "match": "(?x) ((@)kind) \\s+ (class|constant|event|external|file|function|member|mixin|module|namespace|typedef) \\b", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "constant.language.symbol-type.jsdoc" - } - } - }, - { - "match": "(?x)\n((@)see)\n\\s+\n(?:\n # URL\n (\n (?=https?://)\n (?:[^\\s*]|\\*[^/])+\n )\n |\n # JSDoc namepath\n (\n (?!\n # Avoid matching bare URIs (also acceptable as links)\n https?://\n |\n # Avoid matching {@inline tags}; we match those below\n (?:\\[[^\\[\\]]*\\])? # Possible description [preceding]{@tag}\n {@(?:link|linkcode|linkplain|tutorial)\\b\n )\n # Matched namepath\n (?:[^@\\s*/]|\\*[^/])+\n )\n)", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "variable.other.link.underline.jsdoc" - }, - "4": { - "name": "entity.name.type.instance.jsdoc" - } - } - }, - { - "match": "(?x)\n((@)template)\n\\s+\n# One or more valid identifiers\n(\n [A-Za-z_$] # First character: non-numeric word character\n [\\w$.\\[\\]]* # Rest of identifier\n (?: # Possible list of additional identifiers\n \\s* , \\s*\n [A-Za-z_$]\n [\\w$.\\[\\]]*\n )*\n)", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "variable.other.jsdoc" - } - } - }, - { - "match": "(?x)\n(\n (@)\n (?:arg|argument|const|constant|member|namespace|param|var)\n)\n\\s+\n(\n [A-Za-z_$]\n [\\w$.\\[\\]]*\n)", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "variable.other.jsdoc" - } - } - }, - { - "begin": "((@)typedef)\\s+(?={)", - "beginCaptures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - } - }, - "end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])", - "patterns": [ - { - "include": "#jsdoctype" - }, - { - "name": "entity.name.type.instance.jsdoc", - "match": "(?:[^@\\s*/]|\\*[^/])+" - } - ] - }, - { - "begin": "((@)(?:arg|argument|const|constant|member|namespace|param|prop|property|var))\\s+(?={)", - "beginCaptures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - } - }, - "end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])", - "patterns": [ - { - "include": "#jsdoctype" - }, - { - "name": "variable.other.jsdoc", - "match": "([A-Za-z_$][\\w$.\\[\\]]*)" - }, - { - "name": "variable.other.jsdoc", - "match": "(?x)\n(\\[)\\s*\n[\\w$]+\n(?:\n (?:\\[\\])? # Foo[ ].bar properties within an array\n \\. # Foo.Bar namespaced parameter\n [\\w$]+\n)*\n(?:\n \\s*\n (=) # [foo=bar] Default parameter value\n \\s*\n (\n # The inner regexes are to stop the match early at */ and to not stop at escaped quotes\n (?>\n \"(?:(?:\\*(?!/))|(?:\\\\(?!\"))|[^*\\\\])*?\" | # [foo=\"bar\"] Double-quoted\n '(?:(?:\\*(?!/))|(?:\\\\(?!'))|[^*\\\\])*?' | # [foo='bar'] Single-quoted\n \\[ (?:(?:\\*(?!/))|[^*])*? \\] | # [foo=[1,2]] Array literal\n (?:(?:\\*(?!/))|\\s(?!\\s*\\])|\\[.*?(?:\\]|(?=\\*/))|[^*\\s\\[\\]])* # Everything else\n )*\n )\n)?\n\\s*(?:(\\])((?:[^*\\s]|\\*[^\\s/])+)?|(?=\\*/))", - "captures": { - "1": { - "name": "punctuation.definition.optional-value.begin.bracket.square.jsdoc" - }, - "2": { - "name": "keyword.operator.assignment.jsdoc" - }, - "3": { - "name": "source.embedded.mongodb" - }, - "4": { - "name": "punctuation.definition.optional-value.end.bracket.square.jsdoc" - }, - "5": { - "name": "invalid.illegal.syntax.jsdoc" - } - } - } - ] - }, - { - "begin": "(?x)\n(\n (@)\n (?:define|enum|exception|export|extends|lends|implements|modifies\n |namespace|private|protected|returns?|suppress|this|throws|type\n |yields?)\n)\n\\s+(?={)", - "beginCaptures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - } - }, - "end": "(?=\\s|\\*/|[^{}\\[\\]A-Za-z_$])", - "patterns": [ - { - "include": "#jsdoctype" - } - ] - }, - { - "match": "(?x)\n(\n (@)\n (?:alias|augments|callback|constructs|emits|event|fires|exports?\n |extends|external|function|func|host|lends|listens|interface|memberof!?\n |method|module|mixes|mixin|name|requires|see|this|typedef|uses)\n)\n\\s+\n(\n (?:\n [^{}@\\s*] | \\*[^/]\n )+\n)", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "entity.name.type.instance.jsdoc" - } - } - }, - { - "contentName": "variable.other.jsdoc", - "begin": "((@)(?:default(?:value)?|license|version))\\s+(([''\"]))", - "beginCaptures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "variable.other.jsdoc" - }, - "4": { - "name": "punctuation.definition.string.begin.jsdoc" - } - }, - "end": "(\\3)|(?=$|\\*/)", - "endCaptures": { - "0": { - "name": "variable.other.jsdoc" - }, - "1": { - "name": "punctuation.definition.string.end.jsdoc" - } - } - }, - { - "match": "((@)(?:default(?:value)?|license|tutorial|variation|version))\\s+([^\\s*]+)", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - }, - "3": { - "name": "variable.other.jsdoc" - } - } - }, - { - "name": "storage.type.class.jsdoc", - "match": "(?x) (@) (?:abstract|access|alias|api|arg|argument|async|attribute|augments|author|beta|borrows|bubbles |callback|chainable|class|classdesc|code|config|const|constant|constructor|constructs|copyright |default|defaultvalue|define|deprecated|desc|description|dict|emits|enum|event|example|exception |exports?|extends|extension(?:_?for)?|external|externs|file|fileoverview|final|fires|for|func |function|generator|global|hideconstructor|host|ignore|implements|implicitCast|inherit[Dd]oc |inner|instance|interface|internal|kind|lends|license|listens|main|member|memberof!?|method |mixes|mixins?|modifies|module|name|namespace|noalias|nocollapse|nocompile|nosideeffects |override|overview|package|param|polymer(?:Behavior)?|preserve|private|prop|property|protected |public|read[Oo]nly|record|require[ds]|returns?|see|since|static|struct|submodule|summary |suppress|template|this|throws|todo|tutorial|type|typedef|unrestricted|uses|var|variation |version|virtual|writeOnce|yields?) \\b", - "captures": { - "1": { - "name": "punctuation.definition.block.tag.jsdoc" - } - } - }, - { - "include": "#inline-tags" - }, - { - "match": "((@)(?:[_$[:alpha:]][_$[:alnum:]]*))(?=\\s+)", - "captures": { - "1": { - "name": "storage.type.class.jsdoc" - }, - "2": { - "name": "punctuation.definition.block.tag.jsdoc" - } - } - } - ] - }, - "brackets": { - "patterns": [ - { - "begin": "{", - "end": "}|(?=\\*/)", - "patterns": [ - { - "include": "#brackets" - } - ] - }, - { - "begin": "\\[", - "end": "\\]|(?=\\*/)", - "patterns": [ - { - "include": "#brackets" - } - ] - } - ] - }, - "inline-tags": { - "patterns": [ - { - "name": "constant.other.description.jsdoc", - "match": "(\\[)[^\\]]+(\\])(?={@(?:link|linkcode|linkplain|tutorial))", - "captures": { - "1": { - "name": "punctuation.definition.bracket.square.begin.jsdoc" - }, - "2": { - "name": "punctuation.definition.bracket.square.end.jsdoc" - } - } - }, - { - "name": "entity.name.type.instance.jsdoc", - "begin": "({)((@)(?:link(?:code|plain)?|tutorial))\\s*", - "beginCaptures": { - "1": { - "name": "punctuation.definition.bracket.curly.begin.jsdoc" - }, - "2": { - "name": "storage.type.class.jsdoc" - }, - "3": { - "name": "punctuation.definition.inline.tag.jsdoc" - } - }, - "end": "}|(?=\\*/)", - "endCaptures": { - "0": { - "name": "punctuation.definition.bracket.curly.end.jsdoc" - } - }, - "patterns": [ - { - "match": "\\G((?=https?://)(?:[^|}\\s*]|\\*[/])+)(\\|)?", - "captures": { - "1": { - "name": "variable.other.link.underline.jsdoc" - }, - "2": { - "name": "punctuation.separator.pipe.jsdoc" - } - } - }, - { - "match": "\\G((?:[^{}@\\s|*]|\\*[^/])+)(\\|)?", - "captures": { - "1": { - "name": "variable.other.description.jsdoc" - }, - "2": { - "name": "punctuation.separator.pipe.jsdoc" - } - } - } - ] - } - ] - }, - "jsdoctype": { - "patterns": [ - { - "name": "invalid.illegal.type.jsdoc", - "match": "\\G{(?:[^}*]|\\*[^/}])+$" - }, - { - "contentName": "entity.name.type.instance.jsdoc", - "begin": "\\G({)", - "beginCaptures": { - "0": { - "name": "entity.name.type.instance.jsdoc" - }, - "1": { - "name": "punctuation.definition.bracket.curly.begin.jsdoc" - } - }, - "end": "((}))\\s*|(?=\\*/)", - "endCaptures": { - "1": { - "name": "entity.name.type.instance.jsdoc" - }, - "2": { - "name": "punctuation.definition.bracket.curly.end.jsdoc" - } - }, - "patterns": [ - { - "include": "#brackets" - } - ] - } - ] - } - } -} \ No newline at end of file From 93fdf8c44a6eacbea9090f3608c54defd5cba4ed Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Thu, 2 Feb 2023 17:27:40 +0100 Subject: [PATCH 03/31] feat: save playgrounds as mongodb ext --- package-lock.json | 503 ++++++++++-------- package.json | 1 + src/editors/playgroundController.ts | 20 +- src/explorer/playgroundsTree.ts | 98 +--- src/mdbExtensionController.ts | 1 + .../suite/editors/codeActionProvider.test.ts | 1 + .../editors/playgroundController.test.ts | 5 + .../language/languageServerController.test.ts | 3 + src/utils/filesystem.ts | 90 ++++ 9 files changed, 411 insertions(+), 311 deletions(-) create mode 100644 src/utils/filesystem.ts diff --git a/package-lock.json b/package-lock.json index 05f68e5f8..8d1687c0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,16 +61,18 @@ "@types/enzyme": "^3.10.12", "@types/glob": "^7.2.0", "@types/jest": "^26.0.24", + "@types/micromatch": "^4.0.2", "@types/mocha": "^8.2.3", "@types/node": "^14.18.29", "@types/react": "^17.0.50", "@types/react-dom": "^17.0.17", "@types/sinon": "^9.0.11", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.71.0", + "@types/vscode": "^1.74.0", "@typescript-eslint/eslint-plugin": "^5.38.0", "@typescript-eslint/parser": "^5.38.0", "@vscode/test-electron": "^2.1.5", + "@vscode/vsce": "^2.16.0", "autoprefixer": "^9.8.8", "buffer": "^6.0.3", "chai": "^4.3.6", @@ -120,7 +122,7 @@ "ts-loader": "^9.4.1", "ts-node": "^10.9.1", "typescript": "^4.8.3", - "vsce": "^2.11.0", + "vscode-html-languageservice": "^5.0.3", "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "xvfb-maybe": "^0.2.1", @@ -2534,6 +2536,12 @@ "@babel/types": "^7.3.0" } }, + "node_modules/@types/braces": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.1.tgz", + "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==", + "dev": true + }, "node_modules/@types/chai": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", @@ -2765,6 +2773,15 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "node_modules/@types/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", + "dev": true, + "dependencies": { + "@types/braces": "*" + } + }, "node_modules/@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -2892,9 +2909,9 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.71.0.tgz", - "integrity": "sha512-nB50bBC9H/x2CpwW9FzRRRDrTZ7G0/POttJojvN/LiVfzTGfLyQIje1L1QRMdFXK9G41k5UJN/1B9S4of7CSzA==", + "version": "1.74.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.74.0.tgz", + "integrity": "sha512-LyeCIU3jb9d38w0MXFwta9r0Jx23ugujkAxdwLTNCyspdZTKUc43t7ppPbCiPoQ/Ivd/pnDFZrb4hWd45wrsgA==", "dev": true }, "node_modules/@types/webidl-conversions": { @@ -3125,6 +3142,12 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "node_modules/@vscode/l10n": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.11.tgz", + "integrity": "sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==", + "dev": true + }, "node_modules/@vscode/test-electron": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", @@ -3140,6 +3163,110 @@ "node": ">=8.9.3" } }, + "node_modules/@vscode/vsce": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.17.0.tgz", + "integrity": "sha512-W4HN5MtTVj/mroQU1d82bUEeWM3dUykMFnMYZPtZ6jrMiHN1PUoN3RGcS896N0r2rIq8KpWDtufcQHgK8VfgpA==", + "dev": true, + "dependencies": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^5.1.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.4.23", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 14" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/@vscode/vsce/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@vscode/vsce/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vscode/vsce/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@vscode/vsce/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, "node_modules/@vue/compiler-core": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.1.4.tgz", @@ -13001,15 +13128,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-validate/node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/jest-validate/node_modules/pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -13840,6 +13958,15 @@ "node": ">=0.10.0" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -21838,115 +21965,16 @@ "extsprintf": "^1.2.0" } }, - "node_modules/vsce": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.11.0.tgz", - "integrity": "sha512-pr9Y0va/HCer0tTifeqaUrK24JJSpRd6oLeF/PY6FtrY41e+lwxiAq6jfMXx4ShAZglYg2rFKoKROwa7E7SEqQ==", - "dev": true, - "dependencies": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "keytar": "^7.7.0", - "leven": "^3.1.0", - "markdown-it": "^12.3.2", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.4.23", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "bin": { - "vsce": "vsce" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/vsce/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/vsce/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/vsce/node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vsce/node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/vsce/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/vsce/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/vscode-html-languageservice": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.0.4.tgz", + "integrity": "sha512-tvrySfpglu4B2rQgWGVO/IL+skvU7kBkQotRlxA7ocSyRXOZUd6GA13XHkxo8LPe07KWjeoBlN1aVGqdfTK4xA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/vsce/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" + "@vscode/l10n": "^0.0.11", + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-languageserver-types": "^3.17.2", + "vscode-uri": "^3.0.7" } }, "node_modules/vscode-jsonrpc": { @@ -21991,15 +22019,21 @@ } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz", - "integrity": "sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" }, "node_modules/vscode-languageserver-types": { "version": "3.17.2", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" }, + "node_modules/vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", + "dev": true + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -24744,6 +24778,12 @@ "@babel/types": "^7.3.0" } }, + "@types/braces": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.1.tgz", + "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==", + "dev": true + }, "@types/chai": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", @@ -24962,6 +25002,15 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "@types/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==", + "dev": true, + "requires": { + "@types/braces": "*" + } + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -25089,9 +25138,9 @@ "dev": true }, "@types/vscode": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.71.0.tgz", - "integrity": "sha512-nB50bBC9H/x2CpwW9FzRRRDrTZ7G0/POttJojvN/LiVfzTGfLyQIje1L1QRMdFXK9G41k5UJN/1B9S4of7CSzA==", + "version": "1.74.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.74.0.tgz", + "integrity": "sha512-LyeCIU3jb9d38w0MXFwta9r0Jx23ugujkAxdwLTNCyspdZTKUc43t7ppPbCiPoQ/Ivd/pnDFZrb4hWd45wrsgA==", "dev": true }, "@types/webidl-conversions": { @@ -25231,6 +25280,12 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "@vscode/l10n": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.11.tgz", + "integrity": "sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==", + "dev": true + }, "@vscode/test-electron": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", @@ -25243,6 +25298,86 @@ "unzipper": "^0.10.11" } }, + "@vscode/vsce": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.17.0.tgz", + "integrity": "sha512-W4HN5MtTVj/mroQU1d82bUEeWM3dUykMFnMYZPtZ6jrMiHN1PUoN3RGcS896N0r2rIq8KpWDtufcQHgK8VfgpA==", + "dev": true, + "requires": { + "azure-devops-node-api": "^11.0.1", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "commander": "^6.1.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "keytar": "^7.7.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^5.1.0", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.4.23", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + } + } + }, "@vue/compiler-core": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.1.4.tgz", @@ -33555,12 +33690,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, "pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -34033,6 +34162,12 @@ } } }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -40425,90 +40560,16 @@ "extsprintf": "^1.2.0" } }, - "vsce": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.11.0.tgz", - "integrity": "sha512-pr9Y0va/HCer0tTifeqaUrK24JJSpRd6oLeF/PY6FtrY41e+lwxiAq6jfMXx4ShAZglYg2rFKoKROwa7E7SEqQ==", + "vscode-html-languageservice": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.0.4.tgz", + "integrity": "sha512-tvrySfpglu4B2rQgWGVO/IL+skvU7kBkQotRlxA7ocSyRXOZUd6GA13XHkxo8LPe07KWjeoBlN1aVGqdfTK4xA==", "dev": true, "requires": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "keytar": "^7.7.0", - "leven": "^3.1.0", - "markdown-it": "^12.3.2", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.4.23", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - } + "@vscode/l10n": "^0.0.11", + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-languageserver-types": "^3.17.2", + "vscode-uri": "^3.0.7" } }, "vscode-jsonrpc": { @@ -40544,15 +40605,21 @@ } }, "vscode-languageserver-textdocument": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz", - "integrity": "sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==" }, "vscode-languageserver-types": { "version": "3.17.2", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" }, + "vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", + "dev": true + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", diff --git a/package.json b/package.json index 255654606..73243884e 100644 --- a/package.json +++ b/package.json @@ -990,6 +990,7 @@ "@types/enzyme": "^3.10.12", "@types/glob": "^7.2.0", "@types/jest": "^26.0.24", + "@types/micromatch": "^4.0.2", "@types/mocha": "^8.2.3", "@types/node": "^14.18.29", "@types/react": "^17.0.50", diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index d6e5e83f2..159824e63 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -1,6 +1,8 @@ import * as vscode from 'vscode'; +import path from 'path'; import { OutputChannel, ProgressLocation, TextEditor } from 'vscode'; import vm from 'vm'; +import * as os from 'os'; // eslint-disable-next-line @typescript-eslint/no-unused-vars import * as util from 'util'; @@ -37,6 +39,7 @@ import playgroundSearchTemplate from '../templates/playgroundSearchTemplate'; import playgroundTemplate from '../templates/playgroundTemplate'; import { StatusView } from '../views'; import TelemetryService from '../telemetry/telemetryService'; +import { readDirectory } from '../utils/filesystem'; const log = createLogger('playground controller'); const transpiler = require('bson-transpilers'); @@ -95,6 +98,7 @@ const countAggregationStagesInString = (str: string) => { * This controller manages playground. */ export default class PlaygroundController { + _context: vscode.ExtensionContext; _connectionController: ConnectionController; _activeTextEditor?: TextEditor; _playgroundResult?: PlaygroundResult; @@ -117,6 +121,7 @@ export default class PlaygroundController { private _codeToEvaluate = ''; constructor( + context: vscode.ExtensionContext, connectionController: ConnectionController, languageServerController: LanguageServerController, telemetryService: TelemetryService, @@ -127,6 +132,7 @@ export default class PlaygroundController { codeActionProvider: CodeActionProvider, explorerController: ExplorerController ) { + this._context = context; this._connectionController = connectionController; this._languageServerController = languageServerController; this._telemetryService = telemetryService; @@ -257,10 +263,18 @@ export default class PlaygroundController { content: string | undefined ): Promise { try { - // Create untitled file. const numberUntitledDocuments = vscode.workspace.textDocuments.filter((doc) => (doc.uri.scheme === 'untitled')).length; - const fileName = `Untitled-${numberUntitledDocuments + 1}`; - const newUri = vscode.Uri.file(fileName).with({ scheme: 'untitled', fragment: 'mongodb' }); // http://localhost/?#mongodb + const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; + const filePath = workspaceFolder?.uri.fsPath || os.tmpdir(); + const playgrounds = await readDirectory(filePath); + const numberSavedPlaygrounds = playgrounds.length; + const fileName = path.join(filePath, `Untitled-${numberUntitledDocuments + numberSavedPlaygrounds + 1}.mongodb`); + + // Create untitled file: untitled:/extensionPath/Untitled-1#mongodb + const newUri = vscode.Uri.file(fileName).with({ + scheme: 'untitled', + fragment: 'mongodb' + }); // Before: vscode.workspace.openTextDocument({ language: 'mongodb', content }); const document = await vscode.workspace.openTextDocument(newUri); diff --git a/src/explorer/playgroundsTree.ts b/src/explorer/playgroundsTree.ts index 09e3fb18c..00c98cf72 100644 --- a/src/explorer/playgroundsTree.ts +++ b/src/explorer/playgroundsTree.ts @@ -1,57 +1,13 @@ import * as vscode from 'vscode'; -import * as fs from 'fs'; -import * as path from 'path'; import PlaygroundsTreeHeader from './playgroundsTreeHeader'; import { PLAYGROUND_ITEM } from './playgroundsTreeItem'; import { createLogger } from '../logging'; import PlaygroundsTreeItem from './playgroundsTreeItem'; import EXTENSION_COMMANDS from '../commands'; +import { readDirectory } from '../utils/filesystem'; -const micromatch = require('micromatch'); const log = createLogger('playgrounds tree controller'); -export class FileStat implements vscode.FileStat { - constructor(private fsStat: fs.Stats) {} - - get type(): vscode.FileType { - if (this.fsStat.isFile()) { - return vscode.FileType.File; - } - if (this.fsStat.isDirectory()) { - return vscode.FileType.Directory; - } - if (this.fsStat.isSymbolicLink()) { - return vscode.FileType.SymbolicLink; - } - - return vscode.FileType.Unknown; - } - - get isFile(): boolean | undefined { - return this.fsStat.isFile(); - } - - get isDirectory(): boolean | undefined { - return this.fsStat.isDirectory(); - } - - get isSymbolicLink(): boolean | undefined { - return this.fsStat.isSymbolicLink(); - } - - get size(): number { - return this.fsStat.size; - } - - get ctime(): number { - return this.fsStat.ctime.getTime(); - } - - get mtime(): number { - return this.fsStat.mtime.getTime(); - } -} - export default class PlaygroundsTree implements vscode.TreeDataProvider { @@ -144,54 +100,16 @@ export default class PlaygroundsTree return element; } - private async getFileNames(filePath: string): Promise { - return await fs.promises.readdir(filePath); - } - - private async stat(filePath: string): Promise { - return await fs.promises.stat(filePath); - } - - private async getStat(filePath: string): Promise { - return new FileStat(await this.stat(filePath)); - } - - public async readDirectory(uri: vscode.Uri): Promise { - const fileNames = await this.getFileNames(uri.fsPath); - - for (let i = 0; i < fileNames.length; i++) { - const fileName = fileNames[i]; - - try { - const stat = await this.getStat(path.join(uri.fsPath, fileName)); - const fileUri = vscode.Uri.file(path.join(uri.fsPath, fileName)); - const fileNameParts = fileName.split('.'); - - if ( - stat.type === vscode.FileType.File && - fileNameParts.length > 1 && - fileNameParts.pop() === 'mongodb' - ) { - this._playgroundsTreeItems[fileUri.fsPath] = new PlaygroundsTreeItem( - fileName, - fileUri.fsPath - ); - } else if ( - stat.type === vscode.FileType.Directory && - !micromatch.isMatch(fileName, this.excludeFromPlaygroundsSearch) - ) { - await this.readDirectory(fileUri); - } - } catch (error) { - /* */ - } - } - } - public async getPlaygrounds(folderUri: vscode.Uri): Promise { + const playgrounds = await readDirectory(folderUri.fsPath); this._playgroundsTreeItems = {}; - await this.readDirectory(folderUri); + playgrounds.forEach(element => { + this._playgroundsTreeItems[element.path] = new PlaygroundsTreeItem( + element.name, + element.path + ); + }); return this._playgroundsTreeItems; } diff --git a/src/mdbExtensionController.ts b/src/mdbExtensionController.ts index 418f50b2b..45cc5bec9 100644 --- a/src/mdbExtensionController.ts +++ b/src/mdbExtensionController.ts @@ -98,6 +98,7 @@ export default class MDBExtensionController implements vscode.Disposable { new ExportToLanguageCodeLensProvider(); this._codeActionProvider = new CodeActionProvider(); this._playgroundController = new PlaygroundController( + context, this._connectionController, this._languageServerController, this._telemetryService, diff --git a/src/test/suite/editors/codeActionProvider.test.ts b/src/test/suite/editors/codeActionProvider.test.ts index 43cbfbe8e..540a2c5d6 100644 --- a/src/test/suite/editors/codeActionProvider.test.ts +++ b/src/test/suite/editors/codeActionProvider.test.ts @@ -53,6 +53,7 @@ suite('Code Action Provider Test Suite', function () { mdbTestExtension.testExtensionController._playgroundController = new PlaygroundController( + testExtensionContext, mdbTestExtension.testExtensionController._connectionController, mdbTestExtension.testExtensionController._languageServerController, mdbTestExtension.testExtensionController._telemetryService, diff --git a/src/test/suite/editors/playgroundController.test.ts b/src/test/suite/editors/playgroundController.test.ts index 760b28e77..5e2690fa2 100644 --- a/src/test/suite/editors/playgroundController.test.ts +++ b/src/test/suite/editors/playgroundController.test.ts @@ -62,7 +62,10 @@ suite('Playground Controller Test Suite', function () { const testExplorerController = new ExplorerController( testConnectionController ); + const testExtensionContext = new TestExtensionContext(); + testExtensionContext.extensionPath = '../../'; const testPlaygroundController = new PlaygroundController( + testExtensionContext, testConnectionController, mockLanguageServerController as LanguageServerController, testTelemetryService, @@ -459,6 +462,7 @@ suite('Playground Controller Test Suite', function () { testConnectionController ); const playgroundControllerTest = new PlaygroundController( + testExtensionContext, testConnectionController, mockLanguageServerController as LanguageServerController, testTelemetryService, @@ -480,6 +484,7 @@ suite('Playground Controller Test Suite', function () { testConnectionController ); const playgroundControllerTest = new PlaygroundController( + testExtensionContext, testConnectionController, mockLanguageServerController as LanguageServerController, testTelemetryService, diff --git a/src/test/suite/language/languageServerController.test.ts b/src/test/suite/language/languageServerController.test.ts index facfb09b4..9ee9a5cd1 100644 --- a/src/test/suite/language/languageServerController.test.ts +++ b/src/test/suite/language/languageServerController.test.ts @@ -59,7 +59,10 @@ suite('Language Server Controller Test Suite', () => { const testExportToLanguageCodeLensProvider = new ExportToLanguageCodeLensProvider(); const testCodeActionProvider = new CodeActionProvider(); + const testExtensionContext = new TestExtensionContext(); + testExtensionContext.extensionPath = '../../'; const testPlaygroundController = new PlaygroundController( + testExtensionContext, testConnectionController, testLanguageServerController, testTelemetryService, diff --git a/src/utils/filesystem.ts b/src/utils/filesystem.ts new file mode 100644 index 000000000..b43e62baf --- /dev/null +++ b/src/utils/filesystem.ts @@ -0,0 +1,90 @@ +import * as vscode from 'vscode'; +import micromatch from 'micromatch'; +import * as fs from 'fs'; +import * as path from 'path'; + +export class FileStat implements vscode.FileStat { + constructor(private fsStat: fs.Stats) {} + + get type(): vscode.FileType { + if (this.fsStat.isFile()) { + return vscode.FileType.File; + } + if (this.fsStat.isDirectory()) { + return vscode.FileType.Directory; + } + if (this.fsStat.isSymbolicLink()) { + return vscode.FileType.SymbolicLink; + } + + return vscode.FileType.Unknown; + } + + get isFile(): boolean | undefined { + return this.fsStat.isFile(); + } + + get isDirectory(): boolean | undefined { + return this.fsStat.isDirectory(); + } + + get isSymbolicLink(): boolean | undefined { + return this.fsStat.isSymbolicLink(); + } + + get size(): number { + return this.fsStat.size; + } + + get ctime(): number { + return this.fsStat.ctime.getTime(); + } + + get mtime(): number { + return this.fsStat.mtime.getTime(); + } +} + +const getFileNames = (filePath: string): Promise => { + return fs.promises.readdir(filePath); +} + +const getStat = async (filePath: string): Promise => { + return new FileStat(await stat(filePath)); +} + +const stat = (filePath: string): Promise => { + return fs.promises.stat(filePath); +} + +export const readDirectory = async (fsPath: string, excludeFromPlaygroundsSearch?: string[]): Promise<{ name: string, path: string }[]> => { + const fileNames = await getFileNames(fsPath); + const playgrounds: { name: string, path: string }[] = []; + + for (let i = 0; i < fileNames.length; i++) { + const fileName = fileNames[i]; + + try { + const stat = await getStat(path.join(fsPath, fileName)); + const fileUri = vscode.Uri.file(path.join(fsPath, fileName)); + const fileNameParts = fileName.split('.'); + + if ( + stat.type === vscode.FileType.File && + fileNameParts.length > 1 && + fileNameParts.pop() === 'mongodb' + ) { + playgrounds.push({ name: fileName, path: fileUri.fsPath }); + } else if ( + (stat.type === vscode.FileType.Directory && !excludeFromPlaygroundsSearch) || + (stat.type === vscode.FileType.Directory && excludeFromPlaygroundsSearch && !micromatch.isMatch(fileName, excludeFromPlaygroundsSearch)) + ) { + await readDirectory(fileUri.fsPath); + } + } catch (error) { + /* */ + } + } + + return playgrounds; +} From 4b3c70c18f4ff17ec1ec5c6b3d0a1d3d25a7a06a Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Thu, 2 Feb 2023 17:43:39 +0100 Subject: [PATCH 04/31] docs: add comment about read-only root --- src/editors/playgroundController.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index 159824e63..a441764f8 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -265,6 +265,9 @@ export default class PlaygroundController { try { const numberUntitledDocuments = vscode.workspace.textDocuments.filter((doc) => (doc.uri.scheme === 'untitled')).length; const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; + // The MacOS default folder for saving files would be the read-only root (/) directory, + // therefore we explicitly specify the workspace folder path + // or OS temp directory if a user has not opened workspaces. const filePath = workspaceFolder?.uri.fsPath || os.tmpdir(); const playgrounds = await readDirectory(filePath); const numberSavedPlaygrounds = playgrounds.length; From 78647685b2cee8a6b3078d3e1b9a8f2b0deb2ad0 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Thu, 2 Feb 2023 18:09:33 +0100 Subject: [PATCH 05/31] refactor: clean up --- package.json | 1 - src/editors/playgroundController.ts | 6 ------ src/mdbExtensionController.ts | 1 - src/test/suite/editors/codeActionProvider.test.ts | 1 - src/test/suite/editors/playgroundController.test.ts | 5 ----- src/test/suite/language/languageServerController.test.ts | 3 --- 6 files changed, 17 deletions(-) diff --git a/package.json b/package.json index 73243884e..ba627e104 100644 --- a/package.json +++ b/package.json @@ -1051,7 +1051,6 @@ "ts-loader": "^9.4.1", "ts-node": "^10.9.1", "typescript": "^4.8.3", - "vscode-html-languageservice": "^5.0.3", "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "xvfb-maybe": "^0.2.1", diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index a441764f8..cf1fc74b9 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -4,9 +4,6 @@ import { OutputChannel, ProgressLocation, TextEditor } from 'vscode'; import vm from 'vm'; import * as os from 'os'; -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import * as util from 'util'; - import ActiveConnectionCodeLensProvider from './activeConnectionCodeLensProvider'; import CodeActionProvider from './codeActionProvider'; import ConnectionController, { @@ -98,7 +95,6 @@ const countAggregationStagesInString = (str: string) => { * This controller manages playground. */ export default class PlaygroundController { - _context: vscode.ExtensionContext; _connectionController: ConnectionController; _activeTextEditor?: TextEditor; _playgroundResult?: PlaygroundResult; @@ -121,7 +117,6 @@ export default class PlaygroundController { private _codeToEvaluate = ''; constructor( - context: vscode.ExtensionContext, connectionController: ConnectionController, languageServerController: LanguageServerController, telemetryService: TelemetryService, @@ -132,7 +127,6 @@ export default class PlaygroundController { codeActionProvider: CodeActionProvider, explorerController: ExplorerController ) { - this._context = context; this._connectionController = connectionController; this._languageServerController = languageServerController; this._telemetryService = telemetryService; diff --git a/src/mdbExtensionController.ts b/src/mdbExtensionController.ts index 45cc5bec9..418f50b2b 100644 --- a/src/mdbExtensionController.ts +++ b/src/mdbExtensionController.ts @@ -98,7 +98,6 @@ export default class MDBExtensionController implements vscode.Disposable { new ExportToLanguageCodeLensProvider(); this._codeActionProvider = new CodeActionProvider(); this._playgroundController = new PlaygroundController( - context, this._connectionController, this._languageServerController, this._telemetryService, diff --git a/src/test/suite/editors/codeActionProvider.test.ts b/src/test/suite/editors/codeActionProvider.test.ts index 540a2c5d6..43cbfbe8e 100644 --- a/src/test/suite/editors/codeActionProvider.test.ts +++ b/src/test/suite/editors/codeActionProvider.test.ts @@ -53,7 +53,6 @@ suite('Code Action Provider Test Suite', function () { mdbTestExtension.testExtensionController._playgroundController = new PlaygroundController( - testExtensionContext, mdbTestExtension.testExtensionController._connectionController, mdbTestExtension.testExtensionController._languageServerController, mdbTestExtension.testExtensionController._telemetryService, diff --git a/src/test/suite/editors/playgroundController.test.ts b/src/test/suite/editors/playgroundController.test.ts index 5e2690fa2..760b28e77 100644 --- a/src/test/suite/editors/playgroundController.test.ts +++ b/src/test/suite/editors/playgroundController.test.ts @@ -62,10 +62,7 @@ suite('Playground Controller Test Suite', function () { const testExplorerController = new ExplorerController( testConnectionController ); - const testExtensionContext = new TestExtensionContext(); - testExtensionContext.extensionPath = '../../'; const testPlaygroundController = new PlaygroundController( - testExtensionContext, testConnectionController, mockLanguageServerController as LanguageServerController, testTelemetryService, @@ -462,7 +459,6 @@ suite('Playground Controller Test Suite', function () { testConnectionController ); const playgroundControllerTest = new PlaygroundController( - testExtensionContext, testConnectionController, mockLanguageServerController as LanguageServerController, testTelemetryService, @@ -484,7 +480,6 @@ suite('Playground Controller Test Suite', function () { testConnectionController ); const playgroundControllerTest = new PlaygroundController( - testExtensionContext, testConnectionController, mockLanguageServerController as LanguageServerController, testTelemetryService, diff --git a/src/test/suite/language/languageServerController.test.ts b/src/test/suite/language/languageServerController.test.ts index 9ee9a5cd1..facfb09b4 100644 --- a/src/test/suite/language/languageServerController.test.ts +++ b/src/test/suite/language/languageServerController.test.ts @@ -59,10 +59,7 @@ suite('Language Server Controller Test Suite', () => { const testExportToLanguageCodeLensProvider = new ExportToLanguageCodeLensProvider(); const testCodeActionProvider = new CodeActionProvider(); - const testExtensionContext = new TestExtensionContext(); - testExtensionContext.extensionPath = '../../'; const testPlaygroundController = new PlaygroundController( - testExtensionContext, testConnectionController, testLanguageServerController, testTelemetryService, From be082150b3a80f79a3f4800a0c9f234591e97923 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Fri, 3 Feb 2023 12:27:31 +0100 Subject: [PATCH 06/31] refactor: better handling new files --- .../activeConnectionCodeLensProvider.ts | 5 +- src/editors/codeActionProvider.ts | 3 +- src/editors/playgroundController.ts | 55 +++++++++---------- src/explorer/playgroundsTree.ts | 2 +- src/utils/{filesystem.ts => playground.ts} | 32 +++++++++-- 5 files changed, 59 insertions(+), 38 deletions(-) rename src/utils/{filesystem.ts => playground.ts} (75%) diff --git a/src/editors/activeConnectionCodeLensProvider.ts b/src/editors/activeConnectionCodeLensProvider.ts index 4e61ddc5b..f3bf327e6 100644 --- a/src/editors/activeConnectionCodeLensProvider.ts +++ b/src/editors/activeConnectionCodeLensProvider.ts @@ -2,6 +2,7 @@ import * as vscode from 'vscode'; import { TextEditor } from 'vscode'; import EXTENSION_COMMANDS from '../commands'; import ConnectionController from '../connectionController'; +import { isPlayground } from '../utils/playground'; export default class ActiveConnectionCodeLensProvider implements vscode.CodeLensProvider @@ -16,6 +17,7 @@ export default class ActiveConnectionCodeLensProvider constructor(connectionController: ConnectionController) { this._connectionController = connectionController; + this._activeTextEditor = vscode.window.activeTextEditor; vscode.workspace.onDidChangeConfiguration(() => { this._onDidChangeCodeLenses.fire(); @@ -34,7 +36,8 @@ export default class ActiveConnectionCodeLensProvider provideCodeLenses(): vscode.CodeLens[] { const editorUri = this._activeTextEditor?.document.uri; - if (editorUri?.fragment !== 'mongodb' && editorUri?.path.split('.').pop() !== 'mongodb') { + + if (!isPlayground(editorUri)) { return []; } diff --git a/src/editors/codeActionProvider.ts b/src/editors/codeActionProvider.ts index 017e0f439..d3f9881c6 100644 --- a/src/editors/codeActionProvider.ts +++ b/src/editors/codeActionProvider.ts @@ -3,6 +3,7 @@ import { TextEditor } from 'vscode'; import EXTENSION_COMMANDS from '../commands'; import { ExportToLanguageMode } from '../types/playgroundType'; +import { isPlayground } from '../utils/playground'; export default class CodeActionProvider implements vscode.CodeActionProvider { _onDidChangeCodeCodeAction: vscode.EventEmitter = @@ -42,7 +43,7 @@ export default class CodeActionProvider implements vscode.CodeActionProvider { provideCodeActions(): vscode.CodeAction[] | undefined { const editorUri = this._activeTextEditor?.document.uri; - if (!this.selection || (editorUri?.fragment !== 'mongodb' && editorUri?.path.split('.').pop() !== 'mongodb')) { + if (!this.selection || !isPlayground(editorUri)) { return; } diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index cf1fc74b9..1ecbd3727 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -36,7 +36,7 @@ import playgroundSearchTemplate from '../templates/playgroundSearchTemplate'; import playgroundTemplate from '../templates/playgroundTemplate'; import { StatusView } from '../views'; import TelemetryService from '../telemetry/telemetryService'; -import { readDirectory } from '../utils/filesystem'; +import { isPlayground } from '../utils/playground'; const log = createLogger('playground controller'); const transpiler = require('bson-transpilers'); @@ -128,6 +128,7 @@ export default class PlaygroundController { explorerController: ExplorerController ) { this._connectionController = connectionController; + this._activeTextEditor = vscode.window.activeTextEditor; this._languageServerController = languageServerController; this._telemetryService = telemetryService; this._statusView = statusView; @@ -154,7 +155,7 @@ export default class PlaygroundController { this._playgroundResultTextDocument = editor?.document; } - if (editor?.document.uri.fragment === 'mongodb' || editor?.document.uri.path.split('.').pop() === 'mongodb') { + if (isPlayground(editor?.document.uri)) { void vscode.commands.executeCommand('setContext', 'mdb.showRunPlaygroundButton', true); } else { void vscode.commands.executeCommand('setContext', 'mdb.showRunPlaygroundButton', false); @@ -167,7 +168,7 @@ export default class PlaygroundController { }; vscode.workspace.textDocuments.forEach((document) => { - if (document.uri.path.split('.').pop() === 'mongodb') { + if (isPlayground(document.uri)) { void vscode.languages.setTextDocumentLanguage( document, 'javascript' @@ -179,7 +180,7 @@ export default class PlaygroundController { onDidChangeActiveTextEditor(vscode.window.activeTextEditor); vscode.workspace.onDidOpenTextDocument(async (document) => { - if (document.uri.path.split('.').pop() === 'mongodb') { + if (isPlayground(document.uri)) { await vscode.languages.setTextDocumentLanguage( document, 'javascript' @@ -189,7 +190,7 @@ export default class PlaygroundController { vscode.window.onDidChangeTextEditorSelection( async (changeEvent: vscode.TextEditorSelectionChangeEvent) => { - if (changeEvent?.textEditor?.document?.uri.fragment !== 'mongodb') { + if (isPlayground(changeEvent?.textEditor?.document?.uri)) { return; } @@ -257,36 +258,38 @@ export default class PlaygroundController { content: string | undefined ): Promise { try { - const numberUntitledDocuments = vscode.workspace.textDocuments.filter((doc) => (doc.uri.scheme === 'untitled')).length; - const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; // The MacOS default folder for saving files would be the read-only root (/) directory, // therefore we explicitly specify the workspace folder path // or OS temp directory if a user has not opened workspaces. + const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; const filePath = workspaceFolder?.uri.fsPath || os.tmpdir(); - const playgrounds = await readDirectory(filePath); - const numberSavedPlaygrounds = playgrounds.length; - const fileName = path.join(filePath, `Untitled-${numberUntitledDocuments + numberSavedPlaygrounds + 1}.mongodb`); - // Create untitled file: untitled:/extensionPath/Untitled-1#mongodb - const newUri = vscode.Uri.file(fileName).with({ + const numberUntitledPlaygrounds = vscode.workspace.textDocuments.filter((doc) => isPlayground(doc.uri)).length; + const fileName = path.join(filePath, `playground-${numberUntitledPlaygrounds + 1}.mongodb`); + + // Create untitled file: untitled:/extensionPath/playground-1.mongodb.js#mongodb + // Before: vscode.workspace.openTextDocument({ language: 'mongodb', content }); + const documentUri = vscode.Uri.from({ + path: fileName, scheme: 'untitled', fragment: 'mongodb' }); - // Before: vscode.workspace.openTextDocument({ language: 'mongodb', content }); - const document = await vscode.workspace.openTextDocument(newUri); - await vscode.languages.setTextDocumentLanguage( - document, - 'javascript' - ); - // Fill in initial content. const edit = new vscode.WorkspaceEdit(); - edit.insert(newUri, new vscode.Position(0, 0), `${content}`); + edit.insert(documentUri, new vscode.Position(0, 0), `${content}`); await vscode.workspace.applyEdit(edit); // Actually show the editor. - await vscode.commands.executeCommand('vscode.open', newUri); + // await vscode.commands.executeCommand('vscode.open', documentUri); + const document = await vscode.workspace.openTextDocument(documentUri); + + // Ensure that the playground language is JavaScript. + await vscode.languages.setTextDocumentLanguage( + document, + 'javascript' + ); + await vscode.window.showTextDocument(document); return true; } catch (error) { @@ -572,10 +575,7 @@ export default class PlaygroundController { } runAllPlaygroundBlocks(): Promise { - if ( - !this._activeTextEditor || - this._activeTextEditor.document.uri.fragment !== 'mongodb' - ) { + if (!this._activeTextEditor || !isPlayground(this._activeTextEditor.document.uri)) { void vscode.window.showErrorMessage( "Please open a '.mongodb' playground file before running it." ); @@ -590,10 +590,7 @@ export default class PlaygroundController { } runAllOrSelectedPlaygroundBlocks(): Promise { - if ( - !this._activeTextEditor || - this._activeTextEditor.document.uri.fragment !== 'mongodb' - ) { + if (!this._activeTextEditor || !isPlayground(this._activeTextEditor.document.uri)) { void vscode.window.showErrorMessage( "Please open a '.mongodb' playground file before running it." ); diff --git a/src/explorer/playgroundsTree.ts b/src/explorer/playgroundsTree.ts index 00c98cf72..d5f2f5cc9 100644 --- a/src/explorer/playgroundsTree.ts +++ b/src/explorer/playgroundsTree.ts @@ -4,7 +4,7 @@ import { PLAYGROUND_ITEM } from './playgroundsTreeItem'; import { createLogger } from '../logging'; import PlaygroundsTreeItem from './playgroundsTreeItem'; import EXTENSION_COMMANDS from '../commands'; -import { readDirectory } from '../utils/filesystem'; +import { readDirectory } from '../utils/playground'; const log = createLogger('playgrounds tree controller'); diff --git a/src/utils/filesystem.ts b/src/utils/playground.ts similarity index 75% rename from src/utils/filesystem.ts rename to src/utils/playground.ts index b43e62baf..5a4e3018d 100644 --- a/src/utils/filesystem.ts +++ b/src/utils/playground.ts @@ -57,6 +57,31 @@ const stat = (filePath: string): Promise => { return fs.promises.stat(filePath); } +export const isPlayground = (fileUri?: vscode.Uri) => { + if (!fileUri) { + return false; + } + + if (fileUri.scheme === 'untitled' && fileUri.fragment === 'mongodb') { + return true; + } + + const fileNameParts = fileUri.fsPath.split('.'); + + if (fileNameParts.length < 2) { + return false; + } + + if (fileNameParts.length === 2) { + return fileNameParts[fileNameParts.length - 1] === 'mongodb'; + } + + const extension = fileNameParts[fileNameParts.length - 1]; + const secondaryExtension = fileNameParts[fileNameParts.length - 2]; + + return fileNameParts.length > 1 && (extension === 'mongodb' || (extension === 'js' && secondaryExtension === 'mongodb')); +} + export const readDirectory = async (fsPath: string, excludeFromPlaygroundsSearch?: string[]): Promise<{ name: string, path: string }[]> => { const fileNames = await getFileNames(fsPath); const playgrounds: { name: string, path: string }[] = []; @@ -67,13 +92,8 @@ export const readDirectory = async (fsPath: string, excludeFromPlaygroundsSearch try { const stat = await getStat(path.join(fsPath, fileName)); const fileUri = vscode.Uri.file(path.join(fsPath, fileName)); - const fileNameParts = fileName.split('.'); - if ( - stat.type === vscode.FileType.File && - fileNameParts.length > 1 && - fileNameParts.pop() === 'mongodb' - ) { + if (stat.type === vscode.FileType.File && isPlayground(fileUri)) { playgrounds.push({ name: fileName, path: fileUri.fsPath }); } else if ( (stat.type === vscode.FileType.Directory && !excludeFromPlaygroundsSearch) || From 5b3cc4f34724d52c6bff2f940b722a5852318db0 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Fri, 3 Feb 2023 12:32:18 +0100 Subject: [PATCH 07/31] refactor: drop fragment --- src/editors/playgroundController.ts | 9 +++------ src/utils/playground.ts | 6 ++---- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index 1ecbd3727..90b6e7f80 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -267,13 +267,9 @@ export default class PlaygroundController { const numberUntitledPlaygrounds = vscode.workspace.textDocuments.filter((doc) => isPlayground(doc.uri)).length; const fileName = path.join(filePath, `playground-${numberUntitledPlaygrounds + 1}.mongodb`); - // Create untitled file: untitled:/extensionPath/playground-1.mongodb.js#mongodb + // Create untitled file: untitled:/extensionPath/playground-1.mongodb.js // Before: vscode.workspace.openTextDocument({ language: 'mongodb', content }); - const documentUri = vscode.Uri.from({ - path: fileName, - scheme: 'untitled', - fragment: 'mongodb' - }); + const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled' }); // Fill in initial content. const edit = new vscode.WorkspaceEdit(); @@ -289,6 +285,7 @@ export default class PlaygroundController { document, 'javascript' ); + // Focus new text document. await vscode.window.showTextDocument(document); return true; diff --git a/src/utils/playground.ts b/src/utils/playground.ts index 5a4e3018d..f0e3ee38a 100644 --- a/src/utils/playground.ts +++ b/src/utils/playground.ts @@ -62,20 +62,18 @@ export const isPlayground = (fileUri?: vscode.Uri) => { return false; } - if (fileUri.scheme === 'untitled' && fileUri.fragment === 'mongodb') { - return true; - } - const fileNameParts = fileUri.fsPath.split('.'); if (fileNameParts.length < 2) { return false; } + // Allow users to save playgrounds with `.mongodb` extension. if (fileNameParts.length === 2) { return fileNameParts[fileNameParts.length - 1] === 'mongodb'; } + // The default playgrounds extension is `.mongodb.js`. const extension = fileNameParts[fileNameParts.length - 1]; const secondaryExtension = fileNameParts[fileNameParts.length - 2]; From ed9554cfad4ee28de621412a674f7ca59df48fd8 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Thu, 16 Feb 2023 18:45:16 +0100 Subject: [PATCH 08/31] feat: add mongodb grammar injection --- package-lock.json | 49 ----------------------- package.json | 7 ++++ src/editors/playgroundController.ts | 12 ++---- src/language/server.ts | 2 +- syntaxes/mongodbInjection.tmLanguage.json | 24 +++++++++++ 5 files changed, 35 insertions(+), 59 deletions(-) create mode 100644 syntaxes/mongodbInjection.tmLanguage.json diff --git a/package-lock.json b/package-lock.json index 8d1687c0e..4bbf74698 100644 --- a/package-lock.json +++ b/package-lock.json @@ -122,7 +122,6 @@ "ts-loader": "^9.4.1", "ts-node": "^10.9.1", "typescript": "^4.8.3", - "vscode-html-languageservice": "^5.0.3", "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "xvfb-maybe": "^0.2.1", @@ -3142,12 +3141,6 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "node_modules/@vscode/l10n": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.11.tgz", - "integrity": "sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==", - "dev": true - }, "node_modules/@vscode/test-electron": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", @@ -21965,18 +21958,6 @@ "extsprintf": "^1.2.0" } }, - "node_modules/vscode-html-languageservice": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.0.4.tgz", - "integrity": "sha512-tvrySfpglu4B2rQgWGVO/IL+skvU7kBkQotRlxA7ocSyRXOZUd6GA13XHkxo8LPe07KWjeoBlN1aVGqdfTK4xA==", - "dev": true, - "dependencies": { - "@vscode/l10n": "^0.0.11", - "vscode-languageserver-textdocument": "^1.0.8", - "vscode-languageserver-types": "^3.17.2", - "vscode-uri": "^3.0.7" - } - }, "node_modules/vscode-jsonrpc": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz", @@ -22028,12 +22009,6 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" }, - "node_modules/vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", - "dev": true - }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -25280,12 +25255,6 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "@vscode/l10n": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.11.tgz", - "integrity": "sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA==", - "dev": true - }, "@vscode/test-electron": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", @@ -40560,18 +40529,6 @@ "extsprintf": "^1.2.0" } }, - "vscode-html-languageservice": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.0.4.tgz", - "integrity": "sha512-tvrySfpglu4B2rQgWGVO/IL+skvU7kBkQotRlxA7ocSyRXOZUd6GA13XHkxo8LPe07KWjeoBlN1aVGqdfTK4xA==", - "dev": true, - "requires": { - "@vscode/l10n": "^0.0.11", - "vscode-languageserver-textdocument": "^1.0.8", - "vscode-languageserver-types": "^3.17.2", - "vscode-uri": "^3.0.7" - } - }, "vscode-jsonrpc": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz", @@ -40614,12 +40571,6 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" }, - "vscode-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", - "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", - "dev": true - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", diff --git a/package.json b/package.json index ba627e104..6bb5b7edb 100644 --- a/package.json +++ b/package.json @@ -122,6 +122,13 @@ ] } ], + "grammars": [ + { + "path": "./syntaxes/mongodbInjection.tmLanguage.json", + "scopeName": "mongodb.injection", + "injectTo": ["source.js"] + } + ], "snippets": [ { "language": "terraform", diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index 90b6e7f80..4ba873596 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -258,17 +258,16 @@ export default class PlaygroundController { content: string | undefined ): Promise { try { - // The MacOS default folder for saving files would be the read-only root (/) directory, + // The MacOS default folder for saving files is a read-only root (/) directory, // therefore we explicitly specify the workspace folder path // or OS temp directory if a user has not opened workspaces. const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; const filePath = workspaceFolder?.uri.fsPath || os.tmpdir(); const numberUntitledPlaygrounds = vscode.workspace.textDocuments.filter((doc) => isPlayground(doc.uri)).length; - const fileName = path.join(filePath, `playground-${numberUntitledPlaygrounds + 1}.mongodb`); + const fileName = path.join(filePath, `playground-${numberUntitledPlaygrounds + 1}.mongodb.js`); - // Create untitled file: untitled:/extensionPath/playground-1.mongodb.js - // Before: vscode.workspace.openTextDocument({ language: 'mongodb', content }); + // Create an untitled file URI: untitled:/extensionPath/playground-1.mongodb.js const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled' }); // Fill in initial content. @@ -280,11 +279,6 @@ export default class PlaygroundController { // await vscode.commands.executeCommand('vscode.open', documentUri); const document = await vscode.workspace.openTextDocument(documentUri); - // Ensure that the playground language is JavaScript. - await vscode.languages.setTextDocumentLanguage( - document, - 'javascript' - ); // Focus new text document. await vscode.window.showTextDocument(document); diff --git a/src/language/server.ts b/src/language/server.ts index 9e27007ed..70e5c5621 100644 --- a/src/language/server.ts +++ b/src/language/server.ts @@ -57,7 +57,7 @@ connection.onInitialize((params: InitializeParams) => { // Tell the client that the server supports code completion completionProvider: { resolveProvider: true, - triggerCharacters: ['.'], + triggerCharacters: ['.', '$'], }, // documentFormattingProvider: true, // documentRangeFormattingProvider: true, diff --git a/syntaxes/mongodbInjection.tmLanguage.json b/syntaxes/mongodbInjection.tmLanguage.json new file mode 100644 index 000000000..79b3c1957 --- /dev/null +++ b/syntaxes/mongodbInjection.tmLanguage.json @@ -0,0 +1,24 @@ +{ + "scopeName": "mongodb.injection", + "injectionSelector": "L:meta.objectliteral.js", + "patterns": [ + { + "include": "#object-member" + } + ], + "repository": { + "object-member": { + "patterns": [ + { + "name": "meta.object.member.mongodb", + "match": "\\$match\\b", + "captures": { + "0": { + "name": "keyword.other.match.mongodb" + } + } + } + ] + } + } +} From bc1b98234971bb1c2a39e1eda26dc98b3d05d82f Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 20 Feb 2023 13:41:31 +0100 Subject: [PATCH 09/31] refactor: restore update-grammar script --- .prettierignore | 1 + CONTRIBUTING.md | 11 ++++++----- package.json | 4 ++-- scripts/update-grammar.ts | 1 + src/editors/playgroundController.ts | 3 ++- src/language/mongoDBService.ts | 2 +- 6 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 scripts/update-grammar.ts diff --git a/.prettierignore b/.prettierignore index d969a3158..6de1b6b4d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -9,6 +9,7 @@ out playgrounds resources snippets +syntaxes CHANGELOG.md README.md constants.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0ac81eff8..3bc2c2c0f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,12 +37,13 @@ npm run watch #### Code Tour -- `out` compiled extension code -- `images` Icons, logos, etc. -- `snippets` [Bundled MongoDB Snippets][snippet guide] +- `out` - Compiled extension code +- `images` - Icons, logos, etc. +- `snippets` - Bundled MongoDB Snippets +- `syntaxes` [Syntax highlighting](https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide#injection-grammars) for MongoDB keywords - `src` - - `test/suite` where tests live with files names `*.test.ts` -- `scripts` project helper scripts + - `test/suite` - Where tests live with '`*.test.ts`' files names +- `scripts` - Project helper scripts ## Releases diff --git a/package.json b/package.json index 6bb5b7edb..90c36bc70 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "precompile": "npm run clean", "compile": "npm-run-all compile:*", "compile:keyfile": "ts-node ./scripts/generate-keyfile.ts", - "compile:resources": "npm run update-snippets", + "compile:resources": "npm run update-grammar && npm run update-snippets", "compile:extension": "tsc -p ./", "compile:extension-bundles": "webpack --mode development", "watch": "npm run compile && npm-run-all -p watch:*", @@ -68,7 +68,7 @@ "activationEvents": [ "onView:mongoDB", "onLanguage:json", - "onLanguage:javasript", + "onLanguage:javascript", "onLanguage:plaintext" ], "contributes": { diff --git a/scripts/update-grammar.ts b/scripts/update-grammar.ts new file mode 100644 index 000000000..16632cea1 --- /dev/null +++ b/scripts/update-grammar.ts @@ -0,0 +1 @@ +// TODO: Update ./syntaxes/mongodbInjection.tmLanguage.json with the latest with the most recent `mongodb-constants`. diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index 4ba873596..a5fa5d873 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -267,7 +267,8 @@ export default class PlaygroundController { const numberUntitledPlaygrounds = vscode.workspace.textDocuments.filter((doc) => isPlayground(doc.uri)).length; const fileName = path.join(filePath, `playground-${numberUntitledPlaygrounds + 1}.mongodb.js`); - // Create an untitled file URI: untitled:/extensionPath/playground-1.mongodb.js + // Does not create a physical file, it only creates a URI from specified component parts. + // An untitled file URI: untitled:/extensionPath/playground-1.mongodb.js const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled' }); // Fill in initial content. diff --git a/src/language/mongoDBService.ts b/src/language/mongoDBService.ts index 012e4560d..12ec27111 100644 --- a/src/language/mongoDBService.ts +++ b/src/language/mongoDBService.ts @@ -425,7 +425,7 @@ export default class MongoDBService { return { label: item, - kind: CompletionItemKind.Method, + kind: CompletionItemKind.Keyword, documentation: markdownDocumentation, detail, }; From 3a3c5204aa62c974d52e2a8f8d2c7b1d489f275c Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 20 Feb 2023 13:45:32 +0100 Subject: [PATCH 10/31] docs: update contributing page --- CONTRIBUTING.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index da1d3b386..594e55cda 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,13 +37,12 @@ npm run watch #### Code Tour -- `out` - Compiled extension code -- `images` - Icons, logos, etc. -- `snippets` - Bundled MongoDB Snippets +- `out` Compiled extension code +- `images` Icons, logos, etc. +- `snippets` Bundled MongoDB Snippets - `syntaxes` [Syntax highlighting](https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide#injection-grammars) for MongoDB keywords -- `src` - - `test/suite` - Where tests live with '`*.test.ts`' files names -- `scripts` - Project helper scripts +- `src/test/suite` Where tests live with '`*.test.ts`' files names +- `scripts` Project helper scripts ## Releases From 4fda3fa6db01b65352d0a1c60804bd6a5216f417 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 20 Feb 2023 13:46:24 +0100 Subject: [PATCH 11/31] refactor: update-grammar --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index b71686feb..0115ee1b3 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "scripts": { "clean": "rimraf ./out/* ./dist/* ", "lint": "eslint . && prettier --check .", + "update-grammar": "ts-node ./scripts/update-grammar.ts", "update-snippets": "ts-node ./scripts/update-snippets.ts", "precompile": "npm run clean", "compile": "npm-run-all compile:*", From 2296df84a6c08bb4f3fe74f9e2da756c5386b3df Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 20 Feb 2023 14:30:50 +0100 Subject: [PATCH 12/31] feat: update mongodb injection grammar --- scripts/update-grammar.ts | 58 +- src/editors/playgroundController.ts | 1 - syntaxes/mongodbInjection.tmLanguage.json | 2002 ++++++++++++++++++++- 3 files changed, 2057 insertions(+), 4 deletions(-) diff --git a/scripts/update-grammar.ts b/scripts/update-grammar.ts index 16632cea1..3d4d996b6 100644 --- a/scripts/update-grammar.ts +++ b/scripts/update-grammar.ts @@ -1 +1,57 @@ -// TODO: Update ./syntaxes/mongodbInjection.tmLanguage.json with the latest with the most recent `mongodb-constants`. +#! /usr/bin/env ts-node + +import path from 'path'; +import mkdirp from 'mkdirp'; +import ora from 'ora'; +import fs from 'fs'; +import { promisify } from 'util'; + +import { + ACCUMULATORS, + CONVERSION_OPERATORS, + EXPRESSION_OPERATORS, + QUERY_OPERATORS, + STAGE_OPERATORS +} from '@mongodb-js/mongodb-constants'; + +const writeFile = promisify(fs.writeFile); +const SYNTAXES_DIR = path.join(__dirname, '..', 'syntaxes'); + +const mongodbeywords = [ + ...ACCUMULATORS, + ...CONVERSION_OPERATORS, + ...EXPRESSION_OPERATORS, + ...QUERY_OPERATORS, + ...STAGE_OPERATORS +]; + +const injectionGrammar = { + scopeName: 'mongodb.injection', + injectionSelector: 'L:meta.objectliteral.js', + patterns: [{ include: '#object-member' }], + repository: { + 'object-member': { + patterns: mongodbeywords.map((keyword) => ({ + name: 'meta.object.member.mongodb', + match: `\\${keyword.name}\\b`, + captures: { + 0: { + name: `keyword.other.${keyword.name}.mongodb` + } + } + })) + } + } +}; + +(async () => { + const ui = ora().start(); + ui.info('Creating the MongoDB injection grammar...'); + await mkdirp(SYNTAXES_DIR); + ui.succeed(`The '${SYNTAXES_DIR}' folder has been created`); + await writeFile( + `${SYNTAXES_DIR}/mongodbInjection.tmLanguage.json`, + JSON.stringify(injectionGrammar, null, 2) + ); + ui.succeed('MongoDB injection grammar has been saved'); +})(); diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index ab37c622d..15d86d962 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -278,7 +278,6 @@ export default class PlaygroundController { await vscode.workspace.applyEdit(edit); // Actually show the editor. - // await vscode.commands.executeCommand('vscode.open', documentUri); const document = await vscode.workspace.openTextDocument(documentUri); // Focus new text document. diff --git a/syntaxes/mongodbInjection.tmLanguage.json b/syntaxes/mongodbInjection.tmLanguage.json index 79b3c1957..a6fc81f2b 100644 --- a/syntaxes/mongodbInjection.tmLanguage.json +++ b/syntaxes/mongodbInjection.tmLanguage.json @@ -9,16 +9,2014 @@ "repository": { "object-member": { "patterns": [ + { + "name": "meta.object.member.mongodb", + "match": "\\$accumulator\\b", + "captures": { + "0": { + "name": "keyword.other.$accumulator.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$addToSet\\b", + "captures": { + "0": { + "name": "keyword.other.$addToSet.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$avg\\b", + "captures": { + "0": { + "name": "keyword.other.$avg.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bottom\\b", + "captures": { + "0": { + "name": "keyword.other.$bottom.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bottomN\\b", + "captures": { + "0": { + "name": "keyword.other.$bottomN.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$covariancePop\\b", + "captures": { + "0": { + "name": "keyword.other.$covariancePop.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$covarianceSamp\\b", + "captures": { + "0": { + "name": "keyword.other.$covarianceSamp.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$count\\b", + "captures": { + "0": { + "name": "keyword.other.$count.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$derivative\\b", + "captures": { + "0": { + "name": "keyword.other.$derivative.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$denseRank\\b", + "captures": { + "0": { + "name": "keyword.other.$denseRank.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$documentNumber\\b", + "captures": { + "0": { + "name": "keyword.other.$documentNumber.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$expMovingAvg\\b", + "captures": { + "0": { + "name": "keyword.other.$expMovingAvg.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$first\\b", + "captures": { + "0": { + "name": "keyword.other.$first.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$firstN\\b", + "captures": { + "0": { + "name": "keyword.other.$firstN.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$integral\\b", + "captures": { + "0": { + "name": "keyword.other.$integral.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$last\\b", + "captures": { + "0": { + "name": "keyword.other.$last.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$lastN\\b", + "captures": { + "0": { + "name": "keyword.other.$lastN.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$max\\b", + "captures": { + "0": { + "name": "keyword.other.$max.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$maxN\\b", + "captures": { + "0": { + "name": "keyword.other.$maxN.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$min\\b", + "captures": { + "0": { + "name": "keyword.other.$min.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$minN\\b", + "captures": { + "0": { + "name": "keyword.other.$minN.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$push\\b", + "captures": { + "0": { + "name": "keyword.other.$push.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$rank\\b", + "captures": { + "0": { + "name": "keyword.other.$rank.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$stdDevPop\\b", + "captures": { + "0": { + "name": "keyword.other.$stdDevPop.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$stdDevSamp\\b", + "captures": { + "0": { + "name": "keyword.other.$stdDevSamp.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$shift\\b", + "captures": { + "0": { + "name": "keyword.other.$shift.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$sum\\b", + "captures": { + "0": { + "name": "keyword.other.$sum.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$top\\b", + "captures": { + "0": { + "name": "keyword.other.$top.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$topN\\b", + "captures": { + "0": { + "name": "keyword.other.$topN.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$locf\\b", + "captures": { + "0": { + "name": "keyword.other.$locf.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$linearFill\\b", + "captures": { + "0": { + "name": "keyword.other.$linearFill.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$convert\\b", + "captures": { + "0": { + "name": "keyword.other.$convert.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$ltrim\\b", + "captures": { + "0": { + "name": "keyword.other.$ltrim.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$rtrim\\b", + "captures": { + "0": { + "name": "keyword.other.$rtrim.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toBool\\b", + "captures": { + "0": { + "name": "keyword.other.$toBool.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toDate\\b", + "captures": { + "0": { + "name": "keyword.other.$toDate.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toDecimal\\b", + "captures": { + "0": { + "name": "keyword.other.$toDecimal.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toDouble\\b", + "captures": { + "0": { + "name": "keyword.other.$toDouble.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toInt\\b", + "captures": { + "0": { + "name": "keyword.other.$toInt.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toLong\\b", + "captures": { + "0": { + "name": "keyword.other.$toLong.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toObjectId\\b", + "captures": { + "0": { + "name": "keyword.other.$toObjectId.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toString\\b", + "captures": { + "0": { + "name": "keyword.other.$toString.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$trim\\b", + "captures": { + "0": { + "name": "keyword.other.$trim.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$abs\\b", + "captures": { + "0": { + "name": "keyword.other.$abs.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$accumulator\\b", + "captures": { + "0": { + "name": "keyword.other.$accumulator.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$add\\b", + "captures": { + "0": { + "name": "keyword.other.$add.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$allElementsTrue\\b", + "captures": { + "0": { + "name": "keyword.other.$allElementsTrue.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$and\\b", + "captures": { + "0": { + "name": "keyword.other.$and.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$anyElementTrue\\b", + "captures": { + "0": { + "name": "keyword.other.$anyElementTrue.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$arrayElemAt\\b", + "captures": { + "0": { + "name": "keyword.other.$arrayElemAt.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$arrayToObject\\b", + "captures": { + "0": { + "name": "keyword.other.$arrayToObject.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$binarySize\\b", + "captures": { + "0": { + "name": "keyword.other.$binarySize.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bsonSize\\b", + "captures": { + "0": { + "name": "keyword.other.$bsonSize.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$ceil\\b", + "captures": { + "0": { + "name": "keyword.other.$ceil.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$cmp\\b", + "captures": { + "0": { + "name": "keyword.other.$cmp.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$concat\\b", + "captures": { + "0": { + "name": "keyword.other.$concat.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$concatArrays\\b", + "captures": { + "0": { + "name": "keyword.other.$concatArrays.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$cond\\b", + "captures": { + "0": { + "name": "keyword.other.$cond.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dateAdd\\b", + "captures": { + "0": { + "name": "keyword.other.$dateAdd.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dateDiff\\b", + "captures": { + "0": { + "name": "keyword.other.$dateDiff.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dateFromParts\\b", + "captures": { + "0": { + "name": "keyword.other.$dateFromParts.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dateFromString\\b", + "captures": { + "0": { + "name": "keyword.other.$dateFromString.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dateSubtract\\b", + "captures": { + "0": { + "name": "keyword.other.$dateSubtract.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dateToParts\\b", + "captures": { + "0": { + "name": "keyword.other.$dateToParts.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dateToString\\b", + "captures": { + "0": { + "name": "keyword.other.$dateToString.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dateTrunc\\b", + "captures": { + "0": { + "name": "keyword.other.$dateTrunc.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dayOfMonth\\b", + "captures": { + "0": { + "name": "keyword.other.$dayOfMonth.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dayOfWeek\\b", + "captures": { + "0": { + "name": "keyword.other.$dayOfWeek.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dayOfYear\\b", + "captures": { + "0": { + "name": "keyword.other.$dayOfYear.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$dateToString\\b", + "captures": { + "0": { + "name": "keyword.other.$dateToString.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$divide\\b", + "captures": { + "0": { + "name": "keyword.other.$divide.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$eq\\b", + "captures": { + "0": { + "name": "keyword.other.$eq.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$exp\\b", + "captures": { + "0": { + "name": "keyword.other.$exp.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$filter\\b", + "captures": { + "0": { + "name": "keyword.other.$filter.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$first\\b", + "captures": { + "0": { + "name": "keyword.other.$first.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$floor\\b", + "captures": { + "0": { + "name": "keyword.other.$floor.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$function\\b", + "captures": { + "0": { + "name": "keyword.other.$function.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$getField\\b", + "captures": { + "0": { + "name": "keyword.other.$getField.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$gt\\b", + "captures": { + "0": { + "name": "keyword.other.$gt.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$gte\\b", + "captures": { + "0": { + "name": "keyword.other.$gte.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$hour\\b", + "captures": { + "0": { + "name": "keyword.other.$hour.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$ifNull\\b", + "captures": { + "0": { + "name": "keyword.other.$ifNull.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$in\\b", + "captures": { + "0": { + "name": "keyword.other.$in.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$indexOfArray\\b", + "captures": { + "0": { + "name": "keyword.other.$indexOfArray.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$indexOfBytes\\b", + "captures": { + "0": { + "name": "keyword.other.$indexOfBytes.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$indexOfCP\\b", + "captures": { + "0": { + "name": "keyword.other.$indexOfCP.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$isArray\\b", + "captures": { + "0": { + "name": "keyword.other.$isArray.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$isNumber\\b", + "captures": { + "0": { + "name": "keyword.other.$isNumber.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$isoDayOfWeek\\b", + "captures": { + "0": { + "name": "keyword.other.$isoDayOfWeek.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$isoWeek\\b", + "captures": { + "0": { + "name": "keyword.other.$isoWeek.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$isoWeekYear\\b", + "captures": { + "0": { + "name": "keyword.other.$isoWeekYear.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$last\\b", + "captures": { + "0": { + "name": "keyword.other.$last.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$let\\b", + "captures": { + "0": { + "name": "keyword.other.$let.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$literal\\b", + "captures": { + "0": { + "name": "keyword.other.$literal.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$lt\\b", + "captures": { + "0": { + "name": "keyword.other.$lt.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$lt\\b", + "captures": { + "0": { + "name": "keyword.other.$lt.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$ln\\b", + "captures": { + "0": { + "name": "keyword.other.$ln.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$log\\b", + "captures": { + "0": { + "name": "keyword.other.$log.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$log10\\b", + "captures": { + "0": { + "name": "keyword.other.$log10.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$map\\b", + "captures": { + "0": { + "name": "keyword.other.$map.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$mergeObjects\\b", + "captures": { + "0": { + "name": "keyword.other.$mergeObjects.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$meta\\b", + "captures": { + "0": { + "name": "keyword.other.$meta.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$millisecond\\b", + "captures": { + "0": { + "name": "keyword.other.$millisecond.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$minute\\b", + "captures": { + "0": { + "name": "keyword.other.$minute.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$mod\\b", + "captures": { + "0": { + "name": "keyword.other.$mod.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$month\\b", + "captures": { + "0": { + "name": "keyword.other.$month.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$multiply\\b", + "captures": { + "0": { + "name": "keyword.other.$multiply.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$new\\b", + "captures": { + "0": { + "name": "keyword.other.$new.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$not\\b", + "captures": { + "0": { + "name": "keyword.other.$not.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$objectToArray\\b", + "captures": { + "0": { + "name": "keyword.other.$objectToArray.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$or\\b", + "captures": { + "0": { + "name": "keyword.other.$or.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$pow\\b", + "captures": { + "0": { + "name": "keyword.other.$pow.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$range\\b", + "captures": { + "0": { + "name": "keyword.other.$range.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$reduce\\b", + "captures": { + "0": { + "name": "keyword.other.$reduce.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$regexFind\\b", + "captures": { + "0": { + "name": "keyword.other.$regexFind.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$regexFindAll\\b", + "captures": { + "0": { + "name": "keyword.other.$regexFindAll.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$regexMatch\\b", + "captures": { + "0": { + "name": "keyword.other.$regexMatch.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$replaceAll\\b", + "captures": { + "0": { + "name": "keyword.other.$replaceAll.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$replaceOne\\b", + "captures": { + "0": { + "name": "keyword.other.$replaceOne.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$reverseArray\\b", + "captures": { + "0": { + "name": "keyword.other.$reverseArray.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$second\\b", + "captures": { + "0": { + "name": "keyword.other.$second.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$setDifference\\b", + "captures": { + "0": { + "name": "keyword.other.$setDifference.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$setEquals\\b", + "captures": { + "0": { + "name": "keyword.other.$setEquals.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$setIntersection\\b", + "captures": { + "0": { + "name": "keyword.other.$setIntersection.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$setIsSubset\\b", + "captures": { + "0": { + "name": "keyword.other.$setIsSubset.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$setUnion\\b", + "captures": { + "0": { + "name": "keyword.other.$setUnion.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$size\\b", + "captures": { + "0": { + "name": "keyword.other.$size.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$slice\\b", + "captures": { + "0": { + "name": "keyword.other.$slice.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$sortArray\\b", + "captures": { + "0": { + "name": "keyword.other.$sortArray.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$split\\b", + "captures": { + "0": { + "name": "keyword.other.$split.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$sqrt\\b", + "captures": { + "0": { + "name": "keyword.other.$sqrt.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$strcasecmp\\b", + "captures": { + "0": { + "name": "keyword.other.$strcasecmp.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$strLenBytes\\b", + "captures": { + "0": { + "name": "keyword.other.$strLenBytes.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$strLenCP\\b", + "captures": { + "0": { + "name": "keyword.other.$strLenCP.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$substr\\b", + "captures": { + "0": { + "name": "keyword.other.$substr.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$substrBytes\\b", + "captures": { + "0": { + "name": "keyword.other.$substrBytes.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$substrCP\\b", + "captures": { + "0": { + "name": "keyword.other.$substrCP.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$subtract\\b", + "captures": { + "0": { + "name": "keyword.other.$subtract.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$switch\\b", + "captures": { + "0": { + "name": "keyword.other.$switch.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toLower\\b", + "captures": { + "0": { + "name": "keyword.other.$toLower.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$toUpper\\b", + "captures": { + "0": { + "name": "keyword.other.$toUpper.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$tsSecond\\b", + "captures": { + "0": { + "name": "keyword.other.$tsSecond.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$tsIncrement\\b", + "captures": { + "0": { + "name": "keyword.other.$tsIncrement.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$trunc\\b", + "captures": { + "0": { + "name": "keyword.other.$trunc.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$type\\b", + "captures": { + "0": { + "name": "keyword.other.$type.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$week\\b", + "captures": { + "0": { + "name": "keyword.other.$week.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$year\\b", + "captures": { + "0": { + "name": "keyword.other.$year.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$zip\\b", + "captures": { + "0": { + "name": "keyword.other.$zip.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bitAnd\\b", + "captures": { + "0": { + "name": "keyword.other.$bitAnd.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bitOr\\b", + "captures": { + "0": { + "name": "keyword.other.$bitOr.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bitXor\\b", + "captures": { + "0": { + "name": "keyword.other.$bitXor.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bitNot\\b", + "captures": { + "0": { + "name": "keyword.other.$bitNot.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$all\\b", + "captures": { + "0": { + "name": "keyword.other.$all.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$and\\b", + "captures": { + "0": { + "name": "keyword.other.$and.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bitsAllClear\\b", + "captures": { + "0": { + "name": "keyword.other.$bitsAllClear.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bitsAllSet\\b", + "captures": { + "0": { + "name": "keyword.other.$bitsAllSet.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bitsAnyClear\\b", + "captures": { + "0": { + "name": "keyword.other.$bitsAnyClear.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bitsAnySet\\b", + "captures": { + "0": { + "name": "keyword.other.$bitsAnySet.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$comment\\b", + "captures": { + "0": { + "name": "keyword.other.$comment.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$elemMatch\\b", + "captures": { + "0": { + "name": "keyword.other.$elemMatch.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$eq\\b", + "captures": { + "0": { + "name": "keyword.other.$eq.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$exists\\b", + "captures": { + "0": { + "name": "keyword.other.$exists.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$expr\\b", + "captures": { + "0": { + "name": "keyword.other.$expr.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$geoIntersects\\b", + "captures": { + "0": { + "name": "keyword.other.$geoIntersects.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$geoWithin\\b", + "captures": { + "0": { + "name": "keyword.other.$geoWithin.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$gt\\b", + "captures": { + "0": { + "name": "keyword.other.$gt.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$gte\\b", + "captures": { + "0": { + "name": "keyword.other.$gte.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$in\\b", + "captures": { + "0": { + "name": "keyword.other.$in.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$jsonSchema\\b", + "captures": { + "0": { + "name": "keyword.other.$jsonSchema.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$lt\\b", + "captures": { + "0": { + "name": "keyword.other.$lt.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$lte\\b", + "captures": { + "0": { + "name": "keyword.other.$lte.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$mod\\b", + "captures": { + "0": { + "name": "keyword.other.$mod.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$ne\\b", + "captures": { + "0": { + "name": "keyword.other.$ne.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$near\\b", + "captures": { + "0": { + "name": "keyword.other.$near.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$nearSphere\\b", + "captures": { + "0": { + "name": "keyword.other.$nearSphere.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$nin\\b", + "captures": { + "0": { + "name": "keyword.other.$nin.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$not\\b", + "captures": { + "0": { + "name": "keyword.other.$not.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$nor\\b", + "captures": { + "0": { + "name": "keyword.other.$nor.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$or\\b", + "captures": { + "0": { + "name": "keyword.other.$or.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$regex\\b", + "captures": { + "0": { + "name": "keyword.other.$regex.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$size\\b", + "captures": { + "0": { + "name": "keyword.other.$size.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$slice\\b", + "captures": { + "0": { + "name": "keyword.other.$slice.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$text\\b", + "captures": { + "0": { + "name": "keyword.other.$text.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$type\\b", + "captures": { + "0": { + "name": "keyword.other.$type.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$where\\b", + "captures": { + "0": { + "name": "keyword.other.$where.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$addFields\\b", + "captures": { + "0": { + "name": "keyword.other.$addFields.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bucket\\b", + "captures": { + "0": { + "name": "keyword.other.$bucket.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$bucketAuto\\b", + "captures": { + "0": { + "name": "keyword.other.$bucketAuto.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$collStats\\b", + "captures": { + "0": { + "name": "keyword.other.$collStats.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$count\\b", + "captures": { + "0": { + "name": "keyword.other.$count.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$densify\\b", + "captures": { + "0": { + "name": "keyword.other.$densify.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$documents\\b", + "captures": { + "0": { + "name": "keyword.other.$documents.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$facet\\b", + "captures": { + "0": { + "name": "keyword.other.$facet.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$fill\\b", + "captures": { + "0": { + "name": "keyword.other.$fill.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$geoNear\\b", + "captures": { + "0": { + "name": "keyword.other.$geoNear.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$graphLookup\\b", + "captures": { + "0": { + "name": "keyword.other.$graphLookup.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$group\\b", + "captures": { + "0": { + "name": "keyword.other.$group.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$indexStats\\b", + "captures": { + "0": { + "name": "keyword.other.$indexStats.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$limit\\b", + "captures": { + "0": { + "name": "keyword.other.$limit.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$lookup\\b", + "captures": { + "0": { + "name": "keyword.other.$lookup.mongodb" + } + } + }, { "name": "meta.object.member.mongodb", "match": "\\$match\\b", "captures": { "0": { - "name": "keyword.other.match.mongodb" + "name": "keyword.other.$match.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$merge\\b", + "captures": { + "0": { + "name": "keyword.other.$merge.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$merge\\b", + "captures": { + "0": { + "name": "keyword.other.$merge.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$out\\b", + "captures": { + "0": { + "name": "keyword.other.$out.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$out\\b", + "captures": { + "0": { + "name": "keyword.other.$out.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$project\\b", + "captures": { + "0": { + "name": "keyword.other.$project.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$redact\\b", + "captures": { + "0": { + "name": "keyword.other.$redact.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$replaceWith\\b", + "captures": { + "0": { + "name": "keyword.other.$replaceWith.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$replaceRoot\\b", + "captures": { + "0": { + "name": "keyword.other.$replaceRoot.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$sample\\b", + "captures": { + "0": { + "name": "keyword.other.$sample.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$search\\b", + "captures": { + "0": { + "name": "keyword.other.$search.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$searchMeta\\b", + "captures": { + "0": { + "name": "keyword.other.$searchMeta.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$set\\b", + "captures": { + "0": { + "name": "keyword.other.$set.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$setWindowFields\\b", + "captures": { + "0": { + "name": "keyword.other.$setWindowFields.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$skip\\b", + "captures": { + "0": { + "name": "keyword.other.$skip.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$sort\\b", + "captures": { + "0": { + "name": "keyword.other.$sort.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$sortByCount\\b", + "captures": { + "0": { + "name": "keyword.other.$sortByCount.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$unionWith\\b", + "captures": { + "0": { + "name": "keyword.other.$unionWith.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$unset\\b", + "captures": { + "0": { + "name": "keyword.other.$unset.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$unwind\\b", + "captures": { + "0": { + "name": "keyword.other.$unwind.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$changeStream\\b", + "captures": { + "0": { + "name": "keyword.other.$changeStream.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$currentOp\\b", + "captures": { + "0": { + "name": "keyword.other.$currentOp.mongodb" + } + } + }, + { + "name": "meta.object.member.mongodb", + "match": "\\$listLocalSessions\\b", + "captures": { + "0": { + "name": "keyword.other.$listLocalSessions.mongodb" } } } ] } } -} +} \ No newline at end of file From c924b697c60120783de2c66bdec8d8fd0512c385 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 20 Feb 2023 18:50:12 +0100 Subject: [PATCH 13/31] test: update for playgrounds in js --- package.json | 4 +- scripts/update-grammar.ts | 16 +- .../activeConnectionCodeLensProvider.ts | 15 +- src/editors/editorsController.ts | 13 +- src/editors/playgroundController.ts | 97 +++- ...> playgroundSelectedCodeActionProvider.ts} | 21 +- src/explorer/playgroundsTree.ts | 19 +- src/language/mongoDBService.ts | 2 +- src/mdbExtensionController.ts | 11 +- src/telemetry/telemetryService.ts | 16 - .../activeConnectionCodeLensProvider.test.ts | 227 ++++++++ .../editors/activeDBCodeLensProvider.test.ts | 108 ---- .../suite/editors/codeActionProvider.test.ts | 478 ---------------- .../editors/playgroundController.test.ts | 24 +- ...aygroundSelectedCodeActionProvider.test.ts | 536 ++++++++++++++++++ .../explorer/playgroundsExplorer.test.ts | 27 +- .../language/languageServerController.test.ts | 4 +- src/test/suite/mdbExtensionController.test.ts | 169 ++---- .../suite/telemetry/telemetryService.test.ts | 49 +- src/utils/playground.ts | 43 +- 20 files changed, 999 insertions(+), 880 deletions(-) rename src/editors/{codeActionProvider.ts => playgroundSelectedCodeActionProvider.ts} (89%) create mode 100644 src/test/suite/editors/activeConnectionCodeLensProvider.test.ts delete mode 100644 src/test/suite/editors/activeDBCodeLensProvider.test.ts delete mode 100644 src/test/suite/editors/codeActionProvider.test.ts create mode 100644 src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts diff --git a/package.json b/package.json index 0115ee1b3..f3ef71d94 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,9 @@ { "path": "./syntaxes/mongodbInjection.tmLanguage.json", "scopeName": "mongodb.injection", - "injectTo": ["source.js"] + "injectTo": [ + "source.js" + ] } ], "snippets": [ diff --git a/scripts/update-grammar.ts b/scripts/update-grammar.ts index 3d4d996b6..dd7526cdc 100644 --- a/scripts/update-grammar.ts +++ b/scripts/update-grammar.ts @@ -11,7 +11,7 @@ import { CONVERSION_OPERATORS, EXPRESSION_OPERATORS, QUERY_OPERATORS, - STAGE_OPERATORS + STAGE_OPERATORS, } from '@mongodb-js/mongodb-constants'; const writeFile = promisify(fs.writeFile); @@ -22,7 +22,7 @@ const mongodbeywords = [ ...CONVERSION_OPERATORS, ...EXPRESSION_OPERATORS, ...QUERY_OPERATORS, - ...STAGE_OPERATORS + ...STAGE_OPERATORS, ]; const injectionGrammar = { @@ -36,12 +36,12 @@ const injectionGrammar = { match: `\\${keyword.name}\\b`, captures: { 0: { - name: `keyword.other.${keyword.name}.mongodb` - } - } - })) - } - } + name: `keyword.other.${keyword.name}.mongodb`, + }, + }, + })), + }, + }, }; (async () => { diff --git a/src/editors/activeConnectionCodeLensProvider.ts b/src/editors/activeConnectionCodeLensProvider.ts index f3bf327e6..4fc53c54d 100644 --- a/src/editors/activeConnectionCodeLensProvider.ts +++ b/src/editors/activeConnectionCodeLensProvider.ts @@ -10,24 +10,23 @@ export default class ActiveConnectionCodeLensProvider _connectionController: ConnectionController; _onDidChangeCodeLenses: vscode.EventEmitter = new vscode.EventEmitter(); - _activeTextEditor?: TextEditor; + activeTextEditor?: TextEditor; readonly onDidChangeCodeLenses: vscode.Event = this._onDidChangeCodeLenses.event; constructor(connectionController: ConnectionController) { this._connectionController = connectionController; - this._activeTextEditor = vscode.window.activeTextEditor; + this.activeTextEditor = vscode.window.activeTextEditor; vscode.workspace.onDidChangeConfiguration(() => { this._onDidChangeCodeLenses.fire(); }); + } - vscode.window.onDidChangeActiveTextEditor((editor: vscode.TextEditor | undefined) => { - if (editor?.document.languageId !== 'Log') { - this._activeTextEditor = editor; - } - }); + setActiveTextEditor(activeTextEditor?: TextEditor) { + this.activeTextEditor = activeTextEditor; + this._onDidChangeCodeLenses.fire(); } refresh(): void { @@ -35,7 +34,7 @@ export default class ActiveConnectionCodeLensProvider } provideCodeLenses(): vscode.CodeLens[] { - const editorUri = this._activeTextEditor?.document.uri; + const editorUri = this.activeTextEditor?.document.uri; if (!isPlayground(editorUri)) { return []; diff --git a/src/editors/editorsController.ts b/src/editors/editorsController.ts index af7fec2f7..63528b809 100644 --- a/src/editors/editorsController.ts +++ b/src/editors/editorsController.ts @@ -3,7 +3,7 @@ import { EJSON } from 'bson'; import ActiveConnectionCodeLensProvider from './activeConnectionCodeLensProvider'; import ExportToLanguageCodeLensProvider from './exportToLanguageCodeLensProvider'; -import CodeActionProvider from './codeActionProvider'; +import PlaygroundSelectedCodeActionProvider from './playgroundSelectedCodeActionProvider'; import ConnectionController from '../connectionController'; import CollectionDocumentsCodeLensProvider from './collectionDocumentsCodeLensProvider'; import CollectionDocumentsOperationsStore from './collectionDocumentsOperationsStore'; @@ -83,7 +83,7 @@ export function getViewCollectionDocumentsUri( * new editors and the data they need. It also manages active editors. */ export default class EditorsController { - _codeActionProvider: CodeActionProvider; + _playgroundSelectedCodeActionProvider: PlaygroundSelectedCodeActionProvider; _connectionController: ConnectionController; _playgroundController: PlaygroundController; _collectionDocumentsOperationsStore = @@ -110,7 +110,7 @@ export default class EditorsController { playgroundResultViewProvider: PlaygroundResultProvider, activeConnectionCodeLensProvider: ActiveConnectionCodeLensProvider, exportToLanguageCodeLensProvider: ExportToLanguageCodeLensProvider, - codeActionProvider: CodeActionProvider, + codeActionProvider: PlaygroundSelectedCodeActionProvider, editDocumentCodeLensProvider: EditDocumentCodeLensProvider ) { log.info('activating...'); @@ -143,7 +143,7 @@ export default class EditorsController { new CollectionDocumentsCodeLensProvider( this._collectionDocumentsOperationsStore ); - this._codeActionProvider = codeActionProvider; + this._playgroundSelectedCodeActionProvider = codeActionProvider; vscode.workspace.onDidCloseTextDocument((e) => { const uriParams = new URLSearchParams(e.uri.query); @@ -433,9 +433,10 @@ export default class EditorsController { this._context.subscriptions.push( vscode.languages.registerCodeActionsProvider( 'javascript', - this._codeActionProvider, + this._playgroundSelectedCodeActionProvider, { - providedCodeActionKinds: CodeActionProvider.providedCodeActionKinds, + providedCodeActionKinds: + PlaygroundSelectedCodeActionProvider.providedCodeActionKinds, } ) ); diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index 15d86d962..b268521c3 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -5,7 +5,7 @@ import vm from 'vm'; import * as os from 'os'; import ActiveConnectionCodeLensProvider from './activeConnectionCodeLensProvider'; -import CodeActionProvider from './codeActionProvider'; +import PlaygroundSelectedCodeActionProvider from './playgroundSelectedCodeActionProvider'; import ConnectionController, { DataServiceEventTypes, } from '../connectionController'; @@ -102,11 +102,11 @@ export default class PlaygroundController { _languageServerController: LanguageServerController; _selectedText?: string; _exportToLanguageCodeLensProvider: ExportToLanguageCodeLensProvider; - _codeActionProvider: CodeActionProvider; + _playgroundSelectedCodeActionProvider: PlaygroundSelectedCodeActionProvider; + _telemetryService: TelemetryService; _isPartialRun = false; - private _telemetryService: TelemetryService; private _activeConnectionCodeLensProvider: ActiveConnectionCodeLensProvider; private _outputChannel: OutputChannel; private _playgroundResultViewColumn?: vscode.ViewColumn; @@ -125,7 +125,7 @@ export default class PlaygroundController { playgroundResultViewProvider: PlaygroundResultProvider, activeConnectionCodeLensProvider: ActiveConnectionCodeLensProvider, exportToLanguageCodeLensProvider: ExportToLanguageCodeLensProvider, - codeActionProvider: CodeActionProvider, + codeActionProvider: PlaygroundSelectedCodeActionProvider, explorerController: ExplorerController ) { this._connectionController = connectionController; @@ -138,7 +138,7 @@ export default class PlaygroundController { vscode.window.createOutputChannel('Playground output'); this._activeConnectionCodeLensProvider = activeConnectionCodeLensProvider; this._exportToLanguageCodeLensProvider = exportToLanguageCodeLensProvider; - this._codeActionProvider = codeActionProvider; + this._playgroundSelectedCodeActionProvider = codeActionProvider; this._explorerController = explorerController; this._connectionController.addEventListener( @@ -157,23 +157,34 @@ export default class PlaygroundController { } if (isPlayground(editor?.document.uri)) { - void vscode.commands.executeCommand('setContext', 'mdb.showRunPlaygroundButton', true); + void vscode.commands.executeCommand( + 'setContext', + 'mdb.showRunPlaygroundButton', + true + ); } else { - void vscode.commands.executeCommand('setContext', 'mdb.showRunPlaygroundButton', false); + void vscode.commands.executeCommand( + 'setContext', + 'mdb.showRunPlaygroundButton', + false + ); } if (editor?.document.languageId !== 'Log') { this._activeTextEditor = editor; + this._activeConnectionCodeLensProvider.setActiveTextEditor( + this._activeTextEditor + ); + this._playgroundSelectedCodeActionProvider.setActiveTextEditor( + this._activeTextEditor + ); log.info('Active editor path', editor?.document.uri?.path); } }; vscode.workspace.textDocuments.forEach((document) => { if (isPlayground(document.uri)) { - void vscode.languages.setTextDocumentLanguage( - document, - 'javascript' - ); + void vscode.languages.setTextDocumentLanguage(document, 'javascript'); } }); @@ -182,16 +193,20 @@ export default class PlaygroundController { vscode.workspace.onDidOpenTextDocument(async (document) => { if (isPlayground(document.uri)) { - await vscode.languages.setTextDocumentLanguage( - document, - 'javascript' - ); + this._telemetryService.trackPlaygroundLoaded(); + await vscode.languages.setTextDocumentLanguage(document, 'javascript'); + } + }); + + vscode.workspace.onDidSaveTextDocument((document) => { + if (isPlayground(document.uri)) { + this._telemetryService.trackPlaygroundSaved(); } }); vscode.window.onDidChangeTextEditorSelection( async (changeEvent: vscode.TextEditorSelectionChangeEvent) => { - if (isPlayground(changeEvent?.textEditor?.document?.uri)) { + if (!isPlayground(changeEvent?.textEditor?.document?.uri)) { return; } @@ -216,7 +231,7 @@ export default class PlaygroundController { selection: sortedSelections[0], }); - this._codeActionProvider.refresh({ + this._playgroundSelectedCodeActionProvider.refresh({ selection: sortedSelections[0], mode, }); @@ -265,12 +280,20 @@ export default class PlaygroundController { const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; const filePath = workspaceFolder?.uri.fsPath || os.tmpdir(); - const numberUntitledPlaygrounds = vscode.workspace.textDocuments.filter((doc) => isPlayground(doc.uri)).length; - const fileName = path.join(filePath, `playground-${numberUntitledPlaygrounds + 1}.mongodb.js`); + const numberUntitledPlaygrounds = vscode.workspace.textDocuments.filter( + (doc) => isPlayground(doc.uri) + ).length; + const fileName = path.join( + filePath, + `playground-${numberUntitledPlaygrounds + 1}.mongodb.js` + ); // Does not create a physical file, it only creates a URI from specified component parts. // An untitled file URI: untitled:/extensionPath/playground-1.mongodb.js - const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled' }); + const documentUri = vscode.Uri.from({ + path: fileName, + scheme: 'untitled', + }); // Fill in initial content. const edit = new vscode.WorkspaceEdit(); @@ -578,7 +601,10 @@ export default class PlaygroundController { } runAllPlaygroundBlocks(): Promise { - if (!this._activeTextEditor || !isPlayground(this._activeTextEditor.document.uri)) { + if ( + !this._activeTextEditor || + !isPlayground(this._activeTextEditor.document.uri) + ) { void vscode.window.showErrorMessage( "Please open a '.mongodb' playground file before running it." ); @@ -593,7 +619,10 @@ export default class PlaygroundController { } runAllOrSelectedPlaygroundBlocks(): Promise { - if (!this._activeTextEditor || !isPlayground(this._activeTextEditor.document.uri)) { + if ( + !this._activeTextEditor || + !isPlayground(this._activeTextEditor.document.uri) + ) { void vscode.window.showErrorMessage( "Please open a '.mongodb' playground file before running it." ); @@ -647,9 +676,9 @@ export default class PlaygroundController { ...this._exportToLanguageCodeLensProvider._exportToLanguageAddons, textFromEditor: this._getAllText(), selectedText: this._selectedText, - selection: this._codeActionProvider.selection, + selection: this._playgroundSelectedCodeActionProvider.selection, language, - mode: this._codeActionProvider.mode, + mode: this._playgroundSelectedCodeActionProvider.mode, }); return this._transpile(); @@ -700,9 +729,15 @@ export default class PlaygroundController { }, }; - if (this._codeActionProvider.mode === ExportToLanguageMode.AGGREGATION) { + if ( + this._playgroundSelectedCodeActionProvider.mode === + ExportToLanguageMode.AGGREGATION + ) { toCompile.aggregation = selectedText; - } else if (this._codeActionProvider.mode === ExportToLanguageMode.QUERY) { + } else if ( + this._playgroundSelectedCodeActionProvider.mode === + ExportToLanguageMode.QUERY + ) { toCompile.filter = selectedText; } @@ -758,7 +793,10 @@ export default class PlaygroundController { log.info(`Export to ${language} language result`, this._playgroundResult); /* eslint-disable camelcase */ - if (this._codeActionProvider.mode === ExportToLanguageMode.AGGREGATION) { + if ( + this._playgroundSelectedCodeActionProvider.mode === + ExportToLanguageMode.AGGREGATION + ) { const aggExportedProps = { language, num_stages: selectedText @@ -770,7 +808,10 @@ export default class PlaygroundController { }; this._telemetryService.trackAggregationExported(aggExportedProps); - } else if (this._codeActionProvider.mode === ExportToLanguageMode.QUERY) { + } else if ( + this._playgroundSelectedCodeActionProvider.mode === + ExportToLanguageMode.QUERY + ) { const queryExportedProps = { language, with_import_statements: importStatements, diff --git a/src/editors/codeActionProvider.ts b/src/editors/playgroundSelectedCodeActionProvider.ts similarity index 89% rename from src/editors/codeActionProvider.ts rename to src/editors/playgroundSelectedCodeActionProvider.ts index d3f9881c6..e651e6ee7 100644 --- a/src/editors/codeActionProvider.ts +++ b/src/editors/playgroundSelectedCodeActionProvider.ts @@ -5,30 +5,32 @@ import EXTENSION_COMMANDS from '../commands'; import { ExportToLanguageMode } from '../types/playgroundType'; import { isPlayground } from '../utils/playground'; -export default class CodeActionProvider implements vscode.CodeActionProvider { +export default class PlaygroundSelectedCodeActionProvider + implements vscode.CodeActionProvider +{ _onDidChangeCodeCodeAction: vscode.EventEmitter = new vscode.EventEmitter(); selection?: vscode.Selection; mode?: ExportToLanguageMode; - _activeTextEditor?: TextEditor; + activeTextEditor?: TextEditor; static readonly providedCodeActionKinds = [vscode.CodeActionKind.QuickFix]; constructor() { + this.activeTextEditor = vscode.window.activeTextEditor; vscode.workspace.onDidChangeConfiguration(() => { this._onDidChangeCodeCodeAction.fire(); }); - - vscode.window.onDidChangeActiveTextEditor((editor: vscode.TextEditor | undefined) => { - if (editor?.document.languageId !== 'Log') { - this._activeTextEditor = editor; - } - }); } readonly onDidChangeCodeLenses: vscode.Event = this._onDidChangeCodeCodeAction.event; + setActiveTextEditor(activeTextEditor?: TextEditor) { + this.activeTextEditor = activeTextEditor; + this._onDidChangeCodeCodeAction.fire(); + } + refresh({ selection, mode, @@ -42,7 +44,8 @@ export default class CodeActionProvider implements vscode.CodeActionProvider { } provideCodeActions(): vscode.CodeAction[] | undefined { - const editorUri = this._activeTextEditor?.document.uri; + const editorUri = this.activeTextEditor?.document.uri; + if (!this.selection || !isPlayground(editorUri)) { return; } diff --git a/src/explorer/playgroundsTree.ts b/src/explorer/playgroundsTree.ts index d5f2f5cc9..e6cc8af2f 100644 --- a/src/explorer/playgroundsTree.ts +++ b/src/explorer/playgroundsTree.ts @@ -4,7 +4,7 @@ import { PLAYGROUND_ITEM } from './playgroundsTreeItem'; import { createLogger } from '../logging'; import PlaygroundsTreeItem from './playgroundsTreeItem'; import EXTENSION_COMMANDS from '../commands'; -import { readDirectory } from '../utils/playground'; +import { getPlaygrounds } from '../utils/playground'; const log = createLogger('playgrounds tree controller'); @@ -100,11 +100,20 @@ export default class PlaygroundsTree return element; } - public async getPlaygrounds(folderUri: vscode.Uri): Promise { - const playgrounds = await readDirectory(folderUri.fsPath); + public async getPlaygrounds(fsPath: string): Promise { + const excludeFromPlaygroundsSearch: string[] = + (await vscode.workspace + .getConfiguration('mdb') + .get('excludeFromPlaygroundsSearch')) || []; + + const playgrounds = await getPlaygrounds({ + fsPath, + excludeFromPlaygroundsSearch, + }); + this._playgroundsTreeItems = {}; - playgrounds.forEach(element => { + playgrounds.forEach((element) => { this._playgroundsTreeItems[element.path] = new PlaygroundsTreeItem( element.name, element.path @@ -127,7 +136,7 @@ export default class PlaygroundsTree ); for (const folder of workspaceFolders) { - const playgrounds = await this.getPlaygrounds(folder.uri); + const playgrounds = await this.getPlaygrounds(folder.uri.fsPath); if (Object.keys(playgrounds).length > 0) { this._playgroundsTreeHeaders.push( diff --git a/src/language/mongoDBService.ts b/src/language/mongoDBService.ts index 12ec27111..012e4560d 100644 --- a/src/language/mongoDBService.ts +++ b/src/language/mongoDBService.ts @@ -425,7 +425,7 @@ export default class MongoDBService { return { label: item, - kind: CompletionItemKind.Keyword, + kind: CompletionItemKind.Method, documentation: markdownDocumentation, detail, }; diff --git a/src/mdbExtensionController.ts b/src/mdbExtensionController.ts index a65d98cc4..0f9c2d2ba 100644 --- a/src/mdbExtensionController.ts +++ b/src/mdbExtensionController.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; import ActiveConnectionCodeLensProvider from './editors/activeConnectionCodeLensProvider'; -import CodeActionProvider from './editors/codeActionProvider'; +import PlaygroundSelectedCodeActionProvider from './editors/playgroundSelectedCodeActionProvider'; import ConnectionController from './connectionController'; import ConnectionTreeItem from './explorer/connectionTreeItem'; import { createLogger } from './logging'; @@ -44,7 +44,7 @@ const log = createLogger('commands'); // This class is the top-level controller for our extension. // Commands which the extensions handles are defined in the function `activate`. export default class MDBExtensionController implements vscode.Disposable { - _codeActionProvider: CodeActionProvider; + _playgroundSelectedCodeActionProvider: PlaygroundSelectedCodeActionProvider; _connectionController: ConnectionController; _context: vscode.ExtensionContext; _editorsController: EditorsController; @@ -96,7 +96,8 @@ export default class MDBExtensionController implements vscode.Disposable { new ActiveConnectionCodeLensProvider(this._connectionController); this._exportToLanguageCodeLensProvider = new ExportToLanguageCodeLensProvider(); - this._codeActionProvider = new CodeActionProvider(); + this._playgroundSelectedCodeActionProvider = + new PlaygroundSelectedCodeActionProvider(); this._playgroundController = new PlaygroundController( this._connectionController, this._languageServerController, @@ -105,7 +106,7 @@ export default class MDBExtensionController implements vscode.Disposable { this._playgroundResultViewProvider, this._activeConnectionCodeLensProvider, this._exportToLanguageCodeLensProvider, - this._codeActionProvider, + this._playgroundSelectedCodeActionProvider, this._explorerController ); this._editorsController = new EditorsController( @@ -117,7 +118,7 @@ export default class MDBExtensionController implements vscode.Disposable { this._playgroundResultViewProvider, this._activeConnectionCodeLensProvider, this._exportToLanguageCodeLensProvider, - this._codeActionProvider, + this._playgroundSelectedCodeActionProvider, this._editDocumentCodeLensProvider ); this._webviewController = new WebviewController( diff --git a/src/telemetry/telemetryService.ts b/src/telemetry/telemetryService.ts index 0890c3714..479ee2be9 100644 --- a/src/telemetry/telemetryService.ts +++ b/src/telemetry/telemetryService.ts @@ -104,22 +104,6 @@ export default class TelemetryService { this._segmentUserId = userId; this._segmentAnonymousId = anonymousId; this._segmentKey = this._readSegmentKey(); - - vscode.workspace.onDidOpenTextDocument((document) => { - if ( - document && - document.languageId === 'mongodb' && - document.uri.scheme === 'file' - ) { - this.trackPlaygroundLoaded(); - } - }); - - vscode.workspace.onDidSaveTextDocument((document) => { - if (document && document.languageId === 'mongodb') { - this.trackPlaygroundSaved(); - } - }); } private _readSegmentKey(): string | undefined { diff --git a/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts b/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts new file mode 100644 index 000000000..ff2751f1b --- /dev/null +++ b/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts @@ -0,0 +1,227 @@ +import * as vscode from 'vscode'; +import { beforeEach, afterEach } from 'mocha'; +import { DataService } from 'mongodb-data-service'; +import chai from 'chai'; +import sinon from 'sinon'; +import * as os from 'os'; +import { v4 as uuidv4 } from 'uuid'; +import path from 'path'; + +import ActiveConnectionCodeLensProvider from '../../../editors/activeConnectionCodeLensProvider'; +import ConnectionController from '../../../connectionController'; +import { StatusView } from '../../../views'; +import { StorageController } from '../../../storage'; +import { TestExtensionContext } from '../stubs'; +import TelemetryService from '../../../telemetry/telemetryService'; + +const expect = chai.expect; + +suite('Active Connection CodeLens Provider Test Suite', () => { + const mockExtensionContext = new TestExtensionContext(); + const mockStorageController = new StorageController(mockExtensionContext); + const testTelemetryService = new TelemetryService( + mockStorageController, + mockExtensionContext + ); + const testStatusView = new StatusView(mockExtensionContext); + + suite('the MongoDB playground in JS', () => { + beforeEach(async () => { + const fileName = path.join( + os.tmpdir(), + `playground-${uuidv4()}.mongodb.js` + ); + const documentUri = vscode.Uri.from({ + path: fileName, + scheme: 'untitled', + }); + const document = await vscode.workspace.openTextDocument(documentUri); + await vscode.window.showTextDocument(document); + }); + + afterEach(async () => { + await vscode.commands.executeCommand( + 'workbench.action.closeActiveEditor' + ); + }); + + suite('user is not connected', () => { + const testConnectionController = new ConnectionController( + testStatusView, + mockStorageController, + testTelemetryService + ); + const testCodeLensProvider = new ActiveConnectionCodeLensProvider( + testConnectionController + ); + const mockShowQuickPick = sinon.fake(); + + beforeEach(() => { + testCodeLensProvider.setActiveTextEditor( + vscode.window.activeTextEditor + ); + sinon.replace(vscode.window, 'showQuickPick', mockShowQuickPick); + }); + + afterEach(() => { + sinon.restore(); + }); + + test('show disconnected message in code lenses', () => { + const codeLens = testCodeLensProvider.provideCodeLenses(); + + expect(codeLens).to.be.an('array'); + expect(codeLens.length).to.be.equal(1); + expect(codeLens[0].command?.title).to.be.equal( + 'Disconnected. Click here to connect.' + ); + expect(codeLens[0].range.start.line).to.be.equal(0); + expect(codeLens[0].range.end.line).to.be.equal(0); + }); + }); + + suite('user is connected', () => { + const testConnectionController = new ConnectionController( + testStatusView, + mockStorageController, + testTelemetryService + ); + const testCodeLensProvider = new ActiveConnectionCodeLensProvider( + testConnectionController + ); + const mockActiveDataService = { + find: (namespace, filter, options, callback): void => { + return callback(null, [{ field: 'Text message' }]); + }, + instance: () => + Promise.resolve({ + dataLake: {}, + build: {}, + genuineMongoDB: {}, + host: {}, + }), + } as DataService; + + testConnectionController.setActiveDataService(mockActiveDataService); + + beforeEach(() => { + testCodeLensProvider.setActiveTextEditor( + vscode.window.activeTextEditor + ); + sinon.replace( + testConnectionController, + 'getActiveConnectionName', + sinon.fake.returns('fakeName') + ); + }); + + afterEach(() => { + sinon.restore(); + }); + + test('show active connection in code lenses', () => { + const codeLens = testCodeLensProvider.provideCodeLenses(); + + expect(codeLens).to.be.an('array'); + expect(codeLens.length).to.be.equal(1); + expect(codeLens[0].command?.title).to.be.equal( + 'Currently connected to fakeName. Click here to change connection.' + ); + expect(codeLens[0].range.start.line).to.be.equal(0); + expect(codeLens[0].range.end.line).to.be.equal(0); + expect(codeLens[0].command?.command).to.be.equal( + 'mdb.changeActiveConnection' + ); + }); + }); + }); + + suite('the regular JS file', () => { + beforeEach(async () => { + const fileName = path.join(os.tmpdir(), `regular-file-${uuidv4()}.js`); + const documentUri = vscode.Uri.from({ + path: fileName, + scheme: 'untitled', + }); + const document = await vscode.workspace.openTextDocument(documentUri); + await vscode.window.showTextDocument(document); + }); + + afterEach(async () => { + await vscode.commands.executeCommand( + 'workbench.action.closeActiveEditor' + ); + }); + + suite('user is not connected', () => { + const testConnectionController = new ConnectionController( + testStatusView, + mockStorageController, + testTelemetryService + ); + const testCodeLensProvider = new ActiveConnectionCodeLensProvider( + testConnectionController + ); + const mockShowQuickPick = sinon.fake(); + + beforeEach(() => { + sinon.replace(vscode.window, 'showQuickPick', mockShowQuickPick); + }); + + afterEach(() => { + sinon.restore(); + }); + + test('show not show the active connection code lenses', () => { + const codeLens = testCodeLensProvider.provideCodeLenses(); + + expect(codeLens).to.be.an('array'); + expect(codeLens.length).to.be.equal(0); + }); + }); + + suite('user is connected', () => { + const testConnectionController = new ConnectionController( + testStatusView, + mockStorageController, + testTelemetryService + ); + const testCodeLensProvider = new ActiveConnectionCodeLensProvider( + testConnectionController + ); + const mockActiveDataService = { + find: (namespace, filter, options, callback): void => { + return callback(null, [{ field: 'Text message' }]); + }, + instance: () => + Promise.resolve({ + dataLake: {}, + build: {}, + genuineMongoDB: {}, + host: {}, + }), + } as DataService; + + testConnectionController.setActiveDataService(mockActiveDataService); + + beforeEach(() => { + sinon.replace( + testConnectionController, + 'getActiveConnectionName', + sinon.fake.returns('fakeName') + ); + }); + + afterEach(() => { + sinon.restore(); + }); + + test('show not show the active connection code lensess', () => { + const codeLens = testCodeLensProvider.provideCodeLenses(); + + expect(codeLens).to.be.an('array'); + expect(codeLens.length).to.be.equal(0); + }); + }); + }); +}); diff --git a/src/test/suite/editors/activeDBCodeLensProvider.test.ts b/src/test/suite/editors/activeDBCodeLensProvider.test.ts deleted file mode 100644 index 725149cb6..000000000 --- a/src/test/suite/editors/activeDBCodeLensProvider.test.ts +++ /dev/null @@ -1,108 +0,0 @@ -import * as vscode from 'vscode'; -import { beforeEach, afterEach } from 'mocha'; -import { DataService } from 'mongodb-data-service'; -import chai from 'chai'; -import sinon from 'sinon'; - -import ActiveDBCodeLensProvider from '../../../editors/activeConnectionCodeLensProvider'; -import ConnectionController from '../../../connectionController'; -import { StatusView } from '../../../views'; -import { StorageController } from '../../../storage'; -import { TestExtensionContext } from '../stubs'; -import TelemetryService from '../../../telemetry/telemetryService'; - -const expect = chai.expect; - -suite('Active DB CodeLens Provider Test Suite', () => { - const mockExtensionContext = new TestExtensionContext(); - const mockStorageController = new StorageController(mockExtensionContext); - const testTelemetryService = new TelemetryService( - mockStorageController, - mockExtensionContext - ); - const testStatusView = new StatusView(mockExtensionContext); - - suite('user is not connected', () => { - const testConnectionController = new ConnectionController( - testStatusView, - mockStorageController, - testTelemetryService - ); - const testCodeLensProvider = new ActiveDBCodeLensProvider( - testConnectionController - ); - const mockShowQuickPick = sinon.fake(); - - beforeEach(() => { - sinon.replace(vscode.window, 'showQuickPick', mockShowQuickPick); - }); - - afterEach(() => { - sinon.restore(); - }); - - test('show disconnected message in code lenses', () => { - const codeLens = testCodeLensProvider.provideCodeLenses(); - - expect(codeLens).to.be.an('array'); - expect(codeLens.length).to.be.equal(1); - expect(codeLens[0].command?.title).to.be.equal( - 'Disconnected. Click here to connect.' - ); - expect(codeLens[0].range.start.line).to.be.equal(0); - expect(codeLens[0].range.end.line).to.be.equal(0); - }); - }); - - suite('user is connected', () => { - const testConnectionController = new ConnectionController( - testStatusView, - mockStorageController, - testTelemetryService - ); - const testCodeLensProvider = new ActiveDBCodeLensProvider( - testConnectionController - ); - const mockActiveDataService = { - find: (namespace, filter, options, callback): void => { - return callback(null, [{ field: 'Text message' }]); - }, - instance: () => - Promise.resolve({ - dataLake: {}, - build: {}, - genuineMongoDB: {}, - host: {}, - }), - } as DataService; - - testConnectionController.setActiveDataService(mockActiveDataService); - - beforeEach(() => { - sinon.replace( - testConnectionController, - 'getActiveConnectionName', - sinon.fake.returns('fakeName') - ); - }); - - afterEach(() => { - sinon.restore(); - }); - - test('show active connection in code lenses', () => { - const codeLens = testCodeLensProvider.provideCodeLenses(); - - expect(codeLens).to.be.an('array'); - expect(codeLens.length).to.be.equal(1); - expect(codeLens[0].command?.title).to.be.equal( - 'Currently connected to fakeName. Click here to change connection.' - ); - expect(codeLens[0].range.start.line).to.be.equal(0); - expect(codeLens[0].range.end.line).to.be.equal(0); - expect(codeLens[0].command?.command).to.be.equal( - 'mdb.changeActiveConnection' - ); - }); - }); -}); diff --git a/src/test/suite/editors/codeActionProvider.test.ts b/src/test/suite/editors/codeActionProvider.test.ts deleted file mode 100644 index 43cbfbe8e..000000000 --- a/src/test/suite/editors/codeActionProvider.test.ts +++ /dev/null @@ -1,478 +0,0 @@ -import * as vscode from 'vscode'; -import { beforeEach, afterEach } from 'mocha'; -import chai from 'chai'; -import sinon from 'sinon'; - -import ActiveDBCodeLensProvider from '../../../editors/activeConnectionCodeLensProvider'; -import ExportToLanguageCodeLensProvider from '../../../editors/exportToLanguageCodeLensProvider'; -import CodeActionProvider from '../../../editors/codeActionProvider'; -import { ExplorerController } from '../../../explorer'; -import { LanguageServerController } from '../../../language'; -import { mdbTestExtension } from '../stubbableMdbExtension'; -import { PlaygroundController } from '../../../editors'; -import { - PlaygroundResult, - ExportToLanguageMode, -} from '../../../types/playgroundType'; -import { TEST_DATABASE_URI } from '../dbTestHelper'; -import { TestExtensionContext } from '../stubs'; - -const expect = chai.expect; - -suite('Code Action Provider Test Suite', function () { - this.timeout(5000); - - const testExtensionContext = new TestExtensionContext(); - testExtensionContext.extensionPath = '../../'; - - beforeEach(async () => { - sinon.replace( - mdbTestExtension.testExtensionController, - '_languageServerController', - new LanguageServerController(testExtensionContext) - ); - sinon.replace( - vscode.window, - 'showInformationMessage', - sinon.fake.resolves(true) - ); - - await mdbTestExtension.testExtensionController._connectionController.addNewConnectionStringAndConnect( - TEST_DATABASE_URI - ); - - const testActiveDBCodeLensProvider = new ActiveDBCodeLensProvider( - mdbTestExtension.testExtensionController._connectionController - ); - const testExportToLanguageCodeLensProvider = - new ExportToLanguageCodeLensProvider(); - const testCodeActionProvider = new CodeActionProvider(); - const testExplorerController = new ExplorerController( - mdbTestExtension.testExtensionController._connectionController - ); - - mdbTestExtension.testExtensionController._playgroundController = - new PlaygroundController( - mdbTestExtension.testExtensionController._connectionController, - mdbTestExtension.testExtensionController._languageServerController, - mdbTestExtension.testExtensionController._telemetryService, - mdbTestExtension.testExtensionController._statusView, - mdbTestExtension.testExtensionController._playgroundResultViewProvider, - testActiveDBCodeLensProvider, - testExportToLanguageCodeLensProvider, - testCodeActionProvider, - testExplorerController - ); - - const mockOpenPlaygroundResult: any = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundController, - '_openPlaygroundResult', - mockOpenPlaygroundResult - ); - - await vscode.workspace - .getConfiguration('mdb') - .update('confirmRunAll', false); - - await mdbTestExtension.testExtensionController._languageServerController.startLanguageServer(); - await mdbTestExtension.testExtensionController._playgroundController._connectToServiceProvider(); - }); - - afterEach(async () => { - await vscode.workspace - .getConfiguration('mdb') - .update('confirmRunAll', true); - await mdbTestExtension.testExtensionController._connectionController.disconnect(); - mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); - sinon.restore(); - }); - - test('returns undefined when text is not selected', () => { - const testCodeActionProvider = new CodeActionProvider(); - const codeActions = testCodeActionProvider.provideCodeActions(); - - expect(codeActions).to.be.undefined; - }); - - test('returns a run selected playground blocks action', async () => { - mdbTestExtension.testExtensionController._playgroundController._selectedText = - '123'; - - const selection = { - start: { line: 0, character: 0 }, - end: { line: 0, character: 4 }, - } as vscode.Selection; - const testCodeActionProvider = new CodeActionProvider(); - - testCodeActionProvider.refresh({ - selection, - mode: ExportToLanguageMode.OTHER, - }); - - const codeActions = testCodeActionProvider.provideCodeActions(); - - expect(codeActions).to.exist; - - if (codeActions) { - expect(codeActions.length).to.be.equal(1); - const actionCommand = codeActions[0].command; - - if (actionCommand) { - expect(actionCommand.command).to.be.equal( - 'mdb.runSelectedPlaygroundBlocks' - ); - expect(actionCommand.title).to.be.equal( - 'Run selected playground blocks' - ); - - await vscode.commands.executeCommand(actionCommand.command); - - const expectedResult = { - namespace: null, - type: 'number', - content: 123, - language: 'plaintext', - }; - expect( - mdbTestExtension.testExtensionController._playgroundController - ._playgroundResult - ).to.be.deep.equal(expectedResult); - expect( - mdbTestExtension.testExtensionController._playgroundController - ._isPartialRun - ).to.be.equal(true); - } - } - }); - - test('returns an export to java action with whitespaces around objects', () => { - const textFromEditor = ' { name: "Alena Khineika" } '; - const selection = { - start: { line: 0, character: 2 }, - end: { line: 0, character: 27 }, - } as vscode.Selection; - const mode = ExportToLanguageMode.QUERY; - const activeTextEditor = { - document: { getText: () => textFromEditor }, - } as vscode.TextEditor; - - mdbTestExtension.testExtensionController._playgroundController._selectedText = - textFromEditor; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.selection = - selection; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.mode = - mode; - mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = - activeTextEditor; - - const testCodeActionProvider = new CodeActionProvider(); - testCodeActionProvider.refresh({ selection, mode }); - - const codeActions = testCodeActionProvider.provideCodeActions(); - - expect(codeActions).to.exist; - - if (codeActions) { - expect(codeActions.length).to.be.equal(6); - const actionCommand = codeActions[2].command; - - if (actionCommand) { - expect(actionCommand.command).to.be.equal('mdb.exportToJava'); - expect(actionCommand.title).to.be.equal('Export To Java'); - } - } - }); - - test('exports to java and includes builders', async () => { - const textFromEditor = "{ name: '22' }"; - const selection = { - start: { line: 0, character: 0 }, - end: { line: 0, character: 14 }, - } as vscode.Selection; - const mode = ExportToLanguageMode.QUERY; - const activeTextEditor = { - document: { getText: () => textFromEditor }, - } as vscode.TextEditor; - - mdbTestExtension.testExtensionController._playgroundController._selectedText = - textFromEditor; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.selection = - selection; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.mode = - mode; - mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = - activeTextEditor; - - const testCodeActionProvider = new CodeActionProvider(); - testCodeActionProvider.refresh({ selection, mode }); - - const codeActions = testCodeActionProvider.provideCodeActions(); - - expect(codeActions).to.exist; - - if (codeActions) { - expect(codeActions.length).to.be.equal(6); - const actionCommand = codeActions[2].command; - - if (actionCommand) { - expect(actionCommand.command).to.be.equal('mdb.exportToJava'); - expect(actionCommand.title).to.be.equal('Export To Java'); - - await vscode.commands.executeCommand(actionCommand.command); - - const expectedResult = { - namespace: 'DATABASE_NAME.COLLECTION_NAME', - type: null, - content: 'new Document("name", "22")', - language: 'java', - }; - - const codeLenses = - mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider.provideCodeLenses(); - expect(codeLenses.length).to.be.equal(3); - - // Only java queries supports builders. - await vscode.commands.executeCommand( - 'mdb.changeExportToLanguageAddons', - { - ...mdbTestExtension.testExtensionController._playgroundController - ._exportToLanguageCodeLensProvider._exportToLanguageAddons, - builders: true, - } - ); - - expectedResult.content = 'eq("name", "22")'; - expect( - mdbTestExtension.testExtensionController._playgroundController - ._playgroundResult - ).to.be.deep.equal(expectedResult); - } - } - }); - - test('exports to csharp and includes import statements', async () => { - const textFromEditor = "{ name: '22' }"; - const selection = { - start: { line: 0, character: 0 }, - end: { line: 0, character: 14 }, - } as vscode.Selection; - const mode = ExportToLanguageMode.QUERY; - const activeTextEditor = { - document: { getText: () => textFromEditor }, - } as vscode.TextEditor; - - mdbTestExtension.testExtensionController._playgroundController._selectedText = - textFromEditor; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.selection = - selection; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.mode = - mode; - mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = - activeTextEditor; - - const testCodeActionProvider = new CodeActionProvider(); - - testCodeActionProvider.refresh({ selection, mode }); - - const codeActions = testCodeActionProvider.provideCodeActions(); - - expect(codeActions).to.exist; - - if (codeActions) { - expect(codeActions.length).to.be.equal(6); - const actionCommand = codeActions[3].command; - - if (actionCommand) { - expect(actionCommand.command).to.be.equal('mdb.exportToCsharp'); - expect(actionCommand.title).to.be.equal('Export To C#'); - - await vscode.commands.executeCommand(actionCommand.command); - - const expectedResult = { - namespace: 'DATABASE_NAME.COLLECTION_NAME', - type: null, - content: 'new BsonDocument("name", "22")', - language: 'csharp', - }; - expect( - mdbTestExtension.testExtensionController._playgroundController - ._playgroundResult - ).to.be.deep.equal(expectedResult); - - const codeLenses = - mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider.provideCodeLenses(); - expect(codeLenses.length).to.be.equal(1); // Csharp does not support driver syntax. - - await vscode.commands.executeCommand( - 'mdb.changeExportToLanguageAddons', - { - ...mdbTestExtension.testExtensionController._playgroundController - ._exportToLanguageCodeLensProvider._exportToLanguageAddons, - importStatements: true, - } - ); - - expectedResult.content = - 'using MongoDB.Bson;\nusing MongoDB.Driver;\n\nnew BsonDocument("name", "22")'; - expect( - mdbTestExtension.testExtensionController._playgroundController - ._playgroundResult - ).to.be.deep.equal(expectedResult); - } - } - }); - - test('exports to python and includes driver syntax', async () => { - const textFromEditor = "use('db'); db.coll.find({ name: '22' })"; - const selection = { - start: { line: 0, character: 24 }, - end: { line: 0, character: 38 }, - } as vscode.Selection; - const mode = ExportToLanguageMode.QUERY; - const activeTextEditor = { - document: { getText: () => textFromEditor }, - } as vscode.TextEditor; - - mdbTestExtension.testExtensionController._playgroundController._selectedText = - "{ name: '22' }"; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.selection = - selection; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.mode = - mode; - mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = - activeTextEditor; - - const testCodeActionProvider = new CodeActionProvider(); - testCodeActionProvider.refresh({ selection, mode }); - - const codeActions = testCodeActionProvider.provideCodeActions(); - - expect(codeActions).to.exist; - - if (codeActions) { - expect(codeActions.length).to.be.equal(6); - const actionCommand = codeActions[1].command; - - if (actionCommand) { - expect(actionCommand.command).to.be.equal('mdb.exportToPython'); - expect(actionCommand.title).to.be.equal('Export To Python 3'); - - await vscode.commands.executeCommand(actionCommand.command); - - let expectedResult: PlaygroundResult = { - namespace: 'DATABASE_NAME.COLLECTION_NAME', - type: null, - content: "{\n 'name': '22'\n}", - language: 'python', - }; - expect( - mdbTestExtension.testExtensionController._playgroundController - ._playgroundResult - ).to.be.deep.equal(expectedResult); - - const codeLenses = - mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider.provideCodeLenses(); - expect(codeLenses.length).to.be.equal(2); - - await vscode.commands.executeCommand( - 'mdb.changeExportToLanguageAddons', - { - ...mdbTestExtension.testExtensionController._playgroundController - ._exportToLanguageCodeLensProvider._exportToLanguageAddons, - driverSyntax: true, - } - ); - - expectedResult = { - namespace: 'db.coll', - type: null, - content: - "# Requires the PyMongo package.\n# https://api.mongodb.com/python/current\n\nclient = MongoClient('mongodb://localhost:27018/?appname=mongodb-vscode+0.0.0-dev.0')\nfilter={\n 'name': '22'\n}\n\nresult = client['db']['coll'].find(\n filter=filter\n)", - language: 'python', - }; - - expect( - mdbTestExtension.testExtensionController._playgroundController - ._playgroundResult - ).to.be.deep.equal(expectedResult); - } - } - }); - test('exports to ruby and includes driver syntax', async () => { - const textFromEditor = "use('db'); db.coll.find({ name: '22' })"; - const selection = { - start: { line: 0, character: 24 }, - end: { line: 0, character: 38 }, - } as vscode.Selection; - const mode = ExportToLanguageMode.QUERY; - const activeTextEditor = { - document: { getText: () => textFromEditor }, - } as vscode.TextEditor; - - mdbTestExtension.testExtensionController._playgroundController._selectedText = - "{ name: '22' }"; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.selection = - selection; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.mode = - mode; - mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = - activeTextEditor; - - const testCodeActionProvider = new CodeActionProvider(); - testCodeActionProvider.refresh({ selection, mode }); - - const codeActions = testCodeActionProvider.provideCodeActions(); - - expect(codeActions).to.exist; - - if (codeActions) { - expect(codeActions.length).to.be.equal(6); - const actionCommand = codeActions[5].command; - - if (actionCommand) { - expect(actionCommand.command).to.be.equal('mdb.exportToRuby'); - expect(actionCommand.title).to.be.equal('Export To Ruby'); - - await vscode.commands.executeCommand(actionCommand.command); - - let expectedResult: PlaygroundResult = { - namespace: 'DATABASE_NAME.COLLECTION_NAME', - type: null, - content: "{\n 'name' => '22'\n}", - language: 'ruby', - }; - expect( - mdbTestExtension.testExtensionController._playgroundController - ._playgroundResult - ).to.be.deep.equal(expectedResult); - - const codeLenses = - mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider.provideCodeLenses(); - expect(codeLenses.length).to.be.equal(2); - - await vscode.commands.executeCommand( - 'mdb.changeExportToLanguageAddons', - { - ...mdbTestExtension.testExtensionController._playgroundController - ._exportToLanguageCodeLensProvider._exportToLanguageAddons, - driverSyntax: true, - } - ); - - expectedResult = { - namespace: 'db.coll', - type: null, - content: - "# Requires the MongoDB Ruby Driver\n# https://docs.mongodb.com/ruby-driver/master/\n\nclient = Mongo::Client.new('mongodb://localhost:27018/?appname=mongodb-vscode+0.0.0-dev.0', :database => 'db')\n\nresult = client.database['coll'].find({\n 'name' => '22'\n})", - language: 'ruby', - }; - - expect( - mdbTestExtension.testExtensionController._playgroundController - ._playgroundResult - ).to.be.deep.equal(expectedResult); - } - } - }); -}); diff --git a/src/test/suite/editors/playgroundController.test.ts b/src/test/suite/editors/playgroundController.test.ts index 760b28e77..1c5807e1b 100644 --- a/src/test/suite/editors/playgroundController.test.ts +++ b/src/test/suite/editors/playgroundController.test.ts @@ -3,9 +3,12 @@ import { before, beforeEach, afterEach } from 'mocha'; import chai from 'chai'; import { DataService } from 'mongodb-data-service'; import sinon from 'sinon'; +import * as os from 'os'; +import { v4 as uuidv4 } from 'uuid'; +import path from 'path'; import ActiveDBCodeLensProvider from '../../../editors/activeConnectionCodeLensProvider'; -import CodeActionProvider from '../../../editors/codeActionProvider'; +import PlaygroundSelectedCodeActionProvider from '../../../editors/playgroundSelectedCodeActionProvider'; import ConnectionController from '../../../connectionController'; import EditDocumentCodeLensProvider from '../../../editors/editDocumentCodeLensProvider'; import { ExplorerController } from '../../../explorer'; @@ -58,7 +61,7 @@ suite('Playground Controller Test Suite', function () { ); const testExportToLanguageCodeLensProvider = new ExportToLanguageCodeLensProvider(); - const testCodeActionProvider = new CodeActionProvider(); + const testCodeActionProvider = new PlaygroundSelectedCodeActionProvider(); const testExplorerController = new ExplorerController( testConnectionController ); @@ -201,12 +204,15 @@ suite('Playground Controller Test Suite', function () { }); suite('playground is open', () => { + const fileName = path.join( + os.tmpdir(), + `playground-${uuidv4()}.mongodb.js` + ); + const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled' }); const activeTestEditorMock: unknown = { document: { - languageId: 'mongodb', - uri: { - path: 'test', - }, + languageId: 'javascript', + uri: documentUri, getText: () => "use('dbName');", lineAt: sinon.fake.returns({ text: "use('dbName');" }), }, @@ -505,8 +511,10 @@ suite('Playground Controller Test Suite', function () { .resolves(undefined); playgroundControllerTest._selectedText = '{ name: qwerty }'; - playgroundControllerTest._codeActionProvider.selection = selection; - playgroundControllerTest._codeActionProvider.mode = mode; + playgroundControllerTest._playgroundSelectedCodeActionProvider.selection = + selection; + playgroundControllerTest._playgroundSelectedCodeActionProvider.mode = + mode; playgroundControllerTest._activeTextEditor = activeTextEditor; await playgroundControllerTest.exportToLanguage('csharp'); diff --git a/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts b/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts new file mode 100644 index 000000000..7777b172f --- /dev/null +++ b/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts @@ -0,0 +1,536 @@ +import * as vscode from 'vscode'; +import { beforeEach, afterEach } from 'mocha'; +import chai from 'chai'; +import sinon from 'sinon'; +import * as os from 'os'; +import { v4 as uuidv4 } from 'uuid'; +import path from 'path'; + +import ActiveDBCodeLensProvider from '../../../editors/activeConnectionCodeLensProvider'; +import ExportToLanguageCodeLensProvider from '../../../editors/exportToLanguageCodeLensProvider'; +import PlaygroundSelectedCodeActionProvider from '../../../editors/playgroundSelectedCodeActionProvider'; +import { ExplorerController } from '../../../explorer'; +import { LanguageServerController } from '../../../language'; +import { mdbTestExtension } from '../stubbableMdbExtension'; +import { PlaygroundController } from '../../../editors'; +import { + PlaygroundResult, + ExportToLanguageMode, +} from '../../../types/playgroundType'; +import { TEST_DATABASE_URI } from '../dbTestHelper'; +import { TestExtensionContext } from '../stubs'; + +const expect = chai.expect; + +suite('Playground Selected CodeAction Provider Test Suite', function () { + this.timeout(5000); + + const testExtensionContext = new TestExtensionContext(); + testExtensionContext.extensionPath = '../../'; + + suite('the MongoDB playground in JS', () => { + const testCodeActionProvider = new PlaygroundSelectedCodeActionProvider(); + + beforeEach(async () => { + const fileName = path.join( + os.tmpdir(), + `playground-${uuidv4()}.mongodb.js` + ); + const documentUri = vscode.Uri.from({ + path: fileName, + scheme: 'untitled', + }); + const edit = new vscode.WorkspaceEdit(); + edit.insert(documentUri, new vscode.Position(0, 0), '123'); + await vscode.workspace.applyEdit(edit); + const document = await vscode.workspace.openTextDocument(documentUri); + await vscode.window.showTextDocument(document); + testCodeActionProvider.setActiveTextEditor( + vscode.window.activeTextEditor + ); + + sinon.replace( + mdbTestExtension.testExtensionController, + '_languageServerController', + new LanguageServerController(testExtensionContext) + ); + sinon.replace( + vscode.window, + 'showInformationMessage', + sinon.fake.resolves(true) + ); + + await mdbTestExtension.testExtensionController._connectionController.addNewConnectionStringAndConnect( + TEST_DATABASE_URI + ); + + const testActiveDBCodeLensProvider = new ActiveDBCodeLensProvider( + mdbTestExtension.testExtensionController._connectionController + ); + const testExportToLanguageCodeLensProvider = + new ExportToLanguageCodeLensProvider(); + const testExplorerController = new ExplorerController( + mdbTestExtension.testExtensionController._connectionController + ); + + mdbTestExtension.testExtensionController._playgroundController = + new PlaygroundController( + mdbTestExtension.testExtensionController._connectionController, + mdbTestExtension.testExtensionController._languageServerController, + mdbTestExtension.testExtensionController._telemetryService, + mdbTestExtension.testExtensionController._statusView, + mdbTestExtension.testExtensionController._playgroundResultViewProvider, + testActiveDBCodeLensProvider, + testExportToLanguageCodeLensProvider, + testCodeActionProvider, + testExplorerController + ); + + const mockOpenPlaygroundResult: any = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundController, + '_openPlaygroundResult', + mockOpenPlaygroundResult + ); + + await vscode.workspace + .getConfiguration('mdb') + .update('confirmRunAll', false); + + await mdbTestExtension.testExtensionController._languageServerController.startLanguageServer(); + await mdbTestExtension.testExtensionController._playgroundController._connectToServiceProvider(); + }); + + afterEach(async () => { + await vscode.commands.executeCommand( + 'workbench.action.closeActiveEditor' + ); + await vscode.workspace + .getConfiguration('mdb') + .update('confirmRunAll', true); + await mdbTestExtension.testExtensionController._connectionController.disconnect(); + mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); + sinon.restore(); + }); + + test('returns undefined when text is not selected', () => { + const codeActions = testCodeActionProvider.provideCodeActions(); + expect(codeActions).to.be.undefined; + }); + + test('returns a run selected playground blocks action', async () => { + mdbTestExtension.testExtensionController._playgroundController._selectedText = + '123'; + + const selection = { + start: { line: 0, character: 0 }, + end: { line: 0, character: 4 }, + } as vscode.Selection; + + testCodeActionProvider.refresh({ + selection, + mode: ExportToLanguageMode.OTHER, + }); + + const codeActions = testCodeActionProvider.provideCodeActions(); + expect(codeActions).to.exist; + + if (codeActions) { + expect(codeActions.length).to.be.equal(1); + const actionCommand = codeActions[0].command; + + if (actionCommand) { + expect(actionCommand.command).to.be.equal( + 'mdb.runSelectedPlaygroundBlocks' + ); + expect(actionCommand.title).to.be.equal( + 'Run selected playground blocks' + ); + + await vscode.commands.executeCommand(actionCommand.command); + + const expectedResult = { + namespace: null, + type: 'number', + content: 123, + language: 'plaintext', + }; + expect( + mdbTestExtension.testExtensionController._playgroundController + ._playgroundResult + ).to.be.deep.equal(expectedResult); + expect( + mdbTestExtension.testExtensionController._playgroundController + ._isPartialRun + ).to.be.equal(true); + } + } + }); + + test('returns an export to java action with whitespaces around objects', () => { + const textFromEditor = ' { name: "Alena Khineika" } '; + const selection = { + start: { line: 0, character: 2 }, + end: { line: 0, character: 27 }, + } as vscode.Selection; + const mode = ExportToLanguageMode.QUERY; + const activeTextEditor = { + document: { getText: () => textFromEditor }, + } as vscode.TextEditor; + + mdbTestExtension.testExtensionController._playgroundController._selectedText = + textFromEditor; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.selection = + selection; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.mode = + mode; + mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = + activeTextEditor; + + testCodeActionProvider.refresh({ selection, mode }); + + const codeActions = testCodeActionProvider.provideCodeActions(); + expect(codeActions).to.exist; + + if (codeActions) { + expect(codeActions.length).to.be.equal(6); + const actionCommand = codeActions[2].command; + + if (actionCommand) { + expect(actionCommand.command).to.be.equal('mdb.exportToJava'); + expect(actionCommand.title).to.be.equal('Export To Java'); + } + } + }); + + test('exports to java and includes builders', async () => { + const textFromEditor = "{ name: '22' }"; + const selection = { + start: { line: 0, character: 0 }, + end: { line: 0, character: 14 }, + } as vscode.Selection; + const mode = ExportToLanguageMode.QUERY; + const activeTextEditor = { + document: { getText: () => textFromEditor }, + } as vscode.TextEditor; + + mdbTestExtension.testExtensionController._playgroundController._selectedText = + textFromEditor; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.selection = + selection; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.mode = + mode; + mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = + activeTextEditor; + + testCodeActionProvider.refresh({ selection, mode }); + + const codeActions = testCodeActionProvider.provideCodeActions(); + expect(codeActions).to.exist; + + if (codeActions) { + expect(codeActions.length).to.be.equal(6); + const actionCommand = codeActions[2].command; + + if (actionCommand) { + expect(actionCommand.command).to.be.equal('mdb.exportToJava'); + expect(actionCommand.title).to.be.equal('Export To Java'); + + await vscode.commands.executeCommand(actionCommand.command); + + const expectedResult = { + namespace: 'DATABASE_NAME.COLLECTION_NAME', + type: null, + content: 'new Document("name", "22")', + language: 'java', + }; + + const codeLenses = + mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider.provideCodeLenses(); + expect(codeLenses.length).to.be.equal(3); + + // Only java queries supports builders. + await vscode.commands.executeCommand( + 'mdb.changeExportToLanguageAddons', + { + ...mdbTestExtension.testExtensionController._playgroundController + ._exportToLanguageCodeLensProvider._exportToLanguageAddons, + builders: true, + } + ); + + expectedResult.content = 'eq("name", "22")'; + expect( + mdbTestExtension.testExtensionController._playgroundController + ._playgroundResult + ).to.be.deep.equal(expectedResult); + } + } + }); + + test('exports to csharp and includes import statements', async () => { + const textFromEditor = "{ name: '22' }"; + const selection = { + start: { line: 0, character: 0 }, + end: { line: 0, character: 14 }, + } as vscode.Selection; + const mode = ExportToLanguageMode.QUERY; + const activeTextEditor = { + document: { getText: () => textFromEditor }, + } as vscode.TextEditor; + + mdbTestExtension.testExtensionController._playgroundController._selectedText = + textFromEditor; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.selection = + selection; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.mode = + mode; + mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = + activeTextEditor; + + testCodeActionProvider.refresh({ selection, mode }); + + const codeActions = testCodeActionProvider.provideCodeActions(); + expect(codeActions).to.exist; + + if (codeActions) { + expect(codeActions.length).to.be.equal(6); + const actionCommand = codeActions[3].command; + + if (actionCommand) { + expect(actionCommand.command).to.be.equal('mdb.exportToCsharp'); + expect(actionCommand.title).to.be.equal('Export To C#'); + + await vscode.commands.executeCommand(actionCommand.command); + + const expectedResult = { + namespace: 'DATABASE_NAME.COLLECTION_NAME', + type: null, + content: 'new BsonDocument("name", "22")', + language: 'csharp', + }; + expect( + mdbTestExtension.testExtensionController._playgroundController + ._playgroundResult + ).to.be.deep.equal(expectedResult); + + const codeLenses = + mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider.provideCodeLenses(); + expect(codeLenses.length).to.be.equal(1); // Csharp does not support driver syntax. + + await vscode.commands.executeCommand( + 'mdb.changeExportToLanguageAddons', + { + ...mdbTestExtension.testExtensionController._playgroundController + ._exportToLanguageCodeLensProvider._exportToLanguageAddons, + importStatements: true, + } + ); + + expectedResult.content = + 'using MongoDB.Bson;\nusing MongoDB.Driver;\n\nnew BsonDocument("name", "22")'; + expect( + mdbTestExtension.testExtensionController._playgroundController + ._playgroundResult + ).to.be.deep.equal(expectedResult); + } + } + }); + + test('exports to python and includes driver syntax', async () => { + const textFromEditor = "use('db'); db.coll.find({ name: '22' })"; + const selection = { + start: { line: 0, character: 24 }, + end: { line: 0, character: 38 }, + } as vscode.Selection; + const mode = ExportToLanguageMode.QUERY; + const activeTextEditor = { + document: { getText: () => textFromEditor }, + } as vscode.TextEditor; + + mdbTestExtension.testExtensionController._playgroundController._selectedText = + "{ name: '22' }"; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.selection = + selection; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.mode = + mode; + mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = + activeTextEditor; + + testCodeActionProvider.refresh({ selection, mode }); + + const codeActions = testCodeActionProvider.provideCodeActions(); + expect(codeActions).to.exist; + + if (codeActions) { + expect(codeActions.length).to.be.equal(6); + const actionCommand = codeActions[1].command; + + if (actionCommand) { + expect(actionCommand.command).to.be.equal('mdb.exportToPython'); + expect(actionCommand.title).to.be.equal('Export To Python 3'); + + await vscode.commands.executeCommand(actionCommand.command); + + let expectedResult: PlaygroundResult = { + namespace: 'DATABASE_NAME.COLLECTION_NAME', + type: null, + content: "{\n 'name': '22'\n}", + language: 'python', + }; + expect( + mdbTestExtension.testExtensionController._playgroundController + ._playgroundResult + ).to.be.deep.equal(expectedResult); + + const codeLenses = + mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider.provideCodeLenses(); + expect(codeLenses.length).to.be.equal(2); + + await vscode.commands.executeCommand( + 'mdb.changeExportToLanguageAddons', + { + ...mdbTestExtension.testExtensionController._playgroundController + ._exportToLanguageCodeLensProvider._exportToLanguageAddons, + driverSyntax: true, + } + ); + + expectedResult = { + namespace: 'db.coll', + type: null, + content: + "# Requires the PyMongo package.\n# https://api.mongodb.com/python/current\n\nclient = MongoClient('mongodb://localhost:27018/?appname=mongodb-vscode+0.0.0-dev.0')\nfilter={\n 'name': '22'\n}\n\nresult = client['db']['coll'].find(\n filter=filter\n)", + language: 'python', + }; + + expect( + mdbTestExtension.testExtensionController._playgroundController + ._playgroundResult + ).to.be.deep.equal(expectedResult); + } + } + }); + + test('exports to ruby and includes driver syntax', async () => { + const textFromEditor = "use('db'); db.coll.find({ name: '22' })"; + const selection = { + start: { line: 0, character: 24 }, + end: { line: 0, character: 38 }, + } as vscode.Selection; + const mode = ExportToLanguageMode.QUERY; + const activeTextEditor = { + document: { getText: () => textFromEditor }, + } as vscode.TextEditor; + + mdbTestExtension.testExtensionController._playgroundController._selectedText = + "{ name: '22' }"; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.selection = + selection; + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.mode = + mode; + mdbTestExtension.testExtensionController._playgroundController._activeTextEditor = + activeTextEditor; + + testCodeActionProvider.refresh({ selection, mode }); + + const codeActions = testCodeActionProvider.provideCodeActions(); + expect(codeActions).to.exist; + + if (codeActions) { + expect(codeActions.length).to.be.equal(6); + const actionCommand = codeActions[5].command; + + if (actionCommand) { + expect(actionCommand.command).to.be.equal('mdb.exportToRuby'); + expect(actionCommand.title).to.be.equal('Export To Ruby'); + + await vscode.commands.executeCommand(actionCommand.command); + + let expectedResult: PlaygroundResult = { + namespace: 'DATABASE_NAME.COLLECTION_NAME', + type: null, + content: "{\n 'name' => '22'\n}", + language: 'ruby', + }; + expect( + mdbTestExtension.testExtensionController._playgroundController + ._playgroundResult + ).to.be.deep.equal(expectedResult); + + const codeLenses = + mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider.provideCodeLenses(); + expect(codeLenses.length).to.be.equal(2); + + await vscode.commands.executeCommand( + 'mdb.changeExportToLanguageAddons', + { + ...mdbTestExtension.testExtensionController._playgroundController + ._exportToLanguageCodeLensProvider._exportToLanguageAddons, + driverSyntax: true, + } + ); + + expectedResult = { + namespace: 'db.coll', + type: null, + content: + "# Requires the MongoDB Ruby Driver\n# https://docs.mongodb.com/ruby-driver/master/\n\nclient = Mongo::Client.new('mongodb://localhost:27018/?appname=mongodb-vscode+0.0.0-dev.0', :database => 'db')\n\nresult = client.database['coll'].find({\n 'name' => '22'\n})", + language: 'ruby', + }; + + expect( + mdbTestExtension.testExtensionController._playgroundController + ._playgroundResult + ).to.be.deep.equal(expectedResult); + } + } + }); + }); + + suite('the regular JS file', () => { + const testCodeActionProvider = new PlaygroundSelectedCodeActionProvider(); + + beforeEach(async () => { + const fileName = path.join(os.tmpdir(), `regular-file-${uuidv4()}.js`); + const documentUri = vscode.Uri.from({ + path: fileName, + scheme: 'untitled', + }); + const document = await vscode.workspace.openTextDocument(documentUri); + await vscode.window.showTextDocument(document); + testCodeActionProvider.setActiveTextEditor( + vscode.window.activeTextEditor + ); + }); + + afterEach(async () => { + await vscode.commands.executeCommand( + 'workbench.action.closeActiveEditor' + ); + }); + + test('returns undefined when text is not selected', () => { + const codeActions = testCodeActionProvider.provideCodeActions(); + expect(codeActions).to.be.undefined; + }); + + test('returns undefined when text is selected', () => { + mdbTestExtension.testExtensionController._playgroundController._selectedText = + '123'; + + const selection = { + start: { line: 0, character: 0 }, + end: { line: 0, character: 4 }, + } as vscode.Selection; + + testCodeActionProvider.refresh({ + selection, + mode: ExportToLanguageMode.OTHER, + }); + + const codeActions = testCodeActionProvider.provideCodeActions(); + expect(codeActions).to.be.undefined; + }); + }); +}); diff --git a/src/test/suite/explorer/playgroundsExplorer.test.ts b/src/test/suite/explorer/playgroundsExplorer.test.ts index cbcba9aef..55ec58b97 100644 --- a/src/test/suite/explorer/playgroundsExplorer.test.ts +++ b/src/test/suite/explorer/playgroundsExplorer.test.ts @@ -1,6 +1,7 @@ import assert from 'assert'; import * as vscode from 'vscode'; import { before, afterEach } from 'mocha'; +import * as path from 'path'; import { mdbTestExtension } from '../stubbableMdbExtension'; import PlaygroundsTree from './../../../explorer/playgroundsTree'; @@ -44,34 +45,19 @@ suite('Playgrounds Controller Test Suite', function () { }); test('should search for playground in the workspace', async () => { - const workspaceFolders = (vscode.workspace.workspaceFolders || []).filter( - (folder) => folder.uri.scheme === 'file' - ); - const rootPath = workspaceFolders[0]?.uri.path.replace('/out/test', ''); - const rootUri = vscode.Uri.parse(rootPath); const treeController = testPlaygroundsExplorer.getTreeController(); try { - const children = await treeController.getPlaygrounds(rootUri); - + const rootPath = path.resolve(__dirname, '../../../..'); + const children = await treeController.getPlaygrounds(rootPath); assert.strictEqual(Object.keys(children).length, 7); - - const playgrounds = Object.values(children).filter( - (item: any) => item.label && item.label.split('.').pop() === 'mongodb' - ); - - assert.strictEqual(Object.keys(playgrounds).length, 7); } catch (error) { assert(false, error as Error); } }); test('should exclude folders and files specified in extension settings', async () => { - const workspaceFolders = (vscode.workspace.workspaceFolders || []).filter( - (folder) => folder.uri.scheme === 'file' - ); - const rootPath = workspaceFolders[0]?.uri.path.replace('/out/test', ''); - const rootUri = vscode.Uri.parse(rootPath); + const treeController = new PlaygroundsTree(); try { await vscode.workspace @@ -80,9 +66,8 @@ suite('Playgrounds Controller Test Suite', function () { 'excludeFromPlaygroundsSearch', excludeFromPlaygroundsSearchDefault.concat(['**/playgrounds/**']) ); - - const treeController = new PlaygroundsTree(); - const children = await treeController.getPlaygrounds(rootUri); + const rootPath = path.resolve(__dirname, '../../../..'); + const children = await treeController.getPlaygrounds(rootPath); assert.strictEqual(Object.keys(children).length, 3); } catch (error) { diff --git a/src/test/suite/language/languageServerController.test.ts b/src/test/suite/language/languageServerController.test.ts index 1455b8958..48a9d9a1e 100644 --- a/src/test/suite/language/languageServerController.test.ts +++ b/src/test/suite/language/languageServerController.test.ts @@ -5,7 +5,7 @@ import path from 'path'; import sinon from 'sinon'; import ActiveDBCodeLensProvider from '../../../editors/activeConnectionCodeLensProvider'; -import CodeActionProvider from '../../../editors/codeActionProvider'; +import PlaygroundSelectedCodeActionProvider from '../../../editors/playgroundSelectedCodeActionProvider'; import ConnectionController from '../../../connectionController'; import EditDocumentCodeLensProvider from '../../../editors/editDocumentCodeLensProvider'; import { ExplorerController } from '../../../explorer'; @@ -58,7 +58,7 @@ suite('Language Server Controller Test Suite', () => { ); const testExportToLanguageCodeLensProvider = new ExportToLanguageCodeLensProvider(); - const testCodeActionProvider = new CodeActionProvider(); + const testCodeActionProvider = new PlaygroundSelectedCodeActionProvider(); const testPlaygroundController = new PlaygroundController( testConnectionController, testLanguageServerController, diff --git a/src/test/suite/mdbExtensionController.test.ts b/src/test/suite/mdbExtensionController.test.ts index d48191422..803f3f8cf 100644 --- a/src/test/suite/mdbExtensionController.test.ts +++ b/src/test/suite/mdbExtensionController.test.ts @@ -565,30 +565,19 @@ suite('MDBExtensionController Test Suite', function () { mockActiveConnectionId ); - const mockOpenTextDocument = sinon.fake.resolves('untitled'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); - - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); - await vscode.commands.executeCommand('mdb.addDatabase', mockTreeItem); - assert(mockOpenTextDocument.firstCall.args[0].language === 'mongodb'); assert( - mockOpenTextDocument.firstCall.args[0].content.includes( - '// Create a new database.' - ) - ); - assert( - mockOpenTextDocument.firstCall.args[0].content.includes( - 'NEW_DATABASE_NAME' - ) - ); - assert( - mockOpenTextDocument.firstCall.args[0].content.includes( - 'NEW_COLLECTION_NAME' - ) + vscode.window.activeTextEditor?.document.languageId === 'javascript' ); + assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); + + const content = vscode.window.activeTextEditor.document.getText(); + assert(content.includes('// Create a new database.')); + assert(content.includes('NEW_DATABASE_NAME')); + assert(content.includes('NEW_COLLECTION_NAME')); + + await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); }); test('mdb.addDatabase command fails when disconnecting', async () => { @@ -700,31 +689,20 @@ suite('MDBExtensionController Test Suite', function () { mockActiveConnectionId ); - const mockOpenTextDocument = sinon.fake.resolves('untitled'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); - - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); - await vscode.commands.executeCommand('mdb.addCollection', mockTreeItem); - assert(mockOpenTextDocument.firstCall.args[0].language === 'mongodb'); assert( - mockOpenTextDocument.firstCall.args[0].content.includes( - '// The current database to use.' - ) - ); - assert( - mockOpenTextDocument.firstCall.args[0].content.includes('iceCreamDB') - ); - assert( - mockOpenTextDocument.firstCall.args[0].content.includes( - 'NEW_COLLECTION_NAME' - ) - ); - assert( - !mockOpenTextDocument.firstCall.args[0].content.includes('time-series') + vscode.window.activeTextEditor?.document.languageId === 'javascript' ); + assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); + + const content = vscode.window.activeTextEditor.document.getText(); + assert(content.includes('// The current database to use.')); + assert(content.includes('iceCreamDB')); + assert(content.includes('NEW_COLLECTION_NAME')); + assert(!content.includes('time-series')); + + await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); }); test('mdb.addCollection command fails when disconnecting', async () => { @@ -1365,72 +1343,44 @@ suite('MDBExtensionController Test Suite', function () { }); test('mdb.searchForDocuments should create a MongoDB playground with search template', async () => { - const mockOpenTextDocument = sinon.fake.resolves('untitled'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); - - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); - await vscode.commands.executeCommand('mdb.searchForDocuments', { databaseName: 'dbbbbbName', collectionName: 'colllllllllName', }); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].language, - 'mongodb' - ); - assert( - mockOpenTextDocument.firstCall.args[0].content.includes( - 'Search for documents in the current collection.' - ) - ); - assert( - mockOpenTextDocument.firstCall.args[0].content.includes('dbbbbbName') - ); assert( - mockOpenTextDocument.firstCall.args[0].content.includes('colllllllllName') + vscode.window.activeTextEditor?.document.languageId === 'javascript' ); - assert.strictEqual(mockShowTextDocument.firstCall.args[0], 'untitled'); - }); + assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); - test('mdb.createIndexFromTreeView should create a MongoDB playground with index template', async () => { - const mockOpenTextDocument = sinon.fake.resolves('untitled'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); + const content = vscode.window.activeTextEditor.document.getText(); + assert(content.includes('Search for documents in the current collection.')); + assert(content.includes('dbbbbbName')); + assert(content.includes('colllllllllName')); - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); + await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); + }); + test('mdb.createIndexFromTreeView should create a MongoDB playground with index template', async () => { await vscode.commands.executeCommand('mdb.createIndexFromTreeView', { databaseName: 'dbbbbbName', collectionName: 'colllllllllName', }); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].language, - 'mongodb' - ); - assert( - mockOpenTextDocument.firstCall.args[0].content.includes('dbbbbbName') - ); assert( - mockOpenTextDocument.firstCall.args[0].content.includes('colllllllllName') + vscode.window.activeTextEditor?.document.languageId === 'javascript' ); - assert( - mockOpenTextDocument.firstCall.args[0].content.includes( - 'Create a new index in the collection.' - ) - ); - assert.strictEqual(mockShowTextDocument.firstCall.args[0], 'untitled'); - }); + assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); - test('mdb.createPlayground should create a MongoDB playground with default template', async () => { - const mockOpenTextDocument = sinon.fake.resolves('untitled'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); + const content = vscode.window.activeTextEditor.document.getText(); + assert(content.includes('Create a new index in the collection.')); + assert(content.includes('dbbbbbName')); + assert(content.includes('colllllllllName')); - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); + await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); + }); + test('mdb.createPlayground should create a MongoDB playground with default template', async () => { const mockGetConfiguration = sinon.fake.returns({ get: () => true, }); @@ -1438,40 +1388,18 @@ suite('MDBExtensionController Test Suite', function () { await vscode.commands.executeCommand('mdb.createPlayground'); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].language, - 'mongodb' - ); assert( - mockOpenTextDocument.firstCall.args[0].content.startsWith( - '// MongoDB Playground' - ) + vscode.window.activeTextEditor?.document.languageId === 'javascript' ); - assert.strictEqual(mockShowTextDocument.firstCall.args[0], 'untitled'); - }); - - test('mdb.createNewPlaygroundFromViewAction should create a MongoDB playground', async () => { - const mockOpenTextDocument = sinon.fake.resolves('untitled'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); + assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); + const content = vscode.window.activeTextEditor.document.getText(); + assert(content.includes('// MongoDB Playground')); - await vscode.commands.executeCommand('mdb.createPlayground'); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].language, - 'mongodb' - ); - assert.strictEqual(mockShowTextDocument.firstCall.args[0], 'untitled'); + await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); }); test('mdb.createPlayground command should create a MongoDB playground without template', async () => { - const mockOpenTextDocument = sinon.fake.resolves('untitled'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); - - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); - const mockGetConfiguration = sinon.fake.returns({ get: () => false, }); @@ -1479,12 +1407,15 @@ suite('MDBExtensionController Test Suite', function () { await vscode.commands.executeCommand('mdb.createPlayground'); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].language, - 'mongodb' + assert( + vscode.window.activeTextEditor?.document.languageId === 'javascript' ); - assert.strictEqual(mockOpenTextDocument.firstCall.args[0].content, ''); - assert.strictEqual(mockShowTextDocument.firstCall.args[0], 'untitled'); + assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); + + const content = vscode.window.activeTextEditor.document.getText(); + assert.strictEqual(content, ''); + + await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); }); test('mdb.runSelectedPlaygroundBlocks command should call runSelectedPlaygroundBlocks on the playground controller', async () => { diff --git a/src/test/suite/telemetry/telemetryService.test.ts b/src/test/suite/telemetry/telemetryService.test.ts index a8ba99cf9..294cd5b09 100644 --- a/src/test/suite/telemetry/telemetryService.test.ts +++ b/src/test/suite/telemetry/telemetryService.test.ts @@ -60,12 +60,12 @@ suite('Telemetry Controller Test Suite', () => { mockTrackCommandRun ); sinon.replace( - mdbTestExtension.testExtensionController._telemetryService, + mdbTestExtension.testExtensionController._playgroundController._telemetryService, 'trackPlaygroundCodeExecuted', mockTrackPlaygroundCodeExecuted ); sinon.replace( - mdbTestExtension.testExtensionController._telemetryService, + mdbTestExtension.testExtensionController._playgroundController._telemetryService, 'trackPlaygroundLoaded', mockTrackPlaygroundLoadedMethod ); @@ -318,7 +318,7 @@ suite('Telemetry Controller Test Suite', () => { const mode = ExportToLanguageMode.QUERY; const language = 'python'; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.mode = + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.mode = mode; mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider._exportToLanguageAddons = { @@ -361,7 +361,7 @@ suite('Telemetry Controller Test Suite', () => { const mode = ExportToLanguageMode.AGGREGATION; const language = 'java'; - mdbTestExtension.testExtensionController._playgroundController._codeActionProvider.mode = + mdbTestExtension.testExtensionController._playgroundController._playgroundSelectedCodeActionProvider.mode = mode; mdbTestExtension.testExtensionController._playgroundController._exportToLanguageCodeLensProvider._exportToLanguageAddons = { @@ -387,47 +387,6 @@ suite('Telemetry Controller Test Suite', () => { }); }); - suite('with active connection', function () { - this.timeout(5000); - - let dataServ; - beforeEach(async () => { - try { - dataServ = await connect({ connectionString: TEST_DATABASE_URI }); - } catch (error) { - expect(error).to.be.undefined; - } - }); - - afterEach(async () => { - sinon.restore(); - await dataServ.disconnect(); - }); - - test('track new connection event fetches the connection instance information', async () => { - sinon.replace(testTelemetryService, 'track', mockTrack); - sinon.replace( - testTelemetryService, - '_isTelemetryFeatureEnabled', - () => true - ); - await mdbTestExtension.testExtensionController._telemetryService.trackNewConnection( - dataServ, - ConnectionTypes.CONNECTION_STRING - ); - - expect(mockTrack.firstCall.args[0]).to.equal('New Connection'); - const instanceTelemetry: NewConnectionTelemetryEventProperties = - mockTrack.firstCall.args[1]; - expect(instanceTelemetry.is_localhost).to.equal(true); - expect(instanceTelemetry.is_atlas).to.equal(false); - expect(instanceTelemetry.is_used_connect_screen).to.equal(false); - expect(instanceTelemetry.is_used_command_palette).to.equal(true); - expect(instanceTelemetry.is_used_saved_connection).to.equal(false); - expect(instanceTelemetry.is_genuine).to.equal(true); - }); - }); - suite('prepare playground result types', () => { test('convert AggregationCursor shellApiType to aggregation telemetry type', () => { const res = { diff --git a/src/utils/playground.ts b/src/utils/playground.ts index f0e3ee38a..2d8a59111 100644 --- a/src/utils/playground.ts +++ b/src/utils/playground.ts @@ -1,3 +1,4 @@ +/* eslint-disable complexity */ import * as vscode from 'vscode'; import micromatch from 'micromatch'; import * as fs from 'fs'; @@ -47,15 +48,15 @@ export class FileStat implements vscode.FileStat { const getFileNames = (filePath: string): Promise => { return fs.promises.readdir(filePath); -} +}; const getStat = async (filePath: string): Promise => { return new FileStat(await stat(filePath)); -} +}; const stat = (filePath: string): Promise => { return fs.promises.stat(filePath); -} +}; export const isPlayground = (fileUri?: vscode.Uri) => { if (!fileUri) { @@ -77,12 +78,23 @@ export const isPlayground = (fileUri?: vscode.Uri) => { const extension = fileNameParts[fileNameParts.length - 1]; const secondaryExtension = fileNameParts[fileNameParts.length - 2]; - return fileNameParts.length > 1 && (extension === 'mongodb' || (extension === 'js' && secondaryExtension === 'mongodb')); -} - -export const readDirectory = async (fsPath: string, excludeFromPlaygroundsSearch?: string[]): Promise<{ name: string, path: string }[]> => { + return ( + fileNameParts.length > 1 && + (extension === 'mongodb' || + (extension === 'js' && secondaryExtension === 'mongodb')) + ); +}; + +export const getPlaygrounds = async ({ + fsPath, + excludeFromPlaygroundsSearch, + playgrounds = [], +}: { + fsPath: string; + excludeFromPlaygroundsSearch?: string[]; + playgrounds?: { name: string; path: string }[]; +}): Promise<{ name: string; path: string }[]> => { const fileNames = await getFileNames(fsPath); - const playgrounds: { name: string, path: string }[] = []; for (let i = 0; i < fileNames.length; i++) { const fileName = fileNames[i]; @@ -94,10 +106,17 @@ export const readDirectory = async (fsPath: string, excludeFromPlaygroundsSearch if (stat.type === vscode.FileType.File && isPlayground(fileUri)) { playgrounds.push({ name: fileName, path: fileUri.fsPath }); } else if ( - (stat.type === vscode.FileType.Directory && !excludeFromPlaygroundsSearch) || - (stat.type === vscode.FileType.Directory && excludeFromPlaygroundsSearch && !micromatch.isMatch(fileName, excludeFromPlaygroundsSearch)) + (stat.type === vscode.FileType.Directory && + !excludeFromPlaygroundsSearch) || + (stat.type === vscode.FileType.Directory && + excludeFromPlaygroundsSearch && + !micromatch.isMatch(fileName, excludeFromPlaygroundsSearch)) ) { - await readDirectory(fileUri.fsPath); + await getPlaygrounds({ + fsPath: fileUri.fsPath, + excludeFromPlaygroundsSearch, + playgrounds, + }); } } catch (error) { /* */ @@ -105,4 +124,4 @@ export const readDirectory = async (fsPath: string, excludeFromPlaygroundsSearch } return playgrounds; -} +}; From a86e0ff6dac6b392ec4861f01af2a84934b9a140 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 20 Feb 2023 18:50:48 +0100 Subject: [PATCH 14/31] refactor: reformat --- src/test/suite/telemetry/telemetryService.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/suite/telemetry/telemetryService.test.ts b/src/test/suite/telemetry/telemetryService.test.ts index 294cd5b09..0bcfce32b 100644 --- a/src/test/suite/telemetry/telemetryService.test.ts +++ b/src/test/suite/telemetry/telemetryService.test.ts @@ -60,12 +60,14 @@ suite('Telemetry Controller Test Suite', () => { mockTrackCommandRun ); sinon.replace( - mdbTestExtension.testExtensionController._playgroundController._telemetryService, + mdbTestExtension.testExtensionController._playgroundController + ._telemetryService, 'trackPlaygroundCodeExecuted', mockTrackPlaygroundCodeExecuted ); sinon.replace( - mdbTestExtension.testExtensionController._playgroundController._telemetryService, + mdbTestExtension.testExtensionController._playgroundController + ._telemetryService, 'trackPlaygroundLoaded', mockTrackPlaygroundLoadedMethod ); From 084bfd9967b4232d21bfa20005b1509d4ab456dd Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 20 Feb 2023 18:52:13 +0100 Subject: [PATCH 15/31] refactor: restore snippets --- package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/package.json b/package.json index f3ef71d94..d13f465c2 100644 --- a/package.json +++ b/package.json @@ -133,6 +133,10 @@ } ], "snippets": [ + { + "language": "mongodb", + "path": "./snippets/stage-autocompleter.json" + }, { "language": "terraform", "path": "./snippets/atlas-terraform.json" From 1a009ed19d6ec1627986cebc1ec9f67c6c00cfcb Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 20 Feb 2023 19:03:10 +0100 Subject: [PATCH 16/31] refactor: clean up --- package.json | 2 +- src/language/server.ts | 2 +- src/test/suite/telemetry/telemetryService.test.ts | 4 ---- src/utils/playground.ts | 7 +++++-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index d13f465c2..07aacbf35 100644 --- a/package.json +++ b/package.json @@ -134,7 +134,7 @@ ], "snippets": [ { - "language": "mongodb", + "language": "javascript", "path": "./snippets/stage-autocompleter.json" }, { diff --git a/src/language/server.ts b/src/language/server.ts index 70e5c5621..9e27007ed 100644 --- a/src/language/server.ts +++ b/src/language/server.ts @@ -57,7 +57,7 @@ connection.onInitialize((params: InitializeParams) => { // Tell the client that the server supports code completion completionProvider: { resolveProvider: true, - triggerCharacters: ['.', '$'], + triggerCharacters: ['.'], }, // documentFormattingProvider: true, // documentRangeFormattingProvider: true, diff --git a/src/test/suite/telemetry/telemetryService.test.ts b/src/test/suite/telemetry/telemetryService.test.ts index 0bcfce32b..c3c3148b0 100644 --- a/src/test/suite/telemetry/telemetryService.test.ts +++ b/src/test/suite/telemetry/telemetryService.test.ts @@ -2,7 +2,6 @@ import * as vscode from 'vscode'; import * as path from 'path'; import { afterEach, beforeEach } from 'mocha'; import chai from 'chai'; -import { connect } from 'mongodb-data-service'; import { config } from 'dotenv'; import { resolve } from 'path'; import sinon from 'sinon'; @@ -13,7 +12,6 @@ import { ConnectionTypes } from '../../../connectionController'; import { DocumentSource } from '../../../documentSource'; import { ExportToLanguageMode } from '../../../types/playgroundType'; import { mdbTestExtension } from '../stubbableMdbExtension'; -import { NewConnectionTelemetryEventProperties } from '../../../telemetry/connectionTelemetry'; import { SegmentProperties, TelemetryEventTypes, @@ -22,8 +20,6 @@ import { const expect = chai.expect; const { version } = require('../../../../package.json'); -const TEST_DATABASE_URI = 'mongodb://localhost:27018'; - chai.use(sinonChai); config({ path: resolve(__dirname, '../../../../.env') }); diff --git a/src/utils/playground.ts b/src/utils/playground.ts index 2d8a59111..6183eda3e 100644 --- a/src/utils/playground.ts +++ b/src/utils/playground.ts @@ -1,9 +1,12 @@ -/* eslint-disable complexity */ import * as vscode from 'vscode'; import micromatch from 'micromatch'; import * as fs from 'fs'; import * as path from 'path'; +import { createLogger } from '../logging'; + +const log = createLogger('playground utils'); + export class FileStat implements vscode.FileStat { constructor(private fsStat: fs.Stats) {} @@ -119,7 +122,7 @@ export const getPlaygrounds = async ({ }); } } catch (error) { - /* */ + log.error('Get playgrounds recursively from the workspace error', error); } } From 989675f98eea4a4ca0da574ca9a49cdc65fc6b29 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 21 Feb 2023 12:19:17 +0100 Subject: [PATCH 17/31] build: bump vscode engine --- package-lock.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a6c0e6bc..4eac53233 100644 --- a/package-lock.json +++ b/package-lock.json @@ -129,8 +129,8 @@ }, "engines": { "node": "^16.16.0", - "npm": "^8.8.0", - "vscode": "^1.71.0" + "npm": "^8.15.1", + "vscode": "^1.75.1" } }, "node_modules/@ampproject/remapping": { diff --git a/package.json b/package.json index 07aacbf35..333e102f9 100644 --- a/package.json +++ b/package.json @@ -62,9 +62,9 @@ "reformat": "prettier --write ." }, "engines": { - "vscode": "^1.71.0", + "vscode": "^1.75.1", "node": "^16.16.0", - "npm": "^8.8.0" + "npm": "^8.15.1" }, "activationEvents": [ "onView:mongoDB", From 97c3cb23517153214e39aba920c082f0f970aa8a Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 21 Feb 2023 13:43:02 +0100 Subject: [PATCH 18/31] build: clean up dependencies --- package-lock.json | 3447 +++++++++++++++++++++++---------------------- package.json | 81 +- 2 files changed, 1778 insertions(+), 1750 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4eac53233..127a75d8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,53 +9,53 @@ "version": "0.0.0-dev.0", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { - "@babel/parser": "^7.19.1", - "@babel/traverse": "^7.19.1", - "@fortawesome/fontawesome-svg-core": "^6.2.0", - "@fortawesome/free-solid-svg-icons": "^6.2.0", + "@babel/parser": "^7.21.1", + "@babel/traverse": "^7.21.0", + "@fortawesome/fontawesome-svg-core": "^6.3.0", + "@fortawesome/free-solid-svg-icons": "^6.3.0", "@fortawesome/react-fontawesome": "^0.2.0", - "@iconify-icons/codicon": "^1.2.16", + "@iconify-icons/codicon": "^1.2.21", "@iconify/react": "^1.1.4", - "@leafygreen-ui/logo": "^6.1.3", - "@leafygreen-ui/palette": "^3.4.2", + "@leafygreen-ui/logo": "^6.3.0", + "@leafygreen-ui/palette": "^3.4.7", "@leafygreen-ui/toggle": "^7.0.5", - "@mongodb-js/mongodb-constants": "^0.2.1", + "@mongodb-js/mongodb-constants": "^0.2.2", "@mongosh/browser-runtime-electron": "^1.6.2", "@mongosh/i18n": "^1.6.2", "@mongosh/service-provider-server": "^1.6.2", "@mongosh/shell-api": "^1.6.2", "analytics-node": "^5.1.2", - "bson": "^4.7.0", - "bson-transpilers": "^2.0.0", + "bson": "^4.7.2", + "bson-transpilers": "^2.0.2", "classnames": "^2.3.2", "debug": "^4.3.4", - "dotenv": "^16.0.2", + "dotenv": "^16.0.3", "micromatch": "^4.0.5", - "mongodb": "^4.13.0", + "mongodb": "^4.14.0", "mongodb-build-info": "^1.5.0", "mongodb-cloud-info": "^1.1.3", "mongodb-connection-string-url": "^2.5.3", "mongodb-data-service": "^22.1.1", "mongodb-ns": "^2.4.0", - "mongodb-query-parser": "^2.4.6", + "mongodb-query-parser": "^2.4.10", "mongodb-schema": "^9.0.0", "numeral": "^2.0.6", "react": "^16.14.0", "react-dom": "^16.14.0", - "react-redux": "^7.2.8", - "redux": "^4.2.0", + "react-redux": "^7.2.9", + "redux": "^4.2.1", "ts-log": "^2.2.5", "uuid": "^8.3.2", - "vscode-languageclient": "^8.0.2", - "vscode-languageserver": "^8.0.2", - "vscode-languageserver-textdocument": "^1.0.7" + "vscode-languageclient": "^8.1.0", + "vscode-languageserver": "^8.1.0", + "vscode-languageserver-textdocument": "^1.0.9" }, "devDependencies": { "@mongodb-js/prettier-config-compass": "^1.0.0", - "@types/analytics-node": "^3.1.9", - "@types/babel__core": "^7.1.19", - "@types/babel__traverse": "^7.18.1", - "@types/chai": "^4.3.3", + "@types/analytics-node": "^3.1.10", + "@types/babel__core": "^7.20.0", + "@types/babel__traverse": "^7.18.3", + "@types/chai": "^4.3.4", "@types/chai-fs": "^2.0.2", "@types/chai-json-schema": "^1.4.6", "@types/debug": "^4.1.7", @@ -64,19 +64,19 @@ "@types/jest": "^26.0.24", "@types/micromatch": "^4.0.2", "@types/mocha": "^8.2.3", - "@types/node": "^14.18.29", + "@types/node": "^14.18.36", "@types/react": "^17.0.50", "@types/react-dom": "^17.0.17", "@types/sinon": "^9.0.11", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.74.0", - "@typescript-eslint/eslint-plugin": "^5.38.0", - "@typescript-eslint/parser": "^5.38.0", - "@vscode/test-electron": "^2.1.5", - "@vscode/vsce": "^2.16.0", + "@types/vscode": "^1.75.1", + "@typescript-eslint/eslint-plugin": "^5.53.0", + "@typescript-eslint/parser": "^5.53.0", + "@vscode/test-electron": "^2.2.3", + "@vscode/vsce": "^2.17.0", "autoprefixer": "^9.8.8", "buffer": "^6.0.3", - "chai": "^4.3.6", + "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "chai-fs": "^2.0.0", "chai-json-schema": "^1.5.1", @@ -88,8 +88,8 @@ "depcheck": "^1.4.3", "download": "^8.0.0", "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.6", - "eslint": "^8.23.1", + "enzyme-adapter-react-16": "^1.15.7", + "eslint": "^8.34.0", "eslint-config-mongodb-js": "^5.0.3", "eslint-plugin-mocha": "^10.1.0", "execa": "^1.0.0", @@ -99,30 +99,29 @@ "jest-transform-stub": "^2.0.0", "less": "^3.13.1", "less-loader": "^5.0.0", - "meow": "^9.0.0", "mkdirp": "^1.0.4", "mocha": "^8.4.0", - "mocha-junit-reporter": "^2.0.2", - "mocha-multi": "^1.1.6", - "mongodb-client-encryption": "^2.2.1", - "mongodb-runner": "^4.9.0", + "mocha-junit-reporter": "^2.2.0", + "mocha-multi": "^1.1.7", + "mongodb-client-encryption": "^2.5.0", + "mongodb-runner": "^4.10.0", "node-loader": "^0.6.0", "npm-run-all": "^4.1.5", "ora": "^5.4.1", "postcss-loader": "^3.0.0", "pre-commit": "^1.2.2", - "prettier": "^2.7.1", + "prettier": "^2.8.4", "process": "^0.11.10", - "semver": "^7.3.7", + "semver": "^7.3.8", "sinon": "^9.2.4", "sinon-chai": "^3.7.0", "stream-browserify": "^3.0.0", "style-loader": "^1.3.0", "ts-jest": "^26.5.6", - "ts-loader": "^9.4.1", + "ts-loader": "^9.4.2", "ts-node": "^10.9.1", - "typescript": "^4.8.3", - "webpack": "^5.74.0", + "typescript": "^4.9.5", + "webpack": "^5.75.0", "webpack-cli": "^4.10.0", "xvfb-maybe": "^0.2.1", "yargs-parser": "^20.2.9" @@ -1594,18 +1593,28 @@ } }, "node_modules/@babel/generator": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", - "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dependencies": { - "@babel/types": "^7.19.0", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", @@ -1640,12 +1649,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -1722,9 +1731,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "engines": { "node": ">=6.9.0" } @@ -1796,9 +1805,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", - "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1982,31 +1991,31 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", - "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.0", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.1", - "@babel/types": "^7.19.0", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2015,12 +2024,12 @@ } }, "node_modules/@babel/types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", - "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2231,15 +2240,15 @@ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "node_modules/@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", - "globals": "^13.15.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -2260,9 +2269,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2275,9 +2284,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -2320,33 +2329,33 @@ } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.0.tgz", - "integrity": "sha512-rBevIsj2nclStJ7AxTdfsa3ovHb1H+qApwrxcTVo+NNdeJiB9V75hsKfrkG5AwNcRUNxrPPiScGYCNmLMoh8pg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz", + "integrity": "sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.0.tgz", - "integrity": "sha512-Cf2mAAeMWFMzpLC7Y9H1I4o3wEU+XovVJhTiNG8ZNgSQj53yl7OCJaS80K4YjrABWZzbAHVaoHE1dVJ27AAYXw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz", + "integrity": "sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.2.0" + "@fortawesome/fontawesome-common-types": "6.3.0" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.0.tgz", - "integrity": "sha512-UjCILHIQ4I8cN46EiQn0CZL/h8AwCGgR//1c4R96Q5viSRwuKVo0NdQEc4bm+69ZwC0dUvjbDqAHF1RR5FA3XA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz", + "integrity": "sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.2.0" + "@fortawesome/fontawesome-common-types": "6.3.0" }, "engines": { "node": ">=6" @@ -2365,27 +2374,29 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2408,9 +2419,9 @@ "dev": true }, "node_modules/@iconify-icons/codicon": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.16.tgz", - "integrity": "sha512-85rBsFEhhq2qSBfIEF0hzUk31i4GjeRzNyd0DZGFWo5v+PgAeTBiv8ftsTDf8d2fxy9F5kesT/R7bOtRy1xKmw==", + "version": "1.2.21", + "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.21.tgz", + "integrity": "sha512-thIa+5jVVVSz048cSQQpQfnXU+zfQjxF3ofmkZHN+7fc6cHclKRxPPXSeVj7dHZzpgQx4pbijHPIUzIni+Pegw==", "dependencies": { "@iconify/types": "*" } @@ -3026,9 +3037,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "engines": { "node": ">=6.0.0" } @@ -3052,9 +3063,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", @@ -3128,14 +3139,14 @@ } }, "node_modules/@leafygreen-ui/logo": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/logo/-/logo-6.1.3.tgz", - "integrity": "sha512-b0UfZ6ypwRenw8DxhbwDd3B0JiSdTHCsTE8yQ2wBqQgTazIlz9WoFEjCrSaVv/oZ3XQnY4CBUjEfYGQ8aVOjTA==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/logo/-/logo-6.3.0.tgz", + "integrity": "sha512-hxAevbD/wfOjobRp7rVhqPyV/oFRUgwLuUdPn+JG1cBT/ALIeqz7fRz4jE6SyNc3ZXSWvphw/zHaKQSExVcXQQ==" }, "node_modules/@leafygreen-ui/palette": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/palette/-/palette-3.4.2.tgz", - "integrity": "sha512-uR+fPOlU2Hyg1gHb4iFDtZE1SRmuj591apZpHYwAJ3JF1oqHmHVUZy9XTGN+V1Y299FGWsKrCU7OJxS7bg3nDg==" + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/palette/-/palette-3.4.7.tgz", + "integrity": "sha512-AsvPlbvF7CERiZbAQR8hy3lAJ2/rieXI3cO0jsOwV8ztDqYNotKAdLujyr/NviudrRUenYiXrLizIKVlSPUMuA==" }, "node_modules/@leafygreen-ui/toggle": { "version": "7.0.5", @@ -3186,9 +3197,9 @@ } }, "node_modules/@mongodb-js/mongodb-constants": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.2.1.tgz", - "integrity": "sha512-arCTQYvK9scQszbQQcPba7Ru5HYrc8YINcGcM4HKMCcg+8A17U+3Y3AEI7N/oe2VE+1GFsrh8MoKBch4jEvY1g==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.2.2.tgz", + "integrity": "sha512-vm1G+/WRWmXGyE9ZnhDv9toe+LRu1x0F/lGEwqWESfBiUUUuVZhj25fS2o4IL7H4pJ31sFxr7/gu+ER8OkmtzA==" }, "node_modules/@mongodb-js/prettier-config-compass": { "version": "1.0.0", @@ -3880,18 +3891,18 @@ "dev": true }, "node_modules/@types/analytics-node": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.9.tgz", - "integrity": "sha512-C7L7/Dd/CmBST7AvgoCnf4yI9h6W5aYfCOcfUZS5GHlXDQjnXLVOUDpTdwTIZjW4lKECeil6+G+Ul6Xzwv/P0g==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.10.tgz", + "integrity": "sha512-dvn8iy2EQZDlQGgRNT9SW2Ljn9L3VgwcrpJvonufnNygZWB1XEufXNvDhUtwNUqNyHhD0hbDCCFb9j+B7vE5cA==", "dev": true }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -3915,9 +3926,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz", - "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "dependencies": { "@babel/types": "^7.3.0" } @@ -3929,9 +3940,9 @@ "dev": true }, "node_modules/@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==" }, "node_modules/@types/chai-fs": { "version": "2.0.2", @@ -4174,12 +4185,6 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, "node_modules/@types/mocha": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", @@ -4193,9 +4198,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.18.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.29.tgz", - "integrity": "sha512-LhF+9fbIX4iPzhsRLpK5H7iPdvW8L4IwGciXQIOEcuF62+9nw/VQVsOViAOOGxY3OlOKGLFv0sWwJXdwQeTn6A==" + "version": "14.18.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", + "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.0", @@ -4254,6 +4259,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/sinon": { "version": "9.0.11", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", @@ -4321,16 +4332,18 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz", - "integrity": "sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", + "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.38.0", - "@typescript-eslint/type-utils": "5.38.0", - "@typescript-eslint/utils": "5.38.0", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/type-utils": "5.53.0", + "@typescript-eslint/utils": "5.53.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -4362,14 +4375,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.0.tgz", - "integrity": "sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", + "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.38.0", - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/typescript-estree": "5.38.0", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", "debug": "^4.3.4" }, "engines": { @@ -4389,13 +4402,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz", - "integrity": "sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/visitor-keys": "5.38.0" + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4406,13 +4419,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.0.tgz", - "integrity": "sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", + "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.38.0", - "@typescript-eslint/utils": "5.38.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/utils": "5.53.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -4433,9 +4446,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.0.tgz", - "integrity": "sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4446,13 +4459,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz", - "integrity": "sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/visitor-keys": "5.38.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4473,17 +4486,19 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.0.tgz", - "integrity": "sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", + "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.38.0", - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/typescript-estree": "5.38.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4497,12 +4512,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz", - "integrity": "sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/types": "5.53.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4529,9 +4544,9 @@ "dev": true }, "node_modules/@vscode/test-electron": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", - "integrity": "sha512-O/ioqFpV+RvKbRykX2ItYPnbcZ4Hk5V0rY4uhQjQTLhGL9WZUvS7exzuYQCCI+ilSqJpctvxq2llTfGXf9UnnA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.3.tgz", + "integrity": "sha512-7DmdGYQTqRNaLHKG3j56buc9DkstriY4aV0S3Zj32u0U9/T0L8vwWAC9QGCh1meu1VXDEla1ze27TkqysHGP0Q==", "dev": true, "dependencies": { "http-proxy-agent": "^4.0.1", @@ -4540,7 +4555,7 @@ "unzipper": "^0.10.11" }, "engines": { - "node": ">=8.9.3" + "node": ">=16" } }, "node_modules/@vscode/vsce": { @@ -5053,6 +5068,12 @@ "prop-types": "^15.7.2", "prop-types-exact": "^1.2.0", "react-is": "^16.13.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0-alpha" } }, "node_modules/ajv": { @@ -5224,7 +5245,7 @@ "node_modules/ansi": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=", + "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==", "dev": true }, "node_modules/ansi-colors": { @@ -5472,44 +5493,18 @@ } }, "node_modules/array.prototype.find": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz", - "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.4" - } - }, - "node_modules/array.prototype.find/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.1.tgz", + "integrity": "sha512-I2ri5Z9uMpMvnsNrHre9l3PaX+z9D0/z6F7Yt2u15q7wt0I62g5kX6xUKR1SJiefgG+u2/gJUmM8B47XRvQR6w==", "dev": true, "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array.prototype.find/node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flat": { @@ -5541,15 +5536,6 @@ "node": ">= 0.4" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -5649,6 +5635,18 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -6130,13 +6128,12 @@ } }, "node_modules/bson-transpilers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bson-transpilers/-/bson-transpilers-2.0.0.tgz", - "integrity": "sha512-gHd/NCuZsbn+61uh1pDxI0dQxxkkq9SqsSc8hWN1Lwvu2dbnDLcPfBDaL3meYxb/sTDg+5drETbqgMwNsWg1vw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bson-transpilers/-/bson-transpilers-2.0.2.tgz", + "integrity": "sha512-FmY2vXr54rEcftux3/gspJ9RivX/kPz4O5XdAVuL2OxqYowXcDro+SETnMq5gWIy613o3DPLdGuAalDADOMHSQ==", "dependencies": { "antlr4": "4.7.2", "bson": "^4.4.1", - "context-eval": "^0.1.0", "js-yaml": "^3.13.1" } }, @@ -6295,13 +6292,16 @@ } }, "node_modules/call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "dependencies": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/call-me-maybe": { @@ -6360,23 +6360,6 @@ "node": ">=6" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001312", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", @@ -6432,14 +6415,14 @@ } }, "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -7402,9 +7385,9 @@ } }, "node_modules/config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, "dependencies": { "ini": "^1.3.4", @@ -7452,11 +7435,6 @@ "node": ">= 0.6" } }, - "node_modules/context-eval": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/context-eval/-/context-eval-0.1.0.tgz", - "integrity": "sha1-P8pxfX3wI6l4XwjGWkGJo93wP6s=" - }, "node_modules/context-map-webpack-plugin": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/context-map-webpack-plugin/-/context-map-webpack-plugin-0.1.0.tgz", @@ -7602,7 +7580,7 @@ "node_modules/css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", "dev": true, "dependencies": { "boolbase": "~1.0.0", @@ -7727,28 +7705,6 @@ "node": ">=0.10.0" } }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decimal.js": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", @@ -7991,15 +7947,15 @@ } }, "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "dependencies": { "type-detect": "^4.0.0" }, "engines": { - "node": ">=0.12" + "node": ">=6" } }, "node_modules/deep-extend": { @@ -8044,15 +8000,19 @@ } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties/node_modules/object-keys": { @@ -8419,7 +8379,7 @@ "node_modules/docopt": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", - "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", + "integrity": "sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -8491,7 +8451,7 @@ "node_modules/domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", "dev": true, "dependencies": { "dom-serializer": "0", @@ -8499,9 +8459,9 @@ } }, "node_modules/dotenv": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", - "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", "engines": { "node": ">=12" } @@ -8509,7 +8469,7 @@ "node_modules/downcache": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/downcache/-/downcache-0.0.9.tgz", - "integrity": "sha1-eQuwQkaJE2EVzpPyqhWUbG2AbQ4=", + "integrity": "sha512-AssoVsNYu5DnPY0Ro67lkbiAr66sk5IHuiIGm3pzFzWmTzkcEoFjDlG8szzP4x+ZN2OHehKTZbwDrC7l2Q52+g==", "dev": true, "dependencies": { "extend": "^3.0.0", @@ -8524,7 +8484,7 @@ "node_modules/downcache/node_modules/gauge": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", "dev": true, "dependencies": { "ansi": "^0.3.0", @@ -8535,12 +8495,12 @@ } }, "node_modules/downcache/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -8549,7 +8509,7 @@ "node_modules/downcache/node_modules/npmlog": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", "dev": true, "dependencies": { "ansi": "~0.3.1", @@ -8678,20 +8638,20 @@ } }, "node_modules/ejson-shell-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ejson-shell-parser/-/ejson-shell-parser-1.2.0.tgz", - "integrity": "sha512-2DbCot5/HYcO6kY91nLU5I0CKLTuK9LiKiwaY7OFvfqf3xVgYAvUiLAQKHKeqUFlIUXY3KwRtXfaF5Vic6R1dA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ejson-shell-parser/-/ejson-shell-parser-1.2.1.tgz", + "integrity": "sha512-xXRwH+O4EtL62ue8EmY8vNVr/AGRbRIv76WNuhXoWWwcT5TAvGKe4AqJh46QNXisVZe5e1JxvBdTnD3SO8ZLzA==", "dependencies": { "acorn": "^8.1.0" }, "peerDependencies": { - "bson": "^4.2.3" + "bson": "^4.2.3 || ^5.0.0" } }, "node_modules/ejson-shell-parser/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "bin": { "acorn": "bin/acorn" }, @@ -8798,20 +8758,28 @@ } }, "node_modules/enzyme-adapter-react-16": { - "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==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.7.tgz", + "integrity": "sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw==", "dev": true, "dependencies": { - "enzyme-adapter-utils": "^1.14.0", - "enzyme-shallow-equal": "^1.0.4", + "enzyme-adapter-utils": "^1.14.1", + "enzyme-shallow-equal": "^1.0.5", "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.values": "^1.1.2", - "prop-types": "^15.7.2", + "object.assign": "^4.1.4", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", "react-is": "^16.13.1", "react-test-renderer": "^16.0.0-0", "semver": "^5.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "peerDependencies": { + "enzyme": "^3.0.0", + "react": "^16.0.0-0", + "react-dom": "^16.0.0-0" } }, "node_modules/enzyme-adapter-react-16/node_modules/semver": { @@ -8824,18 +8792,24 @@ } }, "node_modules/enzyme-adapter-utils": { - "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==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz", + "integrity": "sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==", "dev": true, "dependencies": { "airbnb-prop-types": "^2.16.0", - "function.prototype.name": "^1.1.3", + "function.prototype.name": "^1.1.5", "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.fromentries": "^2.0.3", - "prop-types": "^15.7.2", + "object.assign": "^4.1.4", + "object.fromentries": "^2.0.5", + "prop-types": "^15.8.1", "semver": "^5.7.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "peerDependencies": { + "react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0" } }, "node_modules/enzyme-adapter-utils/node_modules/semver": { @@ -8848,13 +8822,16 @@ } }, "node_modules/enzyme-shallow-equal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", - "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz", + "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==", "dev": true, "dependencies": { "has": "^1.0.3", - "object-is": "^1.1.2" + "object-is": "^1.1.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/enzyme/node_modules/lodash.escape": { @@ -8890,26 +8867,50 @@ } }, "node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", "dev": true, "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-abstract/node_modules/object-keys": { @@ -8927,6 +8928,29 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -9081,15 +9105,15 @@ } }, "node_modules/eslint": { - "version": "8.23.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", - "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -9105,14 +9129,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -9765,9 +9789,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -9942,9 +9966,9 @@ } }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -9959,9 +9983,9 @@ } }, "node_modules/espree/node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -10660,6 +10684,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/file-entry-cache": { @@ -10799,6 +10826,15 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -10969,18 +11005,21 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.3.tgz", - "integrity": "sha512-H51qkbNSp8mtkJt+nyW1gyStBiKZxfRqySNUR99ylq6BPXHKI4SEvIlTKp4odLfjRKJV04DFWMU3G/YRlQOsag==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "functions-have-names": "^1.2.1" + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/functional-red-black-tree": { @@ -10990,10 +11029,13 @@ "dev": true }, "node_modules/functions-have-names": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz", - "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==", - "dev": true + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gauge": { "version": "2.7.4", @@ -11056,14 +11098,17 @@ } }, "node_modules/get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-mongodb-version": { @@ -11128,6 +11173,22 @@ "node": ">=6" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -11215,6 +11276,21 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -11244,6 +11320,18 @@ "node": ">= 4" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/got": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", @@ -11370,15 +11458,6 @@ "node": ">=6" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -11390,6 +11469,15 @@ "node": ">= 0.4.0" } }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -11398,6 +11486,30 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbol-support-x": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", @@ -11408,12 +11520,15 @@ } }, "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-to-string-tag-x": { @@ -11428,6 +11543,21 @@ "node": "*" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -11604,7 +11734,21 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/htmlparser2/node_modules/string_decoder": { "version": "1.3.0", @@ -11837,50 +11981,19 @@ } }, "node_modules/internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", - "dev": true, - "dependencies": { - "es-abstract": "^1.17.0-next.1", - "has": "^1.0.3", - "side-channel": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internal-slot/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "side-channel": "^1.0.4" }, "engines": { "node": ">= 0.4" } }, - "node_modules/internal-slot/node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -11979,11 +12092,37 @@ "node": ">=0.10.0" } }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -11997,12 +12136,19 @@ } }, "node_modules/is-boolean-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", - "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-buffer": { @@ -12011,12 +12157,15 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-ci": { @@ -12257,12 +12406,15 @@ "dev": true }, "node_modules/is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-number": { @@ -12288,6 +12440,15 @@ "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -12321,15 +12482,19 @@ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "node_modules/is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-retry-allowed": { @@ -12340,6 +12505,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -12350,12 +12527,18 @@ } }, "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-subset": { @@ -12376,6 +12559,25 @@ "node": ">= 0.4" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -12398,6 +12600,18 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-what": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.12.0.tgz", @@ -15029,7 +15243,8 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "engines": [ "node >= 0.2.0" - ] + ], + "optional": true }, "node_modules/jsonpointer.js": { "version": "0.4.0", @@ -15041,6 +15256,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "optional": true, "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -15242,7 +15458,7 @@ "node_modules/klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.9" @@ -15510,7 +15726,13 @@ "node_modules/lodash.assignin": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", + "dev": true + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", "dev": true }, "node_modules/lodash.camelcase": { @@ -15534,19 +15756,19 @@ "node_modules/lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", "dev": true }, "node_modules/lodash.filter": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", "dev": true }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true }, "node_modules/lodash.flattendeep": { @@ -15558,7 +15780,7 @@ "node_modules/lodash.foreach": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", "dev": true }, "node_modules/lodash.forin": { @@ -15574,7 +15796,8 @@ "node_modules/lodash.isfunction": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "optional": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", @@ -15589,7 +15812,7 @@ "node_modules/lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", "dev": true }, "node_modules/lodash.merge": { @@ -15601,55 +15824,56 @@ "node_modules/lodash.pad": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=", + "integrity": "sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==", "dev": true }, "node_modules/lodash.padend": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", + "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==", "dev": true }, "node_modules/lodash.padstart": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=", + "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", "dev": true }, "node_modules/lodash.pick": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", "dev": true }, "node_modules/lodash.reduce": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", "dev": true }, "node_modules/lodash.reject": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", "dev": true }, "node_modules/lodash.some": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", "dev": true }, "node_modules/lodash.startswith": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", - "integrity": "sha1-xZjErc4YiiflMUVzHNxsDnF3YAw=", + "integrity": "sha512-XClYR1h4/fJ7H+mmCKppbiBmljN/nGs73iq2SjCT9SF4CBPoUHzLvWmH1GtZMhMBZSiRkHXfeA2RY1eIlJ75ww==", "dev": true }, "node_modules/lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=" + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "optional": true }, "node_modules/log-symbols": { "version": "4.0.0", @@ -15795,18 +16019,6 @@ "node": ">=0.10.0" } }, - "node_modules/map-obj": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", - "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", @@ -15914,170 +16126,6 @@ "node": ">= 0.10.0" } }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", @@ -16179,15 +16227,6 @@ "dom-walk": "^0.1.0" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/mingo": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/mingo/-/mingo-1.3.3.tgz", @@ -16197,6 +16236,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16205,22 +16245,11 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/mixin-deep": { @@ -16310,16 +16339,16 @@ } }, "node_modules/mocha-junit-reporter": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.0.2.tgz", - "integrity": "sha512-vYwWq5hh3v1lG0gdQCBxwNipBfvDiAM1PHroQRNp96+2l72e9wEUTw+mzoK+O0SudgfQ7WvTQZ9Nh3qkAYAjfg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.0.tgz", + "integrity": "sha512-W83Ddf94nfLiTBl24aS8IVyFvO8aRDLlCvb+cKb/VEaN5dEbcqu3CXiTe8MQK2DvzS7oKE1RsFTxzN302GGbDQ==", "dev": true, "dependencies": { - "debug": "^2.2.0", - "md5": "^2.1.0", - "mkdirp": "~0.5.1", + "debug": "^4.3.4", + "md5": "^2.3.0", + "mkdirp": "~1.0.4", "strip-ansi": "^6.0.1", - "xml": "^1.0.0" + "xml": "^1.0.1" }, "peerDependencies": { "mocha": ">=2.2.5" @@ -16334,33 +16363,6 @@ "node": ">=8" } }, - "node_modules/mocha-junit-reporter/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/mocha-junit-reporter/node_modules/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, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha-junit-reporter/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/mocha-junit-reporter/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -16374,9 +16376,9 @@ } }, "node_modules/mocha-multi": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/mocha-multi/-/mocha-multi-1.1.6.tgz", - "integrity": "sha512-hMVmd9C1h4PEiFNwHxn8aa5/EgGLg0UswdOrlrq1Y8ieKmot8hZLYaiESIgg/He3E4oxwaXPWT1V1PJ0qNJlUQ==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/mocha-multi/-/mocha-multi-1.1.7.tgz", + "integrity": "sha512-SXZRgHy0XiRTASyOp0p6fjOkdj+R62L6cqutnYyQOvIjNznJuUwzykxctypeRiOwPd+gfn4yt3NRulMQyI8Tzg==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -16389,7 +16391,7 @@ "node": ">=6.0.0" }, "peerDependencies": { - "mocha": ">=2.2.0 <7 || ^9" + "mocha": ">=2.2.0 <7 || >=9" } }, "node_modules/mocha-multi/node_modules/lodash.once": { @@ -16719,14 +16721,15 @@ "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "optional": true, "engines": { "node": "*" } }, "node_modules/mongodb": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.13.0.tgz", - "integrity": "sha512-+taZ/bV8d1pYuHL4U+gSwkhmDrwkWbH1l4aah4YpmpscMwgFBkufIKxgP/G7m87/NUuQzc2Z75ZTI7ZOyqZLbw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz", + "integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==", "dependencies": { "bson": "^4.7.0", "mongodb-connection-string-url": "^2.5.4", @@ -16749,9 +16752,9 @@ } }, "node_modules/mongodb-client-encryption": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.3.0.tgz", - "integrity": "sha512-cXuRYBmCj43rLeqP8gHa+CrloFe7TUCd/f16VduFGQzAN9ef5buMGIfSr2CEGBul/EjTCLlioctSSDmHAmpTqA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.5.0.tgz", + "integrity": "sha512-et7DSQDhkbioK/G3FYtjML34ylLHmapM2665k7MMWCxSiXBNGovp8wSV4dRvJzXzKMfGvc/A4bJ7EcPSjxLCwg==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -16764,7 +16767,13 @@ "node": ">=12.9.0" }, "peerDependencies": { + "@aws-sdk/credential-providers": "^3.186.0", "mongodb": ">=3.4.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + } } }, "node_modules/mongodb-client-encryption/node_modules/decompress-response": { @@ -17269,13 +17278,13 @@ } }, "node_modules/mongodb-download-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.0.0.tgz", - "integrity": "sha512-bvUE9Wa0P0ZpuazQ7UFHcvE03zdnXePSsntVBngqJQIM5m6JosMeW+nrabMyBvbGqiIsgXL96UF4Bj/FakKrLw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.3.0.tgz", + "integrity": "sha512-N7mRi3/LIAHCeTa+JtJVrVno4BNHVYF+6/WUamVFsbvCxtljDmQA1n9FSQxV4dfdiknR9zaoFcXAmd1gtg3Elg==", "dev": true, "dependencies": { "debug": "^4.1.1", - "minimist": "^1.2.0", + "minimist": "^1.2.3", "node-fetch": "^2.6.1", "semver": "^7.1.1" }, @@ -17287,6 +17296,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/mongodb-extended-json/-/mongodb-extended-json-1.11.0.tgz", "integrity": "sha512-+PLUMH7amvTYumCUR6alR474KmqtlmYeceJjsC+zcfdXls9IotfTp2WIuD6X5tO9dLDVCDqboqjgvXj/JjGj6g==", + "optional": true, "dependencies": { "async": "^3.1.0", "bson": "^1.0.1", @@ -17301,12 +17311,14 @@ "node_modules/mongodb-extended-json/node_modules/async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "optional": true }, "node_modules/mongodb-extended-json/node_modules/bson": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==", + "optional": true, "engines": { "node": ">=0.6.19" } @@ -17358,19 +17370,20 @@ "integrity": "sha512-pCutlP/AU0hcJ/f1h2h3nmn79/gXrQo6088QvPCbdx7SBDkAeGPH4AYu28DgqZzFvsn5mtt2RUpsFicYhjaHow==" }, "node_modules/mongodb-query-parser": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-2.4.6.tgz", - "integrity": "sha512-R9uU//1IlhPPIGvB4ItMwus3E7nJJtBtrSrTV6wTslwDQfL6bpy9PXcIXVHdDsuJADQZdcvdvpj22VxdfqH2ig==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-2.4.10.tgz", + "integrity": "sha512-gFv1N184F7oMUINuvmUJBMq+tIy1BiELNRSPGWzabYjySRxvIR2c64MJS0b7pnb0eyfHBzfKoLy2LCrYBDt8Gg==", "dependencies": { - "bson": "^4.6.1", "debug": "^4.1.1", - "ejson-shell-parser": "^1.1.3", + "ejson-shell-parser": "^1.2.1", "is-json": "^2.0.1", "javascript-stringify": "^2.0.1", "lodash": "^4.17.15", "lru-cache": "^5.1.1", - "mongodb-extended-json": "^1.10.2", "mongodb-language-model": "^1.6.1" + }, + "peerDependencies": { + "bson": "^4.6.1 || ^5" } }, "node_modules/mongodb-query-parser/node_modules/lru-cache": { @@ -17395,9 +17408,9 @@ } }, "node_modules/mongodb-runner": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.9.0.tgz", - "integrity": "sha512-ltAC7FQ6NJ1XoMc5AJ+sbURsETKJeHd2ulvTpJGH+xO79b44ELCF2yETBzAmiEKTkj3MI2u0Awh0KQhWizgwWw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.10.0.tgz", + "integrity": "sha512-6hE4nA4+LMBPwLMXr/jQNRNtUdQgfmZOJE/4u5JX952hdUa0lPc+26Y45PdgbdMbfCYUfZK1cOBObZOBmTdQ6Q==", "dev": true, "dependencies": { "async": "^3.1.0", @@ -17411,7 +17424,7 @@ "mongodb": "^3.4.0", "mongodb-dbpath": "^0.0.1", "mongodb-tools": "github:mongodb-js/mongodb-tools#0d1a90f49796c41f6d47c7c7999fe384014a16a0", - "mongodb-version-manager": "^1.4.5", + "mongodb-version-manager": "^1.5.0", "untildify": "^4.0.0", "which": "^2.0.1" }, @@ -17637,7 +17650,7 @@ "node_modules/mongodb-version-list": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mongodb-version-list/-/mongodb-version-list-1.0.0.tgz", - "integrity": "sha1-8lAxz83W8UWx3o/OKk6+wCiLtKQ=", + "integrity": "sha512-F3kIABEMNjg3ZAX4SRbO1QPmhpP4NX2IgJq+lcUKidducTOVJafXJ+E+pMkgpU0xumC8QYbIZJ+8y4GZys9E4g==", "dev": true, "dependencies": { "cheerio": "^0.22.0", @@ -17654,7 +17667,7 @@ "node_modules/mongodb-version-list/node_modules/cheerio": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", "dev": true, "dependencies": { "css-select": "~1.2.0", @@ -17690,7 +17703,7 @@ "node_modules/mongodb-version-list/node_modules/fs-extra": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -17701,22 +17714,16 @@ "node_modules/mongodb-version-list/node_modules/jsonfile": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, - "node_modules/mongodb-version-list/node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", - "dev": true - }, "node_modules/mongodb-version-list/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/mongodb-version-list/node_modules/semver": { @@ -17729,9 +17736,9 @@ } }, "node_modules/mongodb-version-manager": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.4.6.tgz", - "integrity": "sha512-UxXZy7iqHUa039Bp8e1Y2tSLh/X/JtHRqnlcVkqNEWpX/5ETPaKwrT7QIVZc1Tk5tEkQXjRHd6nQtUjcemOHmA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.5.0.tgz", + "integrity": "sha512-VHijlQXvQFnX/9MzfGePyBNr9qHLHRHg6sM2ChFO+05Htf6JY50WzvDWZmtXUNGXEor80fXxhswwDJevGlZkyA==", "dev": true, "dependencies": { "ampersand-state": "^5.0.3", @@ -17757,9 +17764,9 @@ } }, "node_modules/mongodb-version-manager/node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "node_modules/mongodb-version-manager/node_modules/chalk": { @@ -17788,7 +17795,7 @@ "node_modules/mongodb-version-manager/node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" @@ -17822,7 +17829,7 @@ "node_modules/mongodb-version-manager/node_modules/file-type": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true, "engines": { "node": ">=4" @@ -17845,7 +17852,7 @@ "node_modules/mongodb-version-manager/node_modules/get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, "engines": { "node": ">=4" @@ -17909,7 +17916,7 @@ "node_modules/mongodb-version-manager/node_modules/p-event": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", "dev": true, "dependencies": { "p-timeout": "^1.1.1" @@ -17921,7 +17928,7 @@ "node_modules/mongodb-version-manager/node_modules/p-timeout": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", "dev": true, "dependencies": { "p-finally": "^1.0.0" @@ -17933,7 +17940,7 @@ "node_modules/mongodb-version-manager/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { "node": ">=4" @@ -17942,7 +17949,7 @@ "node_modules/mongodb-version-manager/node_modules/prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -17972,7 +17979,7 @@ "node_modules/mongodb-version-manager/node_modules/url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", "dev": true, "dependencies": { "prepend-http": "^1.0.1" @@ -18139,6 +18146,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/natural-orderby": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", @@ -18391,7 +18404,7 @@ "node_modules/npm-conf/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { "node": ">=4" @@ -18711,22 +18724,28 @@ } }, "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { @@ -18756,18 +18775,21 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.assign/node_modules/object-keys": { @@ -18795,18 +18817,20 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", - "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.pick": { @@ -18822,18 +18846,20 @@ } }, "node_modules/object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { @@ -19975,9 +20001,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -20047,7 +20073,7 @@ "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, "node_modules/prr": { @@ -20145,15 +20171,6 @@ } ] }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -20248,9 +20265,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-redux": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz", - "integrity": "sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==", + "version": "7.2.9", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", + "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", "dependencies": { "@babel/runtime": "^7.15.4", "@types/react-redux": "^7.1.20", @@ -20384,19 +20401,6 @@ "node": ">= 0.10" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -20407,9 +20411,9 @@ } }, "node_modules/redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "dependencies": { "@babel/runtime": "^7.9.2" } @@ -20417,7 +20421,7 @@ "node_modules/reflect.ownkeys": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", + "integrity": "sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg==", "dev": true }, "node_modules/regenerator-runtime": { @@ -20439,47 +20443,20 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, "dependencies": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "functions-have-names": "^1.2.2" }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/regexp.prototype.flags/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/regexp.prototype.flags/node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpp": { @@ -20873,6 +20850,20 @@ "ret": "~0.1.10" } }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -21166,9 +21157,9 @@ } }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -21279,13 +21270,17 @@ "optional": true }, "node_modules/side-channel": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", - "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { - "es-abstract": "^1.18.0-next.0", - "object-inspect": "^1.8.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/sift": { @@ -22084,23 +22079,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { @@ -22160,18 +22163,6 @@ "node": ">=6" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -22780,15 +22771,6 @@ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", "dev": true }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", @@ -22836,9 +22818,9 @@ "dev": true }, "node_modules/ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", + "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -23014,6 +22996,20 @@ "node": ">=8" } }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-rest-client": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", @@ -23040,9 +23036,9 @@ } }, "node_modules/typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -23058,6 +23054,21 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -23366,55 +23377,74 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz", - "integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", + "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.2.tgz", - "integrity": "sha512-lHlthJtphG9gibGb/y72CKqQUxwPsMXijJVpHEC2bvbFqxmkj9LwQ3aGU9dwjBLqsX1S4KjShYppLvg1UJDF/Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz", + "integrity": "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing==", "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.5", - "vscode-languageserver-protocol": "3.17.2" + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.3" }, "engines": { "vscode": "^1.67.0" } }, + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/vscode-languageserver": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz", - "integrity": "sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", + "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", "dependencies": { - "vscode-languageserver-protocol": "3.17.2" + "vscode-languageserver-protocol": "3.17.3" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz", - "integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==", + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", + "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", "dependencies": { - "vscode-jsonrpc": "8.0.2", - "vscode-languageserver-types": "3.17.2" + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver-types": "3.17.3" } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz", - "integrity": "sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.9.tgz", + "integrity": "sha512-NPfHVGFW2/fQEWHspr8x3PXhRgtFbuDZdl7p6ifuN3M7nk2Yjf5POr/NfDBuAiQG88DehDyJ7nGOT+p+edEtbw==" }, "node_modules/vscode-languageserver-types": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", - "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", + "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, "node_modules/w3c-hr-time": { "version": "1.0.2", @@ -23484,9 +23514,9 @@ } }, "node_modules/webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -23712,11 +23742,47 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -25591,13 +25657,25 @@ } }, "@babel/generator": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", - "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "requires": { - "@babel/types": "^7.19.0", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + } } }, "@babel/helper-compilation-targets": { @@ -25624,12 +25702,12 @@ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -25685,9 +25763,9 @@ } }, "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", @@ -25740,9 +25818,9 @@ } }, "@babel/parser": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", - "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==" + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -25893,39 +25971,39 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", - "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.0", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.1", - "@babel/types": "^7.19.0", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", - "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, @@ -26083,15 +26161,15 @@ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", - "globals": "^13.15.0", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -26106,18 +26184,18 @@ "dev": true }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "js-yaml": { @@ -26147,24 +26225,24 @@ } }, "@fortawesome/fontawesome-common-types": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.0.tgz", - "integrity": "sha512-rBevIsj2nclStJ7AxTdfsa3ovHb1H+qApwrxcTVo+NNdeJiB9V75hsKfrkG5AwNcRUNxrPPiScGYCNmLMoh8pg==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz", + "integrity": "sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==" }, "@fortawesome/fontawesome-svg-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.0.tgz", - "integrity": "sha512-Cf2mAAeMWFMzpLC7Y9H1I4o3wEU+XovVJhTiNG8ZNgSQj53yl7OCJaS80K4YjrABWZzbAHVaoHE1dVJ27AAYXw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz", + "integrity": "sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==", "requires": { - "@fortawesome/fontawesome-common-types": "6.2.0" + "@fortawesome/fontawesome-common-types": "6.3.0" } }, "@fortawesome/free-solid-svg-icons": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.0.tgz", - "integrity": "sha512-UjCILHIQ4I8cN46EiQn0CZL/h8AwCGgR//1c4R96Q5viSRwuKVo0NdQEc4bm+69ZwC0dUvjbDqAHF1RR5FA3XA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz", + "integrity": "sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==", "requires": { - "@fortawesome/fontawesome-common-types": "6.2.0" + "@fortawesome/fontawesome-common-types": "6.3.0" } }, "@fortawesome/react-fontawesome": { @@ -26176,22 +26254,27 @@ } }, "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -26205,9 +26288,9 @@ "dev": true }, "@iconify-icons/codicon": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.16.tgz", - "integrity": "sha512-85rBsFEhhq2qSBfIEF0hzUk31i4GjeRzNyd0DZGFWo5v+PgAeTBiv8ftsTDf8d2fxy9F5kesT/R7bOtRy1xKmw==", + "version": "1.2.21", + "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.21.tgz", + "integrity": "sha512-thIa+5jVVVSz048cSQQpQfnXU+zfQjxF3ofmkZHN+7fc6cHclKRxPPXSeVj7dHZzpgQx4pbijHPIUzIni+Pegw==", "requires": { "@iconify/types": "*" } @@ -26754,9 +26837,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { "version": "1.1.2", @@ -26774,9 +26857,9 @@ } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { "version": "0.3.9", @@ -26847,14 +26930,14 @@ } }, "@leafygreen-ui/logo": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/logo/-/logo-6.1.3.tgz", - "integrity": "sha512-b0UfZ6ypwRenw8DxhbwDd3B0JiSdTHCsTE8yQ2wBqQgTazIlz9WoFEjCrSaVv/oZ3XQnY4CBUjEfYGQ8aVOjTA==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/logo/-/logo-6.3.0.tgz", + "integrity": "sha512-hxAevbD/wfOjobRp7rVhqPyV/oFRUgwLuUdPn+JG1cBT/ALIeqz7fRz4jE6SyNc3ZXSWvphw/zHaKQSExVcXQQ==" }, "@leafygreen-ui/palette": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/palette/-/palette-3.4.2.tgz", - "integrity": "sha512-uR+fPOlU2Hyg1gHb4iFDtZE1SRmuj591apZpHYwAJ3JF1oqHmHVUZy9XTGN+V1Y299FGWsKrCU7OJxS7bg3nDg==" + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/palette/-/palette-3.4.7.tgz", + "integrity": "sha512-AsvPlbvF7CERiZbAQR8hy3lAJ2/rieXI3cO0jsOwV8ztDqYNotKAdLujyr/NviudrRUenYiXrLizIKVlSPUMuA==" }, "@leafygreen-ui/toggle": { "version": "7.0.5", @@ -26896,9 +26979,9 @@ } }, "@mongodb-js/mongodb-constants": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.2.1.tgz", - "integrity": "sha512-arCTQYvK9scQszbQQcPba7Ru5HYrc8YINcGcM4HKMCcg+8A17U+3Y3AEI7N/oe2VE+1GFsrh8MoKBch4jEvY1g==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.2.2.tgz", + "integrity": "sha512-vm1G+/WRWmXGyE9ZnhDv9toe+LRu1x0F/lGEwqWESfBiUUUuVZhj25fS2o4IL7H4pJ31sFxr7/gu+ER8OkmtzA==" }, "@mongodb-js/prettier-config-compass": { "version": "1.0.0", @@ -27453,18 +27536,18 @@ "dev": true }, "@types/analytics-node": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.9.tgz", - "integrity": "sha512-C7L7/Dd/CmBST7AvgoCnf4yI9h6W5aYfCOcfUZS5GHlXDQjnXLVOUDpTdwTIZjW4lKECeil6+G+Ul6Xzwv/P0g==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.10.tgz", + "integrity": "sha512-dvn8iy2EQZDlQGgRNT9SW2Ljn9L3VgwcrpJvonufnNygZWB1XEufXNvDhUtwNUqNyHhD0hbDCCFb9j+B7vE5cA==", "dev": true }, "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", + "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -27488,9 +27571,9 @@ } }, "@types/babel__traverse": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz", - "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==", + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", + "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", "requires": { "@babel/types": "^7.3.0" } @@ -27502,9 +27585,9 @@ "dev": true }, "@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==" }, "@types/chai-fs": { "version": "2.0.2", @@ -27734,12 +27817,6 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, "@types/mocha": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", @@ -27753,9 +27830,9 @@ "dev": true }, "@types/node": { - "version": "14.18.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.29.tgz", - "integrity": "sha512-LhF+9fbIX4iPzhsRLpK5H7iPdvW8L4IwGciXQIOEcuF62+9nw/VQVsOViAOOGxY3OlOKGLFv0sWwJXdwQeTn6A==" + "version": "14.18.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", + "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -27814,6 +27891,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/sinon": { "version": "9.0.11", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", @@ -27881,16 +27964,18 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz", - "integrity": "sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", + "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.38.0", - "@typescript-eslint/type-utils": "5.38.0", - "@typescript-eslint/utils": "5.38.0", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/type-utils": "5.53.0", + "@typescript-eslint/utils": "5.53.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -27905,53 +27990,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.0.tgz", - "integrity": "sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", + "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.38.0", - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/typescript-estree": "5.38.0", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz", - "integrity": "sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/visitor-keys": "5.38.0" + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" } }, "@typescript-eslint/type-utils": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.0.tgz", - "integrity": "sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", + "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.38.0", - "@typescript-eslint/utils": "5.38.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/utils": "5.53.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.0.tgz", - "integrity": "sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz", - "integrity": "sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/visitor-keys": "5.38.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -27960,26 +28045,28 @@ } }, "@typescript-eslint/utils": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.0.tgz", - "integrity": "sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", + "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.38.0", - "@typescript-eslint/types": "5.38.0", - "@typescript-eslint/typescript-estree": "5.38.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz", - "integrity": "sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w==", + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/types": "5.53.0", "eslint-visitor-keys": "^3.3.0" }, "dependencies": { @@ -27998,9 +28085,9 @@ "dev": true }, "@vscode/test-electron": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", - "integrity": "sha512-O/ioqFpV+RvKbRykX2ItYPnbcZ4Hk5V0rY4uhQjQTLhGL9WZUvS7exzuYQCCI+ilSqJpctvxq2llTfGXf9UnnA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.3.tgz", + "integrity": "sha512-7DmdGYQTqRNaLHKG3j56buc9DkstriY4aV0S3Zj32u0U9/T0L8vwWAC9QGCh1meu1VXDEla1ze27TkqysHGP0Q==", "dev": true, "requires": { "http-proxy-agent": "^4.0.1", @@ -28611,7 +28698,7 @@ "ansi": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=", + "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==", "dev": true }, "ansi-colors": { @@ -28817,40 +28904,15 @@ "dev": true }, "array.prototype.find": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz", - "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.1.tgz", + "integrity": "sha512-I2ri5Z9uMpMvnsNrHre9l3PaX+z9D0/z6F7Yt2u15q7wt0I62g5kX6xUKR1SJiefgG+u2/gJUmM8B47XRvQR6w==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.4" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flat": { @@ -28876,12 +28938,6 @@ "function-bind": "^1.1.1" } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -28953,6 +29009,12 @@ "postcss-value-parser": "^4.1.0" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -29385,13 +29447,12 @@ } }, "bson-transpilers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bson-transpilers/-/bson-transpilers-2.0.0.tgz", - "integrity": "sha512-gHd/NCuZsbn+61uh1pDxI0dQxxkkq9SqsSc8hWN1Lwvu2dbnDLcPfBDaL3meYxb/sTDg+5drETbqgMwNsWg1vw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bson-transpilers/-/bson-transpilers-2.0.2.tgz", + "integrity": "sha512-FmY2vXr54rEcftux3/gspJ9RivX/kPz4O5XdAVuL2OxqYowXcDro+SETnMq5gWIy613o3DPLdGuAalDADOMHSQ==", "requires": { "antlr4": "4.7.2", "bson": "^4.4.1", - "context-eval": "^0.1.0", "js-yaml": "^3.13.1" } }, @@ -29497,13 +29558,13 @@ } }, "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" } }, "call-me-maybe": { @@ -29549,17 +29610,6 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "devOptional": true }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, "caniuse-lite": { "version": "1.0.30001312", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", @@ -29602,14 +29652,14 @@ } }, "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^3.0.1", + "deep-eql": "^4.1.2", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -30366,9 +30416,9 @@ } }, "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, "requires": { "ini": "^1.3.4", @@ -30412,11 +30462,6 @@ "safe-buffer": "5.1.2" } }, - "context-eval": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/context-eval/-/context-eval-0.1.0.tgz", - "integrity": "sha1-P8pxfX3wI6l4XwjGWkGJo93wP6s=" - }, "context-map-webpack-plugin": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/context-map-webpack-plugin/-/context-map-webpack-plugin-0.1.0.tgz", @@ -30534,7 +30579,7 @@ "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", "dev": true, "requires": { "boolbase": "~1.0.0", @@ -30629,24 +30674,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, "decimal.js": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", @@ -30853,9 +30880,9 @@ } }, "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -30896,12 +30923,13 @@ } }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "dependencies": { "object-keys": { @@ -31184,7 +31212,7 @@ "docopt": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", - "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", + "integrity": "sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==", "dev": true }, "doctrine": { @@ -31246,7 +31274,7 @@ "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", "dev": true, "requires": { "dom-serializer": "0", @@ -31254,14 +31282,14 @@ } }, "dotenv": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", - "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==" + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" }, "downcache": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/downcache/-/downcache-0.0.9.tgz", - "integrity": "sha1-eQuwQkaJE2EVzpPyqhWUbG2AbQ4=", + "integrity": "sha512-AssoVsNYu5DnPY0Ro67lkbiAr66sk5IHuiIGm3pzFzWmTzkcEoFjDlG8szzP4x+ZN2OHehKTZbwDrC7l2Q52+g==", "dev": true, "requires": { "extend": "^3.0.0", @@ -31276,7 +31304,7 @@ "gauge": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", "dev": true, "requires": { "ansi": "^0.3.0", @@ -31287,18 +31315,18 @@ } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "npmlog": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", "dev": true, "requires": { "ansi": "~0.3.1", @@ -31418,17 +31446,17 @@ } }, "ejson-shell-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ejson-shell-parser/-/ejson-shell-parser-1.2.0.tgz", - "integrity": "sha512-2DbCot5/HYcO6kY91nLU5I0CKLTuK9LiKiwaY7OFvfqf3xVgYAvUiLAQKHKeqUFlIUXY3KwRtXfaF5Vic6R1dA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ejson-shell-parser/-/ejson-shell-parser-1.2.1.tgz", + "integrity": "sha512-xXRwH+O4EtL62ue8EmY8vNVr/AGRbRIv76WNuhXoWWwcT5TAvGKe4AqJh46QNXisVZe5e1JxvBdTnD3SO8ZLzA==", "requires": { "acorn": "^8.1.0" }, "dependencies": { "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" } } }, @@ -31530,17 +31558,17 @@ } }, "enzyme-adapter-react-16": { - "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==", + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.7.tgz", + "integrity": "sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw==", "dev": true, "requires": { - "enzyme-adapter-utils": "^1.14.0", - "enzyme-shallow-equal": "^1.0.4", + "enzyme-adapter-utils": "^1.14.1", + "enzyme-shallow-equal": "^1.0.5", "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.values": "^1.1.2", - "prop-types": "^15.7.2", + "object.assign": "^4.1.4", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", "react-is": "^16.13.1", "react-test-renderer": "^16.0.0-0", "semver": "^5.7.0" @@ -31555,17 +31583,17 @@ } }, "enzyme-adapter-utils": { - "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==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz", + "integrity": "sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==", "dev": true, "requires": { "airbnb-prop-types": "^2.16.0", - "function.prototype.name": "^1.1.3", + "function.prototype.name": "^1.1.5", "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.fromentries": "^2.0.3", - "prop-types": "^15.7.2", + "object.assign": "^4.1.4", + "object.fromentries": "^2.0.5", + "prop-types": "^15.8.1", "semver": "^5.7.1" }, "dependencies": { @@ -31578,13 +31606,13 @@ } }, "enzyme-shallow-equal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", - "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz", + "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==", "dev": true, "requires": { "has": "^1.0.3", - "object-is": "^1.1.2" + "object-is": "^1.1.5" } }, "errno": { @@ -31605,23 +31633,44 @@ } }, "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", "dev": true, "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "dependencies": { "object-keys": { @@ -31638,6 +31687,26 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -31779,15 +31848,15 @@ } }, "eslint": { - "version": "8.23.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", - "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -31803,14 +31872,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -31910,9 +31979,9 @@ } }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -32425,9 +32494,9 @@ "dev": true }, "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -32436,9 +32505,9 @@ }, "dependencies": { "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true }, "eslint-visitor-keys": { @@ -33110,6 +33179,15 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -33253,15 +33331,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.3.tgz", - "integrity": "sha512-H51qkbNSp8mtkJt+nyW1gyStBiKZxfRqySNUR99ylq6BPXHKI4SEvIlTKp4odLfjRKJV04DFWMU3G/YRlQOsag==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "functions-have-names": "^1.2.1" + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" } }, "functional-red-black-tree": { @@ -33271,9 +33349,9 @@ "dev": true }, "functions-have-names": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz", - "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, "gauge": { @@ -33328,14 +33406,14 @@ "dev": true }, "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" } }, "get-mongodb-version": { @@ -33385,6 +33463,16 @@ "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -33456,6 +33544,15 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -33478,6 +33575,15 @@ } } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", @@ -33582,12 +33688,6 @@ "har-schema": "^2.0.0" } }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -33596,11 +33696,32 @@ "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, "has-symbol-support-x": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", @@ -33608,9 +33729,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-to-string-tag-x": { @@ -33622,6 +33743,15 @@ "has-symbol-support-x": "^1.4.1" } }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -33956,41 +34086,14 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "requires": { - "es-abstract": "^1.17.0-next.1", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", - "side-channel": "^1.0.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "side-channel": "^1.0.4" } }, "interpret": { @@ -34072,11 +34175,31 @@ } } }, + "is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -34087,10 +34210,14 @@ } }, "is-boolean-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", - "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } }, "is-buffer": { "version": "1.1.6", @@ -34098,9 +34225,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { @@ -34287,9 +34414,9 @@ "dev": true }, "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-number": { @@ -34309,6 +34436,12 @@ "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -34336,12 +34469,13 @@ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-retry-allowed": { @@ -34349,6 +34483,15 @@ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -34356,10 +34499,13 @@ "dev": true }, "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-subset": { "version": "0.1.1", @@ -34376,6 +34522,19 @@ "has-symbols": "^1.0.1" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -34392,6 +34551,15 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-what": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.12.0.tgz", @@ -36641,7 +36809,8 @@ "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "optional": true }, "jsonpointer.js": { "version": "0.4.0", @@ -36653,6 +36822,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "optional": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -36798,7 +36968,7 @@ "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", "dev": true, "requires": { "graceful-fs": "^4.1.9" @@ -37018,7 +37188,13 @@ "lodash.assignin": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", + "dev": true + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", "dev": true }, "lodash.camelcase": { @@ -37042,19 +37218,19 @@ "lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", "dev": true }, "lodash.filter": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", + "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", "dev": true }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true }, "lodash.flattendeep": { @@ -37066,7 +37242,7 @@ "lodash.foreach": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", "dev": true }, "lodash.forin": { @@ -37082,7 +37258,8 @@ "lodash.isfunction": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "optional": true }, "lodash.isplainobject": { "version": "4.0.6", @@ -37097,7 +37274,7 @@ "lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", "dev": true }, "lodash.merge": { @@ -37109,55 +37286,56 @@ "lodash.pad": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=", + "integrity": "sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==", "dev": true }, "lodash.padend": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", + "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==", "dev": true }, "lodash.padstart": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=", + "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", "dev": true }, "lodash.pick": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", "dev": true }, "lodash.reduce": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", + "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", "dev": true }, "lodash.reject": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", + "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", "dev": true }, "lodash.some": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", "dev": true }, "lodash.startswith": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", - "integrity": "sha1-xZjErc4YiiflMUVzHNxsDnF3YAw=", + "integrity": "sha512-XClYR1h4/fJ7H+mmCKppbiBmljN/nGs73iq2SjCT9SF4CBPoUHzLvWmH1GtZMhMBZSiRkHXfeA2RY1eIlJ75ww==", "dev": true }, "lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=" + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "optional": true }, "log-symbols": { "version": "4.0.0", @@ -37279,12 +37457,6 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "map-obj": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", - "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", - "dev": true - }, "map-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", @@ -37381,134 +37553,6 @@ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - } - } - }, "merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", @@ -37585,12 +37629,6 @@ "dom-walk": "^0.1.0" } }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, "mingo": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/mingo/-/mingo-1.3.3.tgz", @@ -37600,25 +37638,15 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "mixin-deep": { "version": "1.3.2", @@ -37921,16 +37949,16 @@ } }, "mocha-junit-reporter": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.0.2.tgz", - "integrity": "sha512-vYwWq5hh3v1lG0gdQCBxwNipBfvDiAM1PHroQRNp96+2l72e9wEUTw+mzoK+O0SudgfQ7WvTQZ9Nh3qkAYAjfg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.0.tgz", + "integrity": "sha512-W83Ddf94nfLiTBl24aS8IVyFvO8aRDLlCvb+cKb/VEaN5dEbcqu3CXiTe8MQK2DvzS7oKE1RsFTxzN302GGbDQ==", "dev": true, "requires": { - "debug": "^2.2.0", - "md5": "^2.1.0", - "mkdirp": "~0.5.1", + "debug": "^4.3.4", + "md5": "^2.3.0", + "mkdirp": "~1.0.4", "strip-ansi": "^6.0.1", - "xml": "^1.0.0" + "xml": "^1.0.1" }, "dependencies": { "ansi-regex": { @@ -37939,30 +37967,6 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -37975,9 +37979,9 @@ } }, "mocha-multi": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/mocha-multi/-/mocha-multi-1.1.6.tgz", - "integrity": "sha512-hMVmd9C1h4PEiFNwHxn8aa5/EgGLg0UswdOrlrq1Y8ieKmot8hZLYaiESIgg/He3E4oxwaXPWT1V1PJ0qNJlUQ==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/mocha-multi/-/mocha-multi-1.1.7.tgz", + "integrity": "sha512-SXZRgHy0XiRTASyOp0p6fjOkdj+R62L6cqutnYyQOvIjNznJuUwzykxctypeRiOwPd+gfn4yt3NRulMQyI8Tzg==", "dev": true, "requires": { "debug": "^4.1.1", @@ -37998,12 +38002,13 @@ "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "optional": true }, "mongodb": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.13.0.tgz", - "integrity": "sha512-+taZ/bV8d1pYuHL4U+gSwkhmDrwkWbH1l4aah4YpmpscMwgFBkufIKxgP/G7m87/NUuQzc2Z75ZTI7ZOyqZLbw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz", + "integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==", "requires": { "@aws-sdk/credential-providers": "^3.186.0", "bson": "^4.7.0", @@ -38021,9 +38026,9 @@ } }, "mongodb-client-encryption": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.3.0.tgz", - "integrity": "sha512-cXuRYBmCj43rLeqP8gHa+CrloFe7TUCd/f16VduFGQzAN9ef5buMGIfSr2CEGBul/EjTCLlioctSSDmHAmpTqA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.5.0.tgz", + "integrity": "sha512-et7DSQDhkbioK/G3FYtjML34ylLHmapM2665k7MMWCxSiXBNGovp8wSV4dRvJzXzKMfGvc/A4bJ7EcPSjxLCwg==", "devOptional": true, "requires": { "bindings": "^1.5.0", @@ -38435,13 +38440,13 @@ } }, "mongodb-download-url": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.0.0.tgz", - "integrity": "sha512-bvUE9Wa0P0ZpuazQ7UFHcvE03zdnXePSsntVBngqJQIM5m6JosMeW+nrabMyBvbGqiIsgXL96UF4Bj/FakKrLw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.3.0.tgz", + "integrity": "sha512-N7mRi3/LIAHCeTa+JtJVrVno4BNHVYF+6/WUamVFsbvCxtljDmQA1n9FSQxV4dfdiknR9zaoFcXAmd1gtg3Elg==", "dev": true, "requires": { "debug": "^4.1.1", - "minimist": "^1.2.0", + "minimist": "^1.2.3", "node-fetch": "^2.6.1", "semver": "^7.1.1" } @@ -38450,6 +38455,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/mongodb-extended-json/-/mongodb-extended-json-1.11.0.tgz", "integrity": "sha512-+PLUMH7amvTYumCUR6alR474KmqtlmYeceJjsC+zcfdXls9IotfTp2WIuD6X5tO9dLDVCDqboqjgvXj/JjGj6g==", + "optional": true, "requires": { "async": "^3.1.0", "bson": "^1.0.1", @@ -38464,12 +38470,14 @@ "async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "optional": true }, "bson": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==", + "optional": true } } }, @@ -38522,18 +38530,16 @@ "integrity": "sha512-pCutlP/AU0hcJ/f1h2h3nmn79/gXrQo6088QvPCbdx7SBDkAeGPH4AYu28DgqZzFvsn5mtt2RUpsFicYhjaHow==" }, "mongodb-query-parser": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-2.4.6.tgz", - "integrity": "sha512-R9uU//1IlhPPIGvB4ItMwus3E7nJJtBtrSrTV6wTslwDQfL6bpy9PXcIXVHdDsuJADQZdcvdvpj22VxdfqH2ig==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-2.4.10.tgz", + "integrity": "sha512-gFv1N184F7oMUINuvmUJBMq+tIy1BiELNRSPGWzabYjySRxvIR2c64MJS0b7pnb0eyfHBzfKoLy2LCrYBDt8Gg==", "requires": { - "bson": "^4.6.1", "debug": "^4.1.1", - "ejson-shell-parser": "^1.1.3", + "ejson-shell-parser": "^1.2.1", "is-json": "^2.0.1", "javascript-stringify": "^2.0.1", "lodash": "^4.17.15", "lru-cache": "^5.1.1", - "mongodb-extended-json": "^1.10.2", "mongodb-language-model": "^1.6.1" }, "dependencies": { @@ -38561,9 +38567,9 @@ } }, "mongodb-runner": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.9.0.tgz", - "integrity": "sha512-ltAC7FQ6NJ1XoMc5AJ+sbURsETKJeHd2ulvTpJGH+xO79b44ELCF2yETBzAmiEKTkj3MI2u0Awh0KQhWizgwWw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.10.0.tgz", + "integrity": "sha512-6hE4nA4+LMBPwLMXr/jQNRNtUdQgfmZOJE/4u5JX952hdUa0lPc+26Y45PdgbdMbfCYUfZK1cOBObZOBmTdQ6Q==", "dev": true, "requires": { "async": "^3.1.0", @@ -38577,7 +38583,7 @@ "mongodb": "^3.4.0", "mongodb-dbpath": "^0.0.1", "mongodb-tools": "github:mongodb-js/mongodb-tools#0d1a90f49796c41f6d47c7c7999fe384014a16a0", - "mongodb-version-manager": "^1.4.5", + "mongodb-version-manager": "^1.5.0", "untildify": "^4.0.0", "which": "^2.0.1" }, @@ -38734,7 +38740,7 @@ "mongodb-version-list": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mongodb-version-list/-/mongodb-version-list-1.0.0.tgz", - "integrity": "sha1-8lAxz83W8UWx3o/OKk6+wCiLtKQ=", + "integrity": "sha512-F3kIABEMNjg3ZAX4SRbO1QPmhpP4NX2IgJq+lcUKidducTOVJafXJ+E+pMkgpU0xumC8QYbIZJ+8y4GZys9E4g==", "dev": true, "requires": { "cheerio": "^0.22.0", @@ -38748,7 +38754,7 @@ "cheerio": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", "dev": true, "requires": { "css-select": "~1.2.0", @@ -38781,7 +38787,7 @@ "fs-extra": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -38792,22 +38798,16 @@ "jsonfile": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "semver": { @@ -38819,9 +38819,9 @@ } }, "mongodb-version-manager": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.4.6.tgz", - "integrity": "sha512-UxXZy7iqHUa039Bp8e1Y2tSLh/X/JtHRqnlcVkqNEWpX/5ETPaKwrT7QIVZc1Tk5tEkQXjRHd6nQtUjcemOHmA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.5.0.tgz", + "integrity": "sha512-VHijlQXvQFnX/9MzfGePyBNr9qHLHRHg6sM2ChFO+05Htf6JY50WzvDWZmtXUNGXEor80fXxhswwDJevGlZkyA==", "dev": true, "requires": { "ampersand-state": "^5.0.3", @@ -38843,9 +38843,9 @@ }, "dependencies": { "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "chalk": { @@ -38871,7 +38871,7 @@ "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -38899,7 +38899,7 @@ "file-type": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true }, "filenamify": { @@ -38916,7 +38916,7 @@ "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true }, "got": { @@ -38965,7 +38965,7 @@ "p-event": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", "dev": true, "requires": { "p-timeout": "^1.1.1" @@ -38974,7 +38974,7 @@ "p-timeout": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", "dev": true, "requires": { "p-finally": "^1.0.0" @@ -38983,13 +38983,13 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", "dev": true }, "semver": { @@ -39010,7 +39010,7 @@ "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", "dev": true, "requires": { "prepend-http": "^1.0.1" @@ -39133,6 +39133,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "natural-orderby": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", @@ -39347,7 +39353,7 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true } } @@ -39595,18 +39601,18 @@ } }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true }, "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, @@ -39631,14 +39637,14 @@ } }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "dependencies": { @@ -39663,15 +39669,14 @@ } }, "object.fromentries": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", - "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "object.pick": { @@ -39684,15 +39689,14 @@ } }, "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "once": { @@ -40566,9 +40570,9 @@ "dev": true }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true }, "process": { @@ -40620,7 +40624,7 @@ "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, "prr": { @@ -40695,12 +40699,6 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, "raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -40785,9 +40783,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-redux": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz", - "integrity": "sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==", + "version": "7.2.9", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", + "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", "requires": { "@babel/runtime": "^7.15.4", "@types/react-redux": "^7.1.20", @@ -40896,16 +40894,6 @@ "resolve": "^1.9.0" } }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, "redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -40916,9 +40904,9 @@ } }, "redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "requires": { "@babel/runtime": "^7.9.2" } @@ -40926,7 +40914,7 @@ "reflect.ownkeys": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", + "integrity": "sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg==", "dev": true }, "regenerator-runtime": { @@ -40945,40 +40933,14 @@ } }, "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, "requires": { + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } + "functions-have-names": "^1.2.2" } }, "regexpp": { @@ -41281,6 +41243,17 @@ "ret": "~0.1.10" } }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -41530,9 +41503,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "requires": { "lru-cache": "^6.0.0" } @@ -41624,13 +41597,14 @@ "optional": true }, "side-channel": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", - "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "es-abstract": "^1.18.0-next.0", - "object-inspect": "^1.8.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, "sift": { @@ -42284,23 +42258,25 @@ } }, "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "strip-ansi": { @@ -42347,15 +42323,6 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -42833,12 +42800,6 @@ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", "dev": true }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, "trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", @@ -42875,9 +42836,9 @@ } }, "ts-loader": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", - "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", + "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -42993,6 +42954,17 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typed-rest-client": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", @@ -43019,9 +42991,9 @@ } }, "typescript": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", - "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, "uc.micro": { @@ -43030,6 +43002,18 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, "unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -43286,46 +43270,64 @@ } }, "vscode-jsonrpc": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz", - "integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==" + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", + "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==" }, "vscode-languageclient": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.2.tgz", - "integrity": "sha512-lHlthJtphG9gibGb/y72CKqQUxwPsMXijJVpHEC2bvbFqxmkj9LwQ3aGU9dwjBLqsX1S4KjShYppLvg1UJDF/Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz", + "integrity": "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing==", "requires": { - "minimatch": "^3.0.4", - "semver": "^7.3.5", - "vscode-languageserver-protocol": "3.17.2" + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "vscode-languageserver": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz", - "integrity": "sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", + "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", "requires": { - "vscode-languageserver-protocol": "3.17.2" + "vscode-languageserver-protocol": "3.17.3" } }, "vscode-languageserver-protocol": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz", - "integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==", + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", + "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", "requires": { - "vscode-jsonrpc": "8.0.2", - "vscode-languageserver-types": "3.17.2" + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver-types": "3.17.3" } }, "vscode-languageserver-textdocument": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz", - "integrity": "sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==" + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.9.tgz", + "integrity": "sha512-NPfHVGFW2/fQEWHspr8x3PXhRgtFbuDZdl7p6ifuN3M7nk2Yjf5POr/NfDBuAiQG88DehDyJ7nGOT+p+edEtbw==" }, "vscode-languageserver-types": { - "version": "3.17.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", - "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", + "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, "w3c-hr-time": { "version": "1.0.2", @@ -43388,9 +43390,9 @@ "dev": true }, "webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -43546,11 +43548,38 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", diff --git a/package.json b/package.json index 333e102f9..4090344cf 100644 --- a/package.json +++ b/package.json @@ -972,53 +972,53 @@ } }, "dependencies": { - "@babel/parser": "^7.19.1", - "@babel/traverse": "^7.19.1", - "@fortawesome/fontawesome-svg-core": "^6.2.0", - "@fortawesome/free-solid-svg-icons": "^6.2.0", + "@babel/parser": "^7.21.1", + "@babel/traverse": "^7.21.0", + "@fortawesome/fontawesome-svg-core": "^6.3.0", + "@fortawesome/free-solid-svg-icons": "^6.3.0", "@fortawesome/react-fontawesome": "^0.2.0", - "@iconify-icons/codicon": "^1.2.16", + "@iconify-icons/codicon": "^1.2.21", "@iconify/react": "^1.1.4", - "@leafygreen-ui/logo": "^6.1.3", - "@leafygreen-ui/palette": "^3.4.2", + "@leafygreen-ui/logo": "^6.3.0", + "@leafygreen-ui/palette": "^3.4.7", "@leafygreen-ui/toggle": "^7.0.5", - "@mongodb-js/mongodb-constants": "^0.2.1", + "@mongodb-js/mongodb-constants": "^0.2.2", "@mongosh/browser-runtime-electron": "^1.6.2", "@mongosh/i18n": "^1.6.2", "@mongosh/service-provider-server": "^1.6.2", "@mongosh/shell-api": "^1.6.2", "analytics-node": "^5.1.2", - "bson": "^4.7.0", - "bson-transpilers": "^2.0.0", + "bson": "^4.7.2", + "bson-transpilers": "^2.0.2", "classnames": "^2.3.2", "debug": "^4.3.4", - "dotenv": "^16.0.2", + "dotenv": "^16.0.3", "micromatch": "^4.0.5", - "mongodb": "^4.13.0", + "mongodb": "^4.14.0", "mongodb-build-info": "^1.5.0", "mongodb-cloud-info": "^1.1.3", "mongodb-connection-string-url": "^2.5.3", "mongodb-data-service": "^22.1.1", "mongodb-ns": "^2.4.0", - "mongodb-query-parser": "^2.4.6", + "mongodb-query-parser": "^2.4.10", "mongodb-schema": "^9.0.0", "numeral": "^2.0.6", "react": "^16.14.0", "react-dom": "^16.14.0", - "react-redux": "^7.2.8", - "redux": "^4.2.0", + "react-redux": "^7.2.9", + "redux": "^4.2.1", "ts-log": "^2.2.5", "uuid": "^8.3.2", - "vscode-languageclient": "^8.0.2", - "vscode-languageserver": "^8.0.2", - "vscode-languageserver-textdocument": "^1.0.7" + "vscode-languageclient": "^8.1.0", + "vscode-languageserver": "^8.1.0", + "vscode-languageserver-textdocument": "^1.0.9" }, "devDependencies": { "@mongodb-js/prettier-config-compass": "^1.0.0", - "@types/analytics-node": "^3.1.9", - "@types/babel__core": "^7.1.19", - "@types/babel__traverse": "^7.18.1", - "@types/chai": "^4.3.3", + "@types/analytics-node": "^3.1.10", + "@types/babel__core": "^7.20.0", + "@types/babel__traverse": "^7.18.3", + "@types/chai": "^4.3.4", "@types/chai-fs": "^2.0.2", "@types/chai-json-schema": "^1.4.6", "@types/debug": "^4.1.7", @@ -1027,19 +1027,19 @@ "@types/jest": "^26.0.24", "@types/micromatch": "^4.0.2", "@types/mocha": "^8.2.3", - "@types/node": "^14.18.29", + "@types/node": "^14.18.36", "@types/react": "^17.0.50", "@types/react-dom": "^17.0.17", "@types/sinon": "^9.0.11", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.74.0", - "@typescript-eslint/eslint-plugin": "^5.38.0", - "@typescript-eslint/parser": "^5.38.0", - "@vscode/test-electron": "^2.1.5", - "@vscode/vsce": "^2.16.0", + "@types/vscode": "^1.75.1", + "@typescript-eslint/eslint-plugin": "^5.53.0", + "@typescript-eslint/parser": "^5.53.0", + "@vscode/test-electron": "^2.2.3", + "@vscode/vsce": "^2.17.0", "autoprefixer": "^9.8.8", "buffer": "^6.0.3", - "chai": "^4.3.6", + "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "chai-fs": "^2.0.0", "chai-json-schema": "^1.5.1", @@ -1051,8 +1051,8 @@ "depcheck": "^1.4.3", "download": "^8.0.0", "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.6", - "eslint": "^8.23.1", + "enzyme-adapter-react-16": "^1.15.7", + "eslint": "^8.34.0", "eslint-config-mongodb-js": "^5.0.3", "eslint-plugin-mocha": "^10.1.0", "execa": "^1.0.0", @@ -1062,30 +1062,29 @@ "jest-transform-stub": "^2.0.0", "less": "^3.13.1", "less-loader": "^5.0.0", - "meow": "^9.0.0", "mkdirp": "^1.0.4", "mocha": "^8.4.0", - "mocha-junit-reporter": "^2.0.2", - "mocha-multi": "^1.1.6", - "mongodb-client-encryption": "^2.2.1", - "mongodb-runner": "^4.9.0", + "mocha-junit-reporter": "^2.2.0", + "mocha-multi": "^1.1.7", + "mongodb-client-encryption": "^2.5.0", + "mongodb-runner": "^4.10.0", "node-loader": "^0.6.0", "npm-run-all": "^4.1.5", "ora": "^5.4.1", "postcss-loader": "^3.0.0", "pre-commit": "^1.2.2", - "prettier": "^2.7.1", + "prettier": "^2.8.4", "process": "^0.11.10", - "semver": "^7.3.7", + "semver": "^7.3.8", "sinon": "^9.2.4", "sinon-chai": "^3.7.0", "stream-browserify": "^3.0.0", "style-loader": "^1.3.0", "ts-jest": "^26.5.6", - "ts-loader": "^9.4.1", + "ts-loader": "^9.4.2", "ts-node": "^10.9.1", - "typescript": "^4.8.3", - "webpack": "^5.74.0", + "typescript": "^4.9.5", + "webpack": "^5.75.0", "webpack-cli": "^4.10.0", "xvfb-maybe": "^0.2.1", "yargs-parser": "^20.2.9" From 5fd5077d5e7868e990c2da4f74e700793679b4d2 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 21 Feb 2023 13:48:41 +0100 Subject: [PATCH 19/31] refactor: reforamt --- src/language/worker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/language/worker.ts b/src/language/worker.ts index 5feda3d26..03049b6a1 100644 --- a/src/language/worker.ts +++ b/src/language/worker.ts @@ -14,7 +14,7 @@ import { ServerCommands } from './serverCommands'; // MongoClientOptions is the second argument of CliServiceProvider.connect(connectionStr, options) type MongoClientOptions = NonNullable< - Parameters[1] + Parameters<(typeof CliServiceProvider)['connect']>[1] >; interface EvaluationResult { From ee55d53553a3b843ffd924d5aca31be1756dd2b0 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 21 Feb 2023 15:34:21 +0100 Subject: [PATCH 20/31] build: try with prev npm --- package-lock.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 127a75d8f..4c53429e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "debug": "^4.3.4", "dotenv": "^16.0.3", "micromatch": "^4.0.5", - "mongodb": "^4.14.0", + "mongodb": "^4.13.0", "mongodb-build-info": "^1.5.0", "mongodb-cloud-info": "^1.1.3", "mongodb-connection-string-url": "^2.5.3", @@ -128,7 +128,7 @@ }, "engines": { "node": "^16.16.0", - "npm": "^8.15.1", + "npm": "^8.8.0", "vscode": "^1.75.1" } }, diff --git a/package.json b/package.json index 4090344cf..569779de8 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "engines": { "vscode": "^1.75.1", "node": "^16.16.0", - "npm": "^8.15.1" + "npm": "^8.8.0" }, "activationEvents": [ "onView:mongoDB", @@ -994,7 +994,7 @@ "debug": "^4.3.4", "dotenv": "^16.0.3", "micromatch": "^4.0.5", - "mongodb": "^4.14.0", + "mongodb": "^4.13.0", "mongodb-build-info": "^1.5.0", "mongodb-cloud-info": "^1.1.3", "mongodb-connection-string-url": "^2.5.3", From a1208242d61eb75c83c95e03f4bf425f6108d5a8 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 21 Feb 2023 15:39:52 +0100 Subject: [PATCH 21/31] build: try old deps --- package-lock.json | 2914 ++++++++++++++++++--------------------------- package.json | 80 +- 2 files changed, 1215 insertions(+), 1779 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4c53429e9..1dac375d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,27 +9,27 @@ "version": "0.0.0-dev.0", "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { - "@babel/parser": "^7.21.1", - "@babel/traverse": "^7.21.0", - "@fortawesome/fontawesome-svg-core": "^6.3.0", - "@fortawesome/free-solid-svg-icons": "^6.3.0", + "@babel/parser": "^7.19.1", + "@babel/traverse": "^7.19.1", + "@fortawesome/fontawesome-svg-core": "^6.2.0", + "@fortawesome/free-solid-svg-icons": "^6.2.0", "@fortawesome/react-fontawesome": "^0.2.0", - "@iconify-icons/codicon": "^1.2.21", + "@iconify-icons/codicon": "^1.2.16", "@iconify/react": "^1.1.4", - "@leafygreen-ui/logo": "^6.3.0", - "@leafygreen-ui/palette": "^3.4.7", + "@leafygreen-ui/logo": "^6.1.3", + "@leafygreen-ui/palette": "^3.4.2", "@leafygreen-ui/toggle": "^7.0.5", - "@mongodb-js/mongodb-constants": "^0.2.2", + "@mongodb-js/mongodb-constants": "^0.2.1", "@mongosh/browser-runtime-electron": "^1.6.2", "@mongosh/i18n": "^1.6.2", "@mongosh/service-provider-server": "^1.6.2", "@mongosh/shell-api": "^1.6.2", "analytics-node": "^5.1.2", - "bson": "^4.7.2", - "bson-transpilers": "^2.0.2", + "bson": "^4.7.0", + "bson-transpilers": "^2.0.0", "classnames": "^2.3.2", "debug": "^4.3.4", - "dotenv": "^16.0.3", + "dotenv": "^16.0.2", "micromatch": "^4.0.5", "mongodb": "^4.13.0", "mongodb-build-info": "^1.5.0", @@ -37,25 +37,25 @@ "mongodb-connection-string-url": "^2.5.3", "mongodb-data-service": "^22.1.1", "mongodb-ns": "^2.4.0", - "mongodb-query-parser": "^2.4.10", + "mongodb-query-parser": "^2.4.6", "mongodb-schema": "^9.0.0", "numeral": "^2.0.6", "react": "^16.14.0", "react-dom": "^16.14.0", - "react-redux": "^7.2.9", - "redux": "^4.2.1", + "react-redux": "^7.2.8", + "redux": "^4.2.0", "ts-log": "^2.2.5", "uuid": "^8.3.2", - "vscode-languageclient": "^8.1.0", - "vscode-languageserver": "^8.1.0", - "vscode-languageserver-textdocument": "^1.0.9" + "vscode-languageclient": "^8.0.2", + "vscode-languageserver": "^8.0.2", + "vscode-languageserver-textdocument": "^1.0.7" }, "devDependencies": { "@mongodb-js/prettier-config-compass": "^1.0.0", - "@types/analytics-node": "^3.1.10", - "@types/babel__core": "^7.20.0", - "@types/babel__traverse": "^7.18.3", - "@types/chai": "^4.3.4", + "@types/analytics-node": "^3.1.9", + "@types/babel__core": "^7.1.19", + "@types/babel__traverse": "^7.18.1", + "@types/chai": "^4.3.3", "@types/chai-fs": "^2.0.2", "@types/chai-json-schema": "^1.4.6", "@types/debug": "^4.1.7", @@ -64,19 +64,19 @@ "@types/jest": "^26.0.24", "@types/micromatch": "^4.0.2", "@types/mocha": "^8.2.3", - "@types/node": "^14.18.36", + "@types/node": "^14.18.29", "@types/react": "^17.0.50", "@types/react-dom": "^17.0.17", "@types/sinon": "^9.0.11", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.75.1", - "@typescript-eslint/eslint-plugin": "^5.53.0", - "@typescript-eslint/parser": "^5.53.0", - "@vscode/test-electron": "^2.2.3", - "@vscode/vsce": "^2.17.0", + "@types/vscode": "^1.74.0", + "@typescript-eslint/eslint-plugin": "^5.38.0", + "@typescript-eslint/parser": "^5.38.0", + "@vscode/test-electron": "^2.1.5", + "@vscode/vsce": "^2.16.0", "autoprefixer": "^9.8.8", "buffer": "^6.0.3", - "chai": "^4.3.7", + "chai": "^4.3.6", "chai-as-promised": "^7.1.1", "chai-fs": "^2.0.0", "chai-json-schema": "^1.5.1", @@ -88,8 +88,8 @@ "depcheck": "^1.4.3", "download": "^8.0.0", "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.7", - "eslint": "^8.34.0", + "enzyme-adapter-react-16": "^1.15.6", + "eslint": "^8.23.1", "eslint-config-mongodb-js": "^5.0.3", "eslint-plugin-mocha": "^10.1.0", "execa": "^1.0.0", @@ -101,34 +101,34 @@ "less-loader": "^5.0.0", "mkdirp": "^1.0.4", "mocha": "^8.4.0", - "mocha-junit-reporter": "^2.2.0", - "mocha-multi": "^1.1.7", - "mongodb-client-encryption": "^2.5.0", - "mongodb-runner": "^4.10.0", + "mocha-junit-reporter": "^2.0.2", + "mocha-multi": "^1.1.6", + "mongodb-client-encryption": "^2.2.1", + "mongodb-runner": "^4.9.0", "node-loader": "^0.6.0", "npm-run-all": "^4.1.5", "ora": "^5.4.1", "postcss-loader": "^3.0.0", "pre-commit": "^1.2.2", - "prettier": "^2.8.4", + "prettier": "^2.7.1", "process": "^0.11.10", - "semver": "^7.3.8", + "semver": "^7.3.7", "sinon": "^9.2.4", "sinon-chai": "^3.7.0", "stream-browserify": "^3.0.0", "style-loader": "^1.3.0", "ts-jest": "^26.5.6", - "ts-loader": "^9.4.2", + "ts-loader": "^9.4.1", "ts-node": "^10.9.1", - "typescript": "^4.9.5", - "webpack": "^5.75.0", + "typescript": "^4.8.3", + "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "xvfb-maybe": "^0.2.1", "yargs-parser": "^20.2.9" }, "engines": { "node": "^16.16.0", - "npm": "^8.8.0", + "npm": "^8.15.1", "vscode": "^1.75.1" } }, @@ -1593,28 +1593,18 @@ } }, "node_modules/@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", "dependencies": { - "@babel/types": "^7.21.0", + "@babel/types": "^7.19.0", "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", @@ -1649,12 +1639,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1731,9 +1721,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", "engines": { "node": ">=6.9.0" } @@ -1805,9 +1795,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", - "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", + "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1991,31 +1981,31 @@ } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", - "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", + "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", + "@babel/generator": "^7.19.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.0", - "@babel/types": "^7.21.0", + "@babel/parser": "^7.19.1", + "@babel/types": "^7.19.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2024,12 +2014,12 @@ } }, "node_modules/@babel/types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", - "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2240,15 +2230,15 @@ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", - "globals": "^13.19.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -2269,9 +2259,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2284,9 +2274,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "engines": { "node": ">= 4" @@ -2329,33 +2319,33 @@ } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz", - "integrity": "sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.0.tgz", + "integrity": "sha512-rBevIsj2nclStJ7AxTdfsa3ovHb1H+qApwrxcTVo+NNdeJiB9V75hsKfrkG5AwNcRUNxrPPiScGYCNmLMoh8pg==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz", - "integrity": "sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.0.tgz", + "integrity": "sha512-Cf2mAAeMWFMzpLC7Y9H1I4o3wEU+XovVJhTiNG8ZNgSQj53yl7OCJaS80K4YjrABWZzbAHVaoHE1dVJ27AAYXw==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.3.0" + "@fortawesome/fontawesome-common-types": "6.2.0" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz", - "integrity": "sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.0.tgz", + "integrity": "sha512-UjCILHIQ4I8cN46EiQn0CZL/h8AwCGgR//1c4R96Q5viSRwuKVo0NdQEc4bm+69ZwC0dUvjbDqAHF1RR5FA3XA==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.3.0" + "@fortawesome/fontawesome-common-types": "6.2.0" }, "engines": { "node": ">=6" @@ -2374,29 +2364,27 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.5" + "minimatch": "^3.0.4" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -2419,9 +2407,9 @@ "dev": true }, "node_modules/@iconify-icons/codicon": { - "version": "1.2.21", - "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.21.tgz", - "integrity": "sha512-thIa+5jVVVSz048cSQQpQfnXU+zfQjxF3ofmkZHN+7fc6cHclKRxPPXSeVj7dHZzpgQx4pbijHPIUzIni+Pegw==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.16.tgz", + "integrity": "sha512-85rBsFEhhq2qSBfIEF0hzUk31i4GjeRzNyd0DZGFWo5v+PgAeTBiv8ftsTDf8d2fxy9F5kesT/R7bOtRy1xKmw==", "dependencies": { "@iconify/types": "*" } @@ -3037,9 +3025,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", "engines": { "node": ">=6.0.0" } @@ -3063,9 +3051,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", @@ -3139,14 +3127,14 @@ } }, "node_modules/@leafygreen-ui/logo": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/logo/-/logo-6.3.0.tgz", - "integrity": "sha512-hxAevbD/wfOjobRp7rVhqPyV/oFRUgwLuUdPn+JG1cBT/ALIeqz7fRz4jE6SyNc3ZXSWvphw/zHaKQSExVcXQQ==" + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/logo/-/logo-6.1.3.tgz", + "integrity": "sha512-b0UfZ6ypwRenw8DxhbwDd3B0JiSdTHCsTE8yQ2wBqQgTazIlz9WoFEjCrSaVv/oZ3XQnY4CBUjEfYGQ8aVOjTA==" }, "node_modules/@leafygreen-ui/palette": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/palette/-/palette-3.4.7.tgz", - "integrity": "sha512-AsvPlbvF7CERiZbAQR8hy3lAJ2/rieXI3cO0jsOwV8ztDqYNotKAdLujyr/NviudrRUenYiXrLizIKVlSPUMuA==" + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/palette/-/palette-3.4.2.tgz", + "integrity": "sha512-uR+fPOlU2Hyg1gHb4iFDtZE1SRmuj591apZpHYwAJ3JF1oqHmHVUZy9XTGN+V1Y299FGWsKrCU7OJxS7bg3nDg==" }, "node_modules/@leafygreen-ui/toggle": { "version": "7.0.5", @@ -3197,9 +3185,9 @@ } }, "node_modules/@mongodb-js/mongodb-constants": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.2.2.tgz", - "integrity": "sha512-vm1G+/WRWmXGyE9ZnhDv9toe+LRu1x0F/lGEwqWESfBiUUUuVZhj25fS2o4IL7H4pJ31sFxr7/gu+ER8OkmtzA==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.2.1.tgz", + "integrity": "sha512-arCTQYvK9scQszbQQcPba7Ru5HYrc8YINcGcM4HKMCcg+8A17U+3Y3AEI7N/oe2VE+1GFsrh8MoKBch4jEvY1g==" }, "node_modules/@mongodb-js/prettier-config-compass": { "version": "1.0.0", @@ -3891,18 +3879,18 @@ "dev": true }, "node_modules/@types/analytics-node": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.10.tgz", - "integrity": "sha512-dvn8iy2EQZDlQGgRNT9SW2Ljn9L3VgwcrpJvonufnNygZWB1XEufXNvDhUtwNUqNyHhD0hbDCCFb9j+B7vE5cA==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.9.tgz", + "integrity": "sha512-C7L7/Dd/CmBST7AvgoCnf4yI9h6W5aYfCOcfUZS5GHlXDQjnXLVOUDpTdwTIZjW4lKECeil6+G+Ul6Xzwv/P0g==", "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -3926,9 +3914,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz", + "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==", "dependencies": { "@babel/types": "^7.3.0" } @@ -3940,9 +3928,9 @@ "dev": true }, "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==" + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" }, "node_modules/@types/chai-fs": { "version": "2.0.2", @@ -4198,9 +4186,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.18.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", - "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==" + "version": "14.18.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.29.tgz", + "integrity": "sha512-LhF+9fbIX4iPzhsRLpK5H7iPdvW8L4IwGciXQIOEcuF62+9nw/VQVsOViAOOGxY3OlOKGLFv0sWwJXdwQeTn6A==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.0", @@ -4259,12 +4247,6 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, "node_modules/@types/sinon": { "version": "9.0.11", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", @@ -4332,18 +4314,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", - "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz", + "integrity": "sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/type-utils": "5.53.0", - "@typescript-eslint/utils": "5.53.0", + "@typescript-eslint/scope-manager": "5.38.0", + "@typescript-eslint/type-utils": "5.38.0", + "@typescript-eslint/utils": "5.38.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -4375,14 +4355,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", - "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.0.tgz", + "integrity": "sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/scope-manager": "5.38.0", + "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/typescript-estree": "5.38.0", "debug": "^4.3.4" }, "engines": { @@ -4402,13 +4382,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", - "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz", + "integrity": "sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/visitor-keys": "5.53.0" + "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/visitor-keys": "5.38.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4419,13 +4399,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", - "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.0.tgz", + "integrity": "sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.53.0", - "@typescript-eslint/utils": "5.53.0", + "@typescript-eslint/typescript-estree": "5.38.0", + "@typescript-eslint/utils": "5.38.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -4446,9 +4426,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", - "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.0.tgz", + "integrity": "sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4459,13 +4439,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", - "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz", + "integrity": "sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/visitor-keys": "5.53.0", + "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/visitor-keys": "5.38.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4486,19 +4466,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", - "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.0.tgz", + "integrity": "sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/scope-manager": "5.38.0", + "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/typescript-estree": "5.38.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "eslint-utils": "^3.0.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4512,12 +4490,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", - "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz", + "integrity": "sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/types": "5.38.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4544,9 +4522,9 @@ "dev": true }, "node_modules/@vscode/test-electron": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.3.tgz", - "integrity": "sha512-7DmdGYQTqRNaLHKG3j56buc9DkstriY4aV0S3Zj32u0U9/T0L8vwWAC9QGCh1meu1VXDEla1ze27TkqysHGP0Q==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", + "integrity": "sha512-O/ioqFpV+RvKbRykX2ItYPnbcZ4Hk5V0rY4uhQjQTLhGL9WZUvS7exzuYQCCI+ilSqJpctvxq2llTfGXf9UnnA==", "dev": true, "dependencies": { "http-proxy-agent": "^4.0.1", @@ -4555,7 +4533,7 @@ "unzipper": "^0.10.11" }, "engines": { - "node": ">=16" + "node": ">=8.9.3" } }, "node_modules/@vscode/vsce": { @@ -5068,12 +5046,6 @@ "prop-types": "^15.7.2", "prop-types-exact": "^1.2.0", "react-is": "^16.13.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "peerDependencies": { - "react": "^0.14 || ^15.0.0 || ^16.0.0-alpha" } }, "node_modules/ajv": { @@ -5245,7 +5217,7 @@ "node_modules/ansi": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=", "dev": true }, "node_modules/ansi-colors": { @@ -5493,18 +5465,44 @@ } }, "node_modules/array.prototype.find": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.1.tgz", - "integrity": "sha512-I2ri5Z9uMpMvnsNrHre9l3PaX+z9D0/z6F7Yt2u15q7wt0I62g5kX6xUKR1SJiefgG+u2/gJUmM8B47XRvQR6w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz", + "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.4" + } + }, + "node_modules/array.prototype.find/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array.prototype.find/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" } }, "node_modules/array.prototype.flat": { @@ -5635,18 +5633,6 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -6128,12 +6114,13 @@ } }, "node_modules/bson-transpilers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bson-transpilers/-/bson-transpilers-2.0.2.tgz", - "integrity": "sha512-FmY2vXr54rEcftux3/gspJ9RivX/kPz4O5XdAVuL2OxqYowXcDro+SETnMq5gWIy613o3DPLdGuAalDADOMHSQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bson-transpilers/-/bson-transpilers-2.0.0.tgz", + "integrity": "sha512-gHd/NCuZsbn+61uh1pDxI0dQxxkkq9SqsSc8hWN1Lwvu2dbnDLcPfBDaL3meYxb/sTDg+5drETbqgMwNsWg1vw==", "dependencies": { "antlr4": "4.7.2", "bson": "^4.4.1", + "context-eval": "^0.1.0", "js-yaml": "^3.13.1" } }, @@ -6292,16 +6279,13 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", "dev": true, "dependencies": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "get-intrinsic": "^1.0.0" } }, "node_modules/call-me-maybe": { @@ -6415,14 +6399,14 @@ } }, "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^4.1.2", + "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -7385,9 +7369,9 @@ } }, "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "dependencies": { "ini": "^1.3.4", @@ -7435,6 +7419,11 @@ "node": ">= 0.6" } }, + "node_modules/context-eval": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/context-eval/-/context-eval-0.1.0.tgz", + "integrity": "sha1-P8pxfX3wI6l4XwjGWkGJo93wP6s=" + }, "node_modules/context-map-webpack-plugin": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/context-map-webpack-plugin/-/context-map-webpack-plugin-0.1.0.tgz", @@ -7580,7 +7569,7 @@ "node_modules/css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "dependencies": { "boolbase": "~1.0.0", @@ -7947,15 +7936,15 @@ } }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "dependencies": { "type-detect": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=0.12" } }, "node_modules/deep-extend": { @@ -8000,19 +7989,15 @@ } }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "object-keys": "^1.0.12" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties/node_modules/object-keys": { @@ -8379,7 +8364,7 @@ "node_modules/docopt": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", - "integrity": "sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==", + "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", "dev": true, "engines": { "node": ">=0.10.0" @@ -8451,7 +8436,7 @@ "node_modules/domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "dependencies": { "dom-serializer": "0", @@ -8459,9 +8444,9 @@ } }, "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", + "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==", "engines": { "node": ">=12" } @@ -8469,7 +8454,7 @@ "node_modules/downcache": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/downcache/-/downcache-0.0.9.tgz", - "integrity": "sha512-AssoVsNYu5DnPY0Ro67lkbiAr66sk5IHuiIGm3pzFzWmTzkcEoFjDlG8szzP4x+ZN2OHehKTZbwDrC7l2Q52+g==", + "integrity": "sha1-eQuwQkaJE2EVzpPyqhWUbG2AbQ4=", "dev": true, "dependencies": { "extend": "^3.0.0", @@ -8484,7 +8469,7 @@ "node_modules/downcache/node_modules/gauge": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", "dev": true, "dependencies": { "ansi": "^0.3.0", @@ -8495,12 +8480,12 @@ } }, "node_modules/downcache/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "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, "dependencies": { - "minimist": "^1.2.6" + "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" @@ -8509,7 +8494,7 @@ "node_modules/downcache/node_modules/npmlog": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", + "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", "dev": true, "dependencies": { "ansi": "~0.3.1", @@ -8638,20 +8623,20 @@ } }, "node_modules/ejson-shell-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ejson-shell-parser/-/ejson-shell-parser-1.2.1.tgz", - "integrity": "sha512-xXRwH+O4EtL62ue8EmY8vNVr/AGRbRIv76WNuhXoWWwcT5TAvGKe4AqJh46QNXisVZe5e1JxvBdTnD3SO8ZLzA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ejson-shell-parser/-/ejson-shell-parser-1.2.0.tgz", + "integrity": "sha512-2DbCot5/HYcO6kY91nLU5I0CKLTuK9LiKiwaY7OFvfqf3xVgYAvUiLAQKHKeqUFlIUXY3KwRtXfaF5Vic6R1dA==", "dependencies": { "acorn": "^8.1.0" }, "peerDependencies": { - "bson": "^4.2.3 || ^5.0.0" + "bson": "^4.2.3" } }, "node_modules/ejson-shell-parser/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "bin": { "acorn": "bin/acorn" }, @@ -8758,28 +8743,20 @@ } }, "node_modules/enzyme-adapter-react-16": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.7.tgz", - "integrity": "sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw==", + "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, "dependencies": { - "enzyme-adapter-utils": "^1.14.1", - "enzyme-shallow-equal": "^1.0.5", + "enzyme-adapter-utils": "^1.14.0", + "enzyme-shallow-equal": "^1.0.4", "has": "^1.0.3", - "object.assign": "^4.1.4", - "object.values": "^1.1.5", - "prop-types": "^15.8.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", "semver": "^5.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "peerDependencies": { - "enzyme": "^3.0.0", - "react": "^16.0.0-0", - "react-dom": "^16.0.0-0" } }, "node_modules/enzyme-adapter-react-16/node_modules/semver": { @@ -8792,24 +8769,18 @@ } }, "node_modules/enzyme-adapter-utils": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz", - "integrity": "sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==", + "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, "dependencies": { "airbnb-prop-types": "^2.16.0", - "function.prototype.name": "^1.1.5", + "function.prototype.name": "^1.1.3", "has": "^1.0.3", - "object.assign": "^4.1.4", - "object.fromentries": "^2.0.5", - "prop-types": "^15.8.1", + "object.assign": "^4.1.2", + "object.fromentries": "^2.0.3", + "prop-types": "^15.7.2", "semver": "^5.7.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - }, - "peerDependencies": { - "react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0" } }, "node_modules/enzyme-adapter-utils/node_modules/semver": { @@ -8822,16 +8793,13 @@ } }, "node_modules/enzyme-shallow-equal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz", - "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", + "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", "dev": true, "dependencies": { "has": "^1.0.3", - "object-is": "^1.1.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "object-is": "^1.1.2" } }, "node_modules/enzyme/node_modules/lodash.escape": { @@ -8867,50 +8835,26 @@ } }, "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-abstract/node_modules/object-keys": { @@ -8928,29 +8872,6 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -9105,15 +9026,15 @@ } }, "node_modules/eslint": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", - "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", + "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -9129,14 +9050,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -9789,9 +9710,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -9966,9 +9887,9 @@ } }, "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -9983,9 +9904,9 @@ } }, "node_modules/espree/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -10684,9 +10605,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/file-entry-cache": { @@ -10826,15 +10744,6 @@ } } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -11005,21 +10914,18 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.3.tgz", + "integrity": "sha512-H51qkbNSp8mtkJt+nyW1gyStBiKZxfRqySNUR99ylq6BPXHKI4SEvIlTKp4odLfjRKJV04DFWMU3G/YRlQOsag==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "es-abstract": "^1.18.0-next.1", + "functions-have-names": "^1.2.1" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/functional-red-black-tree": { @@ -11029,13 +10935,10 @@ "dev": true }, "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz", + "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==", + "dev": true }, "node_modules/gauge": { "version": "2.7.4", @@ -11098,17 +11001,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "has-symbols": "^1.0.1" } }, "node_modules/get-mongodb-version": { @@ -11173,22 +11073,6 @@ "node": ">=6" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -11276,21 +11160,6 @@ "node": ">=4" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -11320,18 +11189,6 @@ "node": ">= 4" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/got": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", @@ -11469,15 +11326,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -11486,30 +11334,6 @@ "node": ">=4" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbol-support-x": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", @@ -11520,15 +11344,12 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-to-string-tag-x": { @@ -11543,21 +11364,6 @@ "node": "*" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -11734,21 +11540,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, "node_modules/htmlparser2/node_modules/string_decoder": { "version": "1.3.0", @@ -11981,19 +11773,50 @@ } }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", + "es-abstract": "^1.17.0-next.1", "has": "^1.0.3", - "side-channel": "^1.0.4" + "side-channel": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, + "node_modules/internal-slot/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internal-slot/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -12092,37 +11915,11 @@ "node": ">=0.10.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -12136,19 +11933,12 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", + "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-buffer": { @@ -12157,15 +11947,12 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-ci": { @@ -12406,15 +12193,12 @@ "dev": true }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-number": { @@ -12440,15 +12224,6 @@ "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -12482,19 +12257,15 @@ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "has-symbols": "^1.0.1" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-retry-allowed": { @@ -12505,18 +12276,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -12527,18 +12286,12 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-subset": { @@ -12559,25 +12312,6 @@ "node": ">= 0.4" } }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -12600,18 +12334,6 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-what": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.12.0.tgz", @@ -15243,8 +14965,7 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "engines": [ "node >= 0.2.0" - ], - "optional": true + ] }, "node_modules/jsonpointer.js": { "version": "0.4.0", @@ -15256,7 +14977,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "optional": true, "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -15458,7 +15178,7 @@ "node_modules/klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.9" @@ -15726,13 +15446,7 @@ "node_modules/lodash.assignin": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", - "dev": true - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", "dev": true }, "node_modules/lodash.camelcase": { @@ -15756,19 +15470,19 @@ "node_modules/lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", "dev": true }, "node_modules/lodash.filter": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", "dev": true }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, "node_modules/lodash.flattendeep": { @@ -15780,7 +15494,7 @@ "node_modules/lodash.foreach": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", "dev": true }, "node_modules/lodash.forin": { @@ -15796,8 +15510,7 @@ "node_modules/lodash.isfunction": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "optional": true + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", @@ -15812,7 +15525,7 @@ "node_modules/lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", "dev": true }, "node_modules/lodash.merge": { @@ -15824,56 +15537,55 @@ "node_modules/lodash.pad": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==", + "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=", "dev": true }, "node_modules/lodash.padend": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", "dev": true }, "node_modules/lodash.padstart": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=", "dev": true }, "node_modules/lodash.pick": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", "dev": true }, "node_modules/lodash.reduce": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", "dev": true }, "node_modules/lodash.reject": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", "dev": true }, "node_modules/lodash.some": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", "dev": true }, "node_modules/lodash.startswith": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", - "integrity": "sha512-XClYR1h4/fJ7H+mmCKppbiBmljN/nGs73iq2SjCT9SF4CBPoUHzLvWmH1GtZMhMBZSiRkHXfeA2RY1eIlJ75ww==", + "integrity": "sha1-xZjErc4YiiflMUVzHNxsDnF3YAw=", "dev": true }, "node_modules/lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", - "optional": true + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=" }, "node_modules/log-symbols": { "version": "4.0.0", @@ -16236,7 +15948,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16245,12 +15956,9 @@ } }, "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -16339,16 +16047,16 @@ } }, "node_modules/mocha-junit-reporter": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.0.tgz", - "integrity": "sha512-W83Ddf94nfLiTBl24aS8IVyFvO8aRDLlCvb+cKb/VEaN5dEbcqu3CXiTe8MQK2DvzS7oKE1RsFTxzN302GGbDQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.0.2.tgz", + "integrity": "sha512-vYwWq5hh3v1lG0gdQCBxwNipBfvDiAM1PHroQRNp96+2l72e9wEUTw+mzoK+O0SudgfQ7WvTQZ9Nh3qkAYAjfg==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "md5": "^2.3.0", - "mkdirp": "~1.0.4", + "debug": "^2.2.0", + "md5": "^2.1.0", + "mkdirp": "~0.5.1", "strip-ansi": "^6.0.1", - "xml": "^1.0.1" + "xml": "^1.0.0" }, "peerDependencies": { "mocha": ">=2.2.5" @@ -16363,6 +16071,33 @@ "node": ">=8" } }, + "node_modules/mocha-junit-reporter/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/mocha-junit-reporter/node_modules/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, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha-junit-reporter/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "node_modules/mocha-junit-reporter/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -16376,9 +16111,9 @@ } }, "node_modules/mocha-multi": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/mocha-multi/-/mocha-multi-1.1.7.tgz", - "integrity": "sha512-SXZRgHy0XiRTASyOp0p6fjOkdj+R62L6cqutnYyQOvIjNznJuUwzykxctypeRiOwPd+gfn4yt3NRulMQyI8Tzg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/mocha-multi/-/mocha-multi-1.1.6.tgz", + "integrity": "sha512-hMVmd9C1h4PEiFNwHxn8aa5/EgGLg0UswdOrlrq1Y8ieKmot8hZLYaiESIgg/He3E4oxwaXPWT1V1PJ0qNJlUQ==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -16391,7 +16126,7 @@ "node": ">=6.0.0" }, "peerDependencies": { - "mocha": ">=2.2.0 <7 || >=9" + "mocha": ">=2.2.0 <7 || ^9" } }, "node_modules/mocha-multi/node_modules/lodash.once": { @@ -16721,15 +16456,14 @@ "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "optional": true, "engines": { "node": "*" } }, "node_modules/mongodb": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz", - "integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.13.0.tgz", + "integrity": "sha512-+taZ/bV8d1pYuHL4U+gSwkhmDrwkWbH1l4aah4YpmpscMwgFBkufIKxgP/G7m87/NUuQzc2Z75ZTI7ZOyqZLbw==", "dependencies": { "bson": "^4.7.0", "mongodb-connection-string-url": "^2.5.4", @@ -16752,9 +16486,9 @@ } }, "node_modules/mongodb-client-encryption": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.5.0.tgz", - "integrity": "sha512-et7DSQDhkbioK/G3FYtjML34ylLHmapM2665k7MMWCxSiXBNGovp8wSV4dRvJzXzKMfGvc/A4bJ7EcPSjxLCwg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.3.0.tgz", + "integrity": "sha512-cXuRYBmCj43rLeqP8gHa+CrloFe7TUCd/f16VduFGQzAN9ef5buMGIfSr2CEGBul/EjTCLlioctSSDmHAmpTqA==", "devOptional": true, "hasInstallScript": true, "dependencies": { @@ -16767,13 +16501,7 @@ "node": ">=12.9.0" }, "peerDependencies": { - "@aws-sdk/credential-providers": "^3.186.0", "mongodb": ">=3.4.0" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - } } }, "node_modules/mongodb-client-encryption/node_modules/decompress-response": { @@ -17278,13 +17006,13 @@ } }, "node_modules/mongodb-download-url": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.3.0.tgz", - "integrity": "sha512-N7mRi3/LIAHCeTa+JtJVrVno4BNHVYF+6/WUamVFsbvCxtljDmQA1n9FSQxV4dfdiknR9zaoFcXAmd1gtg3Elg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.0.0.tgz", + "integrity": "sha512-bvUE9Wa0P0ZpuazQ7UFHcvE03zdnXePSsntVBngqJQIM5m6JosMeW+nrabMyBvbGqiIsgXL96UF4Bj/FakKrLw==", "dev": true, "dependencies": { "debug": "^4.1.1", - "minimist": "^1.2.3", + "minimist": "^1.2.0", "node-fetch": "^2.6.1", "semver": "^7.1.1" }, @@ -17296,7 +17024,6 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/mongodb-extended-json/-/mongodb-extended-json-1.11.0.tgz", "integrity": "sha512-+PLUMH7amvTYumCUR6alR474KmqtlmYeceJjsC+zcfdXls9IotfTp2WIuD6X5tO9dLDVCDqboqjgvXj/JjGj6g==", - "optional": true, "dependencies": { "async": "^3.1.0", "bson": "^1.0.1", @@ -17311,14 +17038,12 @@ "node_modules/mongodb-extended-json/node_modules/async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "optional": true + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, "node_modules/mongodb-extended-json/node_modules/bson": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==", - "optional": true, "engines": { "node": ">=0.6.19" } @@ -17370,20 +17095,19 @@ "integrity": "sha512-pCutlP/AU0hcJ/f1h2h3nmn79/gXrQo6088QvPCbdx7SBDkAeGPH4AYu28DgqZzFvsn5mtt2RUpsFicYhjaHow==" }, "node_modules/mongodb-query-parser": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-2.4.10.tgz", - "integrity": "sha512-gFv1N184F7oMUINuvmUJBMq+tIy1BiELNRSPGWzabYjySRxvIR2c64MJS0b7pnb0eyfHBzfKoLy2LCrYBDt8Gg==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-2.4.6.tgz", + "integrity": "sha512-R9uU//1IlhPPIGvB4ItMwus3E7nJJtBtrSrTV6wTslwDQfL6bpy9PXcIXVHdDsuJADQZdcvdvpj22VxdfqH2ig==", "dependencies": { + "bson": "^4.6.1", "debug": "^4.1.1", - "ejson-shell-parser": "^1.2.1", + "ejson-shell-parser": "^1.1.3", "is-json": "^2.0.1", "javascript-stringify": "^2.0.1", "lodash": "^4.17.15", "lru-cache": "^5.1.1", + "mongodb-extended-json": "^1.10.2", "mongodb-language-model": "^1.6.1" - }, - "peerDependencies": { - "bson": "^4.6.1 || ^5" } }, "node_modules/mongodb-query-parser/node_modules/lru-cache": { @@ -17408,9 +17132,9 @@ } }, "node_modules/mongodb-runner": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.10.0.tgz", - "integrity": "sha512-6hE4nA4+LMBPwLMXr/jQNRNtUdQgfmZOJE/4u5JX952hdUa0lPc+26Y45PdgbdMbfCYUfZK1cOBObZOBmTdQ6Q==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.9.0.tgz", + "integrity": "sha512-ltAC7FQ6NJ1XoMc5AJ+sbURsETKJeHd2ulvTpJGH+xO79b44ELCF2yETBzAmiEKTkj3MI2u0Awh0KQhWizgwWw==", "dev": true, "dependencies": { "async": "^3.1.0", @@ -17424,7 +17148,7 @@ "mongodb": "^3.4.0", "mongodb-dbpath": "^0.0.1", "mongodb-tools": "github:mongodb-js/mongodb-tools#0d1a90f49796c41f6d47c7c7999fe384014a16a0", - "mongodb-version-manager": "^1.5.0", + "mongodb-version-manager": "^1.4.5", "untildify": "^4.0.0", "which": "^2.0.1" }, @@ -17650,7 +17374,7 @@ "node_modules/mongodb-version-list": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mongodb-version-list/-/mongodb-version-list-1.0.0.tgz", - "integrity": "sha512-F3kIABEMNjg3ZAX4SRbO1QPmhpP4NX2IgJq+lcUKidducTOVJafXJ+E+pMkgpU0xumC8QYbIZJ+8y4GZys9E4g==", + "integrity": "sha1-8lAxz83W8UWx3o/OKk6+wCiLtKQ=", "dev": true, "dependencies": { "cheerio": "^0.22.0", @@ -17667,7 +17391,7 @@ "node_modules/mongodb-version-list/node_modules/cheerio": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "dev": true, "dependencies": { "css-select": "~1.2.0", @@ -17703,7 +17427,7 @@ "node_modules/mongodb-version-list/node_modules/fs-extra": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -17714,16 +17438,22 @@ "node_modules/mongodb-version-list/node_modules/jsonfile": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, + "node_modules/mongodb-version-list/node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "dev": true + }, "node_modules/mongodb-version-list/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "node_modules/mongodb-version-list/node_modules/semver": { @@ -17736,9 +17466,9 @@ } }, "node_modules/mongodb-version-manager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.5.0.tgz", - "integrity": "sha512-VHijlQXvQFnX/9MzfGePyBNr9qHLHRHg6sM2ChFO+05Htf6JY50WzvDWZmtXUNGXEor80fXxhswwDJevGlZkyA==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.4.6.tgz", + "integrity": "sha512-UxXZy7iqHUa039Bp8e1Y2tSLh/X/JtHRqnlcVkqNEWpX/5ETPaKwrT7QIVZc1Tk5tEkQXjRHd6nQtUjcemOHmA==", "dev": true, "dependencies": { "ampersand-state": "^5.0.3", @@ -17764,9 +17494,9 @@ } }, "node_modules/mongodb-version-manager/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, "node_modules/mongodb-version-manager/node_modules/chalk": { @@ -17795,7 +17525,7 @@ "node_modules/mongodb-version-manager/node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "dependencies": { "mimic-response": "^1.0.0" @@ -17829,7 +17559,7 @@ "node_modules/mongodb-version-manager/node_modules/file-type": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", "dev": true, "engines": { "node": ">=4" @@ -17852,7 +17582,7 @@ "node_modules/mongodb-version-manager/node_modules/get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true, "engines": { "node": ">=4" @@ -17916,7 +17646,7 @@ "node_modules/mongodb-version-manager/node_modules/p-event": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", "dev": true, "dependencies": { "p-timeout": "^1.1.1" @@ -17928,7 +17658,7 @@ "node_modules/mongodb-version-manager/node_modules/p-timeout": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", "dev": true, "dependencies": { "p-finally": "^1.0.0" @@ -17940,7 +17670,7 @@ "node_modules/mongodb-version-manager/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" @@ -17949,7 +17679,7 @@ "node_modules/mongodb-version-manager/node_modules/prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true, "engines": { "node": ">=0.10.0" @@ -17979,7 +17709,7 @@ "node_modules/mongodb-version-manager/node_modules/url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "dependencies": { "prepend-http": "^1.0.1" @@ -18146,12 +17876,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/natural-orderby": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", @@ -18404,7 +18128,7 @@ "node_modules/npm-conf/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" @@ -18724,28 +18448,22 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true }, "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", + "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.0", "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { @@ -18775,21 +18493,18 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.assign/node_modules/object-keys": { @@ -18817,20 +18532,18 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", + "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.pick": { @@ -18846,20 +18559,18 @@ } }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { @@ -20001,9 +19712,9 @@ } }, "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -20073,7 +19784,7 @@ "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, "node_modules/prr": { @@ -20265,9 +19976,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-redux": { - "version": "7.2.9", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", - "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz", + "integrity": "sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==", "dependencies": { "@babel/runtime": "^7.15.4", "@types/react-redux": "^7.1.20", @@ -20411,9 +20122,9 @@ } }, "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", "dependencies": { "@babel/runtime": "^7.9.2" } @@ -20421,7 +20132,7 @@ "node_modules/reflect.ownkeys": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg==", + "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", "dev": true }, "node_modules/regenerator-runtime": { @@ -20443,20 +20154,47 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "es-abstract": "^1.17.0-next.1" }, "engines": { "node": ">= 0.4" + } + }, + "node_modules/regexp.prototype.flags/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexp.prototype.flags/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" } }, "node_modules/regexpp": { @@ -20850,20 +20588,6 @@ "ret": "~0.1.10" } }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -21157,9 +20881,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -21270,17 +20994,13 @@ "optional": true }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", + "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "es-abstract": "^1.18.0-next.0", + "object-inspect": "^1.8.0" } }, "node_modules/sift": { @@ -22079,31 +21799,23 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, "node_modules/strip-ansi": { @@ -22818,9 +22530,9 @@ "dev": true }, "node_modules/ts-loader": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", - "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", + "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -22996,20 +22708,6 @@ "node": ">=8" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typed-rest-client": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", @@ -23036,9 +22734,9 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -23054,21 +22752,6 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -23377,74 +23060,55 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", - "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz", + "integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz", - "integrity": "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.2.tgz", + "integrity": "sha512-lHlthJtphG9gibGb/y72CKqQUxwPsMXijJVpHEC2bvbFqxmkj9LwQ3aGU9dwjBLqsX1S4KjShYppLvg1UJDF/Q==", "dependencies": { - "minimatch": "^5.1.0", - "semver": "^7.3.7", - "vscode-languageserver-protocol": "3.17.3" + "minimatch": "^3.0.4", + "semver": "^7.3.5", + "vscode-languageserver-protocol": "3.17.2" }, "engines": { "vscode": "^1.67.0" } }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/vscode-languageserver": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", - "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz", + "integrity": "sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==", "dependencies": { - "vscode-languageserver-protocol": "3.17.3" + "vscode-languageserver-protocol": "3.17.2" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", - "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz", + "integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==", "dependencies": { - "vscode-jsonrpc": "8.1.0", - "vscode-languageserver-types": "3.17.3" + "vscode-jsonrpc": "8.0.2", + "vscode-languageserver-types": "3.17.2" } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.9.tgz", - "integrity": "sha512-NPfHVGFW2/fQEWHspr8x3PXhRgtFbuDZdl7p6ifuN3M7nk2Yjf5POr/NfDBuAiQG88DehDyJ7nGOT+p+edEtbw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz", + "integrity": "sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==" }, "node_modules/vscode-languageserver-types": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", - "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", + "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" }, "node_modules/w3c-hr-time": { "version": "1.0.2", @@ -23514,9 +23178,9 @@ } }, "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -23742,47 +23406,11 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -25657,25 +25285,13 @@ } }, "@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", "requires": { - "@babel/types": "^7.21.0", + "@babel/types": "^7.19.0", "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - } } }, "@babel/helper-compilation-targets": { @@ -25702,12 +25318,12 @@ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, "@babel/helper-hoist-variables": { @@ -25763,9 +25379,9 @@ } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", @@ -25818,9 +25434,9 @@ } }, "@babel/parser": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", - "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", + "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -25971,39 +25587,39 @@ } }, "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", - "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", + "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", + "@babel/generator": "^7.19.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.0", - "@babel/types": "^7.21.0", + "@babel/parser": "^7.19.1", + "@babel/types": "^7.19.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", - "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" } }, @@ -26161,15 +25777,15 @@ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.4.0", - "globals": "^13.19.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -26184,18 +25800,18 @@ "dev": true }, "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "js-yaml": { @@ -26225,24 +25841,24 @@ } }, "@fortawesome/fontawesome-common-types": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.3.0.tgz", - "integrity": "sha512-4BC1NMoacEBzSXRwKjZ/X/gmnbp/HU5Qqat7E8xqorUtBFZS+bwfGH5/wqOC2K6GV0rgEobp3OjGRMa5fK9pFg==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.2.0.tgz", + "integrity": "sha512-rBevIsj2nclStJ7AxTdfsa3ovHb1H+qApwrxcTVo+NNdeJiB9V75hsKfrkG5AwNcRUNxrPPiScGYCNmLMoh8pg==" }, "@fortawesome/fontawesome-svg-core": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.3.0.tgz", - "integrity": "sha512-uz9YifyKlixV6AcKlOX8WNdtF7l6nakGyLYxYaCa823bEBqyj/U2ssqtctO38itNEwXb8/lMzjdoJ+aaJuOdrw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.2.0.tgz", + "integrity": "sha512-Cf2mAAeMWFMzpLC7Y9H1I4o3wEU+XovVJhTiNG8ZNgSQj53yl7OCJaS80K4YjrABWZzbAHVaoHE1dVJ27AAYXw==", "requires": { - "@fortawesome/fontawesome-common-types": "6.3.0" + "@fortawesome/fontawesome-common-types": "6.2.0" } }, "@fortawesome/free-solid-svg-icons": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.3.0.tgz", - "integrity": "sha512-x5tMwzF2lTH8pyv8yeZRodItP2IVlzzmBuD1M7BjawWgg9XAvktqJJ91Qjgoaf8qJpHQ8FEU9VxRfOkLhh86QA==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.2.0.tgz", + "integrity": "sha512-UjCILHIQ4I8cN46EiQn0CZL/h8AwCGgR//1c4R96Q5viSRwuKVo0NdQEc4bm+69ZwC0dUvjbDqAHF1RR5FA3XA==", "requires": { - "@fortawesome/fontawesome-common-types": "6.3.0" + "@fortawesome/fontawesome-common-types": "6.2.0" } }, "@fortawesome/react-fontawesome": { @@ -26254,27 +25870,22 @@ } }, "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "minimatch": "^3.0.4" } }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -26288,9 +25899,9 @@ "dev": true }, "@iconify-icons/codicon": { - "version": "1.2.21", - "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.21.tgz", - "integrity": "sha512-thIa+5jVVVSz048cSQQpQfnXU+zfQjxF3ofmkZHN+7fc6cHclKRxPPXSeVj7dHZzpgQx4pbijHPIUzIni+Pegw==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@iconify-icons/codicon/-/codicon-1.2.16.tgz", + "integrity": "sha512-85rBsFEhhq2qSBfIEF0hzUk31i4GjeRzNyd0DZGFWo5v+PgAeTBiv8ftsTDf8d2fxy9F5kesT/R7bOtRy1xKmw==", "requires": { "@iconify/types": "*" } @@ -26837,9 +26448,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" }, "@jridgewell/set-array": { "version": "1.1.2", @@ -26857,9 +26468,9 @@ } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" }, "@jridgewell/trace-mapping": { "version": "0.3.9", @@ -26930,14 +26541,14 @@ } }, "@leafygreen-ui/logo": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/logo/-/logo-6.3.0.tgz", - "integrity": "sha512-hxAevbD/wfOjobRp7rVhqPyV/oFRUgwLuUdPn+JG1cBT/ALIeqz7fRz4jE6SyNc3ZXSWvphw/zHaKQSExVcXQQ==" + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/logo/-/logo-6.1.3.tgz", + "integrity": "sha512-b0UfZ6ypwRenw8DxhbwDd3B0JiSdTHCsTE8yQ2wBqQgTazIlz9WoFEjCrSaVv/oZ3XQnY4CBUjEfYGQ8aVOjTA==" }, "@leafygreen-ui/palette": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/@leafygreen-ui/palette/-/palette-3.4.7.tgz", - "integrity": "sha512-AsvPlbvF7CERiZbAQR8hy3lAJ2/rieXI3cO0jsOwV8ztDqYNotKAdLujyr/NviudrRUenYiXrLizIKVlSPUMuA==" + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@leafygreen-ui/palette/-/palette-3.4.2.tgz", + "integrity": "sha512-uR+fPOlU2Hyg1gHb4iFDtZE1SRmuj591apZpHYwAJ3JF1oqHmHVUZy9XTGN+V1Y299FGWsKrCU7OJxS7bg3nDg==" }, "@leafygreen-ui/toggle": { "version": "7.0.5", @@ -26979,9 +26590,9 @@ } }, "@mongodb-js/mongodb-constants": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.2.2.tgz", - "integrity": "sha512-vm1G+/WRWmXGyE9ZnhDv9toe+LRu1x0F/lGEwqWESfBiUUUuVZhj25fS2o4IL7H4pJ31sFxr7/gu+ER8OkmtzA==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/mongodb-constants/-/mongodb-constants-0.2.1.tgz", + "integrity": "sha512-arCTQYvK9scQszbQQcPba7Ru5HYrc8YINcGcM4HKMCcg+8A17U+3Y3AEI7N/oe2VE+1GFsrh8MoKBch4jEvY1g==" }, "@mongodb-js/prettier-config-compass": { "version": "1.0.0", @@ -27536,18 +27147,18 @@ "dev": true }, "@types/analytics-node": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.10.tgz", - "integrity": "sha512-dvn8iy2EQZDlQGgRNT9SW2Ljn9L3VgwcrpJvonufnNygZWB1XEufXNvDhUtwNUqNyHhD0hbDCCFb9j+B7vE5cA==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.9.tgz", + "integrity": "sha512-C7L7/Dd/CmBST7AvgoCnf4yI9h6W5aYfCOcfUZS5GHlXDQjnXLVOUDpTdwTIZjW4lKECeil6+G+Ul6Xzwv/P0g==", "dev": true }, "@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.1.19", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", + "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" @@ -27571,9 +27182,9 @@ } }, "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz", + "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==", "requires": { "@babel/types": "^7.3.0" } @@ -27585,9 +27196,9 @@ "dev": true }, "@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==" + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==" }, "@types/chai-fs": { "version": "2.0.2", @@ -27830,9 +27441,9 @@ "dev": true }, "@types/node": { - "version": "14.18.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", - "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==" + "version": "14.18.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.29.tgz", + "integrity": "sha512-LhF+9fbIX4iPzhsRLpK5H7iPdvW8L4IwGciXQIOEcuF62+9nw/VQVsOViAOOGxY3OlOKGLFv0sWwJXdwQeTn6A==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -27891,12 +27502,6 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, "@types/sinon": { "version": "9.0.11", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", @@ -27964,18 +27569,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", - "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.38.0.tgz", + "integrity": "sha512-GgHi/GNuUbTOeoJiEANi0oI6fF3gBQc3bGFYj40nnAPCbhrtEDf2rjBmefFadweBmO1Du1YovHeDP2h5JLhtTQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/type-utils": "5.53.0", - "@typescript-eslint/utils": "5.53.0", + "@typescript-eslint/scope-manager": "5.38.0", + "@typescript-eslint/type-utils": "5.38.0", + "@typescript-eslint/utils": "5.38.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -27990,53 +27593,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", - "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.38.0.tgz", + "integrity": "sha512-/F63giJGLDr0ms1Cr8utDAxP2SPiglaD6V+pCOcG35P2jCqdfR7uuEhz1GIC3oy4hkUF8xA1XSXmd9hOh/a5EA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/scope-manager": "5.38.0", + "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/typescript-estree": "5.38.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", - "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz", + "integrity": "sha512-ByhHIuNyKD9giwkkLqzezZ9y5bALW8VNY6xXcP+VxoH4JBDKjU5WNnsiD4HJdglHECdV+lyaxhvQjTUbRboiTA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/visitor-keys": "5.53.0" + "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/visitor-keys": "5.38.0" } }, "@typescript-eslint/type-utils": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", - "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.38.0.tgz", + "integrity": "sha512-iZq5USgybUcj/lfnbuelJ0j3K9dbs1I3RICAJY9NZZpDgBYXmuUlYQGzftpQA9wC8cKgtS6DASTvF3HrXwwozA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.53.0", - "@typescript-eslint/utils": "5.53.0", + "@typescript-eslint/typescript-estree": "5.38.0", + "@typescript-eslint/utils": "5.38.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", - "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.0.tgz", + "integrity": "sha512-HHu4yMjJ7i3Cb+8NUuRCdOGu2VMkfmKyIJsOr9PfkBVYLYrtMCK/Ap50Rpov+iKpxDTfnqvDbuPLgBE5FwUNfA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", - "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.38.0.tgz", + "integrity": "sha512-6P0RuphkR+UuV7Avv7MU3hFoWaGcrgOdi8eTe1NwhMp2/GjUJoODBTRWzlHpZh6lFOaPmSvgxGlROa0Sg5Zbyg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/visitor-keys": "5.53.0", + "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/visitor-keys": "5.38.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -28045,28 +27648,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", - "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.38.0.tgz", + "integrity": "sha512-6sdeYaBgk9Fh7N2unEXGz+D+som2QCQGPAf1SxrkEr+Z32gMreQ0rparXTNGRRfYUWk/JzbGdcM8NSSd6oqnTA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/scope-manager": "5.38.0", + "@typescript-eslint/types": "5.38.0", + "@typescript-eslint/typescript-estree": "5.38.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", - "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", + "version": "5.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.38.0.tgz", + "integrity": "sha512-MxnrdIyArnTi+XyFLR+kt/uNAcdOnmT+879os7qDRI+EYySR4crXJq9BXPfRzzLGq0wgxkwidrCJ9WCAoacm1w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/types": "5.38.0", "eslint-visitor-keys": "^3.3.0" }, "dependencies": { @@ -28085,9 +27686,9 @@ "dev": true }, "@vscode/test-electron": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.3.tgz", - "integrity": "sha512-7DmdGYQTqRNaLHKG3j56buc9DkstriY4aV0S3Zj32u0U9/T0L8vwWAC9QGCh1meu1VXDEla1ze27TkqysHGP0Q==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", + "integrity": "sha512-O/ioqFpV+RvKbRykX2ItYPnbcZ4Hk5V0rY4uhQjQTLhGL9WZUvS7exzuYQCCI+ilSqJpctvxq2llTfGXf9UnnA==", "dev": true, "requires": { "http-proxy-agent": "^4.0.1", @@ -28698,7 +28299,7 @@ "ansi": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=", "dev": true }, "ansi-colors": { @@ -28904,15 +28505,40 @@ "dev": true }, "array.prototype.find": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.1.tgz", - "integrity": "sha512-I2ri5Z9uMpMvnsNrHre9l3PaX+z9D0/z6F7Yt2u15q7wt0I62g5kX6xUKR1SJiefgG+u2/gJUmM8B47XRvQR6w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz", + "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.4" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, "array.prototype.flat": { @@ -29009,12 +28635,6 @@ "postcss-value-parser": "^4.1.0" } }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -29447,12 +29067,13 @@ } }, "bson-transpilers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bson-transpilers/-/bson-transpilers-2.0.2.tgz", - "integrity": "sha512-FmY2vXr54rEcftux3/gspJ9RivX/kPz4O5XdAVuL2OxqYowXcDro+SETnMq5gWIy613o3DPLdGuAalDADOMHSQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bson-transpilers/-/bson-transpilers-2.0.0.tgz", + "integrity": "sha512-gHd/NCuZsbn+61uh1pDxI0dQxxkkq9SqsSc8hWN1Lwvu2dbnDLcPfBDaL3meYxb/sTDg+5drETbqgMwNsWg1vw==", "requires": { "antlr4": "4.7.2", "bson": "^4.4.1", + "context-eval": "^0.1.0", "js-yaml": "^3.13.1" } }, @@ -29558,13 +29179,13 @@ } }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", "dev": true, "requires": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "get-intrinsic": "^1.0.0" } }, "call-me-maybe": { @@ -29652,14 +29273,14 @@ } }, "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", - "deep-eql": "^4.1.2", + "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", "loupe": "^2.3.1", "pathval": "^1.1.1", @@ -30416,9 +30037,9 @@ } }, "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "requires": { "ini": "^1.3.4", @@ -30462,6 +30083,11 @@ "safe-buffer": "5.1.2" } }, + "context-eval": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/context-eval/-/context-eval-0.1.0.tgz", + "integrity": "sha1-P8pxfX3wI6l4XwjGWkGJo93wP6s=" + }, "context-map-webpack-plugin": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/context-map-webpack-plugin/-/context-map-webpack-plugin-0.1.0.tgz", @@ -30579,7 +30205,7 @@ "css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { "boolbase": "~1.0.0", @@ -30880,9 +30506,9 @@ } }, "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -30923,13 +30549,12 @@ } }, "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "object-keys": "^1.0.12" }, "dependencies": { "object-keys": { @@ -31212,7 +30837,7 @@ "docopt": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", - "integrity": "sha512-NqTbaYeE4gA/wU1hdKFdU+AFahpDOpgGLzHP42k6H6DKExJd0A55KEVWYhL9FEmHmgeLvEU2vuKXDuU+4yToOw==", + "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", "dev": true }, "doctrine": { @@ -31274,7 +30899,7 @@ "domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { "dom-serializer": "0", @@ -31282,14 +30907,14 @@ } }, "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz", + "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==" }, "downcache": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/downcache/-/downcache-0.0.9.tgz", - "integrity": "sha512-AssoVsNYu5DnPY0Ro67lkbiAr66sk5IHuiIGm3pzFzWmTzkcEoFjDlG8szzP4x+ZN2OHehKTZbwDrC7l2Q52+g==", + "integrity": "sha1-eQuwQkaJE2EVzpPyqhWUbG2AbQ4=", "dev": true, "requires": { "extend": "^3.0.0", @@ -31304,7 +30929,7 @@ "gauge": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", "dev": true, "requires": { "ansi": "^0.3.0", @@ -31315,18 +30940,18 @@ } }, "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "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.6" + "minimist": "^1.2.5" } }, "npmlog": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha512-DaL6RTb8Qh4tMe2ttPT1qWccETy2Vi5/8p+htMpLBeXJTr2CAqnF5WQtSP2eFpvaNbhLZ5uilDb98mRm4Q+lZQ==", + "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", "dev": true, "requires": { "ansi": "~0.3.1", @@ -31446,17 +31071,17 @@ } }, "ejson-shell-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ejson-shell-parser/-/ejson-shell-parser-1.2.1.tgz", - "integrity": "sha512-xXRwH+O4EtL62ue8EmY8vNVr/AGRbRIv76WNuhXoWWwcT5TAvGKe4AqJh46QNXisVZe5e1JxvBdTnD3SO8ZLzA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ejson-shell-parser/-/ejson-shell-parser-1.2.0.tgz", + "integrity": "sha512-2DbCot5/HYcO6kY91nLU5I0CKLTuK9LiKiwaY7OFvfqf3xVgYAvUiLAQKHKeqUFlIUXY3KwRtXfaF5Vic6R1dA==", "requires": { "acorn": "^8.1.0" }, "dependencies": { "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" } } }, @@ -31558,17 +31183,17 @@ } }, "enzyme-adapter-react-16": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.7.tgz", - "integrity": "sha512-LtjKgvlTc/H7adyQcj+aq0P0H07LDL480WQl1gU512IUyaDo/sbOaNDdZsJXYW2XaoPqrLLE9KbZS+X2z6BASw==", + "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.14.1", - "enzyme-shallow-equal": "^1.0.5", + "enzyme-adapter-utils": "^1.14.0", + "enzyme-shallow-equal": "^1.0.4", "has": "^1.0.3", - "object.assign": "^4.1.4", - "object.values": "^1.1.5", - "prop-types": "^15.8.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", "semver": "^5.7.0" @@ -31583,17 +31208,17 @@ } }, "enzyme-adapter-utils": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz", - "integrity": "sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==", + "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.5", + "function.prototype.name": "^1.1.3", "has": "^1.0.3", - "object.assign": "^4.1.4", - "object.fromentries": "^2.0.5", - "prop-types": "^15.8.1", + "object.assign": "^4.1.2", + "object.fromentries": "^2.0.3", + "prop-types": "^15.7.2", "semver": "^5.7.1" }, "dependencies": { @@ -31606,13 +31231,13 @@ } }, "enzyme-shallow-equal": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz", - "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", + "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", "dev": true, "requires": { "has": "^1.0.3", - "object-is": "^1.1.5" + "object-is": "^1.1.2" } }, "errno": { @@ -31633,44 +31258,23 @@ } }, "es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" }, "dependencies": { "object-keys": { @@ -31687,26 +31291,6 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -31848,15 +31432,15 @@ } }, "eslint": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", - "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz", + "integrity": "sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -31872,14 +31456,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -31979,9 +31563,9 @@ } }, "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -32494,9 +32078,9 @@ "dev": true }, "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -32505,9 +32089,9 @@ }, "dependencies": { "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, "eslint-visitor-keys": { @@ -33179,15 +32763,6 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -33331,15 +32906,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.3.tgz", + "integrity": "sha512-H51qkbNSp8mtkJt+nyW1gyStBiKZxfRqySNUR99ylq6BPXHKI4SEvIlTKp4odLfjRKJV04DFWMU3G/YRlQOsag==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "es-abstract": "^1.18.0-next.1", + "functions-have-names": "^1.2.1" } }, "functional-red-black-tree": { @@ -33349,9 +32924,9 @@ "dev": true }, "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz", + "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==", "dev": true }, "gauge": { @@ -33406,14 +32981,14 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.1" } }, "get-mongodb-version": { @@ -33463,16 +33038,6 @@ "pump": "^3.0.0" } }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -33544,15 +33109,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -33575,15 +33131,6 @@ } } }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } - }, "got": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", @@ -33696,32 +33243,11 @@ "function-bind": "^1.1.1" } }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, "has-symbol-support-x": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", @@ -33729,9 +33255,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "has-to-string-tag-x": { @@ -33743,15 +33269,6 @@ "has-symbol-support-x": "^1.4.1" } }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -34086,14 +33603,41 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", "dev": true, "requires": { - "get-intrinsic": "^1.2.0", + "es-abstract": "^1.17.0-next.1", "has": "^1.0.3", - "side-channel": "^1.0.4" + "side-channel": "^1.0.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, "interpret": { @@ -34175,31 +33719,11 @@ } } }, - "is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -34210,14 +33734,10 @@ } }, "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", + "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==", + "dev": true }, "is-buffer": { "version": "1.1.6", @@ -34225,9 +33745,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true }, "is-ci": { @@ -34414,9 +33934,9 @@ "dev": true }, "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", "dev": true }, "is-number": { @@ -34436,12 +33956,6 @@ "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -34469,13 +33983,12 @@ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "has-symbols": "^1.0.1" } }, "is-retry-allowed": { @@ -34483,15 +33996,6 @@ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -34499,13 +34003,10 @@ "dev": true }, "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true }, "is-subset": { "version": "0.1.1", @@ -34522,19 +34023,6 @@ "has-symbols": "^1.0.1" } }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -34551,15 +34039,6 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, "is-what": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.12.0.tgz", @@ -36809,8 +36288,7 @@ "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "optional": true + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" }, "jsonpointer.js": { "version": "0.4.0", @@ -36822,7 +36300,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "optional": true, "requires": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -36968,7 +36445,7 @@ "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "requires": { "graceful-fs": "^4.1.9" @@ -37188,13 +36665,7 @@ "lodash.assignin": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==", - "dev": true - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", "dev": true }, "lodash.camelcase": { @@ -37218,19 +36689,19 @@ "lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", "dev": true }, "lodash.filter": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", "dev": true }, "lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, "lodash.flattendeep": { @@ -37242,7 +36713,7 @@ "lodash.foreach": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", "dev": true }, "lodash.forin": { @@ -37258,8 +36729,7 @@ "lodash.isfunction": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "optional": true + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" }, "lodash.isplainobject": { "version": "4.0.6", @@ -37274,7 +36744,7 @@ "lodash.map": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", "dev": true }, "lodash.merge": { @@ -37286,56 +36756,55 @@ "lodash.pad": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", - "integrity": "sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==", + "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=", "dev": true }, "lodash.padend": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", "dev": true }, "lodash.padstart": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=", "dev": true }, "lodash.pick": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", "dev": true }, "lodash.reduce": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", "dev": true }, "lodash.reject": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", "dev": true }, "lodash.some": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", "dev": true }, "lodash.startswith": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.startswith/-/lodash.startswith-4.2.1.tgz", - "integrity": "sha512-XClYR1h4/fJ7H+mmCKppbiBmljN/nGs73iq2SjCT9SF4CBPoUHzLvWmH1GtZMhMBZSiRkHXfeA2RY1eIlJ75ww==", + "integrity": "sha1-xZjErc4YiiflMUVzHNxsDnF3YAw=", "dev": true }, "lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", - "optional": true + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=" }, "log-symbols": { "version": "4.0.0", @@ -37638,15 +37107,14 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mixin-deep": { "version": "1.3.2", @@ -37949,16 +37417,16 @@ } }, "mocha-junit-reporter": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.0.tgz", - "integrity": "sha512-W83Ddf94nfLiTBl24aS8IVyFvO8aRDLlCvb+cKb/VEaN5dEbcqu3CXiTe8MQK2DvzS7oKE1RsFTxzN302GGbDQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.0.2.tgz", + "integrity": "sha512-vYwWq5hh3v1lG0gdQCBxwNipBfvDiAM1PHroQRNp96+2l72e9wEUTw+mzoK+O0SudgfQ7WvTQZ9Nh3qkAYAjfg==", "dev": true, "requires": { - "debug": "^4.3.4", - "md5": "^2.3.0", - "mkdirp": "~1.0.4", + "debug": "^2.2.0", + "md5": "^2.1.0", + "mkdirp": "~0.5.1", "strip-ansi": "^6.0.1", - "xml": "^1.0.1" + "xml": "^1.0.0" }, "dependencies": { "ansi-regex": { @@ -37967,6 +37435,30 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -37979,9 +37471,9 @@ } }, "mocha-multi": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/mocha-multi/-/mocha-multi-1.1.7.tgz", - "integrity": "sha512-SXZRgHy0XiRTASyOp0p6fjOkdj+R62L6cqutnYyQOvIjNznJuUwzykxctypeRiOwPd+gfn4yt3NRulMQyI8Tzg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/mocha-multi/-/mocha-multi-1.1.6.tgz", + "integrity": "sha512-hMVmd9C1h4PEiFNwHxn8aa5/EgGLg0UswdOrlrq1Y8ieKmot8hZLYaiESIgg/He3E4oxwaXPWT1V1PJ0qNJlUQ==", "dev": true, "requires": { "debug": "^4.1.1", @@ -38002,13 +37494,12 @@ "moment": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "optional": true + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "mongodb": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.14.0.tgz", - "integrity": "sha512-coGKkWXIBczZPr284tYKFLg+KbGPPLlSbdgfKAb6QqCFt5bo5VFZ50O3FFzsw4rnkqjwT6D8Qcoo9nshYKM7Mg==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.13.0.tgz", + "integrity": "sha512-+taZ/bV8d1pYuHL4U+gSwkhmDrwkWbH1l4aah4YpmpscMwgFBkufIKxgP/G7m87/NUuQzc2Z75ZTI7ZOyqZLbw==", "requires": { "@aws-sdk/credential-providers": "^3.186.0", "bson": "^4.7.0", @@ -38026,9 +37517,9 @@ } }, "mongodb-client-encryption": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.5.0.tgz", - "integrity": "sha512-et7DSQDhkbioK/G3FYtjML34ylLHmapM2665k7MMWCxSiXBNGovp8wSV4dRvJzXzKMfGvc/A4bJ7EcPSjxLCwg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/mongodb-client-encryption/-/mongodb-client-encryption-2.3.0.tgz", + "integrity": "sha512-cXuRYBmCj43rLeqP8gHa+CrloFe7TUCd/f16VduFGQzAN9ef5buMGIfSr2CEGBul/EjTCLlioctSSDmHAmpTqA==", "devOptional": true, "requires": { "bindings": "^1.5.0", @@ -38440,13 +37931,13 @@ } }, "mongodb-download-url": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.3.0.tgz", - "integrity": "sha512-N7mRi3/LIAHCeTa+JtJVrVno4BNHVYF+6/WUamVFsbvCxtljDmQA1n9FSQxV4dfdiknR9zaoFcXAmd1gtg3Elg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mongodb-download-url/-/mongodb-download-url-1.0.0.tgz", + "integrity": "sha512-bvUE9Wa0P0ZpuazQ7UFHcvE03zdnXePSsntVBngqJQIM5m6JosMeW+nrabMyBvbGqiIsgXL96UF4Bj/FakKrLw==", "dev": true, "requires": { "debug": "^4.1.1", - "minimist": "^1.2.3", + "minimist": "^1.2.0", "node-fetch": "^2.6.1", "semver": "^7.1.1" } @@ -38455,7 +37946,6 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/mongodb-extended-json/-/mongodb-extended-json-1.11.0.tgz", "integrity": "sha512-+PLUMH7amvTYumCUR6alR474KmqtlmYeceJjsC+zcfdXls9IotfTp2WIuD6X5tO9dLDVCDqboqjgvXj/JjGj6g==", - "optional": true, "requires": { "async": "^3.1.0", "bson": "^1.0.1", @@ -38470,14 +37960,12 @@ "async": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "optional": true + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" }, "bson": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==", - "optional": true + "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" } } }, @@ -38530,16 +38018,18 @@ "integrity": "sha512-pCutlP/AU0hcJ/f1h2h3nmn79/gXrQo6088QvPCbdx7SBDkAeGPH4AYu28DgqZzFvsn5mtt2RUpsFicYhjaHow==" }, "mongodb-query-parser": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-2.4.10.tgz", - "integrity": "sha512-gFv1N184F7oMUINuvmUJBMq+tIy1BiELNRSPGWzabYjySRxvIR2c64MJS0b7pnb0eyfHBzfKoLy2LCrYBDt8Gg==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mongodb-query-parser/-/mongodb-query-parser-2.4.6.tgz", + "integrity": "sha512-R9uU//1IlhPPIGvB4ItMwus3E7nJJtBtrSrTV6wTslwDQfL6bpy9PXcIXVHdDsuJADQZdcvdvpj22VxdfqH2ig==", "requires": { + "bson": "^4.6.1", "debug": "^4.1.1", - "ejson-shell-parser": "^1.2.1", + "ejson-shell-parser": "^1.1.3", "is-json": "^2.0.1", "javascript-stringify": "^2.0.1", "lodash": "^4.17.15", "lru-cache": "^5.1.1", + "mongodb-extended-json": "^1.10.2", "mongodb-language-model": "^1.6.1" }, "dependencies": { @@ -38567,9 +38057,9 @@ } }, "mongodb-runner": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.10.0.tgz", - "integrity": "sha512-6hE4nA4+LMBPwLMXr/jQNRNtUdQgfmZOJE/4u5JX952hdUa0lPc+26Y45PdgbdMbfCYUfZK1cOBObZOBmTdQ6Q==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/mongodb-runner/-/mongodb-runner-4.9.0.tgz", + "integrity": "sha512-ltAC7FQ6NJ1XoMc5AJ+sbURsETKJeHd2ulvTpJGH+xO79b44ELCF2yETBzAmiEKTkj3MI2u0Awh0KQhWizgwWw==", "dev": true, "requires": { "async": "^3.1.0", @@ -38583,7 +38073,7 @@ "mongodb": "^3.4.0", "mongodb-dbpath": "^0.0.1", "mongodb-tools": "github:mongodb-js/mongodb-tools#0d1a90f49796c41f6d47c7c7999fe384014a16a0", - "mongodb-version-manager": "^1.5.0", + "mongodb-version-manager": "^1.4.5", "untildify": "^4.0.0", "which": "^2.0.1" }, @@ -38740,7 +38230,7 @@ "mongodb-version-list": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mongodb-version-list/-/mongodb-version-list-1.0.0.tgz", - "integrity": "sha512-F3kIABEMNjg3ZAX4SRbO1QPmhpP4NX2IgJq+lcUKidducTOVJafXJ+E+pMkgpU0xumC8QYbIZJ+8y4GZys9E4g==", + "integrity": "sha1-8lAxz83W8UWx3o/OKk6+wCiLtKQ=", "dev": true, "requires": { "cheerio": "^0.22.0", @@ -38754,7 +38244,7 @@ "cheerio": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "dev": true, "requires": { "css-select": "~1.2.0", @@ -38787,7 +38277,7 @@ "fs-extra": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -38798,16 +38288,22 @@ "jsonfile": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "semver": { @@ -38819,9 +38315,9 @@ } }, "mongodb-version-manager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.5.0.tgz", - "integrity": "sha512-VHijlQXvQFnX/9MzfGePyBNr9qHLHRHg6sM2ChFO+05Htf6JY50WzvDWZmtXUNGXEor80fXxhswwDJevGlZkyA==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/mongodb-version-manager/-/mongodb-version-manager-1.4.6.tgz", + "integrity": "sha512-UxXZy7iqHUa039Bp8e1Y2tSLh/X/JtHRqnlcVkqNEWpX/5ETPaKwrT7QIVZc1Tk5tEkQXjRHd6nQtUjcemOHmA==", "dev": true, "requires": { "ampersand-state": "^5.0.3", @@ -38843,9 +38339,9 @@ }, "dependencies": { "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", "dev": true }, "chalk": { @@ -38871,7 +38367,7 @@ "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "requires": { "mimic-response": "^1.0.0" @@ -38899,7 +38395,7 @@ "file-type": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", "dev": true }, "filenamify": { @@ -38916,7 +38412,7 @@ "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, "got": { @@ -38965,7 +38461,7 @@ "p-event": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==", + "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", "dev": true, "requires": { "p-timeout": "^1.1.1" @@ -38974,7 +38470,7 @@ "p-timeout": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", "dev": true, "requires": { "p-finally": "^1.0.0" @@ -38983,13 +38479,13 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, "semver": { @@ -39010,7 +38506,7 @@ "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { "prepend-http": "^1.0.1" @@ -39133,12 +38629,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "natural-orderby": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", @@ -39353,7 +38843,7 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } @@ -39601,18 +39091,18 @@ } }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", + "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.0", "define-properties": "^1.1.3" } }, @@ -39637,14 +39127,14 @@ } }, "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", "object-keys": "^1.1.1" }, "dependencies": { @@ -39669,14 +39159,15 @@ } }, "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", + "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" } }, "object.pick": { @@ -39689,14 +39180,15 @@ } }, "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "has": "^1.0.3" } }, "once": { @@ -40570,9 +40062,9 @@ "dev": true }, "prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "process": { @@ -40624,7 +40116,7 @@ "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, "prr": { @@ -40783,9 +40275,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-redux": { - "version": "7.2.9", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", - "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz", + "integrity": "sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==", "requires": { "@babel/runtime": "^7.15.4", "@types/react-redux": "^7.1.20", @@ -40904,9 +40396,9 @@ } }, "redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", "requires": { "@babel/runtime": "^7.9.2" } @@ -40914,7 +40406,7 @@ "reflect.ownkeys": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg==", + "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", "dev": true }, "regenerator-runtime": { @@ -40933,14 +40425,40 @@ } }, "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } } }, "regexpp": { @@ -41243,17 +40761,6 @@ "ret": "~0.1.10" } }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -41503,9 +41010,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "requires": { "lru-cache": "^6.0.0" } @@ -41597,14 +41104,13 @@ "optional": true }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", + "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "es-abstract": "^1.18.0-next.0", + "object-inspect": "^1.8.0" } }, "sift": { @@ -42258,25 +41764,23 @@ } }, "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, "strip-ansi": { @@ -42836,9 +42340,9 @@ } }, "ts-loader": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", - "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.1.tgz", + "integrity": "sha512-384TYAqGs70rn9F0VBnh6BPTfhga7yFNdC5gXbQpDrBj9/KsT4iRkGqKXhziofHOlE2j6YEaiTYVGKKvPhGWvw==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -42954,17 +42458,6 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, "typed-rest-client": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", @@ -42991,9 +42484,9 @@ } }, "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", "dev": true }, "uc.micro": { @@ -43002,18 +42495,6 @@ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, "unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -43270,64 +42751,46 @@ } }, "vscode-jsonrpc": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", - "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==" + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz", + "integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==" }, "vscode-languageclient": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz", - "integrity": "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.0.2.tgz", + "integrity": "sha512-lHlthJtphG9gibGb/y72CKqQUxwPsMXijJVpHEC2bvbFqxmkj9LwQ3aGU9dwjBLqsX1S4KjShYppLvg1UJDF/Q==", "requires": { - "minimatch": "^5.1.0", - "semver": "^7.3.7", - "vscode-languageserver-protocol": "3.17.3" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "requires": { - "brace-expansion": "^2.0.1" - } - } + "minimatch": "^3.0.4", + "semver": "^7.3.5", + "vscode-languageserver-protocol": "3.17.2" } }, "vscode-languageserver": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", - "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz", + "integrity": "sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==", "requires": { - "vscode-languageserver-protocol": "3.17.3" + "vscode-languageserver-protocol": "3.17.2" } }, "vscode-languageserver-protocol": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", - "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz", + "integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==", "requires": { - "vscode-jsonrpc": "8.1.0", - "vscode-languageserver-types": "3.17.3" + "vscode-jsonrpc": "8.0.2", + "vscode-languageserver-types": "3.17.2" } }, "vscode-languageserver-textdocument": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.9.tgz", - "integrity": "sha512-NPfHVGFW2/fQEWHspr8x3PXhRgtFbuDZdl7p6ifuN3M7nk2Yjf5POr/NfDBuAiQG88DehDyJ7nGOT+p+edEtbw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz", + "integrity": "sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==" }, "vscode-languageserver-types": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", - "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", + "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" }, "w3c-hr-time": { "version": "1.0.2", @@ -43390,9 +42853,9 @@ "dev": true }, "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -43548,38 +43011,11 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", diff --git a/package.json b/package.json index 569779de8..0d857094c 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "engines": { "vscode": "^1.75.1", "node": "^16.16.0", - "npm": "^8.8.0" + "npm": "^8.15.1" }, "activationEvents": [ "onView:mongoDB", @@ -972,27 +972,27 @@ } }, "dependencies": { - "@babel/parser": "^7.21.1", - "@babel/traverse": "^7.21.0", - "@fortawesome/fontawesome-svg-core": "^6.3.0", - "@fortawesome/free-solid-svg-icons": "^6.3.0", + "@babel/parser": "^7.19.1", + "@babel/traverse": "^7.19.1", + "@fortawesome/fontawesome-svg-core": "^6.2.0", + "@fortawesome/free-solid-svg-icons": "^6.2.0", "@fortawesome/react-fontawesome": "^0.2.0", - "@iconify-icons/codicon": "^1.2.21", + "@iconify-icons/codicon": "^1.2.16", "@iconify/react": "^1.1.4", - "@leafygreen-ui/logo": "^6.3.0", - "@leafygreen-ui/palette": "^3.4.7", + "@leafygreen-ui/logo": "^6.1.3", + "@leafygreen-ui/palette": "^3.4.2", "@leafygreen-ui/toggle": "^7.0.5", - "@mongodb-js/mongodb-constants": "^0.2.2", + "@mongodb-js/mongodb-constants": "^0.2.1", "@mongosh/browser-runtime-electron": "^1.6.2", "@mongosh/i18n": "^1.6.2", "@mongosh/service-provider-server": "^1.6.2", "@mongosh/shell-api": "^1.6.2", "analytics-node": "^5.1.2", - "bson": "^4.7.2", - "bson-transpilers": "^2.0.2", + "bson": "^4.7.0", + "bson-transpilers": "^2.0.0", "classnames": "^2.3.2", "debug": "^4.3.4", - "dotenv": "^16.0.3", + "dotenv": "^16.0.2", "micromatch": "^4.0.5", "mongodb": "^4.13.0", "mongodb-build-info": "^1.5.0", @@ -1000,25 +1000,25 @@ "mongodb-connection-string-url": "^2.5.3", "mongodb-data-service": "^22.1.1", "mongodb-ns": "^2.4.0", - "mongodb-query-parser": "^2.4.10", + "mongodb-query-parser": "^2.4.6", "mongodb-schema": "^9.0.0", "numeral": "^2.0.6", "react": "^16.14.0", "react-dom": "^16.14.0", - "react-redux": "^7.2.9", - "redux": "^4.2.1", + "react-redux": "^7.2.8", + "redux": "^4.2.0", "ts-log": "^2.2.5", "uuid": "^8.3.2", - "vscode-languageclient": "^8.1.0", - "vscode-languageserver": "^8.1.0", - "vscode-languageserver-textdocument": "^1.0.9" + "vscode-languageclient": "^8.0.2", + "vscode-languageserver": "^8.0.2", + "vscode-languageserver-textdocument": "^1.0.7" }, "devDependencies": { "@mongodb-js/prettier-config-compass": "^1.0.0", - "@types/analytics-node": "^3.1.10", - "@types/babel__core": "^7.20.0", - "@types/babel__traverse": "^7.18.3", - "@types/chai": "^4.3.4", + "@types/analytics-node": "^3.1.9", + "@types/babel__core": "^7.1.19", + "@types/babel__traverse": "^7.18.1", + "@types/chai": "^4.3.3", "@types/chai-fs": "^2.0.2", "@types/chai-json-schema": "^1.4.6", "@types/debug": "^4.1.7", @@ -1027,19 +1027,19 @@ "@types/jest": "^26.0.24", "@types/micromatch": "^4.0.2", "@types/mocha": "^8.2.3", - "@types/node": "^14.18.36", + "@types/node": "^14.18.29", "@types/react": "^17.0.50", "@types/react-dom": "^17.0.17", "@types/sinon": "^9.0.11", "@types/uuid": "^8.3.4", - "@types/vscode": "^1.75.1", - "@typescript-eslint/eslint-plugin": "^5.53.0", - "@typescript-eslint/parser": "^5.53.0", - "@vscode/test-electron": "^2.2.3", - "@vscode/vsce": "^2.17.0", + "@types/vscode": "^1.74.0", + "@typescript-eslint/eslint-plugin": "^5.38.0", + "@typescript-eslint/parser": "^5.38.0", + "@vscode/test-electron": "^2.1.5", + "@vscode/vsce": "^2.16.0", "autoprefixer": "^9.8.8", "buffer": "^6.0.3", - "chai": "^4.3.7", + "chai": "^4.3.6", "chai-as-promised": "^7.1.1", "chai-fs": "^2.0.0", "chai-json-schema": "^1.5.1", @@ -1051,8 +1051,8 @@ "depcheck": "^1.4.3", "download": "^8.0.0", "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.7", - "eslint": "^8.34.0", + "enzyme-adapter-react-16": "^1.15.6", + "eslint": "^8.23.1", "eslint-config-mongodb-js": "^5.0.3", "eslint-plugin-mocha": "^10.1.0", "execa": "^1.0.0", @@ -1064,27 +1064,27 @@ "less-loader": "^5.0.0", "mkdirp": "^1.0.4", "mocha": "^8.4.0", - "mocha-junit-reporter": "^2.2.0", - "mocha-multi": "^1.1.7", - "mongodb-client-encryption": "^2.5.0", - "mongodb-runner": "^4.10.0", + "mocha-junit-reporter": "^2.0.2", + "mocha-multi": "^1.1.6", + "mongodb-client-encryption": "^2.2.1", + "mongodb-runner": "^4.9.0", "node-loader": "^0.6.0", "npm-run-all": "^4.1.5", "ora": "^5.4.1", "postcss-loader": "^3.0.0", "pre-commit": "^1.2.2", - "prettier": "^2.8.4", + "prettier": "^2.7.1", "process": "^0.11.10", - "semver": "^7.3.8", + "semver": "^7.3.7", "sinon": "^9.2.4", "sinon-chai": "^3.7.0", "stream-browserify": "^3.0.0", "style-loader": "^1.3.0", "ts-jest": "^26.5.6", - "ts-loader": "^9.4.2", + "ts-loader": "^9.4.1", "ts-node": "^10.9.1", - "typescript": "^4.9.5", - "webpack": "^5.75.0", + "typescript": "^4.8.3", + "webpack": "^5.74.0", "webpack-cli": "^4.10.0", "xvfb-maybe": "^0.2.1", "yargs-parser": "^20.2.9" From ad04e91d21267a4e6980828f34f264607d48622e Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 21 Feb 2023 15:42:08 +0100 Subject: [PATCH 22/31] refactor: reformat --- src/language/worker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/language/worker.ts b/src/language/worker.ts index 03049b6a1..5feda3d26 100644 --- a/src/language/worker.ts +++ b/src/language/worker.ts @@ -14,7 +14,7 @@ import { ServerCommands } from './serverCommands'; // MongoClientOptions is the second argument of CliServiceProvider.connect(connectionStr, options) type MongoClientOptions = NonNullable< - Parameters<(typeof CliServiceProvider)['connect']>[1] + Parameters[1] >; interface EvaluationResult { From dd641672a0f8c18d6edf2a858ef36480ad3ac1f3 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 21 Feb 2023 15:53:14 +0100 Subject: [PATCH 23/31] test: use activeTextEditor from the playground controller --- src/test/suite/mdbExtensionController.test.ts | 66 ++++++++++--------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/src/test/suite/mdbExtensionController.test.ts b/src/test/suite/mdbExtensionController.test.ts index 803f3f8cf..24d8137c2 100644 --- a/src/test/suite/mdbExtensionController.test.ts +++ b/src/test/suite/mdbExtensionController.test.ts @@ -567,12 +567,13 @@ suite('MDBExtensionController Test Suite', function () { await vscode.commands.executeCommand('mdb.addDatabase', mockTreeItem); - assert( - vscode.window.activeTextEditor?.document.languageId === 'javascript' - ); - assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert(activeTextEditor?.document.languageId === 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); - const content = vscode.window.activeTextEditor.document.getText(); + const content = activeTextEditor.document.getText(); assert(content.includes('// Create a new database.')); assert(content.includes('NEW_DATABASE_NAME')); assert(content.includes('NEW_COLLECTION_NAME')); @@ -691,12 +692,13 @@ suite('MDBExtensionController Test Suite', function () { await vscode.commands.executeCommand('mdb.addCollection', mockTreeItem); - assert( - vscode.window.activeTextEditor?.document.languageId === 'javascript' - ); - assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert(activeTextEditor?.document.languageId === 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); - const content = vscode.window.activeTextEditor.document.getText(); + const content = activeTextEditor.document.getText(); assert(content.includes('// The current database to use.')); assert(content.includes('iceCreamDB')); assert(content.includes('NEW_COLLECTION_NAME')); @@ -1348,12 +1350,13 @@ suite('MDBExtensionController Test Suite', function () { collectionName: 'colllllllllName', }); - assert( - vscode.window.activeTextEditor?.document.languageId === 'javascript' - ); - assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert(activeTextEditor?.document.languageId === 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); - const content = vscode.window.activeTextEditor.document.getText(); + const content = activeTextEditor.document.getText(); assert(content.includes('Search for documents in the current collection.')); assert(content.includes('dbbbbbName')); assert(content.includes('colllllllllName')); @@ -1367,12 +1370,13 @@ suite('MDBExtensionController Test Suite', function () { collectionName: 'colllllllllName', }); - assert( - vscode.window.activeTextEditor?.document.languageId === 'javascript' - ); - assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert(activeTextEditor?.document.languageId === 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); - const content = vscode.window.activeTextEditor.document.getText(); + const content = activeTextEditor.document.getText(); assert(content.includes('Create a new index in the collection.')); assert(content.includes('dbbbbbName')); assert(content.includes('colllllllllName')); @@ -1388,12 +1392,13 @@ suite('MDBExtensionController Test Suite', function () { await vscode.commands.executeCommand('mdb.createPlayground'); - assert( - vscode.window.activeTextEditor?.document.languageId === 'javascript' - ); - assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert(activeTextEditor?.document.languageId === 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); - const content = vscode.window.activeTextEditor.document.getText(); + const content = activeTextEditor.document.getText(); assert(content.includes('// MongoDB Playground')); await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); @@ -1407,12 +1412,13 @@ suite('MDBExtensionController Test Suite', function () { await vscode.commands.executeCommand('mdb.createPlayground'); - assert( - vscode.window.activeTextEditor?.document.languageId === 'javascript' - ); - assert(vscode.window.activeTextEditor?.document.uri.scheme === 'untitled'); + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert(activeTextEditor?.document.languageId === 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); - const content = vscode.window.activeTextEditor.document.getText(); + const content = activeTextEditor.document.getText(); assert.strictEqual(content, ''); await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); From 414c3a706ef7fabdeca601b9d77e5e2ed1e2a924 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Fri, 24 Feb 2023 16:18:44 +0100 Subject: [PATCH 24/31] refactor: os homedir --- src/editors/playgroundController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index b268521c3..6a1c38aca 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -278,7 +278,7 @@ export default class PlaygroundController { // therefore we explicitly specify the workspace folder path // or OS temp directory if a user has not opened workspaces. const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; - const filePath = workspaceFolder?.uri.fsPath || os.tmpdir(); + const filePath = workspaceFolder?.uri.fsPath || os.homedir(); const numberUntitledPlaygrounds = vscode.workspace.textDocuments.filter( (doc) => isPlayground(doc.uri) From 8d77ef332f38ebbe1aa934e9b10c337083850364 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 27 Feb 2023 17:51:18 +0100 Subject: [PATCH 25/31] refactor: clean up --- package.json | 24 +++++++------ scripts/update-grammar.ts | 2 -- scripts/update-snippets.ts | 2 -- src/editors/playgroundController.ts | 20 ++++------- .../activeConnectionCodeLensProvider.test.ts | 4 +-- .../editors/playgroundController.test.ts | 2 +- ...aygroundSelectedCodeActionProvider.test.ts | 4 +-- .../telemetry/connectionTelemetry.test.ts | 36 ++++++++++++------- 8 files changed, 48 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index 0d857094c..de7d37028 100644 --- a/package.json +++ b/package.json @@ -626,7 +626,7 @@ { "command": "mdb.runPlayground", "group": "navigation", - "when": "mdb.showRunPlaygroundButton == true" + "when": "mdb.isPlayground == true" } ], "commandPalette": [ @@ -636,27 +636,31 @@ }, { "command": "mdb.runSelectedPlaygroundBlocks", - "when": "mdb.showRunPlaygroundButton == true" + "when": "mdb.isPlayground == true" }, { "command": "mdb.runAllPlaygroundBlocks", - "when": "mdb.showRunPlaygroundButton == true" + "when": "mdb.isPlayground == true" + }, + { + "command": "mdb.exportToRuby", + "when": "mdb.isPlayground == true" }, { "command": "mdb.exportToPython", - "when": "mdb.showRunPlaygroundButton == true" + "when": "mdb.isPlayground == true" }, { "command": "mdb.exportToJava", - "when": "mdb.showRunPlaygroundButton == true" + "when": "mdb.isPlayground == true" }, { "command": "mdb.exportToCsharp", - "when": "mdb.showRunPlaygroundButton == true" + "when": "mdb.isPlayground == true" }, { "command": "mdb.exportToNode", - "when": "mdb.showRunPlaygroundButton == true" + "when": "mdb.isPlayground == true" }, { "command": "mdb.refreshPlaygroundsFromTreeView", @@ -813,19 +817,19 @@ "command": "mdb.runSelectedPlaygroundBlocks", "key": "ctrl+alt+s", "mac": "cmd+alt+s", - "when": "mdb.showRunPlaygroundButton == true" + "when": "mdb.isPlayground == true" }, { "command": "mdb.runAllPlaygroundBlocks", "key": "ctrl+alt+r", "mac": "cmd+alt+r", - "when": "mdb.showRunPlaygroundButton == true" + "when": "mdb.isPlayground == true" }, { "command": "mdb.saveMongoDBDocument", "key": "ctrl+s", "mac": "cmd+s", - "when": "editorLangId == json" + "when": "mdb.isPlayground == true" } ], "capabilities": { diff --git a/scripts/update-grammar.ts b/scripts/update-grammar.ts index dd7526cdc..ad89ab40e 100644 --- a/scripts/update-grammar.ts +++ b/scripts/update-grammar.ts @@ -1,5 +1,3 @@ -#! /usr/bin/env ts-node - import path from 'path'; import mkdirp from 'mkdirp'; import ora from 'ora'; diff --git a/scripts/update-snippets.ts b/scripts/update-snippets.ts index 30afeb679..943ed3462 100755 --- a/scripts/update-snippets.ts +++ b/scripts/update-snippets.ts @@ -1,5 +1,3 @@ -#! /usr/bin/env ts-node - import path from 'path'; import mkdirp from 'mkdirp'; import ora from 'ora'; diff --git a/src/editors/playgroundController.ts b/src/editors/playgroundController.ts index 6a1c38aca..5daa5939c 100644 --- a/src/editors/playgroundController.ts +++ b/src/editors/playgroundController.ts @@ -156,19 +156,11 @@ export default class PlaygroundController { this._playgroundResultTextDocument = editor?.document; } - if (isPlayground(editor?.document.uri)) { - void vscode.commands.executeCommand( - 'setContext', - 'mdb.showRunPlaygroundButton', - true - ); - } else { - void vscode.commands.executeCommand( - 'setContext', - 'mdb.showRunPlaygroundButton', - false - ); - } + void vscode.commands.executeCommand( + 'setContext', + 'mdb.isPlayground', + isPlayground(editor?.document.uri) + ); if (editor?.document.languageId !== 'Log') { this._activeTextEditor = editor; @@ -276,7 +268,7 @@ export default class PlaygroundController { try { // The MacOS default folder for saving files is a read-only root (/) directory, // therefore we explicitly specify the workspace folder path - // or OS temp directory if a user has not opened workspaces. + // or OS home directory if a user has not opened workspaces. const workspaceFolder = vscode.workspace.workspaceFolders?.[0]; const filePath = workspaceFolder?.uri.fsPath || os.homedir(); diff --git a/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts b/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts index ff2751f1b..3fca3bfad 100644 --- a/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts +++ b/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts @@ -28,7 +28,7 @@ suite('Active Connection CodeLens Provider Test Suite', () => { suite('the MongoDB playground in JS', () => { beforeEach(async () => { const fileName = path.join( - os.tmpdir(), + os.homedir(), `playground-${uuidv4()}.mongodb.js` ); const documentUri = vscode.Uri.from({ @@ -138,7 +138,7 @@ suite('Active Connection CodeLens Provider Test Suite', () => { suite('the regular JS file', () => { beforeEach(async () => { - const fileName = path.join(os.tmpdir(), `regular-file-${uuidv4()}.js`); + const fileName = path.join(os.homedir(), `regular-file-${uuidv4()}.js`); const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled', diff --git a/src/test/suite/editors/playgroundController.test.ts b/src/test/suite/editors/playgroundController.test.ts index 1c5807e1b..66e37c64e 100644 --- a/src/test/suite/editors/playgroundController.test.ts +++ b/src/test/suite/editors/playgroundController.test.ts @@ -205,7 +205,7 @@ suite('Playground Controller Test Suite', function () { suite('playground is open', () => { const fileName = path.join( - os.tmpdir(), + os.homedir(), `playground-${uuidv4()}.mongodb.js` ); const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled' }); diff --git a/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts b/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts index 7777b172f..04646bed6 100644 --- a/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts +++ b/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts @@ -33,7 +33,7 @@ suite('Playground Selected CodeAction Provider Test Suite', function () { beforeEach(async () => { const fileName = path.join( - os.tmpdir(), + os.homedir(), `playground-${uuidv4()}.mongodb.js` ); const documentUri = vscode.Uri.from({ @@ -492,7 +492,7 @@ suite('Playground Selected CodeAction Provider Test Suite', function () { const testCodeActionProvider = new PlaygroundSelectedCodeActionProvider(); beforeEach(async () => { - const fileName = path.join(os.tmpdir(), `regular-file-${uuidv4()}.js`); + const fileName = path.join(os.homedir(), `regular-file-${uuidv4()}.js`); const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled', diff --git a/src/test/suite/telemetry/connectionTelemetry.test.ts b/src/test/suite/telemetry/connectionTelemetry.test.ts index af3bd5a63..b7a662892 100644 --- a/src/test/suite/telemetry/connectionTelemetry.test.ts +++ b/src/test/suite/telemetry/connectionTelemetry.test.ts @@ -1,5 +1,5 @@ -import { beforeEach, afterEach } from 'mocha'; -import { connect } from 'mongodb-data-service'; +import { before, after, beforeEach, afterEach } from 'mocha'; +import { connect, DataServiceImpl } from 'mongodb-data-service'; import { expect } from 'chai'; import sinon from 'sinon'; @@ -12,20 +12,30 @@ suite('ConnectionTelemetry Controller Test Suite', function () { this.timeout(8000); suite('with mock data service', () => { - const mockDataService: any = { - getConnectionString: () => ({ + let mockDataService: DataServiceImpl; + + before(() => { + mockDataService = new DataServiceImpl({ + connectionString: TEST_DATABASE_URI, + }); + + sinon.stub(mockDataService, 'getConnectionString').returns({ hosts: ['localhost:27018'], searchParams: { get: () => null }, username: 'authMechanism', - }), - instance: () => - Promise.resolve({ - dataLake: {}, - build: {}, - genuineMongoDB: {}, - host: {}, - }), - }; + } as unknown as ReturnType); + + sinon.stub(mockDataService, 'instance').resolves({ + dataLake: {}, + build: {}, + genuineMongoDB: {}, + host: {}, + } as unknown as Awaited>); + }); + + after(() => { + sinon.restore(); + }); test('it returns is_used_connect_screen true when the connection type is form', async () => { const instanceTelemetry = await getConnectionTelemetryProperties( From 9f4f808f4338dddb9388798a81a2478306acc9e2 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 27 Feb 2023 20:02:21 +0100 Subject: [PATCH 26/31] refactor: address pr comments --- src/explorer/playgroundsTree.ts | 14 ++- src/telemetry/telemetryService.ts | 6 +- src/test/runTest.ts | 3 +- .../activeConnectionCodeLensProvider.test.ts | 7 +- .../editors/playgroundController.test.ts | 6 +- ...aygroundSelectedCodeActionProvider.test.ts | 13 +-- .../language/languageServerController.test.ts | 1 + src/test/suite/mdbExtensionController.test.ts | 12 +-- .../telemetry/connectionTelemetry.test.ts | 98 +++++++++++-------- src/utils/playground.ts | 21 +--- tsconfig.json | 4 +- 11 files changed, 94 insertions(+), 91 deletions(-) diff --git a/src/explorer/playgroundsTree.ts b/src/explorer/playgroundsTree.ts index e6cc8af2f..3386e1dcf 100644 --- a/src/explorer/playgroundsTree.ts +++ b/src/explorer/playgroundsTree.ts @@ -111,14 +111,12 @@ export default class PlaygroundsTree excludeFromPlaygroundsSearch, }); - this._playgroundsTreeItems = {}; - - playgrounds.forEach((element) => { - this._playgroundsTreeItems[element.path] = new PlaygroundsTreeItem( - element.name, - element.path - ); - }); + this._playgroundsTreeItems = Object.fromEntries( + playgrounds.map((playground) => [ + playground.path, + new PlaygroundsTreeItem(playground.name, playground.path), + ]) + ); return this._playgroundsTreeItems; } diff --git a/src/telemetry/telemetryService.ts b/src/telemetry/telemetryService.ts index 479ee2be9..0d2640fb6 100644 --- a/src/telemetry/telemetryService.ts +++ b/src/telemetry/telemetryService.ts @@ -8,10 +8,8 @@ import SegmentAnalytics from 'analytics-node'; import { ConnectionTypes } from '../connectionController'; import { createLogger } from '../logging'; import { DocumentSource } from '../documentSource'; -import { - getConnectionTelemetryProperties, - NewConnectionTelemetryEventProperties, -} from './connectionTelemetry'; +import { getConnectionTelemetryProperties } from './connectionTelemetry'; +import type { NewConnectionTelemetryEventProperties } from './connectionTelemetry'; import type { ShellExecuteAllResult } from '../types/playgroundType'; import { StorageController } from '../storage'; diff --git a/src/test/runTest.ts b/src/test/runTest.ts index 7e67dc4a9..1b426f0b6 100644 --- a/src/test/runTest.ts +++ b/src/test/runTest.ts @@ -10,8 +10,7 @@ async function main(): Promise { // Passed to `--extensionDevelopmentPath` const extensionDevelopmentPath = path.join(__dirname, '../../'); - // The path to test runner - // Passed to --extensionTestsPath + // The path to test runner pased to --extensionTestsPath const extensionTestsPath = path.join(__dirname, './suite/index'); // This is the workspace we open in our tests. diff --git a/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts b/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts index 3fca3bfad..ecd14c41c 100644 --- a/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts +++ b/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts @@ -1,9 +1,8 @@ import * as vscode from 'vscode'; import { beforeEach, afterEach } from 'mocha'; -import { DataService } from 'mongodb-data-service'; +import type { DataService } from 'mongodb-data-service'; import chai from 'chai'; import sinon from 'sinon'; -import * as os from 'os'; import { v4 as uuidv4 } from 'uuid'; import path from 'path'; @@ -28,7 +27,7 @@ suite('Active Connection CodeLens Provider Test Suite', () => { suite('the MongoDB playground in JS', () => { beforeEach(async () => { const fileName = path.join( - os.homedir(), + 'nonexistent', `playground-${uuidv4()}.mongodb.js` ); const documentUri = vscode.Uri.from({ @@ -138,7 +137,7 @@ suite('Active Connection CodeLens Provider Test Suite', () => { suite('the regular JS file', () => { beforeEach(async () => { - const fileName = path.join(os.homedir(), `regular-file-${uuidv4()}.js`); + const fileName = path.join('nonexistent', `regular-file-${uuidv4()}.js`); const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled', diff --git a/src/test/suite/editors/playgroundController.test.ts b/src/test/suite/editors/playgroundController.test.ts index 66e37c64e..26621454c 100644 --- a/src/test/suite/editors/playgroundController.test.ts +++ b/src/test/suite/editors/playgroundController.test.ts @@ -1,9 +1,8 @@ import * as vscode from 'vscode'; import { before, beforeEach, afterEach } from 'mocha'; import chai from 'chai'; -import { DataService } from 'mongodb-data-service'; +import type { DataService } from 'mongodb-data-service'; import sinon from 'sinon'; -import * as os from 'os'; import { v4 as uuidv4 } from 'uuid'; import path from 'path'; @@ -32,6 +31,7 @@ suite('Playground Controller Test Suite', function () { const mockExtensionContext = new TestExtensionContext(); + // The test extension runner. mockExtensionContext.extensionPath = '../../'; const mockStorageController = new StorageController(mockExtensionContext); @@ -205,7 +205,7 @@ suite('Playground Controller Test Suite', function () { suite('playground is open', () => { const fileName = path.join( - os.homedir(), + 'nonexistent', `playground-${uuidv4()}.mongodb.js` ); const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled' }); diff --git a/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts b/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts index 04646bed6..f7793092f 100644 --- a/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts +++ b/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts @@ -2,7 +2,6 @@ import * as vscode from 'vscode'; import { beforeEach, afterEach } from 'mocha'; import chai from 'chai'; import sinon from 'sinon'; -import * as os from 'os'; import { v4 as uuidv4 } from 'uuid'; import path from 'path'; @@ -25,15 +24,17 @@ const expect = chai.expect; suite('Playground Selected CodeAction Provider Test Suite', function () { this.timeout(5000); - const testExtensionContext = new TestExtensionContext(); - testExtensionContext.extensionPath = '../../'; + const mockExtensionContext = new TestExtensionContext(); + + // The test extension runner. + mockExtensionContext.extensionPath = '../../'; suite('the MongoDB playground in JS', () => { const testCodeActionProvider = new PlaygroundSelectedCodeActionProvider(); beforeEach(async () => { const fileName = path.join( - os.homedir(), + 'nonexistent', `playground-${uuidv4()}.mongodb.js` ); const documentUri = vscode.Uri.from({ @@ -52,7 +53,7 @@ suite('Playground Selected CodeAction Provider Test Suite', function () { sinon.replace( mdbTestExtension.testExtensionController, '_languageServerController', - new LanguageServerController(testExtensionContext) + new LanguageServerController(mockExtensionContext) ); sinon.replace( vscode.window, @@ -492,7 +493,7 @@ suite('Playground Selected CodeAction Provider Test Suite', function () { const testCodeActionProvider = new PlaygroundSelectedCodeActionProvider(); beforeEach(async () => { - const fileName = path.join(os.homedir(), `regular-file-${uuidv4()}.js`); + const fileName = path.join('nonexistent', `regular-file-${uuidv4()}.js`); const documentUri = vscode.Uri.from({ path: fileName, scheme: 'untitled', diff --git a/src/test/suite/language/languageServerController.test.ts b/src/test/suite/language/languageServerController.test.ts index 48a9d9a1e..36a5a2a70 100644 --- a/src/test/suite/language/languageServerController.test.ts +++ b/src/test/suite/language/languageServerController.test.ts @@ -27,6 +27,7 @@ chai.use(require('chai-as-promised')); suite('Language Server Controller Test Suite', () => { const mockExtensionContext = new TestExtensionContext(); + // The test extension runner. mockExtensionContext.extensionPath = '../../'; const mockStorageController = new StorageController(mockExtensionContext); diff --git a/src/test/suite/mdbExtensionController.test.ts b/src/test/suite/mdbExtensionController.test.ts index 24d8137c2..18eb96ac8 100644 --- a/src/test/suite/mdbExtensionController.test.ts +++ b/src/test/suite/mdbExtensionController.test.ts @@ -570,7 +570,7 @@ suite('MDBExtensionController Test Suite', function () { const activeTextEditor = mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; - assert(activeTextEditor?.document.languageId === 'javascript'); + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); assert(activeTextEditor?.document.uri.scheme === 'untitled'); const content = activeTextEditor.document.getText(); @@ -695,7 +695,7 @@ suite('MDBExtensionController Test Suite', function () { const activeTextEditor = mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; - assert(activeTextEditor?.document.languageId === 'javascript'); + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); assert(activeTextEditor?.document.uri.scheme === 'untitled'); const content = activeTextEditor.document.getText(); @@ -1353,7 +1353,7 @@ suite('MDBExtensionController Test Suite', function () { const activeTextEditor = mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; - assert(activeTextEditor?.document.languageId === 'javascript'); + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); assert(activeTextEditor?.document.uri.scheme === 'untitled'); const content = activeTextEditor.document.getText(); @@ -1373,7 +1373,7 @@ suite('MDBExtensionController Test Suite', function () { const activeTextEditor = mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; - assert(activeTextEditor?.document.languageId === 'javascript'); + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); assert(activeTextEditor?.document.uri.scheme === 'untitled'); const content = activeTextEditor.document.getText(); @@ -1395,7 +1395,7 @@ suite('MDBExtensionController Test Suite', function () { const activeTextEditor = mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; - assert(activeTextEditor?.document.languageId === 'javascript'); + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); assert(activeTextEditor?.document.uri.scheme === 'untitled'); const content = activeTextEditor.document.getText(); @@ -1415,7 +1415,7 @@ suite('MDBExtensionController Test Suite', function () { const activeTextEditor = mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; - assert(activeTextEditor?.document.languageId === 'javascript'); + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); assert(activeTextEditor?.document.uri.scheme === 'untitled'); const content = activeTextEditor.document.getText(); diff --git a/src/test/suite/telemetry/connectionTelemetry.test.ts b/src/test/suite/telemetry/connectionTelemetry.test.ts index b7a662892..c429e595f 100644 --- a/src/test/suite/telemetry/connectionTelemetry.test.ts +++ b/src/test/suite/telemetry/connectionTelemetry.test.ts @@ -1,36 +1,47 @@ import { before, after, beforeEach, afterEach } from 'mocha'; -import { connect, DataServiceImpl } from 'mongodb-data-service'; +import { connect } from 'mongodb-data-service'; import { expect } from 'chai'; import sinon from 'sinon'; +import type { DataService } from 'mongodb-data-service'; + +import getCloudInfoModule from 'mongodb-cloud-info'; import { ConnectionTypes } from '../../../connectionController'; -import { getConnectionTelemetryProperties } from '../../../telemetry/connectionTelemetry'; +import * as connectionTelemetry from '../../../telemetry/connectionTelemetry'; const TEST_DATABASE_URI = 'mongodb://localhost:27018'; suite('ConnectionTelemetry Controller Test Suite', function () { - this.timeout(8000); + this.timeout(15000); suite('with mock data service', () => { - let mockDataService: DataServiceImpl; + let mockDataService: DataService; before(() => { - mockDataService = new DataServiceImpl({ - connectionString: TEST_DATABASE_URI, - }); - - sinon.stub(mockDataService, 'getConnectionString').returns({ + const getConnectionStringStub = sinon.stub(); + getConnectionStringStub.returns({ hosts: ['localhost:27018'], searchParams: { get: () => null }, username: 'authMechanism', - } as unknown as ReturnType); + } as unknown as ReturnType); - sinon.stub(mockDataService, 'instance').resolves({ + const instanceStub = sinon.stub(); + instanceStub.resolves({ dataLake: {}, build: {}, genuineMongoDB: {}, host: {}, - } as unknown as Awaited>); + } as unknown as Awaited>); + + mockDataService = { + getConnectionString: getConnectionStringStub, + instance: instanceStub, + } as Pick< + DataService, + 'getConnectionString' | 'instance' + > as unknown as DataService; + + sinon.stub(getCloudInfoModule, 'getCloudInfo').resolves({}); }); after(() => { @@ -38,10 +49,11 @@ suite('ConnectionTelemetry Controller Test Suite', function () { }); test('it returns is_used_connect_screen true when the connection type is form', async () => { - const instanceTelemetry = await getConnectionTelemetryProperties( - mockDataService, - ConnectionTypes.CONNECTION_FORM - ); + const instanceTelemetry = + await connectionTelemetry.getConnectionTelemetryProperties( + mockDataService, + ConnectionTypes.CONNECTION_FORM + ); expect(instanceTelemetry.is_used_connect_screen).to.equal(true); expect(instanceTelemetry.is_used_command_palette).to.equal(false); @@ -49,10 +61,11 @@ suite('ConnectionTelemetry Controller Test Suite', function () { }); test('it returns is_used_command_palette true when the connection type is string', async () => { - const instanceTelemetry = await getConnectionTelemetryProperties( - mockDataService, - ConnectionTypes.CONNECTION_STRING - ); + const instanceTelemetry = + await connectionTelemetry.getConnectionTelemetryProperties( + mockDataService, + ConnectionTypes.CONNECTION_STRING + ); expect(instanceTelemetry.is_used_connect_screen).to.equal(false); expect(instanceTelemetry.is_used_command_palette).to.equal(true); @@ -60,10 +73,11 @@ suite('ConnectionTelemetry Controller Test Suite', function () { }); test('it returns is_used_saved_connection true when the connection type is id', async () => { - const instanceTelemetry = await getConnectionTelemetryProperties( - mockDataService, - ConnectionTypes.CONNECTION_ID - ); + const instanceTelemetry = + await connectionTelemetry.getConnectionTelemetryProperties( + mockDataService, + ConnectionTypes.CONNECTION_ID + ); expect(instanceTelemetry.is_used_connect_screen).to.equal(false); expect(instanceTelemetry.is_used_command_palette).to.equal(false); @@ -71,28 +85,31 @@ suite('ConnectionTelemetry Controller Test Suite', function () { }); test('it has is_localhost false for a remote connection', async () => { - const instanceTelemetry = await getConnectionTelemetryProperties( - mockDataService, - ConnectionTypes.CONNECTION_STRING - ); + const instanceTelemetry = + await connectionTelemetry.getConnectionTelemetryProperties( + mockDataService, + ConnectionTypes.CONNECTION_STRING + ); expect(instanceTelemetry.is_localhost).to.equal(false); }); test('it has a default is atlas false', async () => { - const instanceTelemetry = await getConnectionTelemetryProperties( - mockDataService, - ConnectionTypes.CONNECTION_STRING - ); + const instanceTelemetry = + await connectionTelemetry.getConnectionTelemetryProperties( + mockDataService, + ConnectionTypes.CONNECTION_STRING + ); expect(instanceTelemetry.is_atlas).to.equal(false); }); test('it has a default driver auth mechanism undefined', async () => { - const instanceTelemetry = await getConnectionTelemetryProperties( - mockDataService, - ConnectionTypes.CONNECTION_STRING - ); + const instanceTelemetry = + await connectionTelemetry.getConnectionTelemetryProperties( + mockDataService, + ConnectionTypes.CONNECTION_STRING + ); expect(instanceTelemetry.auth_strategy).to.equal('DEFAULT'); }); @@ -111,10 +128,11 @@ suite('ConnectionTelemetry Controller Test Suite', function () { }); test('track new connection event fetches the connection instance information', async () => { - const instanceTelemetry = await getConnectionTelemetryProperties( - dataServ, - ConnectionTypes.CONNECTION_STRING - ); + const instanceTelemetry = + await connectionTelemetry.getConnectionTelemetryProperties( + dataServ, + ConnectionTypes.CONNECTION_STRING + ); expect(instanceTelemetry.is_localhost).to.equal(true); expect(instanceTelemetry.is_atlas).to.equal(false); diff --git a/src/utils/playground.ts b/src/utils/playground.ts index 6183eda3e..72effe505 100644 --- a/src/utils/playground.ts +++ b/src/utils/playground.ts @@ -72,19 +72,13 @@ export const isPlayground = (fileUri?: vscode.Uri) => { return false; } - // Allow users to save playgrounds with `.mongodb` extension. - if (fileNameParts.length === 2) { - return fileNameParts[fileNameParts.length - 1] === 'mongodb'; - } - // The default playgrounds extension is `.mongodb.js`. const extension = fileNameParts[fileNameParts.length - 1]; const secondaryExtension = fileNameParts[fileNameParts.length - 2]; return ( - fileNameParts.length > 1 && - (extension === 'mongodb' || - (extension === 'js' && secondaryExtension === 'mongodb')) + extension === 'mongodb' || + (extension === 'js' && secondaryExtension === 'mongodb') ); }; @@ -98,10 +92,7 @@ export const getPlaygrounds = async ({ playgrounds?: { name: string; path: string }[]; }): Promise<{ name: string; path: string }[]> => { const fileNames = await getFileNames(fsPath); - - for (let i = 0; i < fileNames.length; i++) { - const fileName = fileNames[i]; - + for (const fileName of fileNames) { try { const stat = await getStat(path.join(fsPath, fileName)); const fileUri = vscode.Uri.file(path.join(fsPath, fileName)); @@ -109,10 +100,8 @@ export const getPlaygrounds = async ({ if (stat.type === vscode.FileType.File && isPlayground(fileUri)) { playgrounds.push({ name: fileName, path: fileUri.fsPath }); } else if ( - (stat.type === vscode.FileType.Directory && - !excludeFromPlaygroundsSearch) || - (stat.type === vscode.FileType.Directory && - excludeFromPlaygroundsSearch && + stat.type === vscode.FileType.Directory && + (!excludeFromPlaygroundsSearch || !micromatch.isMatch(fileName, excludeFromPlaygroundsSearch)) ) { await getPlaygrounds({ diff --git a/tsconfig.json b/tsconfig.json index 144c43d8b..869b9fd61 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,9 +2,9 @@ "compilerOptions": { "module": "commonjs", "noImplicitAny": false, - "target": "es2018", + "target": "es2019", "outDir": "out", - "lib": ["dom", "es2018"], + "lib": ["dom", "es2019"], "types": ["node"], "jsx": "react", "sourceMap": true, From c8d59c9880fb955fbbecbd29c5a750a109594a1b Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 27 Feb 2023 20:42:19 +0100 Subject: [PATCH 27/31] test: try bigger timeout --- src/test/suite/telemetry/connectionTelemetry.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/suite/telemetry/connectionTelemetry.test.ts b/src/test/suite/telemetry/connectionTelemetry.test.ts index c429e595f..10f1b40a1 100644 --- a/src/test/suite/telemetry/connectionTelemetry.test.ts +++ b/src/test/suite/telemetry/connectionTelemetry.test.ts @@ -12,9 +12,8 @@ import * as connectionTelemetry from '../../../telemetry/connectionTelemetry'; const TEST_DATABASE_URI = 'mongodb://localhost:27018'; suite('ConnectionTelemetry Controller Test Suite', function () { - this.timeout(15000); - suite('with mock data service', () => { + this.timeout(8000); let mockDataService: DataService; before(() => { @@ -116,6 +115,7 @@ suite('ConnectionTelemetry Controller Test Suite', function () { }); suite('with live connection', () => { + this.timeout(20000); let dataServ; beforeEach(async () => { From d04bab4dde552ada0b8763334b051dd90906d819 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Mon, 27 Feb 2023 22:12:24 +0100 Subject: [PATCH 28/31] test: less playground documents open --- .../activeConnectionCodeLensProvider.ts | 8 +-- .../playgroundSelectedCodeActionProvider.ts | 8 +-- .../activeConnectionCodeLensProvider.test.ts | 45 +++------------- ...aygroundSelectedCodeActionProvider.test.ts | 53 +++++-------------- src/utils/playground.ts | 11 ++-- 5 files changed, 37 insertions(+), 88 deletions(-) diff --git a/src/editors/activeConnectionCodeLensProvider.ts b/src/editors/activeConnectionCodeLensProvider.ts index 4fc53c54d..4710b108a 100644 --- a/src/editors/activeConnectionCodeLensProvider.ts +++ b/src/editors/activeConnectionCodeLensProvider.ts @@ -33,10 +33,12 @@ export default class ActiveConnectionCodeLensProvider this._onDidChangeCodeLenses.fire(); } - provideCodeLenses(): vscode.CodeLens[] { - const editorUri = this.activeTextEditor?.document.uri; + isPlayground(): boolean { + return isPlayground(this.activeTextEditor?.document.uri); + } - if (!isPlayground(editorUri)) { + provideCodeLenses(): vscode.CodeLens[] { + if (!this.isPlayground()) { return []; } diff --git a/src/editors/playgroundSelectedCodeActionProvider.ts b/src/editors/playgroundSelectedCodeActionProvider.ts index e651e6ee7..ec412b3b9 100644 --- a/src/editors/playgroundSelectedCodeActionProvider.ts +++ b/src/editors/playgroundSelectedCodeActionProvider.ts @@ -43,10 +43,12 @@ export default class PlaygroundSelectedCodeActionProvider this._onDidChangeCodeCodeAction.fire(); } - provideCodeActions(): vscode.CodeAction[] | undefined { - const editorUri = this.activeTextEditor?.document.uri; + isPlayground(): boolean { + return isPlayground(this.activeTextEditor?.document.uri); + } - if (!this.selection || !isPlayground(editorUri)) { + provideCodeActions(): vscode.CodeAction[] | undefined { + if (!this.selection || !this.isPlayground()) { return; } diff --git a/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts b/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts index 222092381..4ad2772d9 100644 --- a/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts +++ b/src/test/suite/editors/activeConnectionCodeLensProvider.test.ts @@ -2,8 +2,6 @@ import * as vscode from 'vscode'; import { beforeEach, afterEach } from 'mocha'; import chai from 'chai'; import sinon from 'sinon'; -import { v4 as uuidv4 } from 'uuid'; -import path from 'path'; import type { DataService } from 'mongodb-data-service'; import ActiveConnectionCodeLensProvider from '../../../editors/activeConnectionCodeLensProvider'; @@ -25,25 +23,6 @@ suite('Active Connection CodeLens Provider Test Suite', () => { const testStatusView = new StatusView(mockExtensionContext); suite('the MongoDB playground in JS', () => { - beforeEach(async () => { - const fileName = path.join( - 'nonexistent', - `playground-${uuidv4()}.mongodb.js` - ); - const documentUri = vscode.Uri.from({ - path: fileName, - scheme: 'untitled', - }); - const document = await vscode.workspace.openTextDocument(documentUri); - await vscode.window.showTextDocument(document); - }); - - afterEach(async () => { - await vscode.commands.executeCommand( - 'workbench.action.closeActiveEditor' - ); - }); - suite('user is not connected', () => { const testConnectionController = new ConnectionController( testStatusView, @@ -60,6 +39,8 @@ suite('Active Connection CodeLens Provider Test Suite', () => { vscode.window.activeTextEditor ); sinon.replace(vscode.window, 'showQuickPick', mockShowQuickPick); + const mockIsPlayground = sinon.fake.returns(true); + sinon.replace(testCodeLensProvider, 'isPlayground', mockIsPlayground); }); afterEach(() => { @@ -117,6 +98,8 @@ suite('Active Connection CodeLens Provider Test Suite', () => { 'getActiveConnectionName', sinon.fake.returns('fakeName') ); + const mockIsPlayground = sinon.fake.returns(true); + sinon.replace(testCodeLensProvider, 'isPlayground', mockIsPlayground); }); afterEach(() => { @@ -141,22 +124,6 @@ suite('Active Connection CodeLens Provider Test Suite', () => { }); suite('the regular JS file', () => { - beforeEach(async () => { - const fileName = path.join('nonexistent', `regular-file-${uuidv4()}.js`); - const documentUri = vscode.Uri.from({ - path: fileName, - scheme: 'untitled', - }); - const document = await vscode.workspace.openTextDocument(documentUri); - await vscode.window.showTextDocument(document); - }); - - afterEach(async () => { - await vscode.commands.executeCommand( - 'workbench.action.closeActiveEditor' - ); - }); - suite('user is not connected', () => { const testConnectionController = new ConnectionController( testStatusView, @@ -170,6 +137,8 @@ suite('Active Connection CodeLens Provider Test Suite', () => { beforeEach(() => { sinon.replace(vscode.window, 'showQuickPick', mockShowQuickPick); + const mockIsPlayground = sinon.fake.returns(false); + sinon.replace(testCodeLensProvider, 'isPlayground', mockIsPlayground); }); afterEach(() => { @@ -219,6 +188,8 @@ suite('Active Connection CodeLens Provider Test Suite', () => { 'getActiveConnectionName', sinon.fake.returns('fakeName') ); + const mockIsPlayground = sinon.fake.returns(false); + sinon.replace(testCodeLensProvider, 'isPlayground', mockIsPlayground); }); afterEach(() => { diff --git a/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts b/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts index f7793092f..54419a582 100644 --- a/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts +++ b/src/test/suite/editors/playgroundSelectedCodeActionProvider.test.ts @@ -2,10 +2,8 @@ import * as vscode from 'vscode'; import { beforeEach, afterEach } from 'mocha'; import chai from 'chai'; import sinon from 'sinon'; -import { v4 as uuidv4 } from 'uuid'; -import path from 'path'; -import ActiveDBCodeLensProvider from '../../../editors/activeConnectionCodeLensProvider'; +import ActiveConnectionCodeLensProvider from '../../../editors/activeConnectionCodeLensProvider'; import ExportToLanguageCodeLensProvider from '../../../editors/exportToLanguageCodeLensProvider'; import PlaygroundSelectedCodeActionProvider from '../../../editors/playgroundSelectedCodeActionProvider'; import { ExplorerController } from '../../../explorer'; @@ -33,23 +31,6 @@ suite('Playground Selected CodeAction Provider Test Suite', function () { const testCodeActionProvider = new PlaygroundSelectedCodeActionProvider(); beforeEach(async () => { - const fileName = path.join( - 'nonexistent', - `playground-${uuidv4()}.mongodb.js` - ); - const documentUri = vscode.Uri.from({ - path: fileName, - scheme: 'untitled', - }); - const edit = new vscode.WorkspaceEdit(); - edit.insert(documentUri, new vscode.Position(0, 0), '123'); - await vscode.workspace.applyEdit(edit); - const document = await vscode.workspace.openTextDocument(documentUri); - await vscode.window.showTextDocument(document); - testCodeActionProvider.setActiveTextEditor( - vscode.window.activeTextEditor - ); - sinon.replace( mdbTestExtension.testExtensionController, '_languageServerController', @@ -65,9 +46,10 @@ suite('Playground Selected CodeAction Provider Test Suite', function () { TEST_DATABASE_URI ); - const testActiveDBCodeLensProvider = new ActiveDBCodeLensProvider( - mdbTestExtension.testExtensionController._connectionController - ); + const activeConnectionCodeLensProvider = + new ActiveConnectionCodeLensProvider( + mdbTestExtension.testExtensionController._connectionController + ); const testExportToLanguageCodeLensProvider = new ExportToLanguageCodeLensProvider(); const testExplorerController = new ExplorerController( @@ -81,7 +63,7 @@ suite('Playground Selected CodeAction Provider Test Suite', function () { mdbTestExtension.testExtensionController._telemetryService, mdbTestExtension.testExtensionController._statusView, mdbTestExtension.testExtensionController._playgroundResultViewProvider, - testActiveDBCodeLensProvider, + activeConnectionCodeLensProvider, testExportToLanguageCodeLensProvider, testCodeActionProvider, testExplorerController @@ -100,6 +82,9 @@ suite('Playground Selected CodeAction Provider Test Suite', function () { await mdbTestExtension.testExtensionController._languageServerController.startLanguageServer(); await mdbTestExtension.testExtensionController._playgroundController._connectToServiceProvider(); + + const mockIsPlayground = sinon.fake.returns(true); + sinon.replace(testCodeActionProvider, 'isPlayground', mockIsPlayground); }); afterEach(async () => { @@ -492,23 +477,13 @@ suite('Playground Selected CodeAction Provider Test Suite', function () { suite('the regular JS file', () => { const testCodeActionProvider = new PlaygroundSelectedCodeActionProvider(); - beforeEach(async () => { - const fileName = path.join('nonexistent', `regular-file-${uuidv4()}.js`); - const documentUri = vscode.Uri.from({ - path: fileName, - scheme: 'untitled', - }); - const document = await vscode.workspace.openTextDocument(documentUri); - await vscode.window.showTextDocument(document); - testCodeActionProvider.setActiveTextEditor( - vscode.window.activeTextEditor - ); + beforeEach(() => { + const mockIsPlayground = sinon.fake.returns(false); + sinon.replace(testCodeActionProvider, 'isPlayground', mockIsPlayground); }); - afterEach(async () => { - await vscode.commands.executeCommand( - 'workbench.action.closeActiveEditor' - ); + afterEach(() => { + sinon.restore(); }); test('returns undefined when text is not selected', () => { diff --git a/src/utils/playground.ts b/src/utils/playground.ts index 72effe505..5f84f4439 100644 --- a/src/utils/playground.ts +++ b/src/utils/playground.ts @@ -85,12 +85,11 @@ export const isPlayground = (fileUri?: vscode.Uri) => { export const getPlaygrounds = async ({ fsPath, excludeFromPlaygroundsSearch, - playgrounds = [], }: { fsPath: string; excludeFromPlaygroundsSearch?: string[]; - playgrounds?: { name: string; path: string }[]; }): Promise<{ name: string; path: string }[]> => { + const result: { name: string; path: string }[] = []; const fileNames = await getFileNames(fsPath); for (const fileName of fileNames) { try { @@ -98,22 +97,22 @@ export const getPlaygrounds = async ({ const fileUri = vscode.Uri.file(path.join(fsPath, fileName)); if (stat.type === vscode.FileType.File && isPlayground(fileUri)) { - playgrounds.push({ name: fileName, path: fileUri.fsPath }); + result.push({ name: fileName, path: fileUri.fsPath }); } else if ( stat.type === vscode.FileType.Directory && (!excludeFromPlaygroundsSearch || !micromatch.isMatch(fileName, excludeFromPlaygroundsSearch)) ) { - await getPlaygrounds({ + const playgrounds = await getPlaygrounds({ fsPath: fileUri.fsPath, excludeFromPlaygroundsSearch, - playgrounds, }); + result.push(...playgrounds); } } catch (error) { log.error('Get playgrounds recursively from the workspace error', error); } } - return playgrounds; + return result; }; From 6c849d92c746eb0cbc5c137dfdf09706e158e7a0 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 28 Feb 2023 17:45:27 +0100 Subject: [PATCH 29/31] test: clean up --- package-lock.json | 20 + package.json | 1 + scripts/update-snippets.ts | 0 src/test/suite/mdbExtensionController.test.ts | 3316 ++++++++--------- .../telemetry/connectionTelemetry.test.ts | 7 +- src/utils/playground.ts | 2 +- 6 files changed, 1641 insertions(+), 1705 deletions(-) mode change 100755 => 100644 scripts/update-snippets.ts diff --git a/package-lock.json b/package-lock.json index cbdd04a64..60155c8a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,6 +61,7 @@ "@types/glob": "^7.2.0", "@types/jest": "^26.0.24", "@types/micromatch": "^4.0.2", + "@types/mkdirp": "^2.0.0", "@types/mocha": "^8.2.3", "@types/node": "^14.18.29", "@types/react": "^17.0.50", @@ -4375,6 +4376,16 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, + "node_modules/@types/mkdirp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-2.0.0.tgz", + "integrity": "sha512-c/iUqMymAlxLAyIK3u5SzrwkrkyOdv1XDc91T+b5FsY7Jr6ERhUD19jJHOhPW4GD6tmN6mFEorfSdks525pwdQ==", + "deprecated": "This is a stub types definition. mkdirp provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "mkdirp": "*" + } + }, "node_modules/@types/mocha": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", @@ -27829,6 +27840,15 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, + "@types/mkdirp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-2.0.0.tgz", + "integrity": "sha512-c/iUqMymAlxLAyIK3u5SzrwkrkyOdv1XDc91T+b5FsY7Jr6ERhUD19jJHOhPW4GD6tmN6mFEorfSdks525pwdQ==", + "dev": true, + "requires": { + "mkdirp": "*" + } + }, "@types/mocha": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", diff --git a/package.json b/package.json index 7d300910c..187963ed4 100644 --- a/package.json +++ b/package.json @@ -1028,6 +1028,7 @@ "@types/glob": "^7.2.0", "@types/jest": "^26.0.24", "@types/micromatch": "^4.0.2", + "@types/mkdirp": "^2.0.0", "@types/mocha": "^8.2.3", "@types/node": "^14.18.29", "@types/react": "^17.0.50", diff --git a/scripts/update-snippets.ts b/scripts/update-snippets.ts old mode 100755 new mode 100644 diff --git a/src/test/suite/mdbExtensionController.test.ts b/src/test/suite/mdbExtensionController.test.ts index 1a15dd6d7..c35f5e218 100644 --- a/src/test/suite/mdbExtensionController.test.ts +++ b/src/test/suite/mdbExtensionController.test.ts @@ -29,1830 +29,1744 @@ const testDatabaseURI = 'mongodb://localhost:27018'; suite('MDBExtensionController Test Suite', function () { this.timeout(10000); - const sandbox = sinon.createSandbox(); - let fakeShowInformationMessage: sinon.SinonStub; - - beforeEach(() => { - // Here we stub the showInformationMessage process because it is too much - // for the render process and leads to crashes while testing. - fakeShowInformationMessage = sinon.stub( - vscode.window, - 'showInformationMessage' - ); - }); + suite('with mock text document', () => { + suite('when not connected', () => { + const sandbox = sinon.createSandbox(); + let fakeVscodeErrorMessage: SinonSpy; - afterEach(() => { - sandbox.restore(); - sinon.restore(); - }); + beforeEach(() => { + sinon.stub(vscode.window, 'showInformationMessage'); + sinon.stub(vscode.workspace, 'openTextDocument'); + sinon.stub(vscode.window, 'showTextDocument'); + fakeVscodeErrorMessage = sinon.fake(); + sinon.replace( + vscode.window, + 'showErrorMessage', + fakeVscodeErrorMessage + ); + }); - test('mdb.viewCollectionDocuments command should call onViewCollectionDocuments on the editor controller with the collection namespace', async () => { - const mockOpenTextDocument = sinon.fake.resolves('magna carta'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); - - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); - - const textCollectionTree = new CollectionTreeItem( - { - name: 'testColName', - type: CollectionTypes.collection, - }, - 'testDbName', - {}, - false, - false, - null - ); - - await vscode.commands.executeCommand( - 'mdb.viewCollectionDocuments', - textCollectionTree - ); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].path.indexOf( - 'Results: testDbName.testColName' - ), - 0 - ); - assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].scheme, - VIEW_COLLECTION_SCHEME - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes( - 'namespace=testDbName.testColName' - ) - ); - - assert.strictEqual(mockShowTextDocument.firstCall.args[0], 'magna carta'); - }); + afterEach(() => { + sandbox.restore(); + sinon.restore(); + }); - test('mdb.viewCollectionDocuments command should also work with the documents list', async () => { - const mockOpenTextDocument = sinon.fake.resolves('magna carta'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); - - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); - - const textCollectionTree = new CollectionTreeItem( - { - name: 'testColName', - type: CollectionTypes.collection, - }, - 'testDbName', - {}, - false, - false, - null - ); - - await vscode.commands.executeCommand( - 'mdb.viewCollectionDocuments', - textCollectionTree - ); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].path.indexOf( - 'Results: testDbName.testColName' - ), - 0 - ); - assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].scheme, - VIEW_COLLECTION_SCHEME - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes( - 'namespace=testDbName.testColName' - ) - ); - - assert.strictEqual(mockShowTextDocument.firstCall.args[0], 'magna carta'); - }); + test('mdb.addDatabase command fails when not connected to the connection', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'tasty_sandwhich', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const addDatabaseSucceeded = await vscode.commands.executeCommand( + 'mdb.addDatabase', + mockTreeItem + ); + assert( + addDatabaseSucceeded === false, + 'Expected the command handler to return a false succeeded response' + ); - test('mdb.addConnection command should call openWebview on the webview controller', async () => { - const mockOpenWebview = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._webviewController, - 'openWebview', - mockOpenWebview - ); + const expectedMessage = + 'Please connect to this connection before adding a database.'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected an error message "${expectedMessage}" to be shown when attempting to add a database to a not connected connection found "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); + }); + }); - await vscode.commands.executeCommand('mdb.addConnection'); - assert.strictEqual(mockOpenWebview.calledOnce, true); - }); + suite('when connected', () => { + const sandbox = sinon.createSandbox(); + let fakeShowInformationMessage: sinon.SinonStub; + let mockOpenTextDocument: SinonSpy; + let mockActiveConnectionId: SinonSpy; + let fakeVscodeErrorMessage: SinonSpy; - test('mdb.addConnectionWithURI command should call connectWithURI on the connection controller', async () => { - const mockConnectWithUri = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'connectWithURI', - mockConnectWithUri - ); + beforeEach(() => { + sinon.stub(vscode.window, 'showTextDocument'); + fakeShowInformationMessage = sinon.stub( + vscode.window, + 'showInformationMessage' + ); + mockOpenTextDocument = sinon.stub(vscode.workspace, 'openTextDocument'); + mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'getActiveConnectionId', + mockActiveConnectionId + ); + fakeVscodeErrorMessage = sinon.fake(); + sinon.replace( + vscode.window, + 'showErrorMessage', + fakeVscodeErrorMessage + ); + }); - await vscode.commands.executeCommand('mdb.addConnectionWithURI'); - assert.strictEqual(mockConnectWithUri.calledOnce, true); - }); + afterEach(() => { + sandbox.restore(); + sinon.restore(); + }); - test('mdb.refreshConnection command should reset the cache on a connection tree item', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'test', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - - mockTreeItem.cacheIsUpToDate = true; - - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - - await vscode.commands.executeCommand('mdb.refreshConnection', mockTreeItem); - assert.strictEqual( - mockTreeItem.cacheIsUpToDate, - false, - 'Expected cache on tree item to be set to not up to date.' - ); - assert.strictEqual( - mockExplorerControllerRefresh.called, - true, - 'Expected explorer controller refresh to be called.' - ); - }); + test('mdb.viewCollectionDocuments command should call onViewCollectionDocuments on the editor controller with the collection namespace', async () => { + const textCollectionTree = new CollectionTreeItem( + { + name: 'testColName', + type: CollectionTypes.collection, + }, + 'testDbName', + {}, + false, + false, + null + ); + await vscode.commands.executeCommand( + 'mdb.viewCollectionDocuments', + textCollectionTree + ); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].path.indexOf( + 'Results: testDbName.testColName' + ), + 0 + ); + assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].scheme, + VIEW_COLLECTION_SCHEME + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes( + 'namespace=testDbName.testColName' + ) + ); + }); - test('mdb.treeItemRemoveConnection command should call removeMongoDBConnection on the connection controller with the tree item connection id', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'craving_for_pancakes_with_maple_syrup', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - - const mockRemoveMongoDBConnection = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'removeMongoDBConnection', - mockRemoveMongoDBConnection - ); - - await vscode.commands.executeCommand( - 'mdb.treeItemRemoveConnection', - mockTreeItem - ); - assert.strictEqual(mockRemoveMongoDBConnection.calledOnce, true); - assert.strictEqual( - mockRemoveMongoDBConnection.firstCall.args[0], - 'craving_for_pancakes_with_maple_syrup' - ); - }); + test('mdb.viewCollectionDocuments command should also work with the documents list', async () => { + const textCollectionTree = new CollectionTreeItem( + { + name: 'testColName', + type: CollectionTypes.collection, + }, + 'testDbName', + {}, + false, + false, + null + ); + await vscode.commands.executeCommand( + 'mdb.viewCollectionDocuments', + textCollectionTree + ); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].path.indexOf( + 'Results: testDbName.testColName' + ), + 0 + ); + assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].scheme, + VIEW_COLLECTION_SCHEME + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes( + 'namespace=testDbName.testColName' + ) + ); + }); - test('mdb.copyConnectionString command should try to copy the driver url to the vscode env clipboard', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'craving_for_pancakes_with_maple_syrup', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - - const mockStubUri = sinon.fake.returns('weStubThisUri'); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'copyConnectionStringByConnectionId', - mockStubUri - ); - - await vscode.commands.executeCommand( - 'mdb.copyConnectionString', - mockTreeItem - ); - assert.strictEqual(mockCopyToClipboard.calledOnce, true); - assert.strictEqual(mockCopyToClipboard.firstCall.args[0], 'weStubThisUri'); - }); + test('mdb.addConnection command should call openWebview on the webview controller', async () => { + const mockOpenWebview = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._webviewController, + 'openWebview', + mockOpenWebview + ); + await vscode.commands.executeCommand('mdb.addConnection'); + assert.strictEqual(mockOpenWebview.calledOnce, true); + }); - test('mdb.copyDatabaseName command should try to copy the database name to the vscode env clipboard', async () => { - const mockTreeItem = new DatabaseTreeItem( - 'isClubMateTheBestDrinkEver', - {}, - false, - false, - {} - ); - - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - - await vscode.commands.executeCommand('mdb.copyDatabaseName', mockTreeItem); - assert.strictEqual(mockCopyToClipboard.calledOnce, true); - assert.strictEqual( - mockCopyToClipboard.firstCall.args[0], - 'isClubMateTheBestDrinkEver' - ); - }); + test('mdb.addConnectionWithURI command should call connectWithURI on the connection controller', async () => { + const mockConnectWithUri = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'connectWithURI', + mockConnectWithUri + ); + await vscode.commands.executeCommand('mdb.addConnectionWithURI'); + assert.strictEqual(mockConnectWithUri.calledOnce, true); + }); - test('mdb.copyCollectionName command should try to copy the collection name to the vscode env clipboard', async () => { - const mockTreeItem = new CollectionTreeItem( - { - name: 'waterBuffalo', - type: CollectionTypes.collection, - }, - 'airZebra', - {}, - false, - false, - null - ); - - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - - await vscode.commands.executeCommand( - 'mdb.copyCollectionName', - mockTreeItem - ); - assert( - mockCopyToClipboard.called, - 'Expected "writeText" to be called on "vscode.env.clipboard".' - ); - assert( - mockCopyToClipboard.firstCall.args[0] === 'waterBuffalo', - `Expected the clipboard to be sent the uri string "waterBuffalo", found ${mockCopyToClipboard.firstCall.args[0]}.` - ); - }); + test('mdb.refreshConnection command should reset the cache on a connection tree item', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'test', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + mockTreeItem.cacheIsUpToDate = true; - test('mdb.copySchemaFieldName command should try to copy the field name to the vscode env clipboard', async () => { - const mockTreeItem = new FieldTreeItem( - { - name: 'dolphins are sentient', - probability: 1, - type: 'String', - types: [], - }, - false, - {} - ); - - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - - const commandResult = await vscode.commands.executeCommand( - 'mdb.copySchemaFieldName', - mockTreeItem - ); - - assert(commandResult); - assert( - mockCopyToClipboard.called, - 'Expected "writeText" to be called on "vscode.env.clipboard".' - ); - assert( - mockCopyToClipboard.firstCall.args[0] === 'dolphins are sentient', - `Expected the clipboard to be sent the schema field name "dolphins are sentient", found ${mockCopyToClipboard.firstCall.args[0]}.` - ); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand( + 'mdb.refreshConnection', + mockTreeItem + ); + assert.strictEqual( + mockTreeItem.cacheIsUpToDate, + false, + 'Expected cache on tree item to be set to not up to date.' + ); + assert.strictEqual( + mockExplorerControllerRefresh.called, + true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.refreshDatabase command should reset the cache on the database tree item', async () => { - const mockTreeItem = new DatabaseTreeItem( - 'pinkLemonade', - {}, - false, - false, - {} - ); - - mockTreeItem.cacheIsUpToDate = true; - - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - - await vscode.commands.executeCommand('mdb.refreshDatabase', mockTreeItem); - assert.strictEqual( - mockTreeItem.cacheIsUpToDate, - false, - 'Expected cache on tree item to be set to not up to date.' - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + test('mdb.treeItemRemoveConnection command should call removeMongoDBConnection on the connection controller with the tree item connection id', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'craving_for_pancakes_with_maple_syrup', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockRemoveMongoDBConnection = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'removeMongoDBConnection', + mockRemoveMongoDBConnection + ); + await vscode.commands.executeCommand( + 'mdb.treeItemRemoveConnection', + mockTreeItem + ); + assert.strictEqual(mockRemoveMongoDBConnection.calledOnce, true); + assert.strictEqual( + mockRemoveMongoDBConnection.firstCall.args[0], + 'craving_for_pancakes_with_maple_syrup' + ); + }); - test('mdb.refreshCollection command should reset the expanded state of its children and call to refresh the explorer controller', async () => { - const mockTreeItem = new CollectionTreeItem( - { - name: 'iSawACatThatLookedLikeALionToday', - type: CollectionTypes.collection, - }, - 'airZebra', - {}, - false, - false, - null - ); - - mockTreeItem.isExpanded = true; - - // Set expanded. - mockTreeItem.getSchemaChild().isExpanded = true; - mockTreeItem.getDocumentListChild().isExpanded = true; - - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - - await vscode.commands.executeCommand('mdb.refreshCollection', mockTreeItem); - assert( - mockTreeItem.getSchemaChild().isExpanded === false, - 'Expected collection tree item child to be reset to not expanded.' - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + test('mdb.copyConnectionString command should try to copy the driver url to the vscode env clipboard', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'craving_for_pancakes_with_maple_syrup', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + const mockStubUri = sinon.fake.returns('weStubThisUri'); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'copyConnectionStringByConnectionId', + mockStubUri + ); + await vscode.commands.executeCommand( + 'mdb.copyConnectionString', + mockTreeItem + ); + assert.strictEqual(mockCopyToClipboard.calledOnce, true); + assert.strictEqual( + mockCopyToClipboard.firstCall.args[0], + 'weStubThisUri' + ); + }); - test('mdb.refreshDocumentList command should update the document count and call to refresh the explorer controller', async () => { - let count = 9000; - const mockTreeItem = new CollectionTreeItem( - { - name: 'iSawACatThatLookedLikeALionToday', - type: CollectionTypes.collection, - }, - 'airZebra', - { estimatedCount: () => Promise.resolve(count) }, - false, - false, - null - ); - - await mockTreeItem.onDidExpand(); - - const collectionChildren = await mockTreeItem.getChildren(); - const docListTreeItem = collectionChildren[0]; - - assert(docListTreeItem.description === '9K'); - - count = 10000; - - docListTreeItem.isExpanded = true; - - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - - await vscode.commands.executeCommand( - 'mdb.refreshDocumentList', - docListTreeItem - ); - - assert( - docListTreeItem.cacheIsUpToDate === false, - 'Expected document list cache to be out of date.' - ); - assert( - mockTreeItem.documentCount === 10000, - `Expected document count to be 10000, found ${mockTreeItem.documentCount}.` - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + test('mdb.copyDatabaseName command should try to copy the database name to the vscode env clipboard', async () => { + const mockTreeItem = new DatabaseTreeItem( + 'isClubMateTheBestDrinkEver', + {}, + false, + false, + {} + ); + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + await vscode.commands.executeCommand( + 'mdb.copyDatabaseName', + mockTreeItem + ); + assert.strictEqual(mockCopyToClipboard.calledOnce, true); + assert.strictEqual( + mockCopyToClipboard.firstCall.args[0], + 'isClubMateTheBestDrinkEver' + ); + }); - test('mdb.refreshSchema command should reset its cache and call to refresh the explorer controller', async () => { - const mockTreeItem = new SchemaTreeItem( - 'zebraWearwolf', - 'giraffeVampire', - {} as DataService, - false, - false, - false, - false, - {} - ); - - // Set cached. - mockTreeItem.cacheIsUpToDate = true; - - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - - await vscode.commands.executeCommand('mdb.refreshSchema', mockTreeItem); - assert( - !mockTreeItem.cacheIsUpToDate, - 'Expected schema field cache to be not up to date.' - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + test('mdb.copyCollectionName command should try to copy the collection name to the vscode env clipboard', async () => { + const mockTreeItem = new CollectionTreeItem( + { + name: 'waterBuffalo', + type: CollectionTypes.collection, + }, + 'airZebra', + {}, + false, + false, + null + ); + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + await vscode.commands.executeCommand( + 'mdb.copyCollectionName', + mockTreeItem + ); + assert( + mockCopyToClipboard.called, + 'Expected "writeText" to be called on "vscode.env.clipboard".' + ); + assert( + mockCopyToClipboard.firstCall.args[0] === 'waterBuffalo', + `Expected the clipboard to be sent the uri string "waterBuffalo", found ${mockCopyToClipboard.firstCall.args[0]}.` + ); + }); - test('mdb.refreshIndexes command should reset its cache and call to refresh the explorer controller', async () => { - const mockTreeItem = new IndexListTreeItem( - 'zebraWearwolf', - 'giraffeVampire', - {} as DataService, - false, - false, - [] - ); - - // Set cached. - mockTreeItem.cacheIsUpToDate = true; - - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - - await vscode.commands.executeCommand('mdb.refreshIndexes', mockTreeItem); - assert( - !mockTreeItem.cacheIsUpToDate, - 'Expected schema field cache to be not up to date.' - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + test('mdb.copySchemaFieldName command should try to copy the field name to the vscode env clipboard', async () => { + const mockTreeItem = new FieldTreeItem( + { + name: 'dolphins are sentient', + probability: 1, + type: 'String', + types: [], + }, + false, + {} + ); + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + const commandResult = await vscode.commands.executeCommand( + 'mdb.copySchemaFieldName', + mockTreeItem + ); + assert(commandResult); + assert( + mockCopyToClipboard.called, + 'Expected "writeText" to be called on "vscode.env.clipboard".' + ); + assert( + mockCopyToClipboard.firstCall.args[0] === 'dolphins are sentient', + `Expected the clipboard to be sent the schema field name "dolphins are sentient", found ${mockCopyToClipboard.firstCall.args[0]}.` + ); + }); - test('mdb.addDatabase command fails when not connected to the connection', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'tasty_sandwhich', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - - const fakeVscodeErrorMessage = sinon.fake(); - sinon.replace(vscode.window, 'showErrorMessage', fakeVscodeErrorMessage); - - const addDatabaseSucceeded = await vscode.commands.executeCommand( - 'mdb.addDatabase', - mockTreeItem - ); - assert( - addDatabaseSucceeded === false, - 'Expected the command handler to return a false succeeded response' - ); - const expectedMessage = - 'Please connect to this connection before adding a database.'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected an error message "${expectedMessage}" to be shown when attempting to add a database to a not connected connection found "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); - }); + test('mdb.refreshDatabase command should reset the cache on the database tree item', async () => { + const mockTreeItem = new DatabaseTreeItem( + 'pinkLemonade', + {}, + false, + false, + {} + ); + mockTreeItem.cacheIsUpToDate = true; - test('mdb.addDatabase should create a MongoDB playground with create collection template', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'tasty_sandwhich', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - - const mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'getActiveConnectionId', - mockActiveConnectionId - ); - - await vscode.commands.executeCommand('mdb.addDatabase', mockTreeItem); - - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); - - const content = activeTextEditor.document.getText(); - assert(content.includes('// Create a new database.')); - assert(content.includes('NEW_DATABASE_NAME')); - assert(content.includes('NEW_COLLECTION_NAME')); - - await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand( + 'mdb.refreshDatabase', + mockTreeItem + ); + assert.strictEqual( + mockTreeItem.cacheIsUpToDate, + false, + 'Expected cache on tree item to be set to not up to date.' + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.addDatabase command fails when disconnecting', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'tasty_sandwhich', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('theDbName'); - mockInputBoxResolves.onCall(1).resolves('theCollectionName'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const mockIsDisconnecting = sinon.fake.returns(true); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'isDisconnecting', - mockIsDisconnecting - ); - - const fakeVscodeErrorMessage = sinon.fake(); - sinon.replace(vscode.window, 'showErrorMessage', fakeVscodeErrorMessage); - - const mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'getActiveConnectionId', - mockActiveConnectionId - ); - - const addDatabaseSucceeded = await vscode.commands.executeCommand( - 'mdb.addDatabase', - mockTreeItem - ); - assert( - addDatabaseSucceeded === false, - 'Expected the add database command handler to return a false succeeded response' - ); - const expectedMessage = 'Unable to add database: currently disconnecting.'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected the error message "${expectedMessage}" to be shown when attempting to add a database while disconnecting, found "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); - }); + test('mdb.refreshCollection command should reset the expanded state of its children and call to refresh the explorer controller', async () => { + const mockTreeItem = new CollectionTreeItem( + { + name: 'iSawACatThatLookedLikeALionToday', + type: CollectionTypes.collection, + }, + 'airZebra', + {}, + false, + false, + null + ); + mockTreeItem.isExpanded = true; - test('mdb.addDatabase command fails when connecting', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'tasty_sandwhich', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('theDbName'); - mockInputBoxResolves.onCall(1).resolves('theCollectionName'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const mockIsConnecting = sinon.fake.returns(true); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'isConnecting', - mockIsConnecting - ); - - const fakeVscodeErrorMessage = sinon.fake(); - sinon.replace(vscode.window, 'showErrorMessage', fakeVscodeErrorMessage); - const mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'getActiveConnectionId', - mockActiveConnectionId - ); - - const addDatabaseSucceeded = await vscode.commands.executeCommand( - 'mdb.addDatabase', - mockTreeItem - ); - assert( - addDatabaseSucceeded === false, - 'Expected the add database command handler to return a false succeeded response' - ); - const expectedMessage = 'Unable to add database: currently connecting.'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected the error message "${expectedMessage}" to be shown when attempting to add a database while disconnecting, found "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); - }); + // Set expanded. + mockTreeItem.getSchemaChild().isExpanded = true; + mockTreeItem.getDocumentListChild().isExpanded = true; - test('mdb.addCollection should create a MongoDB playground with create collection template', async () => { - const mockTreeItem = new DatabaseTreeItem( - 'iceCreamDB', - {}, - false, - false, - {} - ); - - const mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'getActiveConnectionId', - mockActiveConnectionId - ); - - await vscode.commands.executeCommand('mdb.addCollection', mockTreeItem); - - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); - - const content = activeTextEditor.document.getText(); - assert(content.includes('// The current database to use.')); - assert(content.includes('iceCreamDB')); - assert(content.includes('NEW_COLLECTION_NAME')); - assert(!content.includes('time-series')); - - await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand( + 'mdb.refreshCollection', + mockTreeItem + ); + assert( + mockTreeItem.getSchemaChild().isExpanded === false, + 'Expected collection tree item child to be reset to not expanded.' + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.addCollection command fails when disconnecting', async () => { - const mockTreeItem = new DatabaseTreeItem( - 'iceCreamDB', - {}, - false, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('mintChocolateChips'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const mockIsDisconnecting = sinon.fake.returns(true); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'isDisconnecting', - mockIsDisconnecting - ); - - const fakeVscodeErrorMessage = sinon.fake(); - sinon.replace(vscode.window, 'showErrorMessage', fakeVscodeErrorMessage); - - const addCollectionSucceeded = await vscode.commands.executeCommand( - 'mdb.addCollection', - mockTreeItem - ); - assert( - addCollectionSucceeded === false, - 'Expected the add collection command handler to return a false succeeded response' - ); - const expectedMessage = - 'Unable to add collection: currently disconnecting.'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected "${expectedMessage}" when adding a database to a not connected connection, recieved "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); - }); + test('mdb.refreshDocumentList command should update the document count and call to refresh the explorer controller', async () => { + let count = 9000; + const mockTreeItem = new CollectionTreeItem( + { + name: 'iSawACatThatLookedLikeALionToday', + type: CollectionTypes.collection, + }, + 'airZebra', + { estimatedCount: () => Promise.resolve(count) }, + false, + false, + null + ); + await mockTreeItem.onDidExpand(); - // https://code.visualstudio.com/api/references/contribution-points#Sorting-of-groups - - test('mdb.dropCollection calls data service to drop the collection after inputting the collection name', async () => { - let calledNamespace = ''; - const testCollectionTreeItem = new CollectionTreeItem( - { name: 'testColName', type: CollectionTypes.collection }, - 'testDbName', - { - dropCollection: (namespace, callback): void => { - calledNamespace = namespace; - callback(null, true); - }, - }, - false, - false, - null - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('testColName'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropCollection', - testCollectionTreeItem - ); - assert(successfullyDropped); - assert(calledNamespace === 'testDbName.testColName'); - }); + const collectionChildren = await mockTreeItem.getChildren(); + const docListTreeItem = collectionChildren[0]; + assert(docListTreeItem.description === '9K'); + count = 10000; + docListTreeItem.isExpanded = true; - test('mdb.dropCollection fails when a collection doesnt exist', async () => { - const testConnectionController = - mdbTestExtension.testExtensionController._connectionController; - - await testConnectionController.addNewConnectionStringAndConnect( - testDatabaseURI - ); - const testCollectionTreeItem = new CollectionTreeItem( - { name: 'doesntExistColName', type: CollectionTypes.collection }, - 'doesntExistDBName', - testConnectionController.getActiveDataService(), - false, - false, - null - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('doesntExistColName'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const fakeVscodeErrorMessage = sinon.fake(); - sinon.replace(vscode.window, 'showErrorMessage', fakeVscodeErrorMessage); - - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropCollection', - testCollectionTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop collection command handler to return a false succeeded response' - ); - const expectedMessage = 'Drop collection failed: ns not found'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected "${expectedMessage}" when dropping a collection that doesn't exist, recieved "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); - - await testConnectionController.disconnect(); - testConnectionController.clearAllConnections(); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); - test('mdb.dropCollection fails when the input doesnt match the collection name', async () => { - const testCollectionTreeItem = new CollectionTreeItem( - { name: 'orange', type: CollectionTypes.collection }, - 'fruitsThatAreTasty', - {}, - false, - false, - null - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('apple'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropCollection', - testCollectionTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop collection command handler to return a false succeeded response' - ); - }); + await vscode.commands.executeCommand( + 'mdb.refreshDocumentList', + docListTreeItem + ); + assert( + docListTreeItem.cacheIsUpToDate === false, + 'Expected document list cache to be out of date.' + ); + assert( + mockTreeItem.documentCount === 10000, + `Expected document count to be 10000, found ${mockTreeItem.documentCount}.` + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.dropCollection fails when the collection name input is empty', async () => { - const testCollectionTreeItem = new CollectionTreeItem( - { name: 'orange', type: CollectionTypes.view }, - 'fruitsThatAreTasty', - {}, - false, - false, - null - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropCollection', - testCollectionTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop collection command handler to return a false succeeded response' - ); - }); + test('mdb.refreshSchema command should reset its cache and call to refresh the explorer controller', async () => { + const mockTreeItem = new SchemaTreeItem( + 'zebraWearwolf', + 'giraffeVampire', + {} as DataService, + false, + false, + false, + false, + {} + ); - test('mdb.dropDatabase calls dataservice to drop the database after inputting the database name', async () => { - let calledDatabaseName = ''; - const testDatabaseTreeItem = new DatabaseTreeItem( - 'iMissTangerineAltoids', - { - dropDatabase: (dbName, callback): void => { - calledDatabaseName = dbName; - callback(null, true); - }, - }, - false, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('iMissTangerineAltoids'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropDatabase', - testDatabaseTreeItem - ); - assert.strictEqual(successfullyDropped, true); - assert.strictEqual(calledDatabaseName, 'iMissTangerineAltoids'); - }); + // Set cached. + mockTreeItem.cacheIsUpToDate = true; - test('mdb.dropDatabase succeeds even when a database doesnt exist (mdb behavior)', async () => { - const testConnectionController = - mdbTestExtension.testExtensionController._connectionController; - - await testConnectionController.addNewConnectionStringAndConnect( - testDatabaseURI - ); - const testDatabaseTreeItem = new DatabaseTreeItem( - 'narnia____a', - testConnectionController.getActiveDataService(), - false, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('narnia____a'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const fakeVscodeErrorMessage = sinon.fake(); - sinon.replace(vscode.window, 'showErrorMessage', fakeVscodeErrorMessage); - - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropDatabase', - testDatabaseTreeItem - ); - assert( - successfullyDropped, - 'Expected the drop database command handler to return a successful boolean response' - ); - assert( - fakeVscodeErrorMessage.called === false, - 'Expected no error messages' - ); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand('mdb.refreshSchema', mockTreeItem); + assert( + !mockTreeItem.cacheIsUpToDate, + 'Expected schema field cache to be not up to date.' + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.dropDatabase fails when the input doesnt match the database name', async () => { - const testDatabaseTreeItem = new DatabaseTreeItem( - 'cinnamonToastCrunch', - {}, - false, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('apple'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropDatabase', - testDatabaseTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop database command handler to return a false succeeded response' - ); - }); + test('mdb.refreshIndexes command should reset its cache and call to refresh the explorer controller', async () => { + const mockTreeItem = new IndexListTreeItem( + 'zebraWearwolf', + 'giraffeVampire', + {} as DataService, + false, + false, + [] + ); - test('mdb.dropDatabase fails when the database name input is empty', async () => { - const testDatabaseTreeItem = new DatabaseTreeItem( - 'blueBerryPancakesAndTheSmellOfBacon', - {}, - false, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropDatabase', - testDatabaseTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop database command handler to return a false succeeded response' - ); - }); + // Set cached. + mockTreeItem.cacheIsUpToDate = true; - test('mdb.renameConnection fails when the name input is empty', async () => { - mdbTestExtension.testExtensionController._connectionController._connections.blueBerryPancakesAndTheSmellOfBacon = - { - id: 'blueBerryPancakesAndTheSmellOfBacon', - connectionOptions: { connectionString: 'mongodb://localhost' }, - name: 'NAAAME', - storageLocation: StorageLocation.NONE, - }; - - const mockTreeItem = new ConnectionTreeItem( - 'blueBerryPancakesAndTheSmellOfBacon', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const successfullyRenamed = await vscode.commands.executeCommand( - 'mdb.renameConnection', - mockTreeItem - ); - assert( - successfullyRenamed === false, - 'Expected the rename connection command handler to return a false succeeded response' - ); - assert( - mdbTestExtension.testExtensionController._connectionController - ._connections.blueBerryPancakesAndTheSmellOfBacon.name === 'NAAAME', - 'Expected connection not to be ranamed.' - ); - mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand( + 'mdb.refreshIndexes', + mockTreeItem + ); + assert( + !mockTreeItem.cacheIsUpToDate, + 'Expected schema field cache to be not up to date.' + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.renameConnection updates the name of a connection', async () => { - mdbTestExtension.testExtensionController._connectionController._connections.blueBerryPancakesAndTheSmellOfBacon = - { - id: 'blueBerryPancakesAndTheSmellOfBacon', - name: 'NAAAME', - connectionOptions: { connectionString: 'mongodb://localhost' }, - storageLocation: StorageLocation.NONE, - }; - - const mockTreeItem = new ConnectionTreeItem( - 'blueBerryPancakesAndTheSmellOfBacon', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('orange juice'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const successfullyRenamed = await vscode.commands.executeCommand( - 'mdb.renameConnection', - mockTreeItem - ); - assert.strictEqual(successfullyRenamed, true); - assert.strictEqual( - mdbTestExtension.testExtensionController._connectionController - ._connections.blueBerryPancakesAndTheSmellOfBacon.name, - 'orange juice' - ); - mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); - }); + test('mdb.addDatabase command fails when disconnecting', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'tasty_sandwhich', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('theDbName'); + mockInputBoxResolves.onCall(1).resolves('theCollectionName'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - test('documents can be opened from the sidebar and saved to MongoDB', async () => { - const mockDocument = { - _id: 'pancakes', - name: '', - time: { - $time: '12345', - }, - }; - - const mockOpenTextDocument = sinon.fake.resolves('magna carta'); - sinon.replace(vscode.workspace, 'openTextDocument', mockOpenTextDocument); - - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); - - const mockGet = sinon.fake.returns('pancakes'); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._documentIdStore, - 'get', - mockGet - ); - - const activeTextEditor = mockTextEditor; - activeTextEditor.document.uri = vscode.Uri.parse( - [ - 'VIEW_DOCUMENT_SCHEME:/', - 'waffle.house:pancakes.json?', - 'namespace=waffle.house&', - 'connectionId=tasty_sandwhich&', - 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a&', - 'source=treeview', - ].join('') - ); - activeTextEditor.document.getText = () => JSON.stringify(mockDocument); - sandbox.replaceGetter( - vscode.window, - 'activeTextEditor', - () => activeTextEditor - ); - - const mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'getActiveConnectionId', - mockActiveConnectionId - ); - - const mockGetActiveDataService = sinon.fake.returns({ - find: () => { - return Promise.resolve([mockDocument]); - }, - findOneAndReplace: ( - namespace: string, - filter: object, - replacement: object, - options: object, - callback: (error: Error | null, result: object) => void - ) => { - mockDocument.name = 'something sweet'; - - return callback(null, mockDocument); - }, - }); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'getActiveDataService', - mockGetActiveDataService - ); - - const documentItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - {} as DataService, - () => Promise.resolve() - ); - - await vscode.commands.executeCommand( - 'mdb.openMongoDBDocumentFromTree', - documentItem - ); - - assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].scheme, - 'VIEW_DOCUMENT_SCHEME' - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes('documentId=') - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes('connectionId=') - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes('source=treeview') - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes( - 'namespace=waffle.house' - ) - ); - assert.strictEqual(mockShowTextDocument.firstCall.args[0], 'magna carta'); - - await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); - - assert(mockDocument.name === 'something sweet'); - assert(mockDocument.time.$time === '12345'); - - const expectedMessage = - "The document was saved successfully to 'waffle.house'"; - - assert.strictEqual( - fakeShowInformationMessage.firstCall.args[0], - expectedMessage - ); - }); + const mockIsDisconnecting = sinon.fake.returns(true); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'isDisconnecting', + mockIsDisconnecting + ); - test('document opened from a tree has treeview source', async () => { - const mockDocument = { - _id: 'pancakes', - name: '', - time: { - $time: '12345', - }, - }; - const documentItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - {} as DataService, - () => Promise.resolve() - ); - - const mockFetchDocument = sinon.fake.resolves(null); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._mongoDBDocumentService, - 'fetchDocument', - mockFetchDocument - ); - - await vscode.commands.executeCommand( - 'mdb.openMongoDBDocumentFromTree', - documentItem - ); - - assert.strictEqual(mockFetchDocument.firstCall.args[0].source, 'treeview'); - }); + const addDatabaseSucceeded = await vscode.commands.executeCommand( + 'mdb.addDatabase', + mockTreeItem + ); + assert( + addDatabaseSucceeded === false, + 'Expected the add database command handler to return a false succeeded response' + ); - test('document opened from playground results has treeview source', async () => { - const documentItem = { - source: 'playground', - line: 1, - documentId: '93333a0d-83f6-4e6f-a575-af7ea6187a4a', - namespace: 'db.coll', - connectionId: null, - }; - - const mockFetchDocument = sinon.fake.resolves(null); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._mongoDBDocumentService, - 'fetchDocument', - mockFetchDocument - ); - - await vscode.commands.executeCommand( - 'mdb.openMongoDBDocumentFromCodeLens', - documentItem - ); - - assert.strictEqual( - mockFetchDocument.firstCall.args[0].source, - 'playground' - ); - }); + const expectedMessage = + 'Unable to add database: currently disconnecting.'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected the error message "${expectedMessage}" to be shown when attempting to add a database while disconnecting, found "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); + }); - test('fetchDocument recieves treeview source if document opened from a tree', async () => { - const mockDocument = { - _id: 'pancakes', - name: '', - time: { - $time: '12345', - }, - }; - - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); - - const mockGet = sinon.fake.returns('pancakes'); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._documentIdStore, - 'get', - mockGet - ); - - sandbox.replaceGetter( - vscode.window, - 'activeTextEditor', - () => - ({ - document: { - uri: { - scheme: 'VIEW_DOCUMENT_SCHEME', - query: [ - 'namespace=waffle.house', - 'connectionId=tasty_sandwhich', - 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a', - 'source=treeview', - ].join('&'), - }, - getText: () => JSON.stringify(mockDocument), - save: () => {}, - }, - } as unknown as typeof vscode.window.activeTextEditor) - ); - - const mockReplaceDocument = sinon.fake.resolves(null); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._mongoDBDocumentService, - 'replaceDocument', - mockReplaceDocument - ); - - await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); - - assert.strictEqual( - mockReplaceDocument.firstCall.args[0].source, - 'treeview' - ); - }); + test('mdb.addDatabase command fails when connecting', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'tasty_sandwhich', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('theDbName'); + mockInputBoxResolves.onCall(1).resolves('theCollectionName'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + + const mockIsConnecting = sinon.fake.returns(true); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'isConnecting', + mockIsConnecting + ); + + const addDatabaseSucceeded = await vscode.commands.executeCommand( + 'mdb.addDatabase', + mockTreeItem + ); + assert( + addDatabaseSucceeded === false, + 'Expected the add database command handler to return a false succeeded response' + ); - test('fetchDocument recieves playground source if document opened from playground results', async () => { - const mockDocument = { - _id: 'pancakes', - name: '', - time: { - $time: '12345', - }, - }; - - const mockShowTextDocument = sinon.fake(); - sinon.replace(vscode.window, 'showTextDocument', mockShowTextDocument); - - const mockGet = sinon.fake.returns('pancakes'); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._documentIdStore, - 'get', - mockGet - ); - - sandbox.replaceGetter( - vscode.window, - 'activeTextEditor', - () => - ({ - document: { - uri: { - scheme: 'VIEW_DOCUMENT_SCHEME', - query: [ - 'namespace=waffle.house', - 'connectionId=tasty_sandwhich', - 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a', - 'source=playground', - ].join('&'), + const expectedMessage = 'Unable to add database: currently connecting.'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected the error message "${expectedMessage}" to be shown when attempting to add a database while disconnecting, found "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); + }); + + test('mdb.addCollection command fails when disconnecting', async () => { + const mockTreeItem = new DatabaseTreeItem( + 'iceCreamDB', + {}, + false, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('mintChocolateChips'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + + const mockIsDisconnecting = sinon.fake.returns(true); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'isDisconnecting', + mockIsDisconnecting + ); + + const addCollectionSucceeded = await vscode.commands.executeCommand( + 'mdb.addCollection', + mockTreeItem + ); + assert( + addCollectionSucceeded === false, + 'Expected the add collection command handler to return a false succeeded response' + ); + const expectedMessage = + 'Unable to add collection: currently disconnecting.'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected "${expectedMessage}" when adding a database to a not connected connection, recieved "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); + }); + + // https://code.visualstudio.com/api/references/contribution-points#Sorting-of-groups + test('mdb.dropCollection calls data service to drop the collection after inputting the collection name', async () => { + let calledNamespace = ''; + const testCollectionTreeItem = new CollectionTreeItem( + { name: 'testColName', type: CollectionTypes.collection }, + 'testDbName', + { + dropCollection: (namespace, callback): void => { + calledNamespace = namespace; + callback(null, true); }, - getText: () => JSON.stringify(mockDocument), - save: () => {}, }, - } as unknown as typeof vscode.window.activeTextEditor) - ); - - const mockReplaceDocument = sinon.fake.resolves(null); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._mongoDBDocumentService, - 'replaceDocument', - mockReplaceDocument - ); - - await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); - - assert.strictEqual( - mockReplaceDocument.firstCall.args[0].source, - 'playground' - ); - }); + false, + false, + null + ); - test('mdb.searchForDocuments should create a MongoDB playground with search template', async () => { - await vscode.commands.executeCommand('mdb.searchForDocuments', { - databaseName: 'dbbbbbName', - collectionName: 'colllllllllName', - }); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('testColName'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropCollection', + testCollectionTreeItem + ); + assert(successfullyDropped); + assert(calledNamespace === 'testDbName.testColName'); + }); - const content = activeTextEditor.document.getText(); - assert(content.includes('Search for documents in the current collection.')); - assert(content.includes('dbbbbbName')); - assert(content.includes('colllllllllName')); + test('mdb.dropCollection fails when a collection doesnt exist', async () => { + const testConnectionController = + mdbTestExtension.testExtensionController._connectionController; + await testConnectionController.addNewConnectionStringAndConnect( + testDatabaseURI + ); - await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); - }); + const testCollectionTreeItem = new CollectionTreeItem( + { name: 'doesntExistColName', type: CollectionTypes.collection }, + 'doesntExistDBName', + testConnectionController.getActiveDataService(), + false, + false, + null + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('doesntExistColName'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - test('mdb.createIndexFromTreeView should create a MongoDB playground with index template', async () => { - await vscode.commands.executeCommand('mdb.createIndexFromTreeView', { - databaseName: 'dbbbbbName', - collectionName: 'colllllllllName', - }); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropCollection', + testCollectionTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop collection command handler to return a false succeeded response' + ); - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + const expectedMessage = 'Drop collection failed: ns not found'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected "${expectedMessage}" when dropping a collection that doesn't exist, recieved "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); + await testConnectionController.disconnect(); + testConnectionController.clearAllConnections(); + }); - const content = activeTextEditor.document.getText(); - assert(content.includes('Create a new index in the collection.')); - assert(content.includes('dbbbbbName')); - assert(content.includes('colllllllllName')); + test('mdb.dropCollection fails when the input doesnt match the collection name', async () => { + const testCollectionTreeItem = new CollectionTreeItem( + { name: 'orange', type: CollectionTypes.collection }, + 'fruitsThatAreTasty', + {}, + false, + false, + null + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('apple'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); - }); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropCollection', + testCollectionTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop collection command handler to return a false succeeded response' + ); + }); - test('mdb.createPlayground should create a MongoDB playground with default template', async () => { - const mockGetConfiguration = sinon.fake.returns({ - get: () => true, - }); - sinon.replace(vscode.workspace, 'getConfiguration', mockGetConfiguration); + test('mdb.dropCollection fails when the collection name input is empty', async () => { + const testCollectionTreeItem = new CollectionTreeItem( + { name: 'orange', type: CollectionTypes.view }, + 'fruitsThatAreTasty', + {}, + false, + false, + null + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - await vscode.commands.executeCommand('mdb.createPlayground'); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropCollection', + testCollectionTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop collection command handler to return a false succeeded response' + ); + }); - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + test('mdb.dropDatabase calls dataservice to drop the database after inputting the database name', async () => { + let calledDatabaseName = ''; + const testDatabaseTreeItem = new DatabaseTreeItem( + 'iMissTangerineAltoids', + { + dropDatabase: (dbName, callback): void => { + calledDatabaseName = dbName; + callback(null, true); + }, + }, + false, + false, + {} + ); - const content = activeTextEditor.document.getText(); - assert(content.includes('// MongoDB Playground')); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('iMissTangerineAltoids'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); - }); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropDatabase', + testDatabaseTreeItem + ); + assert.strictEqual(successfullyDropped, true); + assert.strictEqual(calledDatabaseName, 'iMissTangerineAltoids'); + }); - test('mdb.createPlayground command should create a MongoDB playground without template', async () => { - const mockGetConfiguration = sinon.fake.returns({ - get: () => false, - }); - sinon.replace(vscode.workspace, 'getConfiguration', mockGetConfiguration); + test('mdb.dropDatabase succeeds even when a database doesnt exist (mdb behavior)', async () => { + const testConnectionController = + mdbTestExtension.testExtensionController._connectionController; + await testConnectionController.addNewConnectionStringAndConnect( + testDatabaseURI + ); - await vscode.commands.executeCommand('mdb.createPlayground'); + const testDatabaseTreeItem = new DatabaseTreeItem( + 'narnia____a', + testConnectionController.getActiveDataService(), + false, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('narnia____a'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropDatabase', + testDatabaseTreeItem + ); + assert( + successfullyDropped, + 'Expected the drop database command handler to return a successful boolean response' + ); + assert( + fakeVscodeErrorMessage.called === false, + 'Expected no error messages' + ); + }); - const content = activeTextEditor.document.getText(); - assert.strictEqual(content, ''); + test('mdb.dropDatabase fails when the input doesnt match the database name', async () => { + const testDatabaseTreeItem = new DatabaseTreeItem( + 'cinnamonToastCrunch', + {}, + false, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('apple'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); - }); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropDatabase', + testDatabaseTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop database command handler to return a false succeeded response' + ); + }); - test('mdb.runSelectedPlaygroundBlocks command should call runSelectedPlaygroundBlocks on the playground controller', async () => { - const mockRunSelectedPlaygroundBlocks = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundController, - 'runSelectedPlaygroundBlocks', - mockRunSelectedPlaygroundBlocks - ); - - await vscode.commands.executeCommand('mdb.runSelectedPlaygroundBlocks'); - assert( - mockRunSelectedPlaygroundBlocks.calledOnce, - 'Expected "runSelectedPlaygroundBlocks" to be called on the playground controller.' - ); - }); + test('mdb.dropDatabase fails when the database name input is empty', async () => { + const testDatabaseTreeItem = new DatabaseTreeItem( + 'blueBerryPancakesAndTheSmellOfBacon', + {}, + false, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - test('mdb.runAllPlaygroundBlocks command should call runAllPlaygroundBlocks on the playground controller', async () => { - const mockRunAllPlaygroundBlocks = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundController, - 'runAllPlaygroundBlocks', - mockRunAllPlaygroundBlocks - ); - - await vscode.commands.executeCommand('mdb.runAllPlaygroundBlocks'); - assert( - mockRunAllPlaygroundBlocks.calledOnce, - 'Expected "runAllPlaygroundBlocks" to be called on the playground controller.' - ); - }); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropDatabase', + testDatabaseTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop database command handler to return a false succeeded response' + ); + }); - test('mdb.changeActiveConnection command should call changeActiveConnection on the playground controller', async () => { - const mockChangeActiveConnection = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'changeActiveConnection', - mockChangeActiveConnection - ); - - await vscode.commands.executeCommand('mdb.changeActiveConnection'); - assert( - mockChangeActiveConnection.calledOnce, - 'Expected "changeActiveConnection" to be called on the playground controller.' - ); - }); + test('mdb.renameConnection fails when the name input is empty', async () => { + mdbTestExtension.testExtensionController._connectionController._connections.blueBerryPancakesAndTheSmellOfBacon = + { + id: 'blueBerryPancakesAndTheSmellOfBacon', + connectionOptions: { connectionString: 'mongodb://localhost' }, + name: 'NAAAME', + storageLocation: StorageLocation.NONE, + }; + + const mockTreeItem = new ConnectionTreeItem( + 'blueBerryPancakesAndTheSmellOfBacon', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); - test('mdb.refreshPlaygrounds command should call refreshPlaygrounds on the playgrounds explorer controller', async () => { - const mockRefreshPlaygrounds = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundsExplorer, - 'refresh', - mockRefreshPlaygrounds - ); - - await vscode.commands.executeCommand('mdb.refreshPlaygrounds'); - assert( - mockRefreshPlaygrounds.calledOnce, - 'Expected "refreshPlaygrounds" to be called on the playground controller.' - ); - }); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - test("mdb.copyDocumentContentsFromTreeView should copy a document's content to the clipboard", async () => { - const mockDocument = { - _id: 'pancakes', - time: { - $time: '12345', - }, - }; - - let namespaceUsed = ''; - - const findStub = sinon.stub(); - findStub.resolves([mockDocument]); - const mockDataService = { - find: (namespace: string) => { - namespaceUsed = namespace; - return Promise.resolve([mockDocument]); - }, - } as unknown as DataService; - - const documentTreeItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - mockDataService, - () => Promise.resolve() - ); - - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - - await vscode.commands.executeCommand( - 'mdb.copyDocumentContentsFromTreeView', - documentTreeItem - ); - assert.strictEqual(mockCopyToClipboard.called, true); - assert.strictEqual( - mockCopyToClipboard.firstCall.args[0], - `{ - "_id": "pancakes", - "time": { - "$time": "12345" - } -}` - ); - assert.strictEqual(namespaceUsed, 'waffle.house'); - }); + const successfullyRenamed = await vscode.commands.executeCommand( + 'mdb.renameConnection', + mockTreeItem + ); + assert( + successfullyRenamed === false, + 'Expected the rename connection command handler to return a false succeeded response' + ); + assert( + mdbTestExtension.testExtensionController._connectionController + ._connections.blueBerryPancakesAndTheSmellOfBacon.name === 'NAAAME', + 'Expected connection not to be ranamed.' + ); + mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); + }); - test("mdb.cloneDocumentFromTreeView event should open a playground with a document's content", async () => { - const mockDocument = { - _id: 'pancakes', - time: new Date('3001-01-01T05:00:00.000Z'), - objectIdField: new ObjectId('57e193d7a9cc81b4027498b2'), - }; - - let namespaceUsed = ''; - - const mockDataService = { - find: (namespace: string) => { - namespaceUsed = namespace; - return Promise.resolve([mockDocument]); - }, - } as unknown as DataService; - - const documentTreeItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - mockDataService, - () => Promise.resolve() - ); - - const mockCreatePlaygroundForCloneDocument = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundController, - 'createPlaygroundForCloneDocument', - mockCreatePlaygroundForCloneDocument - ); - - await vscode.commands.executeCommand( - 'mdb.cloneDocumentFromTreeView', - documentTreeItem - ); - assert.strictEqual(mockCreatePlaygroundForCloneDocument.calledOnce, true); - assert.strictEqual( - mockCreatePlaygroundForCloneDocument.firstCall.args[0], - `{ - _id: 'pancakes', - time: ISODate('3001-01-01T05:00:00.000Z'), - objectIdField: ObjectId('57e193d7a9cc81b4027498b2') -}` - ); - assert.strictEqual( - mockCreatePlaygroundForCloneDocument.firstCall.args[1], - 'waffle' - ); - assert.strictEqual( - mockCreatePlaygroundForCloneDocument.firstCall.args[2], - 'house' - ); - assert.strictEqual(namespaceUsed, 'waffle.house'); - }); + test('mdb.renameConnection updates the name of a connection', async () => { + mdbTestExtension.testExtensionController._connectionController._connections.blueBerryPancakesAndTheSmellOfBacon = + { + id: 'blueBerryPancakesAndTheSmellOfBacon', + name: 'NAAAME', + connectionOptions: { connectionString: 'mongodb://localhost' }, + storageLocation: StorageLocation.NONE, + }; + + const mockTreeItem = new ConnectionTreeItem( + 'blueBerryPancakesAndTheSmellOfBacon', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('orange juice'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - test('mdb.insertDocumentFromTreeView event should open a playground with an insert document template', async () => { - const collectionTreeItem = new CollectionTreeItem( - { - name: 'pineapple', - type: CollectionTypes.collection, - }, - 'plants', - {}, - false, - false, - null - ); - - const mockCreatePlaygroundForInsertDocument = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundController, - 'createPlaygroundForInsertDocument', - mockCreatePlaygroundForInsertDocument - ); - - await vscode.commands.executeCommand( - 'mdb.insertDocumentFromTreeView', - collectionTreeItem - ); - assert.strictEqual(mockCreatePlaygroundForInsertDocument.calledOnce, true); - assert.strictEqual( - mockCreatePlaygroundForInsertDocument.firstCall.args[0], - 'plants' - ); - assert.strictEqual( - mockCreatePlaygroundForInsertDocument.firstCall.args[1], - 'pineapple' - ); - }); + const successfullyRenamed = await vscode.commands.executeCommand( + 'mdb.renameConnection', + mockTreeItem + ); + assert.strictEqual(successfullyRenamed, true); + assert.strictEqual( + mdbTestExtension.testExtensionController._connectionController + ._connections.blueBerryPancakesAndTheSmellOfBacon.name, + 'orange juice' + ); + mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); + }); - test('mdb.deleteDocumentFromTreeView should not delete a document when the confirmation is cancelled', async () => { - const mockDocument = { - _id: 'pancakes', - time: { - $time: '12345', - }, - }; - - let calledDelete = false; - - const mockDataService = { - deleteOne: ( - namespace: string, - _id: any, - options: object, - callback: ( - error: Error | undefined, - result: { deletedCount: number } - ) => void - ) => { - calledDelete = true; - callback(undefined, { - deletedCount: 1, - }); - }, - } as Pick as unknown as DataService; - - const documentTreeItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - mockDataService, - () => Promise.resolve() - ); - - const result = await vscode.commands.executeCommand( - 'mdb.deleteDocumentFromTreeView', - documentTreeItem - ); - - assert.strictEqual(result, false); - assert.strictEqual(calledDelete, false); - }); + test('mdb.openMongoDBDocumentFromTree openes a document from the sidebar and saves it to MongoDB', async () => { + const mockDocument = { + _id: 'pancakes', + name: '', + time: { + $time: '12345', + }, + }; + const mockGet = sinon.fake.returns('pancakes'); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._documentIdStore, + 'get', + mockGet + ); - test('mdb.deleteDocumentFromTreeView deletes a document after confirmation', async () => { - fakeShowInformationMessage.resolves('Yes'); - - const mockDocument = { - _id: 'pancakes', - time: { - $time: '12345', - }, - }; - - let namespaceUsed = ''; - let _idUsed; - - const mockDataService = { - deleteOne: ( - namespace: string, - query: any, - options: object, - callback: ( - error: Error | undefined, - result: { deletedCount: number } - ) => void - ) => { - _idUsed = query; - namespaceUsed = namespace; - callback(undefined, { - deletedCount: 1, + const activeTextEditor = mockTextEditor; + activeTextEditor.document.uri = vscode.Uri.parse( + [ + 'VIEW_DOCUMENT_SCHEME:/', + 'waffle.house:pancakes.json?', + 'namespace=waffle.house&', + 'connectionId=tasty_sandwhich&', + 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a&', + 'source=treeview', + ].join('') + ); + activeTextEditor.document.getText = () => JSON.stringify(mockDocument); + sandbox.replaceGetter( + vscode.window, + 'activeTextEditor', + () => activeTextEditor + ); + + const mockGetActiveDataService = sinon.fake.returns({ + find: () => { + return Promise.resolve([mockDocument]); + }, + findOneAndReplace: ( + namespace: string, + filter: object, + replacement: object, + options: object, + callback: (error: Error | null, result: object) => void + ) => { + mockDocument.name = 'something sweet'; + + return callback(null, mockDocument); + }, }); - }, - } as Pick as unknown as DataService; - - const documentTreeItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - mockDataService, - () => Promise.resolve() - ); - - const result = await vscode.commands.executeCommand( - 'mdb.deleteDocumentFromTreeView', - documentTreeItem - ); - assert.deepStrictEqual(_idUsed, { - _id: 'pancakes', - }); - assert.strictEqual(namespaceUsed, 'waffle.house'); - assert.strictEqual(result, true); - }); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'getActiveDataService', + mockGetActiveDataService + ); - suite( - 'when a user hasnt been shown the initial overview page yet and they have no connections saved', - () => { - let mockVSCodeExecuteCommand: SinonSpy; - let mockStorageControllerUpdate: SinonSpy; + const documentItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + {} as DataService, + () => Promise.resolve() + ); + await vscode.commands.executeCommand( + 'mdb.openMongoDBDocumentFromTree', + documentItem + ); + assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].scheme, + 'VIEW_DOCUMENT_SCHEME' + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes('documentId=') + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes('connectionId=') + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes( + 'source=treeview' + ) + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes( + 'namespace=waffle.house' + ) + ); + await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); + assert(mockDocument.name === 'something sweet'); + assert(mockDocument.time.$time === '12345'); - beforeEach(() => { - mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); + const expectedMessage = + "The document was saved successfully to 'waffle.house'"; + + assert.strictEqual( + fakeShowInformationMessage.firstCall.args[0], + expectedMessage + ); + }); + + test('mdb.openMongoDBDocumentFromTree openes a document from a tree with a treeview source', async () => { + const mockDocument = { + _id: 'pancakes', + name: '', + time: { + $time: '12345', + }, + }; + const documentItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + {} as DataService, + () => Promise.resolve() + ); + const mockFetchDocument = sinon.fake.resolves(null); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._mongoDBDocumentService, + 'fetchDocument', + mockFetchDocument + ); + await vscode.commands.executeCommand( + 'mdb.openMongoDBDocumentFromTree', + documentItem + ); + assert.strictEqual( + mockFetchDocument.firstCall.args[0].source, + 'treeview' + ); + }); + + test('mdb.openMongoDBDocumentFromCodeLens openes a document from a playground results with a playground source', async () => { + const documentItem = { + source: 'playground', + line: 1, + documentId: '93333a0d-83f6-4e6f-a575-af7ea6187a4a', + namespace: 'db.coll', + connectionId: null, + }; + const mockFetchDocument = sinon.fake.resolves(null); sinon.replace( - vscode.commands, - 'executeCommand', - mockVSCodeExecuteCommand + mdbTestExtension.testExtensionController._editorsController + ._mongoDBDocumentService, + 'fetchDocument', + mockFetchDocument ); + await vscode.commands.executeCommand( + 'mdb.openMongoDBDocumentFromCodeLens', + documentItem + ); + assert.strictEqual( + mockFetchDocument.firstCall.args[0].source, + 'playground' + ); + }); + + test('mdb.saveMongoDBDocument replaces a document with a treeview source', async () => { + const mockDocument = { + _id: 'pancakes', + name: '', + time: { + $time: '12345', + }, + }; + const mockGet = sinon.fake.returns('pancakes'); sinon.replace( - mdbTestExtension.testExtensionController._storageController, + mdbTestExtension.testExtensionController._editorsController + ._documentIdStore, 'get', - sinon.fake.returns(false) + mockGet + ); + sandbox.replaceGetter( + vscode.window, + 'activeTextEditor', + () => + ({ + document: { + uri: { + scheme: 'VIEW_DOCUMENT_SCHEME', + query: [ + 'namespace=waffle.house', + 'connectionId=tasty_sandwhich', + 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a', + 'source=treeview', + ].join('&'), + }, + getText: () => JSON.stringify(mockDocument), + save: () => {}, + }, + } as unknown as typeof vscode.window.activeTextEditor) ); + + const mockReplaceDocument = sinon.fake.resolves(null); sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'hasSavedConnections', - sinon.fake.returns(false) + mdbTestExtension.testExtensionController._editorsController + ._mongoDBDocumentService, + 'replaceDocument', + mockReplaceDocument ); + await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); + assert.strictEqual( + mockReplaceDocument.firstCall.args[0].source, + 'treeview' + ); + }); - mockStorageControllerUpdate = sinon.fake.resolves(undefined); + test('mdb.saveMongoDBDocuments replaces a document with a playground source', async () => { + const mockDocument = { + _id: 'pancakes', + name: '', + time: { + $time: '12345', + }, + }; + const mockGet = sinon.fake.returns('pancakes'); sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'update', - mockStorageControllerUpdate + mdbTestExtension.testExtensionController._editorsController + ._documentIdStore, + 'get', + mockGet + ); + sandbox.replaceGetter( + vscode.window, + 'activeTextEditor', + () => + ({ + document: { + uri: { + scheme: 'VIEW_DOCUMENT_SCHEME', + query: [ + 'namespace=waffle.house', + 'connectionId=tasty_sandwhich', + 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a', + 'source=playground', + ].join('&'), + }, + getText: () => JSON.stringify(mockDocument), + save: () => {}, + }, + } as unknown as typeof vscode.window.activeTextEditor) ); - void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); + const mockReplaceDocument = sinon.fake.resolves(null); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._mongoDBDocumentService, + 'replaceDocument', + mockReplaceDocument + ); + await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); + assert.strictEqual( + mockReplaceDocument.firstCall.args[0].source, + 'playground' + ); }); - afterEach(() => { - sinon.restore(); + test('mdb.runSelectedPlaygroundBlocks runs selected playgroundB blocks once', async () => { + const mockRunSelectedPlaygroundBlocks = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundController, + 'runSelectedPlaygroundBlocks', + mockRunSelectedPlaygroundBlocks + ); + await vscode.commands.executeCommand('mdb.runSelectedPlaygroundBlocks'); + assert( + mockRunSelectedPlaygroundBlocks.calledOnce, + 'Expected "runSelectedPlaygroundBlocks" to be called on the playground controller.' + ); }); - test('they are shown the overview page', () => { - assert(mockVSCodeExecuteCommand.called); - assert( - mockVSCodeExecuteCommand.firstCall.args[0] === 'mdb.openOverviewPage' + test('mdb.runAllPlaygroundBlocks runs all playgroundB blocks once', async () => { + const mockRunAllPlaygroundBlocks = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundController, + 'runAllPlaygroundBlocks', + mockRunAllPlaygroundBlocks ); + await vscode.commands.executeCommand('mdb.runAllPlaygroundBlocks'); assert( - mockVSCodeExecuteCommand.firstCall.args[0] === - EXTENSION_COMMANDS.MDB_OPEN_OVERVIEW_PAGE + mockRunAllPlaygroundBlocks.calledOnce, + 'Expected "runAllPlaygroundBlocks" to be called on the playground controller.' ); }); - test("it sets that they've been shown the overview page", () => { - assert(mockStorageControllerUpdate.called); + test('mdb.changeActiveConnection changes the active connection once', async () => { + const mockChangeActiveConnection = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'changeActiveConnection', + mockChangeActiveConnection + ); + await vscode.commands.executeCommand('mdb.changeActiveConnection'); assert( - mockStorageControllerUpdate.firstCall.args[0] === - StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW + mockChangeActiveConnection.calledOnce, + 'Expected "changeActiveConnection" to be called on the playground controller.' + ); + }); + + test('mdb.refreshPlaygrounds refreshes the playgrounds explorer once', async () => { + const mockRefreshPlaygrounds = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundsExplorer, + 'refresh', + mockRefreshPlaygrounds ); + await vscode.commands.executeCommand('mdb.refreshPlaygrounds'); assert( - mockStorageControllerUpdate.firstCall.args[0] === - 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' + mockRefreshPlaygrounds.calledOnce, + 'Expected "refreshPlaygrounds" to be called on the playground controller.' ); - assert(mockStorageControllerUpdate.firstCall.args[1] === true); }); - } - ); - suite( - 'when a user hasnt been shown the initial overview page yet and they have connections saved', - () => { - let mockVSCodeExecuteCommand: SinonSpy; - let mockStorageControllerUpdate: SinonSpy; + test("mdb.copyDocumentContentsFromTreeView should copy a document's content to the clipboard", async () => { + const mockDocument = { + _id: 'pancakes', + time: { + $time: '12345', + }, + }; + let namespaceUsed = ''; - beforeEach(() => { - mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); - sinon.replace( - vscode.commands, - 'executeCommand', - mockVSCodeExecuteCommand + const findStub = sinon.stub(); + findStub.resolves([mockDocument]); + + const mockDataService = { + find: (namespace: string) => { + namespaceUsed = namespace; + return Promise.resolve([mockDocument]); + }, + } as Pick as unknown as DataService; + const documentTreeItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + mockDataService, + () => Promise.resolve() ); - sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'get', - sinon.fake.returns(undefined) + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + await vscode.commands.executeCommand( + 'mdb.copyDocumentContentsFromTreeView', + documentTreeItem ); + assert.strictEqual(mockCopyToClipboard.called, true); + assert.strictEqual( + mockCopyToClipboard.firstCall.args[0], + `{ + "_id": "pancakes", + "time": { + "$time": "12345" + } +}` + ); + assert.strictEqual(namespaceUsed, 'waffle.house'); + }); + test("mdb.cloneDocumentFromTreeView opens a playground with a document's content", async () => { + const mockDocument = { + _id: 'pancakes', + time: new Date('3001-01-01T05:00:00.000Z'), + objectIdField: new ObjectId('57e193d7a9cc81b4027498b2'), + }; + let namespaceUsed = ''; + const mockDataService = { + find: (namespace: string) => { + namespaceUsed = namespace; + return Promise.resolve([mockDocument]); + }, + } as unknown as DataService; + const documentTreeItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + mockDataService, + () => Promise.resolve() + ); + const mockCreatePlaygroundForCloneDocument = sinon.fake(); sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'hasSavedConnections', - sinon.fake.returns(true) + mdbTestExtension.testExtensionController._playgroundController, + 'createPlaygroundForCloneDocument', + mockCreatePlaygroundForCloneDocument + ); + await vscode.commands.executeCommand( + 'mdb.cloneDocumentFromTreeView', + documentTreeItem + ); + assert.strictEqual( + mockCreatePlaygroundForCloneDocument.calledOnce, + true + ); + assert.strictEqual( + mockCreatePlaygroundForCloneDocument.firstCall.args[0], + `{ + _id: 'pancakes', + time: ISODate('3001-01-01T05:00:00.000Z'), + objectIdField: ObjectId('57e193d7a9cc81b4027498b2') +}` + ); + assert.strictEqual( + mockCreatePlaygroundForCloneDocument.firstCall.args[1], + 'waffle' + ); + assert.strictEqual( + mockCreatePlaygroundForCloneDocument.firstCall.args[2], + 'house' ); + assert.strictEqual(namespaceUsed, 'waffle.house'); + }); - mockStorageControllerUpdate = sinon.fake.resolves(undefined); + test('mdb.insertDocumentFromTreeView opens a playground with an insert document template', async () => { + const collectionTreeItem = new CollectionTreeItem( + { + name: 'pineapple', + type: CollectionTypes.collection, + }, + 'plants', + {}, + false, + false, + null + ); + const mockCreatePlaygroundForInsertDocument = sinon.fake(); sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'update', - mockStorageControllerUpdate + mdbTestExtension.testExtensionController._playgroundController, + 'createPlaygroundForInsertDocument', + mockCreatePlaygroundForInsertDocument + ); + await vscode.commands.executeCommand( + 'mdb.insertDocumentFromTreeView', + collectionTreeItem + ); + assert.strictEqual( + mockCreatePlaygroundForInsertDocument.calledOnce, + true + ); + assert.strictEqual( + mockCreatePlaygroundForInsertDocument.firstCall.args[0], + 'plants' + ); + assert.strictEqual( + mockCreatePlaygroundForInsertDocument.firstCall.args[1], + 'pineapple' ); - - void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); }); - test('they are not shown the overview page', () => { - assert(!mockVSCodeExecuteCommand.called); + test('mdb.deleteDocumentFromTreeView deletes a document when the confirmation is cancelled', async () => { + const mockDocument = { + _id: 'pancakes', + time: { + $time: '12345', + }, + }; + let calledDelete = false; + const mockDataService = { + deleteOne: ( + namespace: string, + _id: any, + options: object, + callback: ( + error: Error | undefined, + result: { deletedCount: number } + ) => void + ) => { + calledDelete = true; + callback(undefined, { + deletedCount: 1, + }); + }, + } as Pick as unknown as DataService; + const documentTreeItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + mockDataService, + () => Promise.resolve() + ); + const result = await vscode.commands.executeCommand( + 'mdb.deleteDocumentFromTreeView', + documentTreeItem + ); + assert.strictEqual(result, false); + assert.strictEqual(calledDelete, false); }); - test("it sets that they've been shown the overview page", () => { - assert(mockStorageControllerUpdate.called); - assert( - mockStorageControllerUpdate.firstCall.args[0] === - StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW + test('mdb.deleteDocumentFromTreeView deletes a document after confirmation', async () => { + fakeShowInformationMessage.resolves('Yes'); + + const mockDocument = { + _id: 'pancakes', + time: { + $time: '12345', + }, + }; + let namespaceUsed = ''; + let _idUsed; + const mockDataService = { + deleteOne: ( + namespace: string, + query: any, + options: object, + callback: ( + error: Error | undefined, + result: { deletedCount: number } + ) => void + ) => { + _idUsed = query; + namespaceUsed = namespace; + callback(undefined, { + deletedCount: 1, + }); + }, + } as Pick as unknown as DataService; + const documentTreeItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + mockDataService, + () => Promise.resolve() ); - assert( - mockStorageControllerUpdate.firstCall.args[0] === - 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' + const result = await vscode.commands.executeCommand( + 'mdb.deleteDocumentFromTreeView', + documentTreeItem ); - assert(mockStorageControllerUpdate.firstCall.args[1] === true); + assert.deepStrictEqual(_idUsed, { + _id: 'pancakes', + }); + assert.strictEqual(namespaceUsed, 'waffle.house'); + assert.strictEqual(result, true); }); - } - ); - suite('when a user has been shown the initial overview page', () => { - let mockVSCodeExecuteCommand: SinonSpy; + suite( + 'when a user hasnt been shown the initial overview page yet and they have no connections saved', + () => { + let mockVSCodeExecuteCommand: SinonSpy; + let mockStorageControllerUpdate: SinonSpy; + + beforeEach(() => { + mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); + sinon.replace( + vscode.commands, + 'executeCommand', + mockVSCodeExecuteCommand + ); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'get', + sinon.fake.returns(false) + ); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'hasSavedConnections', + sinon.fake.returns(false) + ); + + mockStorageControllerUpdate = sinon.fake.resolves(undefined); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'update', + mockStorageControllerUpdate + ); + + void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); + }); + + afterEach(() => { + sinon.restore(); + }); + + test('they are shown the overview page', () => { + assert(mockVSCodeExecuteCommand.called); + assert( + mockVSCodeExecuteCommand.firstCall.args[0] === + 'mdb.openOverviewPage' + ); + assert( + mockVSCodeExecuteCommand.firstCall.args[0] === + EXTENSION_COMMANDS.MDB_OPEN_OVERVIEW_PAGE + ); + }); + + test("it sets that they've been shown the overview page", () => { + assert(mockStorageControllerUpdate.called); + assert( + mockStorageControllerUpdate.firstCall.args[0] === + StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW + ); + assert( + mockStorageControllerUpdate.firstCall.args[0] === + 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' + ); + assert(mockStorageControllerUpdate.firstCall.args[1] === true); + }); + } + ); + + suite( + 'when a user hasnt been shown the initial overview page yet and they have connections saved', + () => { + let mockVSCodeExecuteCommand: SinonSpy; + let mockStorageControllerUpdate: SinonSpy; + + beforeEach(() => { + mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); + sinon.replace( + vscode.commands, + 'executeCommand', + mockVSCodeExecuteCommand + ); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'get', + sinon.fake.returns(undefined) + ); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'hasSavedConnections', + sinon.fake.returns(true) + ); + mockStorageControllerUpdate = sinon.fake.resolves(undefined); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'update', + mockStorageControllerUpdate + ); + + void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); + }); + + test('they are not shown the overview page', () => { + assert(!mockVSCodeExecuteCommand.called); + }); + + test("it sets that they've been shown the overview page", () => { + assert(mockStorageControllerUpdate.called); + assert( + mockStorageControllerUpdate.firstCall.args[0] === + StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW + ); + assert( + mockStorageControllerUpdate.firstCall.args[0] === + 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' + ); + assert(mockStorageControllerUpdate.firstCall.args[1] === true); + }); + } + ); + + suite('when a user has been shown the initial overview page', () => { + let mockVSCodeExecuteCommand: SinonSpy; + + beforeEach(() => { + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'get', + sinon.fake.returns(true) + ); + mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); + sinon.replace( + vscode.commands, + 'executeCommand', + mockVSCodeExecuteCommand + ); + + void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); + }); + + test('they are not shown the overview page', () => { + assert(!mockVSCodeExecuteCommand.called); + }); + }); + }); + }); + suite('with real text document', () => { beforeEach(() => { + sinon.stub(vscode.window, 'showInformationMessage'); + sinon.stub(vscode.window, 'showErrorMessage'); + const mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'get', - sinon.fake.returns(true) + mdbTestExtension.testExtensionController._connectionController, + 'getActiveConnectionId', + mockActiveConnectionId ); + }); - mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); - sinon.replace( - vscode.commands, - 'executeCommand', - mockVSCodeExecuteCommand + afterEach(async () => { + await vscode.commands.executeCommand( + 'workbench.action.closeActiveEditor' + ); + sinon.restore(); + }); + + test('mdb.addDatabase should create a MongoDB playground with create collection template', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'tasty_sandwhich', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + await vscode.commands.executeCommand('mdb.addDatabase', mockTreeItem); + + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); + + const content = activeTextEditor.document.getText(); + assert(content.includes('// Create a new database.')); + assert(content.includes('NEW_DATABASE_NAME')); + assert(content.includes('NEW_COLLECTION_NAME')); + }); + + test('mdb.addCollection should create a MongoDB playground with create collection template', async () => { + const mockTreeItem = new DatabaseTreeItem( + 'iceCreamDB', + {}, + false, + false, + {} ); + await vscode.commands.executeCommand('mdb.addCollection', mockTreeItem); + + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); + + const content = activeTextEditor.document.getText(); + assert(content.includes('// The current database to use.')); + assert(content.includes('iceCreamDB')); + assert(content.includes('NEW_COLLECTION_NAME')); + assert(!content.includes('time-series')); + }); - void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); + test('mdb.searchForDocuments should create a MongoDB playground with search template', async () => { + await vscode.commands.executeCommand('mdb.searchForDocuments', { + databaseName: 'dbbbbbName', + collectionName: 'colllllllllName', + }); + + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); + + const content = activeTextEditor.document.getText(); + assert( + content.includes('Search for documents in the current collection.') + ); + assert(content.includes('dbbbbbName')); + assert(content.includes('colllllllllName')); }); - test('they are not shown the overview page', () => { - assert(!mockVSCodeExecuteCommand.called); + test('mdb.createIndexFromTreeView should create a MongoDB playground with index template', async () => { + await vscode.commands.executeCommand('mdb.createIndexFromTreeView', { + databaseName: 'dbbbbbName', + collectionName: 'colllllllllName', + }); + + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); + + const content = activeTextEditor.document.getText(); + assert(content.includes('Create a new index in the collection.')); + assert(content.includes('dbbbbbName')); + assert(content.includes('colllllllllName')); + }); + + test('mdb.createPlayground should create a MongoDB playground with default template', async () => { + const mockGetConfiguration = sinon.fake.returns({ + get: () => true, + }); + sinon.replace(vscode.workspace, 'getConfiguration', mockGetConfiguration); + await vscode.commands.executeCommand('mdb.createPlayground'); + + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); + + const content = activeTextEditor.document.getText(); + assert(content.includes('// MongoDB Playground')); + }); + + test('mdb.createPlayground command should create a MongoDB playground without template', async () => { + const mockGetConfiguration = sinon.fake.returns({ + get: () => false, + }); + sinon.replace(vscode.workspace, 'getConfiguration', mockGetConfiguration); + await vscode.commands.executeCommand('mdb.createPlayground'); + + const activeTextEditor = + mdbTestExtension.testExtensionController._playgroundController + ._activeTextEditor; + assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); + assert(activeTextEditor?.document.uri.scheme === 'untitled'); + + const content = activeTextEditor.document.getText(); + assert.strictEqual(content, ''); }); }); }); diff --git a/src/test/suite/telemetry/connectionTelemetry.test.ts b/src/test/suite/telemetry/connectionTelemetry.test.ts index 219e08da9..5af6a48f3 100644 --- a/src/test/suite/telemetry/connectionTelemetry.test.ts +++ b/src/test/suite/telemetry/connectionTelemetry.test.ts @@ -12,8 +12,8 @@ import * as connectionTelemetry from '../../../telemetry/connectionTelemetry'; const TEST_DATABASE_URI = 'mongodb://localhost:27018'; suite('ConnectionTelemetry Controller Test Suite', function () { - this.timeout(20000); - suite('with mock data service', () => { + suite('with mock data service', function () { + this.timeout(8000); let mockDataService: DataService; before(() => { @@ -114,7 +114,8 @@ suite('ConnectionTelemetry Controller Test Suite', function () { }); }); - suite('with live connection', () => { + suite('with live connection', function () { + this.timeout(20000); let dataServ; beforeEach(async () => { diff --git a/src/utils/playground.ts b/src/utils/playground.ts index 5f84f4439..576584965 100644 --- a/src/utils/playground.ts +++ b/src/utils/playground.ts @@ -58,7 +58,7 @@ const getStat = async (filePath: string): Promise => { }; const stat = (filePath: string): Promise => { - return fs.promises.stat(filePath); + return fs.promises.lstat(filePath); }; export const isPlayground = (fileUri?: vscode.Uri) => { From 23f3e855fb63fcf00ad533bef1f6a88f0ff5ce40 Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Tue, 28 Feb 2023 22:34:57 +0100 Subject: [PATCH 30/31] test: assert.strictEqual --- src/test/suite/mdbExtensionController.test.ts | 66 ++++++++++--------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/src/test/suite/mdbExtensionController.test.ts b/src/test/suite/mdbExtensionController.test.ts index c35f5e218..0631fd575 100644 --- a/src/test/suite/mdbExtensionController.test.ts +++ b/src/test/suite/mdbExtensionController.test.ts @@ -463,7 +463,7 @@ suite('MDBExtensionController Test Suite', function () { const collectionChildren = await mockTreeItem.getChildren(); const docListTreeItem = collectionChildren[0]; - assert(docListTreeItem.description === '9K'); + assert.strictEqual(docListTreeItem.description, '9K'); count = 10000; docListTreeItem.isExpanded = true; @@ -693,7 +693,7 @@ suite('MDBExtensionController Test Suite', function () { testCollectionTreeItem ); assert(successfullyDropped); - assert(calledNamespace === 'testDbName.testColName'); + assert.strictEqual(calledNamespace, 'testDbName.testColName'); }); test('mdb.dropCollection fails when a collection doesnt exist', async () => { @@ -1043,8 +1043,8 @@ suite('MDBExtensionController Test Suite', function () { ) ); await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); - assert(mockDocument.name === 'something sweet'); - assert(mockDocument.time.$time === '12345'); + assert.strictEqual(mockDocument.name, 'something sweet'); + assert.strictEqual(mockDocument.time.$time, '12345'); const expectedMessage = "The document was saved successfully to 'waffle.house'"; @@ -1529,27 +1529,30 @@ suite('MDBExtensionController Test Suite', function () { test('they are shown the overview page', () => { assert(mockVSCodeExecuteCommand.called); - assert( - mockVSCodeExecuteCommand.firstCall.args[0] === - 'mdb.openOverviewPage' + assert.strictEqual( + mockVSCodeExecuteCommand.firstCall.args[0], + 'mdb.openOverviewPage' ); - assert( - mockVSCodeExecuteCommand.firstCall.args[0] === - EXTENSION_COMMANDS.MDB_OPEN_OVERVIEW_PAGE + assert.strictEqual( + mockVSCodeExecuteCommand.firstCall.args[0], + EXTENSION_COMMANDS.MDB_OPEN_OVERVIEW_PAGE ); }); test("it sets that they've been shown the overview page", () => { assert(mockStorageControllerUpdate.called); - assert( - mockStorageControllerUpdate.firstCall.args[0] === - StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[0], + StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW ); - assert( - mockStorageControllerUpdate.firstCall.args[0] === - 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[0], + 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' + ); + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[1], + true ); - assert(mockStorageControllerUpdate.firstCall.args[1] === true); }); } ); @@ -1593,15 +1596,18 @@ suite('MDBExtensionController Test Suite', function () { test("it sets that they've been shown the overview page", () => { assert(mockStorageControllerUpdate.called); - assert( - mockStorageControllerUpdate.firstCall.args[0] === - StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[0], + StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW + ); + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[0], + 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' ); - assert( - mockStorageControllerUpdate.firstCall.args[0] === - 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[1], + true ); - assert(mockStorageControllerUpdate.firstCall.args[1] === true); }); } ); @@ -1666,7 +1672,7 @@ suite('MDBExtensionController Test Suite', function () { mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); const content = activeTextEditor.document.getText(); assert(content.includes('// Create a new database.')); @@ -1688,7 +1694,7 @@ suite('MDBExtensionController Test Suite', function () { mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); const content = activeTextEditor.document.getText(); assert(content.includes('// The current database to use.')); @@ -1707,7 +1713,7 @@ suite('MDBExtensionController Test Suite', function () { mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); const content = activeTextEditor.document.getText(); assert( @@ -1727,7 +1733,7 @@ suite('MDBExtensionController Test Suite', function () { mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); const content = activeTextEditor.document.getText(); assert(content.includes('Create a new index in the collection.')); @@ -1746,7 +1752,7 @@ suite('MDBExtensionController Test Suite', function () { mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); const content = activeTextEditor.document.getText(); assert(content.includes('// MongoDB Playground')); @@ -1763,7 +1769,7 @@ suite('MDBExtensionController Test Suite', function () { mdbTestExtension.testExtensionController._playgroundController ._activeTextEditor; assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert(activeTextEditor?.document.uri.scheme === 'untitled'); + assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); const content = activeTextEditor.document.getText(); assert.strictEqual(content, ''); From f8b73262249f2ac59f14da3e1e4fdc1d278d50ef Mon Sep 17 00:00:00 2001 From: Alena Khineika Date: Wed, 1 Mar 2023 00:24:10 +0100 Subject: [PATCH 31/31] test: mock text flaky text document --- src/test/suite/mdbExtensionController.test.ts | 3138 ++++++++--------- 1 file changed, 1535 insertions(+), 1603 deletions(-) diff --git a/src/test/suite/mdbExtensionController.test.ts b/src/test/suite/mdbExtensionController.test.ts index 0631fd575..9c8e20533 100644 --- a/src/test/suite/mdbExtensionController.test.ts +++ b/src/test/suite/mdbExtensionController.test.ts @@ -29,1603 +29,1633 @@ const testDatabaseURI = 'mongodb://localhost:27018'; suite('MDBExtensionController Test Suite', function () { this.timeout(10000); - suite('with mock text document', () => { - suite('when not connected', () => { - const sandbox = sinon.createSandbox(); - let fakeVscodeErrorMessage: SinonSpy; + suite('when not connected', () => { + const sandbox = sinon.createSandbox(); + let fakeVscodeErrorMessage: SinonSpy; - beforeEach(() => { - sinon.stub(vscode.window, 'showInformationMessage'); - sinon.stub(vscode.workspace, 'openTextDocument'); - sinon.stub(vscode.window, 'showTextDocument'); - fakeVscodeErrorMessage = sinon.fake(); - sinon.replace( - vscode.window, - 'showErrorMessage', - fakeVscodeErrorMessage - ); - }); + beforeEach(() => { + sinon.stub(vscode.window, 'showInformationMessage'); + sinon.stub(vscode.workspace, 'openTextDocument'); + sinon.stub(vscode.window, 'showTextDocument'); + fakeVscodeErrorMessage = sinon.fake(); + sinon.replace(vscode.window, 'showErrorMessage', fakeVscodeErrorMessage); + }); - afterEach(() => { - sandbox.restore(); - sinon.restore(); - }); + afterEach(() => { + sandbox.restore(); + sinon.restore(); + }); - test('mdb.addDatabase command fails when not connected to the connection', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'tasty_sandwhich', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - const addDatabaseSucceeded = await vscode.commands.executeCommand( - 'mdb.addDatabase', - mockTreeItem - ); - assert( - addDatabaseSucceeded === false, - 'Expected the command handler to return a false succeeded response' - ); + test('mdb.addDatabase command fails when not connected to the connection', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'tasty_sandwhich', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const addDatabaseSucceeded = await vscode.commands.executeCommand( + 'mdb.addDatabase', + mockTreeItem + ); + assert( + addDatabaseSucceeded === false, + 'Expected the command handler to return a false succeeded response' + ); - const expectedMessage = - 'Please connect to this connection before adding a database.'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected an error message "${expectedMessage}" to be shown when attempting to add a database to a not connected connection found "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); - }); + const expectedMessage = + 'Please connect to this connection before adding a database.'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected an error message "${expectedMessage}" to be shown when attempting to add a database to a not connected connection found "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); }); + }); - suite('when connected', () => { - const sandbox = sinon.createSandbox(); - let fakeShowInformationMessage: sinon.SinonStub; - let mockOpenTextDocument: SinonSpy; - let mockActiveConnectionId: SinonSpy; - let fakeVscodeErrorMessage: SinonSpy; + suite('when connected', () => { + const sandbox = sinon.createSandbox(); + let fakeShowInformationMessage: sinon.SinonStub; + let mockOpenTextDocument: SinonSpy; + let mockActiveConnectionId: SinonSpy; + let fakeVscodeErrorMessage: SinonSpy; + let fakeCreatePlaygroundFileWithContent: SinonSpy; + let fakeShowTextDocument: SinonSpy; - beforeEach(() => { - sinon.stub(vscode.window, 'showTextDocument'); - fakeShowInformationMessage = sinon.stub( - vscode.window, - 'showInformationMessage' - ); - mockOpenTextDocument = sinon.stub(vscode.workspace, 'openTextDocument'); - mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'getActiveConnectionId', - mockActiveConnectionId - ); - fakeVscodeErrorMessage = sinon.fake(); - sinon.replace( - vscode.window, - 'showErrorMessage', - fakeVscodeErrorMessage - ); - }); + beforeEach(() => { + fakeShowInformationMessage = sinon.stub( + vscode.window, + 'showInformationMessage' + ); + mockOpenTextDocument = sinon.stub(vscode.workspace, 'openTextDocument'); + mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'getActiveConnectionId', + mockActiveConnectionId + ); + fakeCreatePlaygroundFileWithContent = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundController, + '_createPlaygroundFileWithContent', + fakeCreatePlaygroundFileWithContent + ); + fakeVscodeErrorMessage = sinon.fake(); + sinon.replace(vscode.window, 'showErrorMessage', fakeVscodeErrorMessage); + fakeShowTextDocument = sinon.fake(); + sinon.replace(vscode.window, 'showTextDocument', fakeShowTextDocument); + }); - afterEach(() => { - sandbox.restore(); - sinon.restore(); - }); + afterEach(() => { + sandbox.restore(); + sinon.restore(); + }); - test('mdb.viewCollectionDocuments command should call onViewCollectionDocuments on the editor controller with the collection namespace', async () => { - const textCollectionTree = new CollectionTreeItem( - { - name: 'testColName', - type: CollectionTypes.collection, - }, - 'testDbName', - {}, - false, - false, - null - ); - await vscode.commands.executeCommand( - 'mdb.viewCollectionDocuments', - textCollectionTree - ); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].path.indexOf( - 'Results: testDbName.testColName' - ), - 0 - ); - assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].scheme, - VIEW_COLLECTION_SCHEME - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes( - 'namespace=testDbName.testColName' - ) - ); - }); + test('mdb.viewCollectionDocuments command should call onViewCollectionDocuments on the editor controller with the collection namespace', async () => { + const textCollectionTree = new CollectionTreeItem( + { + name: 'testColName', + type: CollectionTypes.collection, + }, + 'testDbName', + {}, + false, + false, + null + ); + await vscode.commands.executeCommand( + 'mdb.viewCollectionDocuments', + textCollectionTree + ); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].path.indexOf( + 'Results: testDbName.testColName' + ), + 0 + ); + assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].scheme, + VIEW_COLLECTION_SCHEME + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes( + 'namespace=testDbName.testColName' + ) + ); + }); - test('mdb.viewCollectionDocuments command should also work with the documents list', async () => { - const textCollectionTree = new CollectionTreeItem( - { - name: 'testColName', - type: CollectionTypes.collection, - }, - 'testDbName', - {}, - false, - false, - null - ); - await vscode.commands.executeCommand( - 'mdb.viewCollectionDocuments', - textCollectionTree - ); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].path.indexOf( - 'Results: testDbName.testColName' - ), - 0 - ); - assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].scheme, - VIEW_COLLECTION_SCHEME - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes( - 'namespace=testDbName.testColName' - ) - ); - }); + test('mdb.viewCollectionDocuments command should also work with the documents list', async () => { + const textCollectionTree = new CollectionTreeItem( + { + name: 'testColName', + type: CollectionTypes.collection, + }, + 'testDbName', + {}, + false, + false, + null + ); + await vscode.commands.executeCommand( + 'mdb.viewCollectionDocuments', + textCollectionTree + ); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].path.indexOf( + 'Results: testDbName.testColName' + ), + 0 + ); + assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].scheme, + VIEW_COLLECTION_SCHEME + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes( + 'namespace=testDbName.testColName' + ) + ); + }); - test('mdb.addConnection command should call openWebview on the webview controller', async () => { - const mockOpenWebview = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._webviewController, - 'openWebview', - mockOpenWebview - ); - await vscode.commands.executeCommand('mdb.addConnection'); - assert.strictEqual(mockOpenWebview.calledOnce, true); - }); + test('mdb.addConnection command should call openWebview on the webview controller', async () => { + const mockOpenWebview = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._webviewController, + 'openWebview', + mockOpenWebview + ); + await vscode.commands.executeCommand('mdb.addConnection'); + assert.strictEqual(mockOpenWebview.calledOnce, true); + }); - test('mdb.addConnectionWithURI command should call connectWithURI on the connection controller', async () => { - const mockConnectWithUri = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'connectWithURI', - mockConnectWithUri - ); - await vscode.commands.executeCommand('mdb.addConnectionWithURI'); - assert.strictEqual(mockConnectWithUri.calledOnce, true); - }); + test('mdb.addConnectionWithURI command should call connectWithURI on the connection controller', async () => { + const mockConnectWithUri = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'connectWithURI', + mockConnectWithUri + ); + await vscode.commands.executeCommand('mdb.addConnectionWithURI'); + assert.strictEqual(mockConnectWithUri.calledOnce, true); + }); - test('mdb.refreshConnection command should reset the cache on a connection tree item', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'test', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - mockTreeItem.cacheIsUpToDate = true; + test('mdb.refreshConnection command should reset the cache on a connection tree item', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'test', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + mockTreeItem.cacheIsUpToDate = true; - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - await vscode.commands.executeCommand( - 'mdb.refreshConnection', - mockTreeItem - ); - assert.strictEqual( - mockTreeItem.cacheIsUpToDate, - false, - 'Expected cache on tree item to be set to not up to date.' - ); - assert.strictEqual( - mockExplorerControllerRefresh.called, - true, - 'Expected explorer controller refresh to be called.' - ); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand( + 'mdb.refreshConnection', + mockTreeItem + ); + assert.strictEqual( + mockTreeItem.cacheIsUpToDate, + false, + 'Expected cache on tree item to be set to not up to date.' + ); + assert.strictEqual( + mockExplorerControllerRefresh.called, + true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.treeItemRemoveConnection command should call removeMongoDBConnection on the connection controller with the tree item connection id', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'craving_for_pancakes_with_maple_syrup', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - const mockRemoveMongoDBConnection = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'removeMongoDBConnection', - mockRemoveMongoDBConnection - ); - await vscode.commands.executeCommand( - 'mdb.treeItemRemoveConnection', - mockTreeItem - ); - assert.strictEqual(mockRemoveMongoDBConnection.calledOnce, true); - assert.strictEqual( - mockRemoveMongoDBConnection.firstCall.args[0], - 'craving_for_pancakes_with_maple_syrup' - ); - }); + test('mdb.treeItemRemoveConnection command should call removeMongoDBConnection on the connection controller with the tree item connection id', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'craving_for_pancakes_with_maple_syrup', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockRemoveMongoDBConnection = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'removeMongoDBConnection', + mockRemoveMongoDBConnection + ); + await vscode.commands.executeCommand( + 'mdb.treeItemRemoveConnection', + mockTreeItem + ); + assert.strictEqual(mockRemoveMongoDBConnection.calledOnce, true); + assert.strictEqual( + mockRemoveMongoDBConnection.firstCall.args[0], + 'craving_for_pancakes_with_maple_syrup' + ); + }); - test('mdb.copyConnectionString command should try to copy the driver url to the vscode env clipboard', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'craving_for_pancakes_with_maple_syrup', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - const mockStubUri = sinon.fake.returns('weStubThisUri'); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'copyConnectionStringByConnectionId', - mockStubUri - ); - await vscode.commands.executeCommand( - 'mdb.copyConnectionString', - mockTreeItem - ); - assert.strictEqual(mockCopyToClipboard.calledOnce, true); - assert.strictEqual( - mockCopyToClipboard.firstCall.args[0], - 'weStubThisUri' - ); - }); + test('mdb.copyConnectionString command should try to copy the driver url to the vscode env clipboard', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'craving_for_pancakes_with_maple_syrup', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + const mockStubUri = sinon.fake.returns('weStubThisUri'); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'copyConnectionStringByConnectionId', + mockStubUri + ); + await vscode.commands.executeCommand( + 'mdb.copyConnectionString', + mockTreeItem + ); + assert.strictEqual(mockCopyToClipboard.calledOnce, true); + assert.strictEqual( + mockCopyToClipboard.firstCall.args[0], + 'weStubThisUri' + ); + }); - test('mdb.copyDatabaseName command should try to copy the database name to the vscode env clipboard', async () => { - const mockTreeItem = new DatabaseTreeItem( - 'isClubMateTheBestDrinkEver', - {}, - false, - false, - {} - ); - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - await vscode.commands.executeCommand( - 'mdb.copyDatabaseName', - mockTreeItem - ); - assert.strictEqual(mockCopyToClipboard.calledOnce, true); - assert.strictEqual( - mockCopyToClipboard.firstCall.args[0], - 'isClubMateTheBestDrinkEver' - ); - }); + test('mdb.copyDatabaseName command should try to copy the database name to the vscode env clipboard', async () => { + const mockTreeItem = new DatabaseTreeItem( + 'isClubMateTheBestDrinkEver', + {}, + false, + false, + {} + ); + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + await vscode.commands.executeCommand( + 'mdb.copyDatabaseName', + mockTreeItem + ); + assert.strictEqual(mockCopyToClipboard.calledOnce, true); + assert.strictEqual( + mockCopyToClipboard.firstCall.args[0], + 'isClubMateTheBestDrinkEver' + ); + }); - test('mdb.copyCollectionName command should try to copy the collection name to the vscode env clipboard', async () => { - const mockTreeItem = new CollectionTreeItem( - { - name: 'waterBuffalo', - type: CollectionTypes.collection, - }, - 'airZebra', - {}, - false, - false, - null - ); - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - await vscode.commands.executeCommand( - 'mdb.copyCollectionName', - mockTreeItem - ); - assert( - mockCopyToClipboard.called, - 'Expected "writeText" to be called on "vscode.env.clipboard".' - ); - assert( - mockCopyToClipboard.firstCall.args[0] === 'waterBuffalo', - `Expected the clipboard to be sent the uri string "waterBuffalo", found ${mockCopyToClipboard.firstCall.args[0]}.` - ); - }); + test('mdb.copyCollectionName command should try to copy the collection name to the vscode env clipboard', async () => { + const mockTreeItem = new CollectionTreeItem( + { + name: 'waterBuffalo', + type: CollectionTypes.collection, + }, + 'airZebra', + {}, + false, + false, + null + ); + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + await vscode.commands.executeCommand( + 'mdb.copyCollectionName', + mockTreeItem + ); + assert( + mockCopyToClipboard.called, + 'Expected "writeText" to be called on "vscode.env.clipboard".' + ); + assert( + mockCopyToClipboard.firstCall.args[0] === 'waterBuffalo', + `Expected the clipboard to be sent the uri string "waterBuffalo", found ${mockCopyToClipboard.firstCall.args[0]}.` + ); + }); - test('mdb.copySchemaFieldName command should try to copy the field name to the vscode env clipboard', async () => { - const mockTreeItem = new FieldTreeItem( - { - name: 'dolphins are sentient', - probability: 1, - type: 'String', - types: [], - }, - false, - {} - ); - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - const commandResult = await vscode.commands.executeCommand( - 'mdb.copySchemaFieldName', - mockTreeItem - ); - assert(commandResult); - assert( - mockCopyToClipboard.called, - 'Expected "writeText" to be called on "vscode.env.clipboard".' - ); - assert( - mockCopyToClipboard.firstCall.args[0] === 'dolphins are sentient', - `Expected the clipboard to be sent the schema field name "dolphins are sentient", found ${mockCopyToClipboard.firstCall.args[0]}.` - ); - }); + test('mdb.copySchemaFieldName command should try to copy the field name to the vscode env clipboard', async () => { + const mockTreeItem = new FieldTreeItem( + { + name: 'dolphins are sentient', + probability: 1, + type: 'String', + types: [], + }, + false, + {} + ); + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + const commandResult = await vscode.commands.executeCommand( + 'mdb.copySchemaFieldName', + mockTreeItem + ); + assert(commandResult); + assert( + mockCopyToClipboard.called, + 'Expected "writeText" to be called on "vscode.env.clipboard".' + ); + assert( + mockCopyToClipboard.firstCall.args[0] === 'dolphins are sentient', + `Expected the clipboard to be sent the schema field name "dolphins are sentient", found ${mockCopyToClipboard.firstCall.args[0]}.` + ); + }); - test('mdb.refreshDatabase command should reset the cache on the database tree item', async () => { - const mockTreeItem = new DatabaseTreeItem( - 'pinkLemonade', - {}, - false, - false, - {} - ); - mockTreeItem.cacheIsUpToDate = true; + test('mdb.refreshDatabase command should reset the cache on the database tree item', async () => { + const mockTreeItem = new DatabaseTreeItem( + 'pinkLemonade', + {}, + false, + false, + {} + ); + mockTreeItem.cacheIsUpToDate = true; - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - await vscode.commands.executeCommand( - 'mdb.refreshDatabase', - mockTreeItem - ); - assert.strictEqual( - mockTreeItem.cacheIsUpToDate, - false, - 'Expected cache on tree item to be set to not up to date.' - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand('mdb.refreshDatabase', mockTreeItem); + assert.strictEqual( + mockTreeItem.cacheIsUpToDate, + false, + 'Expected cache on tree item to be set to not up to date.' + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.refreshCollection command should reset the expanded state of its children and call to refresh the explorer controller', async () => { - const mockTreeItem = new CollectionTreeItem( - { - name: 'iSawACatThatLookedLikeALionToday', - type: CollectionTypes.collection, - }, - 'airZebra', - {}, - false, - false, - null - ); - mockTreeItem.isExpanded = true; + test('mdb.refreshCollection command should reset the expanded state of its children and call to refresh the explorer controller', async () => { + const mockTreeItem = new CollectionTreeItem( + { + name: 'iSawACatThatLookedLikeALionToday', + type: CollectionTypes.collection, + }, + 'airZebra', + {}, + false, + false, + null + ); + mockTreeItem.isExpanded = true; - // Set expanded. - mockTreeItem.getSchemaChild().isExpanded = true; - mockTreeItem.getDocumentListChild().isExpanded = true; + // Set expanded. + mockTreeItem.getSchemaChild().isExpanded = true; + mockTreeItem.getDocumentListChild().isExpanded = true; - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - await vscode.commands.executeCommand( - 'mdb.refreshCollection', - mockTreeItem - ); - assert( - mockTreeItem.getSchemaChild().isExpanded === false, - 'Expected collection tree item child to be reset to not expanded.' - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand( + 'mdb.refreshCollection', + mockTreeItem + ); + assert( + mockTreeItem.getSchemaChild().isExpanded === false, + 'Expected collection tree item child to be reset to not expanded.' + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.refreshDocumentList command should update the document count and call to refresh the explorer controller', async () => { - let count = 9000; - const mockTreeItem = new CollectionTreeItem( - { - name: 'iSawACatThatLookedLikeALionToday', - type: CollectionTypes.collection, - }, - 'airZebra', - { estimatedCount: () => Promise.resolve(count) }, - false, - false, - null - ); - await mockTreeItem.onDidExpand(); + test('mdb.refreshDocumentList command should update the document count and call to refresh the explorer controller', async () => { + let count = 9000; + const mockTreeItem = new CollectionTreeItem( + { + name: 'iSawACatThatLookedLikeALionToday', + type: CollectionTypes.collection, + }, + 'airZebra', + { estimatedCount: () => Promise.resolve(count) }, + false, + false, + null + ); + await mockTreeItem.onDidExpand(); - const collectionChildren = await mockTreeItem.getChildren(); - const docListTreeItem = collectionChildren[0]; - assert.strictEqual(docListTreeItem.description, '9K'); - count = 10000; - docListTreeItem.isExpanded = true; + const collectionChildren = await mockTreeItem.getChildren(); + const docListTreeItem = collectionChildren[0]; + assert.strictEqual(docListTreeItem.description, '9K'); + count = 10000; + docListTreeItem.isExpanded = true; - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); - await vscode.commands.executeCommand( - 'mdb.refreshDocumentList', - docListTreeItem - ); - assert( - docListTreeItem.cacheIsUpToDate === false, - 'Expected document list cache to be out of date.' - ); - assert( - mockTreeItem.documentCount === 10000, - `Expected document count to be 10000, found ${mockTreeItem.documentCount}.` - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + await vscode.commands.executeCommand( + 'mdb.refreshDocumentList', + docListTreeItem + ); + assert( + docListTreeItem.cacheIsUpToDate === false, + 'Expected document list cache to be out of date.' + ); + assert( + mockTreeItem.documentCount === 10000, + `Expected document count to be 10000, found ${mockTreeItem.documentCount}.` + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.refreshSchema command should reset its cache and call to refresh the explorer controller', async () => { - const mockTreeItem = new SchemaTreeItem( - 'zebraWearwolf', - 'giraffeVampire', - {} as DataService, - false, - false, - false, - false, - {} - ); + test('mdb.refreshSchema command should reset its cache and call to refresh the explorer controller', async () => { + const mockTreeItem = new SchemaTreeItem( + 'zebraWearwolf', + 'giraffeVampire', + {} as DataService, + false, + false, + false, + false, + {} + ); - // Set cached. - mockTreeItem.cacheIsUpToDate = true; + // Set cached. + mockTreeItem.cacheIsUpToDate = true; - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - await vscode.commands.executeCommand('mdb.refreshSchema', mockTreeItem); - assert( - !mockTreeItem.cacheIsUpToDate, - 'Expected schema field cache to be not up to date.' - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand('mdb.refreshSchema', mockTreeItem); + assert( + !mockTreeItem.cacheIsUpToDate, + 'Expected schema field cache to be not up to date.' + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.refreshIndexes command should reset its cache and call to refresh the explorer controller', async () => { - const mockTreeItem = new IndexListTreeItem( - 'zebraWearwolf', - 'giraffeVampire', - {} as DataService, - false, - false, - [] - ); + test('mdb.refreshIndexes command should reset its cache and call to refresh the explorer controller', async () => { + const mockTreeItem = new IndexListTreeItem( + 'zebraWearwolf', + 'giraffeVampire', + {} as DataService, + false, + false, + [] + ); - // Set cached. - mockTreeItem.cacheIsUpToDate = true; + // Set cached. + mockTreeItem.cacheIsUpToDate = true; - const mockExplorerControllerRefresh = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._explorerController, - 'refresh', - mockExplorerControllerRefresh - ); - await vscode.commands.executeCommand( - 'mdb.refreshIndexes', - mockTreeItem - ); - assert( - !mockTreeItem.cacheIsUpToDate, - 'Expected schema field cache to be not up to date.' - ); - assert( - mockExplorerControllerRefresh.called === true, - 'Expected explorer controller refresh to be called.' - ); - }); + const mockExplorerControllerRefresh = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._explorerController, + 'refresh', + mockExplorerControllerRefresh + ); + await vscode.commands.executeCommand('mdb.refreshIndexes', mockTreeItem); + assert( + !mockTreeItem.cacheIsUpToDate, + 'Expected schema field cache to be not up to date.' + ); + assert( + mockExplorerControllerRefresh.called === true, + 'Expected explorer controller refresh to be called.' + ); + }); - test('mdb.addDatabase command fails when disconnecting', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'tasty_sandwhich', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('theDbName'); - mockInputBoxResolves.onCall(1).resolves('theCollectionName'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + test('mdb.addDatabase should create a MongoDB playground with create collection template', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'tasty_sandwhich', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + await vscode.commands.executeCommand('mdb.addDatabase', mockTreeItem); - const mockIsDisconnecting = sinon.fake.returns(true); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'isDisconnecting', - mockIsDisconnecting - ); + const content = fakeCreatePlaygroundFileWithContent.firstCall.args[0]; + assert(content.includes('// Create a new database.')); + assert(content.includes('NEW_DATABASE_NAME')); + assert(content.includes('NEW_COLLECTION_NAME')); + }); - const addDatabaseSucceeded = await vscode.commands.executeCommand( - 'mdb.addDatabase', - mockTreeItem - ); - assert( - addDatabaseSucceeded === false, - 'Expected the add database command handler to return a false succeeded response' - ); + test('mdb.addCollection should create a MongoDB playground with create collection template', async () => { + const mockTreeItem = new DatabaseTreeItem( + 'iceCreamDB', + {}, + false, + false, + {} + ); + await vscode.commands.executeCommand('mdb.addCollection', mockTreeItem); - const expectedMessage = - 'Unable to add database: currently disconnecting.'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected the error message "${expectedMessage}" to be shown when attempting to add a database while disconnecting, found "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); + const content = fakeCreatePlaygroundFileWithContent.firstCall.args[0]; + assert(content.includes('// The current database to use.')); + assert(content.includes('iceCreamDB')); + assert(content.includes('NEW_COLLECTION_NAME')); + assert(!content.includes('time-series')); + }); + + test('mdb.searchForDocuments should create a MongoDB playground with search template', async () => { + await vscode.commands.executeCommand('mdb.searchForDocuments', { + databaseName: 'dbbbbbName', + collectionName: 'colllllllllName', }); - test('mdb.addDatabase command fails when connecting', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'tasty_sandwhich', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('theDbName'); - mockInputBoxResolves.onCall(1).resolves('theCollectionName'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + const content = fakeCreatePlaygroundFileWithContent.firstCall.args[0]; + assert( + content.includes('Search for documents in the current collection.') + ); + assert(content.includes('dbbbbbName')); + assert(content.includes('colllllllllName')); + }); - const mockIsConnecting = sinon.fake.returns(true); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'isConnecting', - mockIsConnecting - ); + test('mdb.createIndexFromTreeView should create a MongoDB playground with index template', async () => { + await vscode.commands.executeCommand('mdb.createIndexFromTreeView', { + databaseName: 'dbbbbbName', + collectionName: 'colllllllllName', + }); - const addDatabaseSucceeded = await vscode.commands.executeCommand( - 'mdb.addDatabase', - mockTreeItem - ); - assert( - addDatabaseSucceeded === false, - 'Expected the add database command handler to return a false succeeded response' - ); + const content = fakeCreatePlaygroundFileWithContent.firstCall.args[0]; + assert(content.includes('Create a new index in the collection.')); + assert(content.includes('dbbbbbName')); + assert(content.includes('colllllllllName')); + }); - const expectedMessage = 'Unable to add database: currently connecting.'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected the error message "${expectedMessage}" to be shown when attempting to add a database while disconnecting, found "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); + test('mdb.createPlayground should create a MongoDB playground with default template', async () => { + const mockGetConfiguration = sinon.fake.returns({ + get: () => true, }); + sinon.replace(vscode.workspace, 'getConfiguration', mockGetConfiguration); + await vscode.commands.executeCommand('mdb.createPlayground'); - test('mdb.addCollection command fails when disconnecting', async () => { - const mockTreeItem = new DatabaseTreeItem( - 'iceCreamDB', - {}, - false, - false, - {} - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('mintChocolateChips'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - - const mockIsDisconnecting = sinon.fake.returns(true); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'isDisconnecting', - mockIsDisconnecting - ); + const content = fakeCreatePlaygroundFileWithContent.firstCall.args[0]; + assert(content.includes('// MongoDB Playground')); + }); - const addCollectionSucceeded = await vscode.commands.executeCommand( - 'mdb.addCollection', - mockTreeItem - ); - assert( - addCollectionSucceeded === false, - 'Expected the add collection command handler to return a false succeeded response' - ); - const expectedMessage = - 'Unable to add collection: currently disconnecting.'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected "${expectedMessage}" when adding a database to a not connected connection, recieved "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); + test('mdb.createPlayground command should create a MongoDB playground without template', async () => { + const mockGetConfiguration = sinon.fake.returns({ + get: () => false, }); + sinon.replace(vscode.workspace, 'getConfiguration', mockGetConfiguration); + await vscode.commands.executeCommand('mdb.createPlayground'); + + const content = fakeCreatePlaygroundFileWithContent.firstCall.args[0]; + assert.strictEqual(content, ''); + }); + + test('mdb.addDatabase command fails when disconnecting', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'tasty_sandwhich', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('theDbName'); + mockInputBoxResolves.onCall(1).resolves('theCollectionName'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + + const mockIsDisconnecting = sinon.fake.returns(true); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'isDisconnecting', + mockIsDisconnecting + ); + + const addDatabaseSucceeded = await vscode.commands.executeCommand( + 'mdb.addDatabase', + mockTreeItem + ); + assert( + addDatabaseSucceeded === false, + 'Expected the add database command handler to return a false succeeded response' + ); + + const expectedMessage = + 'Unable to add database: currently disconnecting.'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected the error message "${expectedMessage}" to be shown when attempting to add a database while disconnecting, found "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); + }); + + test('mdb.addDatabase command fails when connecting', async () => { + const mockTreeItem = new ConnectionTreeItem( + 'tasty_sandwhich', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('theDbName'); + mockInputBoxResolves.onCall(1).resolves('theCollectionName'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + + const mockIsConnecting = sinon.fake.returns(true); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'isConnecting', + mockIsConnecting + ); + + const addDatabaseSucceeded = await vscode.commands.executeCommand( + 'mdb.addDatabase', + mockTreeItem + ); + assert( + addDatabaseSucceeded === false, + 'Expected the add database command handler to return a false succeeded response' + ); + + const expectedMessage = 'Unable to add database: currently connecting.'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected the error message "${expectedMessage}" to be shown when attempting to add a database while disconnecting, found "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); + }); + + test('mdb.addCollection command fails when disconnecting', async () => { + const mockTreeItem = new DatabaseTreeItem( + 'iceCreamDB', + {}, + false, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('mintChocolateChips'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + + const mockIsDisconnecting = sinon.fake.returns(true); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'isDisconnecting', + mockIsDisconnecting + ); - // https://code.visualstudio.com/api/references/contribution-points#Sorting-of-groups - test('mdb.dropCollection calls data service to drop the collection after inputting the collection name', async () => { - let calledNamespace = ''; - const testCollectionTreeItem = new CollectionTreeItem( - { name: 'testColName', type: CollectionTypes.collection }, - 'testDbName', - { - dropCollection: (namespace, callback): void => { - calledNamespace = namespace; - callback(null, true); - }, + const addCollectionSucceeded = await vscode.commands.executeCommand( + 'mdb.addCollection', + mockTreeItem + ); + assert( + addCollectionSucceeded === false, + 'Expected the add collection command handler to return a false succeeded response' + ); + const expectedMessage = + 'Unable to add collection: currently disconnecting.'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected "${expectedMessage}" when adding a database to a not connected connection, recieved "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); + }); + + // https://code.visualstudio.com/api/references/contribution-points#Sorting-of-groups + test('mdb.dropCollection calls data service to drop the collection after inputting the collection name', async () => { + let calledNamespace = ''; + const testCollectionTreeItem = new CollectionTreeItem( + { name: 'testColName', type: CollectionTypes.collection }, + 'testDbName', + { + dropCollection: (namespace, callback): void => { + calledNamespace = namespace; + callback(null, true); }, - false, - false, - null - ); + }, + false, + false, + null + ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('testColName'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('testColName'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropCollection', - testCollectionTreeItem - ); - assert(successfullyDropped); - assert.strictEqual(calledNamespace, 'testDbName.testColName'); - }); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropCollection', + testCollectionTreeItem + ); + assert(successfullyDropped); + assert.strictEqual(calledNamespace, 'testDbName.testColName'); + }); - test('mdb.dropCollection fails when a collection doesnt exist', async () => { - const testConnectionController = - mdbTestExtension.testExtensionController._connectionController; - await testConnectionController.addNewConnectionStringAndConnect( - testDatabaseURI - ); + test('mdb.dropCollection fails when a collection doesnt exist', async () => { + const testConnectionController = + mdbTestExtension.testExtensionController._connectionController; + await testConnectionController.addNewConnectionStringAndConnect( + testDatabaseURI + ); - const testCollectionTreeItem = new CollectionTreeItem( - { name: 'doesntExistColName', type: CollectionTypes.collection }, - 'doesntExistDBName', - testConnectionController.getActiveDataService(), - false, - false, - null - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('doesntExistColName'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + const testCollectionTreeItem = new CollectionTreeItem( + { name: 'doesntExistColName', type: CollectionTypes.collection }, + 'doesntExistDBName', + testConnectionController.getActiveDataService(), + false, + false, + null + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('doesntExistColName'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropCollection', - testCollectionTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop collection command handler to return a false succeeded response' - ); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropCollection', + testCollectionTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop collection command handler to return a false succeeded response' + ); - const expectedMessage = 'Drop collection failed: ns not found'; - assert( - fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, - `Expected "${expectedMessage}" when dropping a collection that doesn't exist, recieved "${fakeVscodeErrorMessage.firstCall.args[0]}"` - ); - await testConnectionController.disconnect(); - testConnectionController.clearAllConnections(); - }); + const expectedMessage = 'Drop collection failed: ns not found'; + assert( + fakeVscodeErrorMessage.firstCall.args[0] === expectedMessage, + `Expected "${expectedMessage}" when dropping a collection that doesn't exist, recieved "${fakeVscodeErrorMessage.firstCall.args[0]}"` + ); + await testConnectionController.disconnect(); + testConnectionController.clearAllConnections(); + }); - test('mdb.dropCollection fails when the input doesnt match the collection name', async () => { - const testCollectionTreeItem = new CollectionTreeItem( - { name: 'orange', type: CollectionTypes.collection }, - 'fruitsThatAreTasty', - {}, - false, - false, - null - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('apple'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + test('mdb.dropCollection fails when the input doesnt match the collection name', async () => { + const testCollectionTreeItem = new CollectionTreeItem( + { name: 'orange', type: CollectionTypes.collection }, + 'fruitsThatAreTasty', + {}, + false, + false, + null + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('apple'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropCollection', - testCollectionTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop collection command handler to return a false succeeded response' - ); - }); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropCollection', + testCollectionTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop collection command handler to return a false succeeded response' + ); + }); - test('mdb.dropCollection fails when the collection name input is empty', async () => { - const testCollectionTreeItem = new CollectionTreeItem( - { name: 'orange', type: CollectionTypes.view }, - 'fruitsThatAreTasty', - {}, - false, - false, - null - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + test('mdb.dropCollection fails when the collection name input is empty', async () => { + const testCollectionTreeItem = new CollectionTreeItem( + { name: 'orange', type: CollectionTypes.view }, + 'fruitsThatAreTasty', + {}, + false, + false, + null + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropCollection', - testCollectionTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop collection command handler to return a false succeeded response' - ); - }); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropCollection', + testCollectionTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop collection command handler to return a false succeeded response' + ); + }); - test('mdb.dropDatabase calls dataservice to drop the database after inputting the database name', async () => { - let calledDatabaseName = ''; - const testDatabaseTreeItem = new DatabaseTreeItem( - 'iMissTangerineAltoids', - { - dropDatabase: (dbName, callback): void => { - calledDatabaseName = dbName; - callback(null, true); - }, + test('mdb.dropDatabase calls dataservice to drop the database after inputting the database name', async () => { + let calledDatabaseName = ''; + const testDatabaseTreeItem = new DatabaseTreeItem( + 'iMissTangerineAltoids', + { + dropDatabase: (dbName, callback): void => { + calledDatabaseName = dbName; + callback(null, true); }, - false, - false, - {} - ); - - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('iMissTangerineAltoids'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + }, + false, + false, + {} + ); - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropDatabase', - testDatabaseTreeItem - ); - assert.strictEqual(successfullyDropped, true); - assert.strictEqual(calledDatabaseName, 'iMissTangerineAltoids'); - }); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('iMissTangerineAltoids'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - test('mdb.dropDatabase succeeds even when a database doesnt exist (mdb behavior)', async () => { - const testConnectionController = - mdbTestExtension.testExtensionController._connectionController; - await testConnectionController.addNewConnectionStringAndConnect( - testDatabaseURI - ); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropDatabase', + testDatabaseTreeItem + ); + assert.strictEqual(successfullyDropped, true); + assert.strictEqual(calledDatabaseName, 'iMissTangerineAltoids'); + }); - const testDatabaseTreeItem = new DatabaseTreeItem( - 'narnia____a', - testConnectionController.getActiveDataService(), - false, - false, - {} - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('narnia____a'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + test('mdb.dropDatabase succeeds even when a database doesnt exist (mdb behavior)', async () => { + const testConnectionController = + mdbTestExtension.testExtensionController._connectionController; + await testConnectionController.addNewConnectionStringAndConnect( + testDatabaseURI + ); - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropDatabase', - testDatabaseTreeItem - ); - assert( - successfullyDropped, - 'Expected the drop database command handler to return a successful boolean response' - ); - assert( - fakeVscodeErrorMessage.called === false, - 'Expected no error messages' - ); - }); + const testDatabaseTreeItem = new DatabaseTreeItem( + 'narnia____a', + testConnectionController.getActiveDataService(), + false, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('narnia____a'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - test('mdb.dropDatabase fails when the input doesnt match the database name', async () => { - const testDatabaseTreeItem = new DatabaseTreeItem( - 'cinnamonToastCrunch', - {}, - false, - false, - {} - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('apple'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropDatabase', + testDatabaseTreeItem + ); + assert( + successfullyDropped, + 'Expected the drop database command handler to return a successful boolean response' + ); + assert( + fakeVscodeErrorMessage.called === false, + 'Expected no error messages' + ); + }); - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropDatabase', - testDatabaseTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop database command handler to return a false succeeded response' - ); - }); + test('mdb.dropDatabase fails when the input doesnt match the database name', async () => { + const testDatabaseTreeItem = new DatabaseTreeItem( + 'cinnamonToastCrunch', + {}, + false, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('apple'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - test('mdb.dropDatabase fails when the database name input is empty', async () => { - const testDatabaseTreeItem = new DatabaseTreeItem( - 'blueBerryPancakesAndTheSmellOfBacon', - {}, - false, - false, - {} - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropDatabase', + testDatabaseTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop database command handler to return a false succeeded response' + ); + }); - const successfullyDropped = await vscode.commands.executeCommand( - 'mdb.dropDatabase', - testDatabaseTreeItem - ); - assert( - successfullyDropped === false, - 'Expected the drop database command handler to return a false succeeded response' - ); - }); + test('mdb.dropDatabase fails when the database name input is empty', async () => { + const testDatabaseTreeItem = new DatabaseTreeItem( + 'blueBerryPancakesAndTheSmellOfBacon', + {}, + false, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - test('mdb.renameConnection fails when the name input is empty', async () => { - mdbTestExtension.testExtensionController._connectionController._connections.blueBerryPancakesAndTheSmellOfBacon = - { - id: 'blueBerryPancakesAndTheSmellOfBacon', - connectionOptions: { connectionString: 'mongodb://localhost' }, - name: 'NAAAME', - storageLocation: StorageLocation.NONE, - }; - - const mockTreeItem = new ConnectionTreeItem( - 'blueBerryPancakesAndTheSmellOfBacon', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); + const successfullyDropped = await vscode.commands.executeCommand( + 'mdb.dropDatabase', + testDatabaseTreeItem + ); + assert( + successfullyDropped === false, + 'Expected the drop database command handler to return a false succeeded response' + ); + }); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + test('mdb.renameConnection fails when the name input is empty', async () => { + mdbTestExtension.testExtensionController._connectionController._connections.blueBerryPancakesAndTheSmellOfBacon = + { + id: 'blueBerryPancakesAndTheSmellOfBacon', + connectionOptions: { connectionString: 'mongodb://localhost' }, + name: 'NAAAME', + storageLocation: StorageLocation.NONE, + }; - const successfullyRenamed = await vscode.commands.executeCommand( - 'mdb.renameConnection', - mockTreeItem - ); - assert( - successfullyRenamed === false, - 'Expected the rename connection command handler to return a false succeeded response' - ); - assert( - mdbTestExtension.testExtensionController._connectionController - ._connections.blueBerryPancakesAndTheSmellOfBacon.name === 'NAAAME', - 'Expected connection not to be ranamed.' - ); - mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); - }); + const mockTreeItem = new ConnectionTreeItem( + 'blueBerryPancakesAndTheSmellOfBacon', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); - test('mdb.renameConnection updates the name of a connection', async () => { - mdbTestExtension.testExtensionController._connectionController._connections.blueBerryPancakesAndTheSmellOfBacon = - { - id: 'blueBerryPancakesAndTheSmellOfBacon', - name: 'NAAAME', - connectionOptions: { connectionString: 'mongodb://localhost' }, - storageLocation: StorageLocation.NONE, - }; - - const mockTreeItem = new ConnectionTreeItem( - 'blueBerryPancakesAndTheSmellOfBacon', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - const mockInputBoxResolves: any = sinon.stub(); - mockInputBoxResolves.onCall(0).resolves('orange juice'); - sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves(/* Return undefined. */); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - const successfullyRenamed = await vscode.commands.executeCommand( - 'mdb.renameConnection', - mockTreeItem - ); - assert.strictEqual(successfullyRenamed, true); - assert.strictEqual( - mdbTestExtension.testExtensionController._connectionController - ._connections.blueBerryPancakesAndTheSmellOfBacon.name, - 'orange juice' - ); - mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); - }); + const successfullyRenamed = await vscode.commands.executeCommand( + 'mdb.renameConnection', + mockTreeItem + ); + assert( + successfullyRenamed === false, + 'Expected the rename connection command handler to return a false succeeded response' + ); + assert( + mdbTestExtension.testExtensionController._connectionController + ._connections.blueBerryPancakesAndTheSmellOfBacon.name === 'NAAAME', + 'Expected connection not to be ranamed.' + ); + mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); + }); - test('mdb.openMongoDBDocumentFromTree openes a document from the sidebar and saves it to MongoDB', async () => { - const mockDocument = { - _id: 'pancakes', - name: '', - time: { - $time: '12345', - }, + test('mdb.renameConnection updates the name of a connection', async () => { + mdbTestExtension.testExtensionController._connectionController._connections.blueBerryPancakesAndTheSmellOfBacon = + { + id: 'blueBerryPancakesAndTheSmellOfBacon', + name: 'NAAAME', + connectionOptions: { connectionString: 'mongodb://localhost' }, + storageLocation: StorageLocation.NONE, }; - const mockGet = sinon.fake.returns('pancakes'); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._documentIdStore, - 'get', - mockGet - ); - const activeTextEditor = mockTextEditor; - activeTextEditor.document.uri = vscode.Uri.parse( - [ - 'VIEW_DOCUMENT_SCHEME:/', - 'waffle.house:pancakes.json?', - 'namespace=waffle.house&', - 'connectionId=tasty_sandwhich&', - 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a&', - 'source=treeview', - ].join('') - ); - activeTextEditor.document.getText = () => JSON.stringify(mockDocument); - sandbox.replaceGetter( - vscode.window, - 'activeTextEditor', - () => activeTextEditor - ); + const mockTreeItem = new ConnectionTreeItem( + 'blueBerryPancakesAndTheSmellOfBacon', + vscode.TreeItemCollapsibleState.None, + false, + mdbTestExtension.testExtensionController._connectionController, + false, + {} + ); + const mockInputBoxResolves: any = sinon.stub(); + mockInputBoxResolves.onCall(0).resolves('orange juice'); + sinon.replace(vscode.window, 'showInputBox', mockInputBoxResolves); - const mockGetActiveDataService = sinon.fake.returns({ - find: () => { - return Promise.resolve([mockDocument]); - }, - findOneAndReplace: ( - namespace: string, - filter: object, - replacement: object, - options: object, - callback: (error: Error | null, result: object) => void - ) => { - mockDocument.name = 'something sweet'; - - return callback(null, mockDocument); - }, - }); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'getActiveDataService', - mockGetActiveDataService - ); + const successfullyRenamed = await vscode.commands.executeCommand( + 'mdb.renameConnection', + mockTreeItem + ); + assert.strictEqual(successfullyRenamed, true); + assert.strictEqual( + mdbTestExtension.testExtensionController._connectionController + ._connections.blueBerryPancakesAndTheSmellOfBacon.name, + 'orange juice' + ); + mdbTestExtension.testExtensionController._connectionController.clearAllConnections(); + }); - const documentItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - {} as DataService, - () => Promise.resolve() - ); - await vscode.commands.executeCommand( - 'mdb.openMongoDBDocumentFromTree', - documentItem - ); - assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); - assert.strictEqual( - mockOpenTextDocument.firstCall.args[0].scheme, - 'VIEW_DOCUMENT_SCHEME' - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes('documentId=') - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes('connectionId=') - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes( - 'source=treeview' - ) - ); - assert( - mockOpenTextDocument.firstCall.args[0].query.includes( - 'namespace=waffle.house' - ) - ); - await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); - assert.strictEqual(mockDocument.name, 'something sweet'); - assert.strictEqual(mockDocument.time.$time, '12345'); + test('mdb.openMongoDBDocumentFromTree openes a document from the sidebar and saves it to MongoDB', async () => { + const mockDocument = { + _id: 'pancakes', + name: '', + time: { + $time: '12345', + }, + }; + const mockGet = sinon.fake.returns('pancakes'); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._documentIdStore, + 'get', + mockGet + ); - const expectedMessage = - "The document was saved successfully to 'waffle.house'"; + const activeTextEditor = mockTextEditor; + activeTextEditor.document.uri = vscode.Uri.parse( + [ + 'VIEW_DOCUMENT_SCHEME:/', + 'waffle.house:pancakes.json?', + 'namespace=waffle.house&', + 'connectionId=tasty_sandwhich&', + 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a&', + 'source=treeview', + ].join('') + ); + activeTextEditor.document.getText = () => JSON.stringify(mockDocument); + sandbox.replaceGetter( + vscode.window, + 'activeTextEditor', + () => activeTextEditor + ); - assert.strictEqual( - fakeShowInformationMessage.firstCall.args[0], - expectedMessage - ); + const mockGetActiveDataService = sinon.fake.returns({ + find: () => { + return Promise.resolve([mockDocument]); + }, + findOneAndReplace: ( + namespace: string, + filter: object, + replacement: object, + options: object, + callback: (error: Error | null, result: object) => void + ) => { + mockDocument.name = 'something sweet'; + + return callback(null, mockDocument); + }, }); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'getActiveDataService', + mockGetActiveDataService + ); - test('mdb.openMongoDBDocumentFromTree openes a document from a tree with a treeview source', async () => { - const mockDocument = { - _id: 'pancakes', - name: '', - time: { - $time: '12345', - }, - }; - const documentItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - {} as DataService, - () => Promise.resolve() - ); - const mockFetchDocument = sinon.fake.resolves(null); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._mongoDBDocumentService, - 'fetchDocument', - mockFetchDocument - ); - await vscode.commands.executeCommand( - 'mdb.openMongoDBDocumentFromTree', - documentItem - ); - assert.strictEqual( - mockFetchDocument.firstCall.args[0].source, - 'treeview' - ); - }); + const documentItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + {} as DataService, + () => Promise.resolve() + ); + await vscode.commands.executeCommand( + 'mdb.openMongoDBDocumentFromTree', + documentItem + ); + assert(mockOpenTextDocument.firstCall.args[0].path.includes('.json')); + assert.strictEqual( + mockOpenTextDocument.firstCall.args[0].scheme, + 'VIEW_DOCUMENT_SCHEME' + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes('documentId=') + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes('connectionId=') + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes('source=treeview') + ); + assert( + mockOpenTextDocument.firstCall.args[0].query.includes( + 'namespace=waffle.house' + ) + ); + await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); + assert.strictEqual(mockDocument.name, 'something sweet'); + assert.strictEqual(mockDocument.time.$time, '12345'); - test('mdb.openMongoDBDocumentFromCodeLens openes a document from a playground results with a playground source', async () => { - const documentItem = { - source: 'playground', - line: 1, - documentId: '93333a0d-83f6-4e6f-a575-af7ea6187a4a', - namespace: 'db.coll', - connectionId: null, - }; - const mockFetchDocument = sinon.fake.resolves(null); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._mongoDBDocumentService, - 'fetchDocument', - mockFetchDocument - ); - await vscode.commands.executeCommand( - 'mdb.openMongoDBDocumentFromCodeLens', - documentItem - ); - assert.strictEqual( - mockFetchDocument.firstCall.args[0].source, - 'playground' - ); - }); + const expectedMessage = + "The document was saved successfully to 'waffle.house'"; - test('mdb.saveMongoDBDocument replaces a document with a treeview source', async () => { - const mockDocument = { - _id: 'pancakes', - name: '', - time: { - $time: '12345', - }, - }; - const mockGet = sinon.fake.returns('pancakes'); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._documentIdStore, - 'get', - mockGet - ); - sandbox.replaceGetter( - vscode.window, - 'activeTextEditor', - () => - ({ - document: { - uri: { - scheme: 'VIEW_DOCUMENT_SCHEME', - query: [ - 'namespace=waffle.house', - 'connectionId=tasty_sandwhich', - 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a', - 'source=treeview', - ].join('&'), - }, - getText: () => JSON.stringify(mockDocument), - save: () => {}, - }, - } as unknown as typeof vscode.window.activeTextEditor) - ); + assert.strictEqual( + fakeShowInformationMessage.firstCall.args[0], + expectedMessage + ); + }); - const mockReplaceDocument = sinon.fake.resolves(null); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._mongoDBDocumentService, - 'replaceDocument', - mockReplaceDocument - ); - await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); - assert.strictEqual( - mockReplaceDocument.firstCall.args[0].source, - 'treeview' - ); - }); + test('mdb.openMongoDBDocumentFromTree openes a document from a tree with a treeview source', async () => { + const mockDocument = { + _id: 'pancakes', + name: '', + time: { + $time: '12345', + }, + }; + const documentItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + {} as DataService, + () => Promise.resolve() + ); + const mockFetchDocument = sinon.fake.resolves(null); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._mongoDBDocumentService, + 'fetchDocument', + mockFetchDocument + ); + await vscode.commands.executeCommand( + 'mdb.openMongoDBDocumentFromTree', + documentItem + ); + assert.strictEqual( + mockFetchDocument.firstCall.args[0].source, + 'treeview' + ); + }); - test('mdb.saveMongoDBDocuments replaces a document with a playground source', async () => { - const mockDocument = { - _id: 'pancakes', - name: '', - time: { - $time: '12345', - }, - }; - const mockGet = sinon.fake.returns('pancakes'); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._documentIdStore, - 'get', - mockGet - ); - sandbox.replaceGetter( - vscode.window, - 'activeTextEditor', - () => - ({ - document: { - uri: { - scheme: 'VIEW_DOCUMENT_SCHEME', - query: [ - 'namespace=waffle.house', - 'connectionId=tasty_sandwhich', - 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a', - 'source=playground', - ].join('&'), - }, - getText: () => JSON.stringify(mockDocument), - save: () => {}, + test('mdb.openMongoDBDocumentFromCodeLens openes a document from a playground results with a playground source', async () => { + const documentItem = { + source: 'playground', + line: 1, + documentId: '93333a0d-83f6-4e6f-a575-af7ea6187a4a', + namespace: 'db.coll', + connectionId: null, + }; + const mockFetchDocument = sinon.fake.resolves(null); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._mongoDBDocumentService, + 'fetchDocument', + mockFetchDocument + ); + await vscode.commands.executeCommand( + 'mdb.openMongoDBDocumentFromCodeLens', + documentItem + ); + assert.strictEqual( + mockFetchDocument.firstCall.args[0].source, + 'playground' + ); + }); + + test('mdb.saveMongoDBDocument replaces a document with a treeview source', async () => { + const mockDocument = { + _id: 'pancakes', + name: '', + time: { + $time: '12345', + }, + }; + const mockGet = sinon.fake.returns('pancakes'); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._documentIdStore, + 'get', + mockGet + ); + sandbox.replaceGetter( + vscode.window, + 'activeTextEditor', + () => + ({ + document: { + uri: { + scheme: 'VIEW_DOCUMENT_SCHEME', + query: [ + 'namespace=waffle.house', + 'connectionId=tasty_sandwhich', + 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a', + 'source=treeview', + ].join('&'), }, - } as unknown as typeof vscode.window.activeTextEditor) - ); + getText: () => JSON.stringify(mockDocument), + save: () => {}, + }, + } as unknown as typeof vscode.window.activeTextEditor) + ); - const mockReplaceDocument = sinon.fake.resolves(null); - sinon.replace( - mdbTestExtension.testExtensionController._editorsController - ._mongoDBDocumentService, - 'replaceDocument', - mockReplaceDocument - ); - await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); - assert.strictEqual( - mockReplaceDocument.firstCall.args[0].source, - 'playground' - ); - }); + const mockReplaceDocument = sinon.fake.resolves(null); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._mongoDBDocumentService, + 'replaceDocument', + mockReplaceDocument + ); + await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); + assert.strictEqual( + mockReplaceDocument.firstCall.args[0].source, + 'treeview' + ); + }); - test('mdb.runSelectedPlaygroundBlocks runs selected playgroundB blocks once', async () => { - const mockRunSelectedPlaygroundBlocks = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundController, - 'runSelectedPlaygroundBlocks', - mockRunSelectedPlaygroundBlocks - ); - await vscode.commands.executeCommand('mdb.runSelectedPlaygroundBlocks'); - assert( - mockRunSelectedPlaygroundBlocks.calledOnce, - 'Expected "runSelectedPlaygroundBlocks" to be called on the playground controller.' - ); - }); + test('mdb.saveMongoDBDocuments replaces a document with a playground source', async () => { + const mockDocument = { + _id: 'pancakes', + name: '', + time: { + $time: '12345', + }, + }; + const mockGet = sinon.fake.returns('pancakes'); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._documentIdStore, + 'get', + mockGet + ); + sandbox.replaceGetter( + vscode.window, + 'activeTextEditor', + () => + ({ + document: { + uri: { + scheme: 'VIEW_DOCUMENT_SCHEME', + query: [ + 'namespace=waffle.house', + 'connectionId=tasty_sandwhich', + 'documentId=93333a0d-83f6-4e6f-a575-af7ea6187a4a', + 'source=playground', + ].join('&'), + }, + getText: () => JSON.stringify(mockDocument), + save: () => {}, + }, + } as unknown as typeof vscode.window.activeTextEditor) + ); - test('mdb.runAllPlaygroundBlocks runs all playgroundB blocks once', async () => { - const mockRunAllPlaygroundBlocks = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundController, - 'runAllPlaygroundBlocks', - mockRunAllPlaygroundBlocks - ); - await vscode.commands.executeCommand('mdb.runAllPlaygroundBlocks'); - assert( - mockRunAllPlaygroundBlocks.calledOnce, - 'Expected "runAllPlaygroundBlocks" to be called on the playground controller.' - ); - }); + const mockReplaceDocument = sinon.fake.resolves(null); + sinon.replace( + mdbTestExtension.testExtensionController._editorsController + ._mongoDBDocumentService, + 'replaceDocument', + mockReplaceDocument + ); + await vscode.commands.executeCommand('mdb.saveMongoDBDocument'); + assert.strictEqual( + mockReplaceDocument.firstCall.args[0].source, + 'playground' + ); + }); - test('mdb.changeActiveConnection changes the active connection once', async () => { - const mockChangeActiveConnection = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'changeActiveConnection', - mockChangeActiveConnection - ); - await vscode.commands.executeCommand('mdb.changeActiveConnection'); - assert( - mockChangeActiveConnection.calledOnce, - 'Expected "changeActiveConnection" to be called on the playground controller.' - ); - }); + test('mdb.runSelectedPlaygroundBlocks runs selected playgroundB blocks once', async () => { + const mockRunSelectedPlaygroundBlocks = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundController, + 'runSelectedPlaygroundBlocks', + mockRunSelectedPlaygroundBlocks + ); + await vscode.commands.executeCommand('mdb.runSelectedPlaygroundBlocks'); + assert( + mockRunSelectedPlaygroundBlocks.calledOnce, + 'Expected "runSelectedPlaygroundBlocks" to be called on the playground controller.' + ); + }); - test('mdb.refreshPlaygrounds refreshes the playgrounds explorer once', async () => { - const mockRefreshPlaygrounds = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundsExplorer, - 'refresh', - mockRefreshPlaygrounds - ); - await vscode.commands.executeCommand('mdb.refreshPlaygrounds'); - assert( - mockRefreshPlaygrounds.calledOnce, - 'Expected "refreshPlaygrounds" to be called on the playground controller.' - ); - }); + test('mdb.runAllPlaygroundBlocks runs all playgroundB blocks once', async () => { + const mockRunAllPlaygroundBlocks = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundController, + 'runAllPlaygroundBlocks', + mockRunAllPlaygroundBlocks + ); + await vscode.commands.executeCommand('mdb.runAllPlaygroundBlocks'); + assert( + mockRunAllPlaygroundBlocks.calledOnce, + 'Expected "runAllPlaygroundBlocks" to be called on the playground controller.' + ); + }); - test("mdb.copyDocumentContentsFromTreeView should copy a document's content to the clipboard", async () => { - const mockDocument = { - _id: 'pancakes', - time: { - $time: '12345', - }, - }; - let namespaceUsed = ''; + test('mdb.changeActiveConnection changes the active connection once', async () => { + const mockChangeActiveConnection = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._connectionController, + 'changeActiveConnection', + mockChangeActiveConnection + ); + await vscode.commands.executeCommand('mdb.changeActiveConnection'); + assert( + mockChangeActiveConnection.calledOnce, + 'Expected "changeActiveConnection" to be called on the playground controller.' + ); + }); - const findStub = sinon.stub(); - findStub.resolves([mockDocument]); + test('mdb.refreshPlaygrounds refreshes the playgrounds explorer once', async () => { + const mockRefreshPlaygrounds = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundsExplorer, + 'refresh', + mockRefreshPlaygrounds + ); + await vscode.commands.executeCommand('mdb.refreshPlaygrounds'); + assert( + mockRefreshPlaygrounds.calledOnce, + 'Expected "refreshPlaygrounds" to be called on the playground controller.' + ); + }); - const mockDataService = { - find: (namespace: string) => { - namespaceUsed = namespace; - return Promise.resolve([mockDocument]); - }, - } as Pick as unknown as DataService; - const documentTreeItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - mockDataService, - () => Promise.resolve() - ); - const mockCopyToClipboard = sinon.fake(); - sinon.replaceGetter(vscode.env, 'clipboard', () => ({ - writeText: mockCopyToClipboard, - readText: sinon.fake(), - })); - await vscode.commands.executeCommand( - 'mdb.copyDocumentContentsFromTreeView', - documentTreeItem - ); - assert.strictEqual(mockCopyToClipboard.called, true); - assert.strictEqual( - mockCopyToClipboard.firstCall.args[0], - `{ + test("mdb.copyDocumentContentsFromTreeView should copy a document's content to the clipboard", async () => { + const mockDocument = { + _id: 'pancakes', + time: { + $time: '12345', + }, + }; + let namespaceUsed = ''; + + const findStub = sinon.stub(); + findStub.resolves([mockDocument]); + + const mockDataService = { + find: (namespace: string) => { + namespaceUsed = namespace; + return Promise.resolve([mockDocument]); + }, + } as Pick as unknown as DataService; + const documentTreeItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + mockDataService, + () => Promise.resolve() + ); + const mockCopyToClipboard = sinon.fake(); + sinon.replaceGetter(vscode.env, 'clipboard', () => ({ + writeText: mockCopyToClipboard, + readText: sinon.fake(), + })); + await vscode.commands.executeCommand( + 'mdb.copyDocumentContentsFromTreeView', + documentTreeItem + ); + assert.strictEqual(mockCopyToClipboard.called, true); + assert.strictEqual( + mockCopyToClipboard.firstCall.args[0], + `{ "_id": "pancakes", "time": { "$time": "12345" } }` - ); - assert.strictEqual(namespaceUsed, 'waffle.house'); - }); + ); + assert.strictEqual(namespaceUsed, 'waffle.house'); + }); - test("mdb.cloneDocumentFromTreeView opens a playground with a document's content", async () => { - const mockDocument = { - _id: 'pancakes', - time: new Date('3001-01-01T05:00:00.000Z'), - objectIdField: new ObjectId('57e193d7a9cc81b4027498b2'), - }; - let namespaceUsed = ''; - const mockDataService = { - find: (namespace: string) => { - namespaceUsed = namespace; - return Promise.resolve([mockDocument]); - }, - } as unknown as DataService; - const documentTreeItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - mockDataService, - () => Promise.resolve() - ); - const mockCreatePlaygroundForCloneDocument = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundController, - 'createPlaygroundForCloneDocument', - mockCreatePlaygroundForCloneDocument - ); - await vscode.commands.executeCommand( - 'mdb.cloneDocumentFromTreeView', - documentTreeItem - ); - assert.strictEqual( - mockCreatePlaygroundForCloneDocument.calledOnce, - true - ); - assert.strictEqual( - mockCreatePlaygroundForCloneDocument.firstCall.args[0], - `{ + test("mdb.cloneDocumentFromTreeView opens a playground with a document's content", async () => { + const mockDocument = { + _id: 'pancakes', + time: new Date('3001-01-01T05:00:00.000Z'), + objectIdField: new ObjectId('57e193d7a9cc81b4027498b2'), + }; + let namespaceUsed = ''; + const mockDataService = { + find: (namespace: string) => { + namespaceUsed = namespace; + return Promise.resolve([mockDocument]); + }, + } as unknown as DataService; + const documentTreeItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + mockDataService, + () => Promise.resolve() + ); + const mockCreatePlaygroundForCloneDocument = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundController, + 'createPlaygroundForCloneDocument', + mockCreatePlaygroundForCloneDocument + ); + await vscode.commands.executeCommand( + 'mdb.cloneDocumentFromTreeView', + documentTreeItem + ); + assert.strictEqual(mockCreatePlaygroundForCloneDocument.calledOnce, true); + assert.strictEqual( + mockCreatePlaygroundForCloneDocument.firstCall.args[0], + `{ _id: 'pancakes', time: ISODate('3001-01-01T05:00:00.000Z'), objectIdField: ObjectId('57e193d7a9cc81b4027498b2') }` - ); - assert.strictEqual( - mockCreatePlaygroundForCloneDocument.firstCall.args[1], - 'waffle' - ); - assert.strictEqual( - mockCreatePlaygroundForCloneDocument.firstCall.args[2], - 'house' - ); - assert.strictEqual(namespaceUsed, 'waffle.house'); - }); - - test('mdb.insertDocumentFromTreeView opens a playground with an insert document template', async () => { - const collectionTreeItem = new CollectionTreeItem( - { - name: 'pineapple', - type: CollectionTypes.collection, - }, - 'plants', - {}, - false, - false, - null - ); - const mockCreatePlaygroundForInsertDocument = sinon.fake(); - sinon.replace( - mdbTestExtension.testExtensionController._playgroundController, - 'createPlaygroundForInsertDocument', - mockCreatePlaygroundForInsertDocument - ); - await vscode.commands.executeCommand( - 'mdb.insertDocumentFromTreeView', - collectionTreeItem - ); - assert.strictEqual( - mockCreatePlaygroundForInsertDocument.calledOnce, - true - ); - assert.strictEqual( - mockCreatePlaygroundForInsertDocument.firstCall.args[0], - 'plants' - ); - assert.strictEqual( - mockCreatePlaygroundForInsertDocument.firstCall.args[1], - 'pineapple' - ); - }); + ); + assert.strictEqual( + mockCreatePlaygroundForCloneDocument.firstCall.args[1], + 'waffle' + ); + assert.strictEqual( + mockCreatePlaygroundForCloneDocument.firstCall.args[2], + 'house' + ); + assert.strictEqual(namespaceUsed, 'waffle.house'); + }); - test('mdb.deleteDocumentFromTreeView deletes a document when the confirmation is cancelled', async () => { - const mockDocument = { - _id: 'pancakes', - time: { - $time: '12345', - }, - }; - let calledDelete = false; - const mockDataService = { - deleteOne: ( - namespace: string, - _id: any, - options: object, - callback: ( - error: Error | undefined, - result: { deletedCount: number } - ) => void - ) => { - calledDelete = true; - callback(undefined, { - deletedCount: 1, - }); - }, - } as Pick as unknown as DataService; - const documentTreeItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - mockDataService, - () => Promise.resolve() - ); - const result = await vscode.commands.executeCommand( - 'mdb.deleteDocumentFromTreeView', - documentTreeItem - ); - assert.strictEqual(result, false); - assert.strictEqual(calledDelete, false); - }); + test('mdb.insertDocumentFromTreeView opens a playground with an insert document template', async () => { + const collectionTreeItem = new CollectionTreeItem( + { + name: 'pineapple', + type: CollectionTypes.collection, + }, + 'plants', + {}, + false, + false, + null + ); + const mockCreatePlaygroundForInsertDocument = sinon.fake(); + sinon.replace( + mdbTestExtension.testExtensionController._playgroundController, + 'createPlaygroundForInsertDocument', + mockCreatePlaygroundForInsertDocument + ); + await vscode.commands.executeCommand( + 'mdb.insertDocumentFromTreeView', + collectionTreeItem + ); + assert.strictEqual( + mockCreatePlaygroundForInsertDocument.calledOnce, + true + ); + assert.strictEqual( + mockCreatePlaygroundForInsertDocument.firstCall.args[0], + 'plants' + ); + assert.strictEqual( + mockCreatePlaygroundForInsertDocument.firstCall.args[1], + 'pineapple' + ); + }); - test('mdb.deleteDocumentFromTreeView deletes a document after confirmation', async () => { - fakeShowInformationMessage.resolves('Yes'); + test('mdb.deleteDocumentFromTreeView deletes a document when the confirmation is cancelled', async () => { + const mockDocument = { + _id: 'pancakes', + time: { + $time: '12345', + }, + }; + let calledDelete = false; + const mockDataService = { + deleteOne: ( + namespace: string, + _id: any, + options: object, + callback: ( + error: Error | undefined, + result: { deletedCount: number } + ) => void + ) => { + calledDelete = true; + callback(undefined, { + deletedCount: 1, + }); + }, + } as Pick as unknown as DataService; + const documentTreeItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + mockDataService, + () => Promise.resolve() + ); + const result = await vscode.commands.executeCommand( + 'mdb.deleteDocumentFromTreeView', + documentTreeItem + ); + assert.strictEqual(result, false); + assert.strictEqual(calledDelete, false); + }); - const mockDocument = { - _id: 'pancakes', - time: { - $time: '12345', - }, - }; - let namespaceUsed = ''; - let _idUsed; - const mockDataService = { - deleteOne: ( - namespace: string, - query: any, - options: object, - callback: ( - error: Error | undefined, - result: { deletedCount: number } - ) => void - ) => { - _idUsed = query; - namespaceUsed = namespace; - callback(undefined, { - deletedCount: 1, - }); - }, - } as Pick as unknown as DataService; - const documentTreeItem = new DocumentTreeItem( - mockDocument, - 'waffle.house', - 0, - mockDataService, - () => Promise.resolve() - ); - const result = await vscode.commands.executeCommand( - 'mdb.deleteDocumentFromTreeView', - documentTreeItem - ); - assert.deepStrictEqual(_idUsed, { - _id: 'pancakes', - }); - assert.strictEqual(namespaceUsed, 'waffle.house'); - assert.strictEqual(result, true); + test('mdb.deleteDocumentFromTreeView deletes a document after confirmation', async () => { + fakeShowInformationMessage.resolves('Yes'); + + const mockDocument = { + _id: 'pancakes', + time: { + $time: '12345', + }, + }; + let namespaceUsed = ''; + let _idUsed; + const mockDataService = { + deleteOne: ( + namespace: string, + query: any, + options: object, + callback: ( + error: Error | undefined, + result: { deletedCount: number } + ) => void + ) => { + _idUsed = query; + namespaceUsed = namespace; + callback(undefined, { + deletedCount: 1, + }); + }, + } as Pick as unknown as DataService; + const documentTreeItem = new DocumentTreeItem( + mockDocument, + 'waffle.house', + 0, + mockDataService, + () => Promise.resolve() + ); + const result = await vscode.commands.executeCommand( + 'mdb.deleteDocumentFromTreeView', + documentTreeItem + ); + assert.deepStrictEqual(_idUsed, { + _id: 'pancakes', }); + assert.strictEqual(namespaceUsed, 'waffle.house'); + assert.strictEqual(result, true); + }); - suite( - 'when a user hasnt been shown the initial overview page yet and they have no connections saved', - () => { - let mockVSCodeExecuteCommand: SinonSpy; - let mockStorageControllerUpdate: SinonSpy; - - beforeEach(() => { - mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); - sinon.replace( - vscode.commands, - 'executeCommand', - mockVSCodeExecuteCommand - ); - sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'get', - sinon.fake.returns(false) - ); - sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'hasSavedConnections', - sinon.fake.returns(false) - ); - - mockStorageControllerUpdate = sinon.fake.resolves(undefined); - sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'update', - mockStorageControllerUpdate - ); - - void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); - }); + suite( + 'when a user hasnt been shown the initial overview page yet and they have no connections saved', + () => { + let mockVSCodeExecuteCommand: SinonSpy; + let mockStorageControllerUpdate: SinonSpy; - afterEach(() => { - sinon.restore(); - }); + beforeEach(() => { + mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); + sinon.replace( + vscode.commands, + 'executeCommand', + mockVSCodeExecuteCommand + ); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'get', + sinon.fake.returns(false) + ); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'hasSavedConnections', + sinon.fake.returns(false) + ); - test('they are shown the overview page', () => { - assert(mockVSCodeExecuteCommand.called); - assert.strictEqual( - mockVSCodeExecuteCommand.firstCall.args[0], - 'mdb.openOverviewPage' - ); - assert.strictEqual( - mockVSCodeExecuteCommand.firstCall.args[0], - EXTENSION_COMMANDS.MDB_OPEN_OVERVIEW_PAGE - ); - }); + mockStorageControllerUpdate = sinon.fake.resolves(undefined); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'update', + mockStorageControllerUpdate + ); - test("it sets that they've been shown the overview page", () => { - assert(mockStorageControllerUpdate.called); - assert.strictEqual( - mockStorageControllerUpdate.firstCall.args[0], - StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW - ); - assert.strictEqual( - mockStorageControllerUpdate.firstCall.args[0], - 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' - ); - assert.strictEqual( - mockStorageControllerUpdate.firstCall.args[1], - true - ); - }); - } - ); - - suite( - 'when a user hasnt been shown the initial overview page yet and they have connections saved', - () => { - let mockVSCodeExecuteCommand: SinonSpy; - let mockStorageControllerUpdate: SinonSpy; - - beforeEach(() => { - mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); - sinon.replace( - vscode.commands, - 'executeCommand', - mockVSCodeExecuteCommand - ); - sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'get', - sinon.fake.returns(undefined) - ); - sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'hasSavedConnections', - sinon.fake.returns(true) - ); - mockStorageControllerUpdate = sinon.fake.resolves(undefined); - sinon.replace( - mdbTestExtension.testExtensionController._storageController, - 'update', - mockStorageControllerUpdate - ); - - void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); - }); + void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); + }); - test('they are not shown the overview page', () => { - assert(!mockVSCodeExecuteCommand.called); - }); + afterEach(() => { + sinon.restore(); + }); - test("it sets that they've been shown the overview page", () => { - assert(mockStorageControllerUpdate.called); - assert.strictEqual( - mockStorageControllerUpdate.firstCall.args[0], - StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW - ); - assert.strictEqual( - mockStorageControllerUpdate.firstCall.args[0], - 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' - ); - assert.strictEqual( - mockStorageControllerUpdate.firstCall.args[1], - true - ); - }); - } - ); + test('they are shown the overview page', () => { + assert(mockVSCodeExecuteCommand.called); + assert.strictEqual( + mockVSCodeExecuteCommand.firstCall.args[0], + 'mdb.openOverviewPage' + ); + assert.strictEqual( + mockVSCodeExecuteCommand.firstCall.args[0], + EXTENSION_COMMANDS.MDB_OPEN_OVERVIEW_PAGE + ); + }); - suite('when a user has been shown the initial overview page', () => { + test("it sets that they've been shown the overview page", () => { + assert(mockStorageControllerUpdate.called); + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[0], + StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW + ); + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[0], + 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' + ); + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[1], + true + ); + }); + } + ); + + suite( + 'when a user hasnt been shown the initial overview page yet and they have connections saved', + () => { let mockVSCodeExecuteCommand: SinonSpy; + let mockStorageControllerUpdate: SinonSpy; beforeEach(() => { + mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); + sinon.replace( + vscode.commands, + 'executeCommand', + mockVSCodeExecuteCommand + ); sinon.replace( mdbTestExtension.testExtensionController._storageController, 'get', + sinon.fake.returns(undefined) + ); + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'hasSavedConnections', sinon.fake.returns(true) ); - mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); + mockStorageControllerUpdate = sinon.fake.resolves(undefined); sinon.replace( - vscode.commands, - 'executeCommand', - mockVSCodeExecuteCommand + mdbTestExtension.testExtensionController._storageController, + 'update', + mockStorageControllerUpdate ); void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); @@ -1634,145 +1664,47 @@ suite('MDBExtensionController Test Suite', function () { test('they are not shown the overview page', () => { assert(!mockVSCodeExecuteCommand.called); }); - }); - }); - }); - - suite('with real text document', () => { - beforeEach(() => { - sinon.stub(vscode.window, 'showInformationMessage'); - sinon.stub(vscode.window, 'showErrorMessage'); - const mockActiveConnectionId = sinon.fake.returns('tasty_sandwhich'); - sinon.replace( - mdbTestExtension.testExtensionController._connectionController, - 'getActiveConnectionId', - mockActiveConnectionId - ); - }); - - afterEach(async () => { - await vscode.commands.executeCommand( - 'workbench.action.closeActiveEditor' - ); - sinon.restore(); - }); - - test('mdb.addDatabase should create a MongoDB playground with create collection template', async () => { - const mockTreeItem = new ConnectionTreeItem( - 'tasty_sandwhich', - vscode.TreeItemCollapsibleState.None, - false, - mdbTestExtension.testExtensionController._connectionController, - false, - {} - ); - await vscode.commands.executeCommand('mdb.addDatabase', mockTreeItem); - - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); - - const content = activeTextEditor.document.getText(); - assert(content.includes('// Create a new database.')); - assert(content.includes('NEW_DATABASE_NAME')); - assert(content.includes('NEW_COLLECTION_NAME')); - }); - - test('mdb.addCollection should create a MongoDB playground with create collection template', async () => { - const mockTreeItem = new DatabaseTreeItem( - 'iceCreamDB', - {}, - false, - false, - {} - ); - await vscode.commands.executeCommand('mdb.addCollection', mockTreeItem); - - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); - - const content = activeTextEditor.document.getText(); - assert(content.includes('// The current database to use.')); - assert(content.includes('iceCreamDB')); - assert(content.includes('NEW_COLLECTION_NAME')); - assert(!content.includes('time-series')); - }); - - test('mdb.searchForDocuments should create a MongoDB playground with search template', async () => { - await vscode.commands.executeCommand('mdb.searchForDocuments', { - databaseName: 'dbbbbbName', - collectionName: 'colllllllllName', - }); - - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); - - const content = activeTextEditor.document.getText(); - assert( - content.includes('Search for documents in the current collection.') - ); - assert(content.includes('dbbbbbName')); - assert(content.includes('colllllllllName')); - }); - test('mdb.createIndexFromTreeView should create a MongoDB playground with index template', async () => { - await vscode.commands.executeCommand('mdb.createIndexFromTreeView', { - databaseName: 'dbbbbbName', - collectionName: 'colllllllllName', - }); + test("it sets that they've been shown the overview page", () => { + assert(mockStorageControllerUpdate.called); + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[0], + StorageVariables.GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW + ); + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[0], + 'GLOBAL_HAS_BEEN_SHOWN_INITIAL_VIEW' + ); + assert.strictEqual( + mockStorageControllerUpdate.firstCall.args[1], + true + ); + }); + } + ); - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); + suite('when a user has been shown the initial overview page', () => { + let mockVSCodeExecuteCommand: SinonSpy; - const content = activeTextEditor.document.getText(); - assert(content.includes('Create a new index in the collection.')); - assert(content.includes('dbbbbbName')); - assert(content.includes('colllllllllName')); - }); + beforeEach(() => { + sinon.replace( + mdbTestExtension.testExtensionController._storageController, + 'get', + sinon.fake.returns(true) + ); + mockVSCodeExecuteCommand = sinon.fake.resolves(undefined); + sinon.replace( + vscode.commands, + 'executeCommand', + mockVSCodeExecuteCommand + ); - test('mdb.createPlayground should create a MongoDB playground with default template', async () => { - const mockGetConfiguration = sinon.fake.returns({ - get: () => true, + void mdbTestExtension.testExtensionController.showOverviewPageIfRecentlyInstalled(); }); - sinon.replace(vscode.workspace, 'getConfiguration', mockGetConfiguration); - await vscode.commands.executeCommand('mdb.createPlayground'); - - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); - - const content = activeTextEditor.document.getText(); - assert(content.includes('// MongoDB Playground')); - }); - test('mdb.createPlayground command should create a MongoDB playground without template', async () => { - const mockGetConfiguration = sinon.fake.returns({ - get: () => false, + test('they are not shown the overview page', () => { + assert(!mockVSCodeExecuteCommand.called); }); - sinon.replace(vscode.workspace, 'getConfiguration', mockGetConfiguration); - await vscode.commands.executeCommand('mdb.createPlayground'); - - const activeTextEditor = - mdbTestExtension.testExtensionController._playgroundController - ._activeTextEditor; - assert.strictEqual(activeTextEditor?.document.languageId, 'javascript'); - assert.strictEqual(activeTextEditor?.document.uri.scheme, 'untitled'); - - const content = activeTextEditor.document.getText(); - assert.strictEqual(content, ''); }); }); });