Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion .github/workflows/test-and-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,25 @@ jobs:
with:
fetch-depth: 0

- name: Get VS Code Node.js version
id: get-vscode-node-version
shell: bash
run: |
# Fetch Node.js version from VS Code's .nvmrc, default to 22.20.0 if unavailable
NODE_VERSION=$(curl -fsSL https://raw.githubusercontent.com/microsoft/vscode/main/.nvmrc | tr -d '[:space:]')
if [ -z "$NODE_VERSION" ]; then
NODE_VERSION="22.20.0"
fi
echo "Using Node.js version for VS Code extension tests: $NODE_VERSION"
echo "vscode-node-version=$NODE_VERSION" >> $GITHUB_OUTPUT

- name: Setup pnpm
uses: pnpm/action-setup@v4

- name: Setup Node.js Environment
uses: actions/setup-node@v4
with:
node-version: 22.15.1
node-version: ${{ steps.get-vscode-node-version.outputs.vscode-node-version }}
cache: pnpm

- name: Run tests and build
Expand Down
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@
"scripts": {
"clean": "rimraf -g ./out/* ./dist/*",
"lint": "eslint . && prettier --check .",
"update-grammar": "ts-node ./scripts/update-grammar.ts",
"update-grammar": "node ./scripts/update-grammar.ts",
"precompile": "pnpm run clean",
"compile": "npm-run-all compile:*",
"compile:constants": "ts-node ./scripts/generate-constants.ts",
"compile:constants": "node ./scripts/generate-constants.ts",
"compile:resources": "pnpm run update-grammar",
"compile:extension": "tsc -p ./",
"compile:extension-bundles": "webpack --mode development",
Expand All @@ -63,15 +63,15 @@
"depcheck": "depcheck",
"package": "cross-env NODE_OPTIONS='--require ./scripts/no-npm-list-fail.js' vsce package --githubBranch main",
"local-install": "pnpm run package && code --install-extension ./mongodb-vscode-*.vsix",
"check-vsix-size": "ts-node ./scripts/check-vsix-size.ts",
"check-vsix-size": "node ./scripts/check-vsix-size.ts",
"release-draft": "node ./scripts/release-draft.js",
"reformat": "prettier --write .",
"snyk-test": "node scripts/snyk-test.js",
"generate-icon-font": "ts-node ./scripts/generate-icon-font.ts",
"generate-icon-font": "node ./scripts/generate-icon-font.ts",
"generate-vulnerability-report": "mongodb-sbom-tools generate-vulnerability-report --snyk-reports=.sbom/snyk-test-result.json --dependencies=.sbom/dependencies.json --fail-on=high",
"create-vulnerability-tickets": "mongodb-sbom-tools generate-vulnerability-report --snyk-reports=.sbom/snyk-test-result.json --dependencies=.sbom/dependencies.json --create-jira-issues",
"prepare": "husky",
"precommit": "ts-node ./scripts/precommit.ts"
"precommit": "node ./scripts/precommit.ts"
},
"engines": {
"vscode": "^1.101.1",
Expand Down
3 changes: 3 additions & 0 deletions scripts/check-vsix-size.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));

const version = JSON.parse(
fs.readFileSync(path.resolve(__dirname, '..', 'package.json')).toString(),
Expand Down
4 changes: 3 additions & 1 deletion scripts/generate-constants.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
#! /usr/bin/env ts-node
#! /usr/bin/env node

import ora from 'ora';
import fs from 'fs';
import path from 'path';
import { resolve } from 'path';
import { config } from 'dotenv';
import { promisify } from 'util';
import { fileURLToPath } from 'url';

const writeFile = promisify(fs.writeFile);
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const ROOT_DIR = path.join(__dirname, '..');
const ui = ora('Generate constants file').start();

Expand Down
8 changes: 4 additions & 4 deletions scripts/generate-icon-font.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import webfont from 'webfont';
import { webfont } from 'webfont';
import fs from 'fs/promises';
import { GlyphData } from 'webfont/dist/src/types';
import prettier from 'prettier';
import path from 'path';

/** Icons to include in the generated icon font */
const INCLUDED_ICONS = [
Expand Down Expand Up @@ -61,14 +61,14 @@ async function main(): Promise<void> {
const prettierConfig = await prettier.resolveConfig('./.prettierrc.json');
await fs.writeFile(
'./package.json',
prettier.format(JSON.stringify(currentConfiguration), {
await prettier.format(JSON.stringify(currentConfiguration), {
...prettierConfig,
parser: 'json-stringify',
}),
);
}

function getUnicodeHex(glyph: GlyphData): string {
function getUnicodeHex(glyph: any): string {
if (glyph.metadata?.unicode == undefined) {
throw new Error('No unicode defined');
}
Expand Down
8 changes: 6 additions & 2 deletions scripts/precommit.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
#! /usr/bin/env ts-node
#! /usr/bin/env node
/* eslint-disable no-console */

import path from 'path';
import { promisify } from 'util';
import { execFile } from 'child_process';
import prettier from '@mongodb-js/prettier-config-devtools/.prettierrc.json' with { type: 'json' };
const execFileAsync = promisify(execFile);

import { createRequire } from 'module';
const require = createRequire(import.meta.url);

async function main(fileList: string[]) {
if (fileList.length === 0) {
console.log('No files to re-format. Skipping ...');
Expand All @@ -20,7 +24,7 @@ async function main(fileList: string[]) {
await execFileAsync('npx', [
'prettier',
'--config',
require.resolve('@mongodb-js/prettier-config-devtools/.prettierrc.json'),
require.resolve(prettier),
// Silently ignore files that are of format that is not supported by prettier.
'--ignore-unknown',
'--write',
Expand Down
3 changes: 3 additions & 0 deletions scripts/update-grammar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import mkdirp from 'mkdirp';
import ora from 'ora';
import fs from 'fs';
import { promisify } from 'util';
import { fileURLToPath } from 'url';

import {
ACCUMULATORS,
Expand All @@ -12,6 +13,8 @@ import {
STAGE_OPERATORS,
} from '@mongodb-js/mongodb-constants';

const __dirname = path.dirname(fileURLToPath(import.meta.url));

const writeFile = promisify(fs.writeFile);
const SYNTAXES_DIR = path.join(__dirname, '..', 'syntaxes');

Expand Down
163 changes: 83 additions & 80 deletions src/commands/index.ts
Original file line number Diff line number Diff line change
@@ -1,96 +1,99 @@
enum EXTENSION_COMMANDS {
MDB_CONNECT = 'mdb.connect',
MDB_CONNECT_WITH_URI = 'mdb.connectWithURI',
MDB_OPEN_OVERVIEW_PAGE = 'mdb.openOverviewPage',
MDB_DISCONNECT = 'mdb.disconnect',
MDB_REMOVE_CONNECTION = 'mdb.removeConnection',
export const ExtensionCommand = {
mdbConnect: 'mdb.connect',
mdbConnectWithUri: 'mdb.connectWithURI',
mdbOpenOverviewPage: 'mdb.openOverviewPage',
mdbDisconnect: 'mdb.disconnect',
mdbRemoveConnection: 'mdb.removeConnection',

OPEN_MONGODB_ISSUE_REPORTER = 'mdb.openMongoDBIssueReporter',
openMongodbIssueReporter: 'mdb.openMongoDBIssueReporter',

MDB_OPEN_MDB_SHELL = 'mdb.openMongoDBShell',
MDB_OPEN_MDB_SHELL_FROM_TREE_VIEW = 'mdb.treeViewOpenMongoDBShell',
mdbOpenMdbShell: 'mdb.openMongoDBShell',
mdbOpenMdbShellFromTreeView: 'mdb.treeViewOpenMongoDBShell',

MDB_CREATE_PLAYGROUND = 'mdb.createPlayground',
MDB_CREATE_PLAYGROUND_FROM_OVERVIEW_PAGE = 'mdb.createNewPlaygroundFromOverviewPage',
MDB_RUN_SELECTED_PLAYGROUND_BLOCKS = 'mdb.runSelectedPlaygroundBlocks',
MDB_RUN_ALL_PLAYGROUND_BLOCKS = 'mdb.runAllPlaygroundBlocks',
MDB_RUN_ALL_OR_SELECTED_PLAYGROUND_BLOCKS = 'mdb.runPlayground',
MDB_EXPORT_CODE_TO_PLAYGROUND = 'mdb.exportCodeToPlayground',
mdbCreatePlayground: 'mdb.createPlayground',
mdbCreatePlaygroundFromOverviewPage:
'mdb.createNewPlaygroundFromOverviewPage',
mdbRunSelectedPlaygroundBlocks: 'mdb.runSelectedPlaygroundBlocks',
mdbRunAllPlaygroundBlocks: 'mdb.runAllPlaygroundBlocks',
mdbRunAllOrSelectedPlaygroundBlocks: 'mdb.runPlayground',
mdbExportCodeToPlayground: 'mdb.exportCodeToPlayground',

MDB_FIX_THIS_INVALID_INTERACTIVE_SYNTAX = 'mdb.fixThisInvalidInteractiveSyntax',
MDB_FIX_ALL_INVALID_INTERACTIVE_SYNTAX = 'mdb.fixAllInvalidInteractiveSyntax',
mdbFixThisInvalidInteractiveSyntax: 'mdb.fixThisInvalidInteractiveSyntax',
mdbFixAllInvalidInteractiveSyntax: 'mdb.fixAllInvalidInteractiveSyntax',

MDB_SELECT_TARGET_FOR_EXPORT_TO_LANGUAGE = 'mdb.selectTargetForExportToLanguage',
MDB_EXPORT_TO_LANGUAGE = 'mdb.exportToLanguage',
MDB_CHANGE_DRIVER_SYNTAX_FOR_EXPORT_TO_LANGUAGE = 'mdb.changeDriverSyntaxForExportToLanguage',
mdbSelectTargetForExportToLanguage: 'mdb.selectTargetForExportToLanguage',
mdbExportToLanguage: 'mdb.exportToLanguage',
mdbChangeDriverSyntaxForExportToLanguage:
'mdb.changeDriverSyntaxForExportToLanguage',

MDB_OPEN_MONGODB_DOCUMENT_FROM_CODE_LENS = 'mdb.openMongoDBDocumentFromCodeLens',
MDB_OPEN_MONGODB_DOCUMENT_FROM_TREE = 'mdb.openMongoDBDocumentFromTree',
MDB_SAVE_MONGODB_DOCUMENT = 'mdb.saveMongoDBDocument',
mdbOpenMongodbDocumentFromCodeLens: 'mdb.openMongoDBDocumentFromCodeLens',
mdbOpenMongodbDocumentFromTree: 'mdb.openMongoDBDocumentFromTree',
mdbSaveMongodbDocument: 'mdb.saveMongoDBDocument',

MDB_CHANGE_ACTIVE_CONNECTION = 'mdb.changeActiveConnection',
mdbChangeActiveConnection: 'mdb.changeActiveConnection',

MDB_CODELENS_SHOW_MORE_DOCUMENTS = 'mdb.codeLens.showMoreDocumentsClicked',
mdbCodelensShowMoreDocuments: 'mdb.codeLens.showMoreDocumentsClicked',

// Commands from the tree view.
MDB_ADD_CONNECTION = 'mdb.addConnection',
MDB_ADD_CONNECTION_WITH_URI = 'mdb.addConnectionWithURI',
MDB_REFRESH_PLAYGROUNDS_FROM_TREE_VIEW = 'mdb.refreshPlaygroundsFromTreeView',
MDB_OPEN_PLAYGROUND_FROM_TREE_VIEW = 'mdb.openPlaygroundFromTreeView',
MDB_CONNECT_TO_CONNECTION_TREE_VIEW = 'mdb.connectToConnectionTreeItem',
MDB_CREATE_PLAYGROUND_FROM_TREE_VIEW = 'mdb.createNewPlaygroundFromTreeView',
MDB_CREATE_PLAYGROUND_FROM_TREE_ITEM = 'mdb.createNewPlaygroundFromTreeItem',
MDB_DISCONNECT_FROM_CONNECTION_TREE_VIEW = 'mdb.disconnectFromConnectionTreeItem',
MDB_EDIT_CONNECTION = 'mdb.editConnection',
MDB_REFRESH_CONNECTION = 'mdb.refreshConnection',
MDB_COPY_CONNECTION_STRING = 'mdb.copyConnectionString',
MDB_EDIT_PRESET_CONNECTIONS = 'mdb.editPresetConnections',
MDB_REMOVE_CONNECTION_TREE_VIEW = 'mdb.treeItemRemoveConnection',
MDB_RENAME_CONNECTION = 'mdb.renameConnection',
MDB_ADD_DATABASE = 'mdb.addDatabase',
MDB_SEARCH_FOR_DOCUMENTS = 'mdb.searchForDocuments',
MDB_COPY_DATABASE_NAME = 'mdb.copyDatabaseName',
MDB_DROP_DATABASE = 'mdb.dropDatabase',
MDB_REFRESH_DATABASE = 'mdb.refreshDatabase',
MDB_ADD_COLLECTION = 'mdb.addCollection',
MDB_COPY_COLLECTION_NAME = 'mdb.copyCollectionName',
MDB_DROP_COLLECTION = 'mdb.dropCollection',
MDB_VIEW_COLLECTION_DOCUMENTS = 'mdb.viewCollectionDocuments',
MDB_REFRESH_COLLECTION = 'mdb.refreshCollection',
MDB_REFRESH_DOCUMENT_LIST = 'mdb.refreshDocumentList',
MDB_INSERT_DOCUMENT_FROM_TREE_VIEW = 'mdb.insertDocumentFromTreeView',
MDB_REFRESH_SCHEMA = 'mdb.refreshSchema',
MDB_COPY_SCHEMA_FIELD_NAME = 'mdb.copySchemaFieldName',
MDB_REFRESH_INDEXES = 'mdb.refreshIndexes',
MDB_CREATE_INDEX_TREE_VIEW = 'mdb.createIndexFromTreeView',
MDB_INSERT_OBJECTID_TO_EDITOR = 'mdb.insertObjectIdToEditor',
MDB_GENERATE_OBJECTID_TO_CLIPBOARD = 'mdb.generateObjectIdToClipboard',
MDB_COPY_DOCUMENT_CONTENTS_FROM_TREE_VIEW = 'mdb.copyDocumentContentsFromTreeView',
MDB_CLONE_DOCUMENT_FROM_TREE_VIEW = 'mdb.cloneDocumentFromTreeView',
MDB_DELETE_DOCUMENT_FROM_TREE_VIEW = 'mdb.deleteDocumentFromTreeView',
MDB_ADD_STREAM_PROCESSOR = 'mdb.addStreamProcessor',
MDB_START_STREAM_PROCESSOR = 'mdb.startStreamProcessor',
MDB_STOP_STREAM_PROCESSOR = 'mdb.stopStreamProcessor',
MDB_DROP_STREAM_PROCESSOR = 'mdb.dropStreamProcessor',
mdbAddConnection: 'mdb.addConnection',
mdbAddConnectionWithUri: 'mdb.addConnectionWithURI',
mdbRefreshPlaygroundsFromTreeView: 'mdb.refreshPlaygroundsFromTreeView',
mdbOpenPlaygroundFromTreeView: 'mdb.openPlaygroundFromTreeView',
mdbConnectToConnectionTreeView: 'mdb.connectToConnectionTreeItem',
mdbCreatePlaygroundFromTreeView: 'mdb.createNewPlaygroundFromTreeView',
mdbCreatePlaygroundFromTreeItem: 'mdb.createNewPlaygroundFromTreeItem',
mdbDisconnectFromConnectionTreeView: 'mdb.disconnectFromConnectionTreeItem',
mdbEditConnection: 'mdb.editConnection',
mdbRefreshConnection: 'mdb.refreshConnection',
mdbCopyConnectionString: 'mdb.copyConnectionString',
mdbEditPresetConnections: 'mdb.editPresetConnections',
mdbRemoveConnectionTreeView: 'mdb.treeItemRemoveConnection',
mdbRenameConnection: 'mdb.renameConnection',
mdbAddDatabase: 'mdb.addDatabase',
mdbSearchForDocuments: 'mdb.searchForDocuments',
mdbCopyDatabaseName: 'mdb.copyDatabaseName',
mdbDropDatabase: 'mdb.dropDatabase',
mdbRefreshDatabase: 'mdb.refreshDatabase',
mdbAddCollection: 'mdb.addCollection',
mdbCopyCollectionName: 'mdb.copyCollectionName',
mdbDropCollection: 'mdb.dropCollection',
mdbViewCollectionDocuments: 'mdb.viewCollectionDocuments',
mdbRefreshCollection: 'mdb.refreshCollection',
mdbRefreshDocumentList: 'mdb.refreshDocumentList',
mdbInsertDocumentFromTreeView: 'mdb.insertDocumentFromTreeView',
mdbRefreshSchema: 'mdb.refreshSchema',
mdbCopySchemaFieldName: 'mdb.copySchemaFieldName',
mdbRefreshIndexes: 'mdb.refreshIndexes',
mdbCreateIndexTreeView: 'mdb.createIndexFromTreeView',
mdbInsertObjectidToEditor: 'mdb.insertObjectIdToEditor',
mdbGenerateObjectidToClipboard: 'mdb.generateObjectIdToClipboard',
mdbCopyDocumentContentsFromTreeView: 'mdb.copyDocumentContentsFromTreeView',
mdbCloneDocumentFromTreeView: 'mdb.cloneDocumentFromTreeView',
mdbDeleteDocumentFromTreeView: 'mdb.deleteDocumentFromTreeView',
mdbAddStreamProcessor: 'mdb.addStreamProcessor',
mdbStartStreamProcessor: 'mdb.startStreamProcessor',
mdbStopStreamProcessor: 'mdb.stopStreamProcessor',
mdbDropStreamProcessor: 'mdb.dropStreamProcessor',

// Chat participant.
OPEN_PARTICIPANT_CODE_IN_PLAYGROUND = 'mdb.openParticipantCodeInPlayground',
SEND_MESSAGE_TO_PARTICIPANT = 'mdb.sendMessageToParticipant',
SEND_MESSAGE_TO_PARTICIPANT_FROM_INPUT = 'mdb.sendMessageToParticipantFromInput',
ASK_COPILOT_FROM_TREE_ITEM = 'mdb.askCopilotFromTreeItem',
RUN_PARTICIPANT_CODE = 'mdb.runParticipantCode',
CONNECT_WITH_PARTICIPANT = 'mdb.connectWithParticipant',
SELECT_DATABASE_WITH_PARTICIPANT = 'mdb.selectDatabaseWithParticipant',
SELECT_COLLECTION_WITH_PARTICIPANT = 'mdb.selectCollectionWithParticipant',
PARTICIPANT_OPEN_RAW_SCHEMA_OUTPUT = 'mdb.participantViewRawSchemaOutput',
SHOW_EXPORT_TO_LANGUAGE_RESULT = 'mdb.showExportToLanguageResult',
openParticipantCodeInPlayground: 'mdb.openParticipantCodeInPlayground',
sendMessageToParticipant: 'mdb.sendMessageToParticipant',
sendMessageToParticipantFromInput: 'mdb.sendMessageToParticipantFromInput',
askCopilotFromTreeItem: 'mdb.askCopilotFromTreeItem',
runParticipantCode: 'mdb.runParticipantCode',
connectWithParticipant: 'mdb.connectWithParticipant',
selectDatabaseWithParticipant: 'mdb.selectDatabaseWithParticipant',
selectCollectionWithParticipant: 'mdb.selectCollectionWithParticipant',
participantOpenRawSchemaOutput: 'mdb.participantViewRawSchemaOutput',
showExportToLanguageResult: 'mdb.showExportToLanguageResult',

// MCP Server commands.
START_MCP_SERVER = 'mdb.startMCPServer',
STOP_MCP_SERVER = 'mdb.stopMCPServer',
GET_MCP_SERVER_CONFIG = 'mdb.getMCPServerConfig',
}
startMcpServer: 'mdb.startMCPServer',
stopMcpServer: 'mdb.stopMCPServer',
getMcpServerConfig: 'mdb.getMCPServerConfig',
} as const;

export type ExtensionCommand = EXTENSION_COMMANDS;
export type ExtensionCommand =
(typeof ExtensionCommand)[keyof typeof ExtensionCommand];

export default EXTENSION_COMMANDS;
export default ExtensionCommand;
Loading
Loading