From 1b1f08d64d9b8cb7a7ec7b8a57988a0a10694b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Wed, 30 Oct 2024 11:47:13 +0100 Subject: [PATCH 01/81] chore(compass-schema): "Schema Exported" event COMPASS-8332 (#6389) * Add "Schema Exported" event * Update tracking plan * Send "Schema Exported" event --- docs/tracking-plan.md | 20 ++++++++++++ packages/compass-schema/src/stores/store.ts | 18 +++++++++++ .../compass-telemetry/src/telemetry-events.ts | 31 +++++++++++++++++++ 3 files changed, 69 insertions(+) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 3efef1ae2ad..9bf59b7de5f 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -148,6 +148,7 @@ Generated on Tue, Oct 29, 2024 at 05:29 PM ### Schema - [Schema Analyzed](#event--SchemaAnalyzedEvent) +- [Schema Exported](#event--SchemaExportedEvent) ### Schema Validation - [Schema Validation Added](#event--SchemaValidationAddedEvent) @@ -1801,6 +1802,25 @@ This event is fired when user analyzes the schema. - **connection_id** (optional): `string | undefined` - The id of the connection associated to this event. + + +### Schema Exported + +This event is fired when user shares the schema. + +**Properties**: + +- **has_schema** (required): `boolean` + - Indicates whether the schema was analyzed before sharing. +- **schema_width** (required): `number` + - The number of fields at the top level. +- **schema_depth** (required): `number` + - The number of nested levels. +- **geo_data** (required): `boolean` + - Indicates whether the schema contains geospatial data. +- **connection_id** (optional): `string | undefined` + - The id of the connection associated to this event. + ## Schema Validation diff --git a/packages/compass-schema/src/stores/store.ts b/packages/compass-schema/src/stores/store.ts index 6bad28897a7..9377d80a032 100644 --- a/packages/compass-schema/src/stores/store.ts +++ b/packages/compass-schema/src/stores/store.ts @@ -87,6 +87,8 @@ export type SchemaStore = StoreWithStateMixin & { dataService: DataService; handleSchemaShare(): void; + _trackSchemaShared(hasSchema: boolean): void; + onSchemaSampled(): void; geoLayerAdded( field: string, @@ -162,6 +164,7 @@ export function activateSchemaPlugin( JSON.stringify(this.state.schema, null, ' ') ); const hasSchema = this.state.schema !== null; + this._trackSchemaShared(hasSchema); openToast( 'share-schema', hasSchema @@ -181,6 +184,21 @@ export function activateSchemaPlugin( ); }, + _trackSchemaShared(this: SchemaStore, hasSchema: boolean) { + const { schema } = this.state; + // Use a function here to a) ensure that the calculations here + // are only made when telemetry is enabled and b) that errors from + // those calculations are caught and logged rather than displayed to + // users as errors from the core schema sharing logic. + const trackEvent = () => ({ + has_schema: hasSchema, + schema_width: schema?.fields?.length ?? 0, + schema_depth: schema ? calculateSchemaDepth(schema) : 0, + geo_data: schema ? schemaContainsGeoData(schema) : false, + }); + track('Schema Exported', trackEvent, connectionInfoRef.current); + }, + /** * Initialize the schema store. * diff --git a/packages/compass-telemetry/src/telemetry-events.ts b/packages/compass-telemetry/src/telemetry-events.ts index 26dbd1394d6..1e354add801 100644 --- a/packages/compass-telemetry/src/telemetry-events.ts +++ b/packages/compass-telemetry/src/telemetry-events.ts @@ -1928,6 +1928,36 @@ type SchemaAnalyzedEvent = ConnectionScoped<{ }; }>; +/** + * This event is fired when user shares the schema. + * + * @category Schema + */ +type SchemaExportedEvent = ConnectionScoped<{ + name: 'Schema Exported'; + payload: { + /** + * Indicates whether the schema was analyzed before sharing. + */ + has_schema: boolean; + + /** + * The number of fields at the top level. + */ + schema_width: number; + + /** + * The number of nested levels. + */ + schema_depth: number; + + /** + * Indicates whether the schema contains geospatial data. + */ + geo_data: boolean; + }; +}>; + /** * This event is fired when a user clicks to show the details of an operation. * @@ -2641,6 +2671,7 @@ export type TelemetryEvent = | QueryHistoryRecentUsedEvent | QueryResultsRefreshedEvent | SchemaAnalyzedEvent + | SchemaExportedEvent | SchemaValidationAddedEvent | SchemaValidationEditedEvent | SchemaValidationUpdatedEvent From ad5e8f8f13d0cff6196d02496408035203d69c32 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 10:53:52 +0000 Subject: [PATCH 02/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6424) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 17d5cc02d80..a6150a72bc0 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Tue Oct 29 2024. +This document was automatically generated on Wed Oct 30 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 9bf59b7de5f..9f78629b0fa 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Oct 29, 2024 at 05:29 PM +Generated on Wed, Oct 30, 2024 at 10:53 AM ## Table of Contents From ea204ef62c6a9d9cfc232c88b70d94d018df631a Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Wed, 30 Oct 2024 15:31:27 +0100 Subject: [PATCH 03/81] chore(e2e): adjust the scripts to make it easier to run atlas cloud e2e tests locally (#6425) * chore(e2e): adjust the scripts to make it easier to run atlas cloud e2e tests locally * chore(ci): remove COMPASS_E2E_ATLAS_CLOUD_SANDBOX_CLOUD_CONFIG env var from test-sanbox-with-atlas function --- .evergreen/functions.yml | 1 - .evergreen/start-atlas-cloud-cluster.sh | 87 +++++++++++++++++-- .../helpers/test-runner-context.ts | 57 ++++-------- 3 files changed, 97 insertions(+), 48 deletions(-) diff --git a/.evergreen/functions.yml b/.evergreen/functions.yml index b4dc14846d3..3fc873e4cb9 100644 --- a/.evergreen/functions.yml +++ b/.evergreen/functions.yml @@ -683,7 +683,6 @@ functions: env: <<: *compass-env DEBUG: ${debug|} - COMPASS_E2E_ATLAS_CLOUD_SANDBOX_CLOUD_CONFIG: 'qa' COMPASS_E2E_ATLAS_CLOUD_SANDBOX_USERNAME: ${e2e_tests_compass_web_atlas_username} COMPASS_E2E_ATLAS_CLOUD_SANDBOX_PASSWORD: ${e2e_tests_compass_web_atlas_password} COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_USERNAME: ${e2e_tests_compass_web_atlas_db_username} diff --git a/.evergreen/start-atlas-cloud-cluster.sh b/.evergreen/start-atlas-cloud-cluster.sh index 63e87471639..0b1b48bd540 100644 --- a/.evergreen/start-atlas-cloud-cluster.sh +++ b/.evergreen/start-atlas-cloud-cluster.sh @@ -1,10 +1,61 @@ #!/bin/bash +# This script helps to automatically provision Atlas cluster for running the e2e +# tests against. In CI this will always create a new cluster and delete it when +# the test run is finished. You can also use this script locally to run e2e +# tests against a "logged in" Atlas Cloud experience in compass-web sandbox. +# +# While the provisioning of clusters is automated, you should be aware that it +# requires some extra environmental variables to be available when you are +# running it. If you want to be able to run these e2e tests locally, following +# steps are required: +# +# - Create a test Atlas user on one of the testing environments (-dev / -qa). +# You can only use your work emails with a subaddress to create those (e.g, +# jane.doe+for-testing@mongodb.com). +# +# - Setup a new org and project. Save the org id and project id for later. +# +# - Create new db user with username / password auth and admin role. This user +# will be used to prepopulate dbs with data in tests. Save the credentials. +# +# - Create a new API key (Access Manager > Project Access > Create Application > +# API Key) for the project you created and save the public and private keys. +# +# - (Optional) Deploy a cluster with a required configuration through Atlas +# Cloud UI. If you skip the step, the script will deploy a default cluster for +# you. +# +# - Make sure that you have the following environmental variables provided to +# the script below: +# +# MCLI_OPS_MANAGER_URL API base url matching the environment you used to +# create your user (https://cloud{-dev,-qa}.mongodb.com/) +# MCLI_PUBLIC_API_KEY Public API key +# MCLI_PRIVATE_API_KEY Private API key +# MCLI_ORG_ID Org ID +# MCLI_PROJECT_ID Project ID +# +# COMPASS_E2E_ATLAS_CLOUD_SANDBOX_USERNAME Cloud user you created +# COMPASS_E2E_ATLAS_CLOUD_SANDBOX_PASSWORD Cloud user password +# COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_USERNAME Db user for the project +# COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_PASSWORD Db user password +# +# - Source the script followed by running the tests to make sure that some +# variables exported from this script are available for the test env: +# +# (ATLAS_CLOUD_TEST_CLUSTER_NAME="TestCluster" source .evergreen/start-atlas-cloud-cluster.sh \ +# && npm run -w compass-e2e-tests test web -- --test-atlas-cloud-sandbox --test-filter="atlas-cloud/**/*") + +_ATLAS_CLOUD_TEST_CLUSTER_NAME=${ATLAS_CLOUD_TEST_CLUSTER_NAME:-""} + # Atlas limits the naming to something like /^[\w\d-]{,23}$/ (and will auto # truncate if it's too long) so we're very limited in terms of how unique this # name can be. Hopefully the epoch + part of git hash is enough for these to not # overlap when tests are running -ATLAS_CLOUD_TEST_CLUSTER_NAME="e2e-$(date +"%s")-$(git rev-parse HEAD)" +DEFAULT_ATLAS_CLOUD_TEST_CLUSTER_NAME="e2e-$(date +"%s")-$(git rev-parse HEAD)" + +ATLAS_CLUSTER_NAME="${_ATLAS_CLOUD_TEST_CLUSTER_NAME:-$DEFAULT_ATLAS_CLOUD_TEST_CLUSTER_NAME}" function atlascli() { docker run \ @@ -17,23 +68,43 @@ function atlascli() { } cleanup() { - echo "Scheduling Atlas deployment \`$ATLAS_CLOUD_TEST_CLUSTER_NAME\` for deletion..." - atlascli clusters delete $ATLAS_CLOUD_TEST_CLUSTER_NAME --force + # Assuming that we want to preserve the cluster if the name was provided + # outside of script. Helpful when trying to run the tests locally, you can + # automatically create a cluster with a custom name for the first time, but + # then re-use it when running the tests again. Don't forget to clean it up + # after you're done! + if [ -z "$_ATLAS_CLOUD_TEST_CLUSTER_NAME" ]; then + echo "Scheduling Atlas deployment \`$ATLAS_CLUSTER_NAME\` for deletion..." + atlascli clusters delete $ATLAS_CLUSTER_NAME --force + else + echo "Custom cluster name provided ($_ATLAS_CLOUD_TEST_CLUSTER_NAME), skipping cluster cleanup" + fi } trap cleanup EXIT -echo "Creating Atlas deployment \`$ATLAS_CLOUD_TEST_CLUSTER_NAME\` to test against..." -atlascli clusters create $ATLAS_CLOUD_TEST_CLUSTER_NAME \ +echo "Creating Atlas deployment \`$ATLAS_CLUSTER_NAME\` to test against..." +atlascli clusters create $ATLAS_CLUSTER_NAME \ --provider AWS \ --region US_EAST_1 \ --tier M10 echo "Waiting for the deployment to be provisioned..." -atlascli clusters watch "$ATLAS_CLOUD_TEST_CLUSTER_NAME" +atlascli clusters watch $ATLAS_CLUSTER_NAME echo "Getting connection string for provisioned cluster..." -ATLAS_CLOUD_TEST_CLUSTER_CONNECTION_STRING_JSON="$(atlascli clusters connectionStrings describe $ATLAS_CLOUD_TEST_CLUSTER_NAME -o json)" +CONNECTION_STRINGS_JSON="$(atlascli clusters connectionStrings describe $ATLAS_CLUSTER_NAME -o json)" + +export COMPASS_E2E_ATLAS_CLOUD_SANDBOX_CLOUD_CONFIG=$( + if [[ "$MCLI_OPS_MANAGER_URL" =~ "-dev" ]]; then + echo "dev" + elif [[ "$MCLI_OPS_MANAGER_URL" =~ "-qa" ]]; then + echo "qa" + else + echo "prod" + fi +) +echo "Cloud config: $COMPASS_E2E_ATLAS_CLOUD_SANDBOX_CLOUD_CONFIG" -export COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DEFAULT_CONNECTIONS="{\"$ATLAS_CLOUD_TEST_CLUSTER_NAME\": $ATLAS_CLOUD_TEST_CLUSTER_CONNECTION_STRING_JSON}" +export COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DEFAULT_CONNECTIONS="{\"$ATLAS_CLUSTER_NAME\": $CONNECTION_STRINGS_JSON}" echo "Cluster connections: $COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DEFAULT_CONNECTIONS" diff --git a/packages/compass-e2e-tests/helpers/test-runner-context.ts b/packages/compass-e2e-tests/helpers/test-runner-context.ts index 4ad3fe13892..e9ed908a4e4 100644 --- a/packages/compass-e2e-tests/helpers/test-runner-context.ts +++ b/packages/compass-e2e-tests/helpers/test-runner-context.ts @@ -4,7 +4,7 @@ import { } from '@mongodb-js/connection-info'; import type { MongoClusterOptions } from 'mongodb-runner'; import yargs from 'yargs'; -import type { Argv } from 'yargs'; +import type { Argv, CamelCase } from 'yargs'; import { hideBin } from 'yargs/helpers'; import Debug from 'debug'; import fs from 'fs'; @@ -106,15 +106,17 @@ function buildDesktopArgs(yargs: Argv) { * make sure that the tests in mms are also updated to account for that */ const atlasCloudExternalArgs = [ - 'test-atlas-cloud-external', 'atlas-cloud-external-url', 'atlas-cloud-external-project-id', 'atlas-cloud-external-cookies-file', 'atlas-cloud-external-default-connections-file', ] as const; +type AtlasCloudExternalArgs = + | typeof atlasCloudExternalArgs[number] + | CamelCase; + const atlasCloudSandboxArgs = [ - 'test-atlas-cloud-sandbox', 'atlas-cloud-sandbox-cloud-config', 'atlas-cloud-sandbox-username', 'atlas-cloud-sandbox-password', @@ -123,6 +125,10 @@ const atlasCloudSandboxArgs = [ 'atlas-cloud-sandbox-default-connections', ] as const; +type AtlasCloudSandboxArgs = + | typeof atlasCloudSandboxArgs[number] + | CamelCase; + let testEnv: 'desktop' | 'web' | undefined; function buildWebArgs(yargs: Argv) { @@ -191,13 +197,9 @@ function buildWebArgs(yargs: Argv) { description: 'Stringified JSON with connections that are expected to be available in the Atlas project', }) - .implies( - Object.fromEntries( - atlasCloudSandboxArgs.map((arg) => { - return [arg, atlasCloudSandboxArgs]; - }) - ) - ) + .implies({ + 'test-atlas-cloud-sandbox': atlasCloudSandboxArgs, + }) .option('test-atlas-cloud-external', { type: 'boolean', description: @@ -221,13 +223,9 @@ function buildWebArgs(yargs: Argv) { description: 'File with JSON array of connections (following ConnectionInfo schema) that are expected to be available in the Atlas project', }) - .implies( - Object.fromEntries( - atlasCloudExternalArgs.map((arg) => { - return [arg, atlasCloudExternalArgs]; - }) - ) - ) + .implies({ + 'test-atlas-cloud-external': atlasCloudExternalArgs, + }) .conflicts({ 'test-atlas-cloud-external': 'test-atlas-cloud-sandbox', 'test-atlas-cloud-sandbox': 'test-atlas-cloud-external', @@ -310,14 +308,7 @@ export function assertTestingWeb(ctx = context): asserts ctx is WebParsedArgs { export function isTestingAtlasCloudExternal( ctx = context ): ctx is WebParsedArgs & { - [K in - | 'testAtlasCloudExternal' - | 'atlasCloudExternalUrl' - | 'atlasCloudExternalProjectId' - | 'atlasCloudExternalCookiesFile' - | 'atlasCloudExternalDefaultConnectionsFile']: NonNullable< - WebParsedArgs[K] - >; + [K in AtlasCloudExternalArgs]: NonNullable; } { return isTestingWeb(ctx) && !!ctx.testAtlasCloudExternal; } @@ -325,13 +316,7 @@ export function isTestingAtlasCloudExternal( export function isTestingAtlasCloudSandbox( ctx = context ): ctx is WebParsedArgs & { - [K in - | 'testAtlasCloudSandbox' - | 'atlasCloudSandboxUsername' - | 'atlasCloudSandboxPassword' - | 'atlasCloudSandboxDbuserUsername' - | 'atlasCloudSandboxDbuserPassword' - | 'atlasCloudSandboxDefaultConnections']: NonNullable; + [K in AtlasCloudSandboxArgs]: NonNullable; } { return isTestingWeb(ctx) && !!ctx.testAtlasCloudSandbox; } @@ -339,13 +324,7 @@ export function isTestingAtlasCloudSandbox( export function assertTestingAtlasCloudSandbox( ctx = context ): asserts ctx is WebParsedArgs & { - [K in - | 'testAtlasCloudSandbox' - | 'atlasCloudSandboxUsername' - | 'atlasCloudSandboxPassword' - | 'atlasCloudSandboxDbuserUsername' - | 'atlasCloudSandboxDbuserPassword' - | 'atlasCloudSandboxDefaultConnections']: NonNullable; + [K in AtlasCloudSandboxArgs]: NonNullable; } { if (!isTestingAtlasCloudSandbox(ctx)) { throw new Error(`Expected tested runtime to be web w/ Atlas Cloud account`); From 3e48138745a0aaaa9398f394150057b4a14ac833 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 14:38:08 +0000 Subject: [PATCH 04/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6426) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 9f78629b0fa..a81d2ed0bb3 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Oct 30, 2024 at 10:53 AM +Generated on Wed, Oct 30, 2024 at 02:38 PM ## Table of Contents From 649c208f35b227ff6337af9209fc0e9b202daace Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Fri, 1 Nov 2024 12:36:13 +0100 Subject: [PATCH 05/81] fix(e2e): account for a recurring MFA reminder when singing in to cloud ui (#6429) --- .../helpers/compass-web-sandbox.ts | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/packages/compass-e2e-tests/helpers/compass-web-sandbox.ts b/packages/compass-e2e-tests/helpers/compass-web-sandbox.ts index 2f4345dc941..0a67b13d5e3 100644 --- a/packages/compass-e2e-tests/helpers/compass-web-sandbox.ts +++ b/packages/compass-e2e-tests/helpers/compass-web-sandbox.ts @@ -132,7 +132,44 @@ export async function spawnCompassWebSandboxAndSignInToAtlas( debug('Waiting for the auth to finish ...'); - const res = await authenticatePromise; + let authenticatedPromiseSettled = false; + + // Atlas Cloud will periodically remind user to enable MFA (which we can't + // enable in e2e CI environment), so to account for that, in parallel to + // waiting for auth to finish, we'll wait for the MFA screen to show up and + // skip it if it appears + const [, settledRes] = await Promise.allSettled([ + (async () => { + const remindMeLaterButton = 'button*=Remind me later'; + + await electronProxyRemote.waitUntil( + async () => { + return ( + authenticatedPromiseSettled || + (await electronProxyRemote.$(remindMeLaterButton).isDisplayed()) + ); + }, + // Takes awhile for the redirect to land on this reminder page when it + // happens, so no need to bombard the browser with displayed checks + { interval: 2000 } + ); + + if (authenticatedPromiseSettled) { + return; + } + + await electronProxyRemote.$(remindMeLaterButton).click(); + })(), + authenticatePromise.finally(() => { + authenticatedPromiseSettled = true; + }), + ]); + + if (settledRes.status === 'rejected') { + throw settledRes.reason; + } + + const res = settledRes.value; if (res.ok === false || !(await res.json()).projectId) { throw new Error( From 697e4ceed676545f9273660c874d5007a2c33ec5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 11:42:46 +0000 Subject: [PATCH 06/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6431) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index a6150a72bc0..37e074f7bd2 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Wed Oct 30 2024. +This document was automatically generated on Fri Nov 01 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index a81d2ed0bb3..94cf3630022 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Oct 30, 2024 at 02:38 PM +Generated on Fri, Nov 1, 2024 at 11:42 AM ## Table of Contents From 1eef24e8c2d9ef9ffd90139bed7f75dabd501b40 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Fri, 1 Nov 2024 14:50:29 +0100 Subject: [PATCH 07/81] chore(e2e): automatically create db user and add ip address to the access list before running tests (#6432) --- .evergreen/functions.yml | 2 -- .evergreen/start-atlas-cloud-cluster.sh | 29 ++++++++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/.evergreen/functions.yml b/.evergreen/functions.yml index 3fc873e4cb9..bb69785b943 100644 --- a/.evergreen/functions.yml +++ b/.evergreen/functions.yml @@ -685,8 +685,6 @@ functions: DEBUG: ${debug|} COMPASS_E2E_ATLAS_CLOUD_SANDBOX_USERNAME: ${e2e_tests_compass_web_atlas_username} COMPASS_E2E_ATLAS_CLOUD_SANDBOX_PASSWORD: ${e2e_tests_compass_web_atlas_password} - COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_USERNAME: ${e2e_tests_compass_web_atlas_db_username} - COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_PASSWORD: ${e2e_tests_compass_web_atlas_password} MCLI_PUBLIC_API_KEY: ${e2e_tests_mcli_public_api_key} MCLI_PRIVATE_API_KEY: ${e2e_tests_mcli_private_api_key} MCLI_ORG_ID: ${e2e_tests_mcli_org_id} diff --git a/.evergreen/start-atlas-cloud-cluster.sh b/.evergreen/start-atlas-cloud-cluster.sh index 0b1b48bd540..541fd7a4df1 100644 --- a/.evergreen/start-atlas-cloud-cluster.sh +++ b/.evergreen/start-atlas-cloud-cluster.sh @@ -1,5 +1,8 @@ #!/bin/bash +RUN_ID="$(date +"%s")-$(git rev-parse --short HEAD)" +DELETE_AFTER="$(date -u -Iseconds -d '+2 hours' 2>/dev/null || date -u -Iseconds -v '+2H')" + # This script helps to automatically provision Atlas cluster for running the e2e # tests against. In CI this will always create a new cluster and delete it when # the test run is finished. You can also use this script locally to run e2e @@ -16,9 +19,6 @@ # # - Setup a new org and project. Save the org id and project id for later. # -# - Create new db user with username / password auth and admin role. This user -# will be used to prepopulate dbs with data in tests. Save the credentials. -# # - Create a new API key (Access Manager > Project Access > Create Application > # API Key) for the project you created and save the public and private keys. # @@ -38,8 +38,6 @@ # # COMPASS_E2E_ATLAS_CLOUD_SANDBOX_USERNAME Cloud user you created # COMPASS_E2E_ATLAS_CLOUD_SANDBOX_PASSWORD Cloud user password -# COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_USERNAME Db user for the project -# COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_PASSWORD Db user password # # - Source the script followed by running the tests to make sure that some # variables exported from this script are available for the test env: @@ -53,10 +51,13 @@ _ATLAS_CLOUD_TEST_CLUSTER_NAME=${ATLAS_CLOUD_TEST_CLUSTER_NAME:-""} # truncate if it's too long) so we're very limited in terms of how unique this # name can be. Hopefully the epoch + part of git hash is enough for these to not # overlap when tests are running -DEFAULT_ATLAS_CLOUD_TEST_CLUSTER_NAME="e2e-$(date +"%s")-$(git rev-parse HEAD)" +DEFAULT_ATLAS_CLOUD_TEST_CLUSTER_NAME="e2e-$RUN_ID" ATLAS_CLUSTER_NAME="${_ATLAS_CLOUD_TEST_CLUSTER_NAME:-$DEFAULT_ATLAS_CLOUD_TEST_CLUSTER_NAME}" +ATLAS_TEST_DB_USERNAME="testuser-$RUN_ID" +ATLAS_TEST_DB_PASSWORD="$(head -c 32 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9')" + function atlascli() { docker run \ -e MCLI_PUBLIC_API_KEY \ @@ -79,10 +80,26 @@ cleanup() { else echo "Custom cluster name provided ($_ATLAS_CLOUD_TEST_CLUSTER_NAME), skipping cluster cleanup" fi + echo "Deleting Atlas db user \`$ATLAS_TEST_DB_USERNAME\`..." + atlascli dbusers delete $ATLAS_TEST_DB_USERNAME --force } trap cleanup EXIT +echo "Allowing access from current ip..." +atlascli accessList create \ + --currentIp \ + --deleteAfter "$DELETE_AFTER" + +echo "Creating Atlas db user \`$ATLAS_TEST_DB_USERNAME\`..." +atlascli dbusers create atlasAdmin \ + --username "$ATLAS_TEST_DB_USERNAME" \ + --password "$ATLAS_TEST_DB_PASSWORD" \ + --deleteAfter "$DELETE_AFTER" # so that it's autoremoved if cleaning up failed for some reason + +export COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_USERNAME="$ATLAS_TEST_DB_USERNAME" +export COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_PASSWORD="$ATLAS_TEST_DB_PASSWORD" + echo "Creating Atlas deployment \`$ATLAS_CLUSTER_NAME\` to test against..." atlascli clusters create $ATLAS_CLUSTER_NAME \ --provider AWS \ From d01d076528a5b73e8baff59bf054e938cbacd5b8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 13:57:02 +0000 Subject: [PATCH 08/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6433) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 94cf3630022..f3ba95b1a7f 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Nov 1, 2024 at 11:42 AM +Generated on Fri, Nov 1, 2024 at 01:56 PM ## Table of Contents From cf59b59d53784f41e264fd8b64235a74cfdd8a74 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 3 Nov 2024 03:17:19 +0000 Subject: [PATCH 09/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6437) Update report Co-authored-by: mcasimir <334881+mcasimir@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 37e074f7bd2..c1a4b9acdad 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Fri Nov 01 2024. +This document was automatically generated on Sun Nov 03 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index f3ba95b1a7f..7bb14a83d72 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Nov 1, 2024 at 01:56 PM +Generated on Sun, Nov 3, 2024 at 03:17 AM ## Table of Contents From cf0e4dbd0c3c420b45e014e0d18280e282123863 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 05:05:04 +0000 Subject: [PATCH 10/81] v1.44.7-beta.0 --- package-lock.json | 2 +- packages/compass/package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13b36b4cb9f..f368b7cffe7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43140,7 +43140,7 @@ }, "packages/compass": { "name": "mongodb-compass", - "version": "1.44.6-beta.3", + "version": "1.44.7-beta.0", "hasInstallScript": true, "license": "SSPL", "dependencies": { diff --git a/packages/compass/package.json b/packages/compass/package.json index cba316cb678..c8cc32a4fe1 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -4,7 +4,7 @@ "productName": "MongoDB Compass", "description": "The MongoDB GUI", "homepage": "https://www.mongodb.com/products/compass", - "version": "1.44.6-beta.3", + "version": "1.44.7-beta.0", "apiVersion": "3.0.0", "main": "build/main.js", "author": { @@ -278,5 +278,5 @@ "macos-export-certificate-and-key": "^1.1.2", "win-export-certificate-and-key": "^2.0.1" }, - "releasePublisher": "Paula Stachova " + "releasePublisher": "Maurizio Casimirri " } From 3557f0e16f6879f5310a94248560cec53ff1a861 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Mon, 4 Nov 2024 09:18:31 +0100 Subject: [PATCH 11/81] chore(e2e): screenshot if failed in rolling-indexes test (#6436) --- .../tests/atlas-cloud/rolling-indexes.test.ts | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/compass-e2e-tests/tests/atlas-cloud/rolling-indexes.test.ts b/packages/compass-e2e-tests/tests/atlas-cloud/rolling-indexes.test.ts index 4c2fa9aac5e..f09b7afcd85 100644 --- a/packages/compass-e2e-tests/tests/atlas-cloud/rolling-indexes.test.ts +++ b/packages/compass-e2e-tests/tests/atlas-cloud/rolling-indexes.test.ts @@ -1,5 +1,10 @@ import type { Compass } from '../../helpers/compass'; -import { cleanup, init, Selectors } from '../../helpers/compass'; +import { + cleanup, + init, + screenshotIfFailed, + Selectors, +} from '../../helpers/compass'; import type { CompassBrowser } from '../../helpers/compass-browser'; import { createNumbersCollection } from '../../helpers/insert-data'; import { @@ -11,16 +16,20 @@ describe('Rolling indexes', function () { let compass: Compass; let browser: CompassBrowser; - before(async function () { + before(function () { + if (!isTestingAtlasCloudSandbox()) { + this.skip(); + } + }); + + beforeEach(async function () { compass = await init(this.test?.fullTitle()); browser = compass.browser; await browser.setupDefaultConnections(); }); - before(function () { - if (!isTestingAtlasCloudSandbox()) { - this.skip(); - } + afterEach(async function () { + await screenshotIfFailed(compass, this.currentTest); }); after(async function () { From 445b0bd20e7f8ba074e8d37f7ebe74bbfc5e8c40 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 08:26:03 +0000 Subject: [PATCH 12/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6438) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index c1a4b9acdad..a938094425b 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Sun Nov 03 2024. +This document was automatically generated on Mon Nov 04 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 7bb14a83d72..3bbfef3d9f9 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Sun, Nov 3, 2024 at 03:17 AM +Generated on Mon, Nov 4, 2024 at 08:25 AM ## Table of Contents From 93fc17047e724a8cab3d2741c8b3af653d9a46f7 Mon Sep 17 00:00:00 2001 From: Basit <1305718+mabaasit@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:10:06 +0100 Subject: [PATCH 13/81] fix(user-data): use semaphore to limit reads COMPASS-7256 (#6427) * use semaphore * many files test * handle error * cr fixes --- .../compass-user-data/src/semaphore.spec.ts | 28 +++++++++++++++++++ packages/compass-user-data/src/semaphore.ts | 27 ++++++++++++++++++ packages/compass-user-data/src/user-data.ts | 5 ++++ 3 files changed, 60 insertions(+) create mode 100644 packages/compass-user-data/src/semaphore.spec.ts create mode 100644 packages/compass-user-data/src/semaphore.ts diff --git a/packages/compass-user-data/src/semaphore.spec.ts b/packages/compass-user-data/src/semaphore.spec.ts new file mode 100644 index 00000000000..3eb90550ef8 --- /dev/null +++ b/packages/compass-user-data/src/semaphore.spec.ts @@ -0,0 +1,28 @@ +import { expect } from 'chai'; +import { Semaphore } from './semaphore'; + +describe('semaphore', function () { + const maxConcurrentOps = 5; + let semaphore: Semaphore; + let taskHandler: (id: number) => Promise; + + beforeEach(() => { + semaphore = new Semaphore(maxConcurrentOps); + taskHandler = async (id: number) => { + const release = await semaphore.waitForRelease(); + const delay = Math.floor(Math.random() * 450) + 50; + try { + await new Promise((resolve) => setTimeout(resolve, delay)); + return id; + } finally { + release(); + } + }; + }); + + it('should run operations concurrently', async function () { + const tasks = Array.from({ length: 10 }, (_, i) => taskHandler(i)); + const results = await Promise.all(tasks); + expect(results).to.have.lengthOf(10); + }); +}); diff --git a/packages/compass-user-data/src/semaphore.ts b/packages/compass-user-data/src/semaphore.ts new file mode 100644 index 00000000000..98c8a8c047b --- /dev/null +++ b/packages/compass-user-data/src/semaphore.ts @@ -0,0 +1,27 @@ +export class Semaphore { + private currentCount = 0; + private queue: (() => void)[] = []; + constructor(private maxConcurrentOps: number) {} + + waitForRelease(): Promise<() => void> { + return new Promise((resolve) => { + const attempt = () => { + this.currentCount++; + resolve(this.release.bind(this)); + }; + if (this.currentCount < this.maxConcurrentOps) { + attempt(); + } else { + this.queue.push(attempt); + } + }); + } + + private release() { + this.currentCount--; + if (this.queue.length > 0) { + const next = this.queue.shift(); + next && next(); + } + } +} diff --git a/packages/compass-user-data/src/user-data.ts b/packages/compass-user-data/src/user-data.ts index bbb01daa8ef..92d3cd36d5e 100644 --- a/packages/compass-user-data/src/user-data.ts +++ b/packages/compass-user-data/src/user-data.ts @@ -4,6 +4,7 @@ import { createLogger } from '@mongodb-js/compass-logging'; import { getStoragePath } from '@mongodb-js/compass-utils'; import type { z } from 'zod'; import writeFile from 'write-file-atomic'; +import { Semaphore } from './semaphore'; const { log, mongoLogId } = createLogger('COMPASS-USER-STORAGE'); @@ -68,6 +69,7 @@ export class UserData { private readonly serialize: SerializeContent>; private readonly deserialize: DeserializeContent; private readonly getFileName: GetFileName; + private readonly semaphore = new Semaphore(100); constructor( private readonly validator: T, @@ -122,7 +124,9 @@ export class UserData { let data: string; let stats: Stats; let handle: fs.FileHandle | undefined = undefined; + let release: (() => void) | undefined = undefined; try { + release = await this.semaphore.waitForRelease(); handle = await fs.open(absolutePath, 'r'); [stats, data] = await Promise.all([ handle.stat(), @@ -139,6 +143,7 @@ export class UserData { throw error; } finally { await handle?.close(); + release?.(); } try { From 6c4d5342fdeb3f587c7f621bc7b12640a4762e68 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 13:16:40 +0000 Subject: [PATCH 14/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6440) Update report Co-authored-by: mabaasit <1305718+mabaasit@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 3bbfef3d9f9..8554ededb54 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Nov 4, 2024 at 08:25 AM +Generated on Mon, Nov 4, 2024 at 01:16 PM ## Table of Contents From 8b889646b6bf442c788740270a06be95f1d12e52 Mon Sep 17 00:00:00 2001 From: Rhys Date: Mon, 4 Nov 2024 10:41:52 -0500 Subject: [PATCH 15/81] chore(generative-ai): add url endpoints for compass web usage COMPASS-8376 (#6423) --- package-lock.json | 4 + packages/atlas-service/src/atlas-service.ts | 8 +- .../modules/pipeline-builder/pipeline-ai.ts | 31 +- packages/compass-generative-ai/package.json | 2 + .../src/atlas-ai-service.spec.ts | 557 ++++++++++-------- .../src/atlas-ai-service.ts | 125 +++- .../compass-generative-ai/src/provider.tsx | 38 +- .../src/stores/ai-query-reducer.ts | 31 +- packages/compass-web/src/entrypoint.tsx | 4 +- .../compass/src/app/components/entrypoint.tsx | 4 +- 10 files changed, 488 insertions(+), 316 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d1ec369fa8..e51763a1c15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44752,6 +44752,7 @@ "dependencies": { "@mongodb-js/atlas-service": "^0.31.0", "@mongodb-js/compass-components": "^1.31.0", + "@mongodb-js/compass-connections": "^1.45.0", "@mongodb-js/compass-intercom": "^0.13.2", "@mongodb-js/compass-logging": "^1.4.9", "bson": "^6.8.0", @@ -44762,6 +44763,7 @@ "react": "^17.0.2" }, "devDependencies": { + "@mongodb-js/connection-info": "^0.9.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55973,8 +55975,10 @@ "requires": { "@mongodb-js/atlas-service": "^0.31.0", "@mongodb-js/compass-components": "^1.31.0", + "@mongodb-js/compass-connections": "^1.45.0", "@mongodb-js/compass-intercom": "^0.13.2", "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/connection-info": "^0.9.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", diff --git a/packages/atlas-service/src/atlas-service.ts b/packages/atlas-service/src/atlas-service.ts index dd80e78bfa3..528e4ef6de5 100644 --- a/packages/atlas-service/src/atlas-service.ts +++ b/packages/atlas-service/src/atlas-service.ts @@ -29,12 +29,8 @@ export class AtlasService { ) { this.config = getAtlasConfig(preferences); } - adminApiEndpoint(path?: string, requestId?: string): string { - const uri = `${this.config.atlasApiBaseUrl}${normalizePath(path)}`; - const query = requestId - ? `?request_id=${encodeURIComponent(requestId)}` - : ''; - return `${uri}${query}`; + adminApiEndpoint(path?: string): string { + return `${this.config.atlasApiBaseUrl}${normalizePath(path)}`; } cloudEndpoint(path?: string): string { return `${this.config.cloudBaseUrl}${normalizePath(path)}`; diff --git a/packages/compass-aggregations/src/modules/pipeline-builder/pipeline-ai.ts b/packages/compass-aggregations/src/modules/pipeline-builder/pipeline-ai.ts index ff5882dde11..5c60b683f8c 100644 --- a/packages/compass-aggregations/src/modules/pipeline-builder/pipeline-ai.ts +++ b/packages/compass-aggregations/src/modules/pipeline-builder/pipeline-ai.ts @@ -281,20 +281,23 @@ export const runAIPipelineGeneration = ( const { collection: collectionName, database: databaseName } = toNS(namespace); - jsonResponse = await atlasAiService.getAggregationFromUserInput({ - signal: abortController.signal, - userInput, - collectionName, - databaseName, - schema, - // Provide sample documents when the user has opted in in their settings. - ...(provideSampleDocuments - ? { - sampleDocuments, - } - : undefined), - requestId, - }); + jsonResponse = await atlasAiService.getAggregationFromUserInput( + { + signal: abortController.signal, + userInput, + collectionName, + databaseName, + schema, + // Provide sample documents when the user has opted in in their settings. + ...(provideSampleDocuments + ? { + sampleDocuments, + } + : undefined), + requestId, + }, + connectionInfo + ); } catch (err: any) { if (signal.aborted) { // If we already aborted so we ignore the error. diff --git a/packages/compass-generative-ai/package.json b/packages/compass-generative-ai/package.json index bbf9b1142dc..3f4ffbf2ba8 100644 --- a/packages/compass-generative-ai/package.json +++ b/packages/compass-generative-ai/package.json @@ -54,6 +54,7 @@ "dependencies": { "@mongodb-js/atlas-service": "^0.31.0", "@mongodb-js/compass-components": "^1.31.0", + "@mongodb-js/compass-connections": "^1.45.0", "@mongodb-js/compass-intercom": "^0.13.2", "@mongodb-js/compass-logging": "^1.4.9", "bson": "^6.8.0", @@ -64,6 +65,7 @@ "react": "^17.0.2" }, "devDependencies": { + "@mongodb-js/connection-info": "^0.9.2", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", diff --git a/packages/compass-generative-ai/src/atlas-ai-service.spec.ts b/packages/compass-generative-ai/src/atlas-ai-service.spec.ts index b274e6d0ad7..ad904fb4a68 100644 --- a/packages/compass-generative-ai/src/atlas-ai-service.spec.ts +++ b/packages/compass-generative-ai/src/atlas-ai-service.spec.ts @@ -5,6 +5,7 @@ import type { PreferencesAccess } from 'compass-preferences-model'; import { createSandboxFromDefaultPreferences } from 'compass-preferences-model'; import { createNoopLogger } from '@mongodb-js/compass-logging/provider'; import { ObjectId } from 'mongodb'; +import type { ConnectionInfo } from '@mongodb-js/connection-info'; const ATLAS_USER = { firstName: 'John', @@ -21,12 +22,28 @@ const PREFERENCES_USER = { const BASE_URL = 'http://example.com'; +const mockConnectionInfo: ConnectionInfo = { + id: 'TEST', + connectionOptions: { + connectionString: 'mongodb://localhost:27020', + }, + atlasMetadata: { + orgId: 'testOrg', + projectId: 'testProject', + clusterName: 'pineapple', + regionalBaseUrl: 'https://example.com', + metricsId: 'metricsId', + metricsType: 'replicaSet', + instanceSize: 'M10', + clusterType: 'REPLICASET', + clusterUniqueId: 'clusterUniqueId', + }, +}; + class MockAtlasService { getCurrentUser = () => Promise.resolve(ATLAS_USER); - adminApiEndpoint = (url: string, requestId?: string) => - `${[BASE_URL, url].join('/')}${ - requestId ? `?request_id=${requestId}` : '' - }`; + cloudEndpoint = (url: string) => `${['/cloud', url].join('/')}`; + adminApiEndpoint = (url: string) => `${[BASE_URL, url].join('/')}`; authenticatedFetch = (url: string, init: RequestInit) => { return fetch(url, init); }; @@ -45,7 +62,6 @@ function makeResponse(content: any) { describe('AtlasAiService', function () { let sandbox: Sinon.SinonSandbox; - let atlasAiService: AtlasAiService; let preferences: PreferencesAccess; const initialFetch = global.fetch; @@ -53,12 +69,6 @@ describe('AtlasAiService', function () { sandbox = Sinon.createSandbox(); preferences = await createSandboxFromDefaultPreferences(); preferences['getPreferencesUser'] = () => PREFERENCES_USER; - - atlasAiService = new AtlasAiService( - new MockAtlasService() as any, - preferences, - createNoopLogger() - ); }); afterEach(function () { @@ -66,278 +76,333 @@ describe('AtlasAiService', function () { global.fetch = initialFetch; }); - describe('ai api calls', function () { - beforeEach(async function () { - // Enable the AI feature - const fetchStub = sandbox.stub().resolves( - makeResponse({ - features: { - GEN_AI_COMPASS: { - enabled: true, - }, - }, - }) - ); - global.fetch = fetchStub; - await atlasAiService['setupAIAccess'](); - global.fetch = initialFetch; - }); - - const atlasAIServiceTests = [ - { - functionName: 'getQueryFromUserInput', - aiEndpoint: 'mql-query', - responses: { - success: { - content: { query: { filter: "{ test: 'pineapple' }" } }, - }, - invalid: [ - [undefined, 'internal server error'], - [{}, 'unexpected response'], - [{ countent: {} }, 'unexpected response'], - [{ content: { qooery: {} } }, 'unexpected keys'], - [ - { content: { query: { filter: { foo: 1 } } } }, - 'unexpected response', - ], - ], - }, + const endpointBasepathTests = [ + { + apiURLPreset: 'admin-api', + expectedEndpoints: { + 'user-access': 'http://example.com/unauth/ai/api/v1/hello/1234', + 'mql-aggregation': `http://example.com/ai/api/v1/mql-aggregation?request_id=abc`, + 'mql-query': `http://example.com/ai/api/v1/mql-query?request_id=abc`, }, - { - functionName: 'getAggregationFromUserInput', - aiEndpoint: 'mql-aggregation', - responses: { - success: { - content: { aggregation: { pipeline: "[{ test: 'pineapple' }]" } }, - }, - invalid: [ - [undefined, 'internal server error'], - [{}, 'unexpected response'], - [{ content: { aggregation: {} } }, 'unexpected response'], - [{ content: { aggrogation: {} } }, 'unexpected keys'], - [ - { content: { aggregation: { pipeline: true } } }, - 'unexpected response', - ], - ], - }, + }, + { + apiURLPreset: 'cloud', + expectedEndpoints: { + 'user-access': '/cloud/ai/v1/hello/1234', + 'mql-aggregation': + '/cloud/ai/v1/groups/testProject/mql-aggregation?request_id=abc', + 'mql-query': '/cloud/ai/v1/groups/testProject/mql-query?request_id=abc', }, - ] as const; - - for (const { functionName, aiEndpoint, responses } of atlasAIServiceTests) { - describe(functionName, function () { - it('makes a post request with the user input to the endpoint in the environment', async function () { - const fetchStub = sandbox - .stub() - .resolves(makeResponse(responses.success)); - global.fetch = fetchStub; - - const res = await atlasAiService[functionName]({ - userInput: 'test', - signal: new AbortController().signal, - collectionName: 'jam', - databaseName: 'peanut', - schema: { _id: { types: [{ bsonType: 'ObjectId' }] } }, - sampleDocuments: [ - { _id: new ObjectId('642d766b7300158b1f22e972') }, - ], - requestId: 'abc', - }); - - expect(fetchStub).to.have.been.calledOnce; - - const { args } = fetchStub.firstCall; + }, + ] as const; + + for (const { apiURLPreset, expectedEndpoints } of endpointBasepathTests) { + describe(`api URL Preset "${apiURLPreset}"`, function () { + let atlasAiService: AtlasAiService; + + beforeEach(function () { + const mockAtlasService = new MockAtlasService(); + atlasAiService = new AtlasAiService({ + apiURLPreset, + atlasService: mockAtlasService as any, + preferences, + logger: createNoopLogger(), + }); + }); - expect(args[0]).to.eq( - `http://example.com/ai/api/v1/${aiEndpoint}?request_id=abc` - ); - expect(args[1].body).to.eq( - '{"userInput":"test","collectionName":"jam","databaseName":"peanut","schema":{"_id":{"types":[{"bsonType":"ObjectId"}]}},"sampleDocuments":[{"_id":{"$oid":"642d766b7300158b1f22e972"}}]}' + describe('ai api calls', function () { + beforeEach(async function () { + // Enable the AI feature + const fetchStub = sandbox.stub().resolves( + makeResponse({ + features: { + GEN_AI_COMPASS: { + enabled: true, + }, + }, + }) ); - expect(res).to.deep.eq(responses.success); + global.fetch = fetchStub; + await atlasAiService['setupAIAccess'](); + global.fetch = initialFetch; }); - it('should fail when response is not matching expected schema', async function () { - for (const [res, error] of responses.invalid) { - const fetchStub = sandbox.stub().resolves(makeResponse(res)); - global.fetch = fetchStub; - - try { - await atlasAiService[functionName]({ - userInput: 'test', - collectionName: 'test', - databaseName: 'peanut', - requestId: 'abc', - signal: new AbortController().signal, - }); - expect.fail(`Expected ${functionName} to throw`); - } catch (err) { - expect((err as Error).message).to.match(new RegExp(error, 'i')); - } - } - }); + const atlasAIServiceTests = [ + { + functionName: 'getQueryFromUserInput', + aiEndpoint: 'mql-query', + responses: { + success: { + content: { query: { filter: "{ test: 'pineapple' }" } }, + }, + invalid: [ + [undefined, 'internal server error'], + [{}, 'unexpected response'], + [{ countent: {} }, 'unexpected response'], + [{ content: { qooery: {} } }, 'unexpected keys'], + [ + { content: { query: { filter: { foo: 1 } } } }, + 'unexpected response', + ], + ], + }, + }, + { + functionName: 'getAggregationFromUserInput', + aiEndpoint: 'mql-aggregation', + responses: { + success: { + content: { + aggregation: { pipeline: "[{ test: 'pineapple' }]" }, + }, + }, + invalid: [ + [undefined, 'internal server error'], + [{}, 'unexpected response'], + [{ content: { aggregation: {} } }, 'unexpected response'], + [{ content: { aggrogation: {} } }, 'unexpected keys'], + [ + { content: { aggregation: { pipeline: true } } }, + 'unexpected response', + ], + ], + }, + }, + ] as const; + + for (const { + functionName, + aiEndpoint, + responses, + } of atlasAIServiceTests) { + describe(functionName, function () { + it('makes a post request with the user input to the endpoint in the environment', async function () { + const fetchStub = sandbox + .stub() + .resolves(makeResponse(responses.success)); + global.fetch = fetchStub; + + const res = await atlasAiService[functionName]( + { + userInput: 'test', + signal: new AbortController().signal, + collectionName: 'jam', + databaseName: 'peanut', + schema: { _id: { types: [{ bsonType: 'ObjectId' }] } }, + sampleDocuments: [ + { _id: new ObjectId('642d766b7300158b1f22e972') }, + ], + requestId: 'abc', + }, + mockConnectionInfo + ); + + expect(fetchStub).to.have.been.calledOnce; + + const { args } = fetchStub.firstCall; + + expect(args[0]).to.eq(expectedEndpoints[aiEndpoint]); + expect(args[1].body).to.eq( + '{"userInput":"test","collectionName":"jam","databaseName":"peanut","schema":{"_id":{"types":[{"bsonType":"ObjectId"}]}},"sampleDocuments":[{"_id":{"$oid":"642d766b7300158b1f22e972"}}]}' + ); + expect(res).to.deep.eq(responses.success); + }); - it('throws if the request would be too much for the ai', async function () { - try { - await atlasAiService[functionName]({ - userInput: 'test', - collectionName: 'test', - databaseName: 'peanut', - sampleDocuments: [{ test: '4'.repeat(5120001) }], - requestId: 'abc', - signal: new AbortController().signal, + it('should fail when response is not matching expected schema', async function () { + for (const [res, error] of responses.invalid) { + const fetchStub = sandbox.stub().resolves(makeResponse(res)); + global.fetch = fetchStub; + + try { + await atlasAiService[functionName]( + { + userInput: 'test', + collectionName: 'test', + databaseName: 'peanut', + requestId: 'abc', + signal: new AbortController().signal, + }, + mockConnectionInfo + ); + expect.fail(`Expected ${functionName} to throw`); + } catch (err) { + expect((err as Error).message).to.match( + new RegExp(error, 'i') + ); + } + } }); - expect.fail(`Expected ${functionName} to throw`); - } catch (err) { - expect(err).to.have.property( - 'message', - 'Sorry, your request is too large. Please use a smaller prompt or try using this feature on a collection with smaller documents.' - ); - } - }); - it('passes fewer documents if the request would be too much for the ai with all of the documents', async function () { - const fetchStub = sandbox - .stub() - .resolves(makeResponse(responses.success)); - global.fetch = fetchStub; + it('throws if the request would be too much for the ai', async function () { + try { + await atlasAiService[functionName]( + { + userInput: 'test', + collectionName: 'test', + databaseName: 'peanut', + sampleDocuments: [{ test: '4'.repeat(5120001) }], + requestId: 'abc', + signal: new AbortController().signal, + }, + mockConnectionInfo + ); + expect.fail(`Expected ${functionName} to throw`); + } catch (err) { + expect(err).to.have.property( + 'message', + 'Sorry, your request is too large. Please use a smaller prompt or try using this feature on a collection with smaller documents.' + ); + } + }); - await atlasAiService[functionName]({ - userInput: 'test', - collectionName: 'test.test', - databaseName: 'peanut', - sampleDocuments: [ - { a: '1' }, - { a: '2' }, - { a: '3' }, - { a: '4'.repeat(5120001) }, - ], - requestId: 'abc', - signal: new AbortController().signal, + it('passes fewer documents if the request would be too much for the ai with all of the documents', async function () { + const fetchStub = sandbox + .stub() + .resolves(makeResponse(responses.success)); + global.fetch = fetchStub; + + await atlasAiService[functionName]( + { + userInput: 'test', + collectionName: 'test.test', + databaseName: 'peanut', + sampleDocuments: [ + { a: '1' }, + { a: '2' }, + { a: '3' }, + { a: '4'.repeat(5120001) }, + ], + requestId: 'abc', + signal: new AbortController().signal, + }, + mockConnectionInfo + ); + + const { args } = fetchStub.firstCall; + + expect(fetchStub).to.have.been.calledOnce; + expect(args[1].body).to.eq( + '{"userInput":"test","collectionName":"test.test","databaseName":"peanut","sampleDocuments":[{"a":"1"}]}' + ); + }); }); + } + }); - const { args } = fetchStub.firstCall; - - expect(fetchStub).to.have.been.calledOnce; - expect(args[1].body).to.eq( - '{"userInput":"test","collectionName":"test.test","databaseName":"peanut","sampleDocuments":[{"a":"1"}]}' - ); + describe('setupAIAccess', function () { + beforeEach(async function () { + await preferences.savePreferences({ + cloudFeatureRolloutAccess: undefined, + }); }); - }); - } - }); - describe('setupAIAccess', function () { - beforeEach(async function () { - await preferences.savePreferences({ - cloudFeatureRolloutAccess: undefined, - }); - }); + it('should set the cloudFeatureRolloutAccess true when returned true', async function () { + const fetchStub = sandbox.stub().resolves( + makeResponse({ + features: { + GEN_AI_COMPASS: { + enabled: true, + }, + }, + }) + ); + global.fetch = fetchStub; - it('should set the cloudFeatureRolloutAccess true when returned true', async function () { - const fetchStub = sandbox.stub().resolves( - makeResponse({ - features: { - GEN_AI_COMPASS: { - enabled: true, - }, - }, - }) - ); - global.fetch = fetchStub; + let currentCloudFeatureRolloutAccess = + preferences.getPreferences().cloudFeatureRolloutAccess; + expect(currentCloudFeatureRolloutAccess).to.equal(undefined); - let currentCloudFeatureRolloutAccess = - preferences.getPreferences().cloudFeatureRolloutAccess; - expect(currentCloudFeatureRolloutAccess).to.equal(undefined); + await atlasAiService['setupAIAccess'](); - await atlasAiService['setupAIAccess'](); + const { args } = fetchStub.firstCall; - const { args } = fetchStub.firstCall; + expect(fetchStub).to.have.been.calledOnce; - expect(fetchStub).to.have.been.calledOnce; - expect(args[0]).to.contain('ai/api/v1/hello/1234'); + expect(args[0]).to.equal(expectedEndpoints['user-access']); - currentCloudFeatureRolloutAccess = - preferences.getPreferences().cloudFeatureRolloutAccess; - expect(currentCloudFeatureRolloutAccess).to.deep.equal({ - GEN_AI_COMPASS: true, - }); - }); + currentCloudFeatureRolloutAccess = + preferences.getPreferences().cloudFeatureRolloutAccess; + expect(currentCloudFeatureRolloutAccess).to.deep.equal({ + GEN_AI_COMPASS: true, + }); + }); - it('should set the cloudFeatureRolloutAccess false when returned false', async function () { - const fetchStub = sandbox.stub().resolves( - makeResponse({ - features: { - GEN_AI_COMPASS: { - enabled: false, - }, - }, - }) - ); - global.fetch = fetchStub; + it('should set the cloudFeatureRolloutAccess false when returned false', async function () { + const fetchStub = sandbox.stub().resolves( + makeResponse({ + features: { + GEN_AI_COMPASS: { + enabled: false, + }, + }, + }) + ); + global.fetch = fetchStub; - let currentCloudFeatureRolloutAccess = - preferences.getPreferences().cloudFeatureRolloutAccess; - expect(currentCloudFeatureRolloutAccess).to.equal(undefined); + let currentCloudFeatureRolloutAccess = + preferences.getPreferences().cloudFeatureRolloutAccess; + expect(currentCloudFeatureRolloutAccess).to.equal(undefined); - await atlasAiService['setupAIAccess'](); + await atlasAiService['setupAIAccess'](); - const { args } = fetchStub.firstCall; + const { args } = fetchStub.firstCall; - expect(fetchStub).to.have.been.calledOnce; - expect(args[0]).to.contain('ai/api/v1/hello/1234'); + expect(fetchStub).to.have.been.calledOnce; + expect(args[0]).to.equal(expectedEndpoints['user-access']); - currentCloudFeatureRolloutAccess = - preferences.getPreferences().cloudFeatureRolloutAccess; - expect(currentCloudFeatureRolloutAccess).to.deep.equal({ - GEN_AI_COMPASS: false, - }); - }); + currentCloudFeatureRolloutAccess = + preferences.getPreferences().cloudFeatureRolloutAccess; + expect(currentCloudFeatureRolloutAccess).to.deep.equal({ + GEN_AI_COMPASS: false, + }); + }); - it('should set the cloudFeatureRolloutAccess false when returned null', async function () { - const fetchStub = sandbox.stub().resolves( - makeResponse({ - features: null, - }) - ); - global.fetch = fetchStub; + it('should set the cloudFeatureRolloutAccess false when returned null', async function () { + const fetchStub = sandbox.stub().resolves( + makeResponse({ + features: null, + }) + ); + global.fetch = fetchStub; - let currentCloudFeatureRolloutAccess = - preferences.getPreferences().cloudFeatureRolloutAccess; - expect(currentCloudFeatureRolloutAccess).to.equal(undefined); + let currentCloudFeatureRolloutAccess = + preferences.getPreferences().cloudFeatureRolloutAccess; + expect(currentCloudFeatureRolloutAccess).to.equal(undefined); - await atlasAiService['setupAIAccess'](); + await atlasAiService['setupAIAccess'](); - const { args } = fetchStub.firstCall; + const { args } = fetchStub.firstCall; - expect(fetchStub).to.have.been.calledOnce; - expect(args[0]).to.contain('ai/api/v1/hello/1234'); + expect(fetchStub).to.have.been.calledOnce; + expect(args[0]).to.equal(expectedEndpoints['user-access']); - currentCloudFeatureRolloutAccess = - preferences.getPreferences().cloudFeatureRolloutAccess; - expect(currentCloudFeatureRolloutAccess).to.deep.equal({ - GEN_AI_COMPASS: false, - }); - }); + currentCloudFeatureRolloutAccess = + preferences.getPreferences().cloudFeatureRolloutAccess; + expect(currentCloudFeatureRolloutAccess).to.deep.equal({ + GEN_AI_COMPASS: false, + }); + }); - it('should not set the cloudFeatureRolloutAccess false when returned false', async function () { - const fetchStub = sandbox.stub().throws(new Error('error')); - global.fetch = fetchStub; + it('should not set the cloudFeatureRolloutAccess false when returned false', async function () { + const fetchStub = sandbox.stub().throws(new Error('error')); + global.fetch = fetchStub; - let currentCloudFeatureRolloutAccess = - preferences.getPreferences().cloudFeatureRolloutAccess; - expect(currentCloudFeatureRolloutAccess).to.equal(undefined); + let currentCloudFeatureRolloutAccess = + preferences.getPreferences().cloudFeatureRolloutAccess; + expect(currentCloudFeatureRolloutAccess).to.equal(undefined); - await atlasAiService['setupAIAccess'](); + await atlasAiService['setupAIAccess'](); - const { args } = fetchStub.firstCall; + const { args } = fetchStub.firstCall; - expect(fetchStub).to.have.been.calledOnce; - expect(args[0]).to.contain('ai/api/v1/hello/1234'); + expect(fetchStub).to.have.been.calledOnce; + expect(args[0]).to.equal(expectedEndpoints['user-access']); - currentCloudFeatureRolloutAccess = - preferences.getPreferences().cloudFeatureRolloutAccess; - expect(currentCloudFeatureRolloutAccess).to.deep.equal(undefined); + currentCloudFeatureRolloutAccess = + preferences.getPreferences().cloudFeatureRolloutAccess; + expect(currentCloudFeatureRolloutAccess).to.deep.equal(undefined); + }); + }); }); - }); + } }); diff --git a/packages/compass-generative-ai/src/atlas-ai-service.ts b/packages/compass-generative-ai/src/atlas-ai-service.ts index 5cc49001be7..b5038c1faf9 100644 --- a/packages/compass-generative-ai/src/atlas-ai-service.ts +++ b/packages/compass-generative-ai/src/atlas-ai-service.ts @@ -5,6 +5,7 @@ import { } from 'compass-preferences-model/provider'; import type { AtlasService } from '@mongodb-js/atlas-service/provider'; import { AtlasServiceError } from '@mongodb-js/atlas-service/renderer'; +import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider'; import type { Document } from 'mongodb'; import type { Logger } from '@mongodb-js/compass-logging'; import { EJSON } from 'bson'; @@ -23,9 +24,6 @@ type GenerativeAiInput = { // want to ensure we're not uploading massive documents (some folks have documents > 1mb). const AI_MAX_REQUEST_SIZE = 5120000; const AI_MIN_SAMPLE_DOCUMENTS = 1; -const USER_AI_URI = (userId: string) => `unauth/ai/api/v1/hello/${userId}`; -const AGGREGATION_URI = 'ai/api/v1/mql-aggregation'; -const QUERY_URI = 'ai/api/v1/mql-query'; type AIAggregation = { content: { @@ -192,17 +190,83 @@ export function validateAIAggregationResponse( } } +const aiURLConfig = { + // There are two different sets of endpoints we use for our requests. + // Down the line we'd like to only use the admin api, however, + // we cannot currently call that from the Atlas UI. Pending CLOUDP-251201 + 'admin-api': { + 'user-access': (userId: string) => `unauth/ai/api/v1/hello/${userId}`, + aggregation: 'ai/api/v1/mql-aggregation', + query: 'ai/api/v1/mql-query', + }, + cloud: { + 'user-access': (userId: string) => `ai/v1/hello/${userId}`, + aggregation: (groupId: string) => `ai/v1/groups/${groupId}/mql-aggregation`, + query: (groupId: string) => `ai/v1/groups/${groupId}/mql-query`, + }, +} as const; +type AIEndpoint = 'user-access' | 'query' | 'aggregation'; + export class AtlasAiService { private initPromise: Promise | null = null; - constructor( - private atlasService: AtlasService, - private preferences: PreferencesAccess, - private logger: Logger - ) { + private apiURLPreset: 'admin-api' | 'cloud'; + private atlasService: AtlasService; + private preferences: PreferencesAccess; + private logger: Logger; + + constructor({ + apiURLPreset, + atlasService, + preferences, + logger, + }: { + apiURLPreset: 'admin-api' | 'cloud'; + atlasService: AtlasService; + preferences: PreferencesAccess; + logger: Logger; + }) { + this.apiURLPreset = apiURLPreset; + this.atlasService = atlasService; + this.preferences = preferences; + this.logger = logger; + this.initPromise = this.setupAIAccess(); } + private getUrlForEndpoint( + urlId: AIEndpoint, + connectionInfo?: ConnectionInfo + ) { + if (this.apiURLPreset === 'cloud') { + if (urlId === 'user-access') { + return this.atlasService.cloudEndpoint( + aiURLConfig[this.apiURLPreset][urlId]( + this.preferences.getPreferencesUser().id + ) + ); + } + + const atlasMetadata = connectionInfo?.atlasMetadata; + if (!atlasMetadata) { + throw new Error( + "Can't perform generative ai request: atlasMetadata is not available" + ); + } + + return this.atlasService.cloudEndpoint( + aiURLConfig[this.apiURLPreset][urlId](atlasMetadata.projectId) + ); + } + const urlConfig = aiURLConfig[this.apiURLPreset][urlId]; + const urlPath = + typeof urlConfig === 'function' + ? urlConfig(this.preferences.getPreferencesUser().id) + : urlConfig; + + return this.atlasService.adminApiEndpoint(urlPath); + } + private throwIfAINotEnabled() { if (process.env.COMPASS_E2E_SKIP_ATLAS_SIGNIN === 'true') { return; @@ -215,8 +279,8 @@ export class AtlasAiService { } private async getAIFeatureEnablement(): Promise { - const userId = this.preferences.getPreferencesUser().id; - const url = this.atlasService.adminApiEndpoint(USER_AI_URI(userId)); + const url = this.getUrlForEndpoint('user-access'); + const res = await this.atlasService.fetch(url, { headers: { Accept: 'application/json', @@ -261,8 +325,16 @@ export class AtlasAiService { } private getQueryOrAggregationFromUserInput = async ( - uri: string, - input: GenerativeAiInput, + { + urlId, + input, + connectionInfo, + }: { + urlId: 'query' | 'aggregation'; + input: GenerativeAiInput; + + connectionInfo?: ConnectionInfo; + }, validationFn: (res: any) => asserts res is T ): Promise => { await this.initPromise; @@ -271,7 +343,10 @@ export class AtlasAiService { const { signal, requestId, ...rest } = input; const msgBody = buildQueryOrAggregationMessageBody(rest); - const url = this.atlasService.adminApiEndpoint(uri, requestId); + const url = `${this.getUrlForEndpoint( + urlId, + connectionInfo + )}?request_id=${encodeURIComponent(requestId)}`; this.logger.log.info( this.logger.mongoLogId(1_001_000_308), @@ -326,18 +401,30 @@ export class AtlasAiService { return data; }; - async getAggregationFromUserInput(input: GenerativeAiInput) { + async getAggregationFromUserInput( + input: GenerativeAiInput, + connectionInfo: ConnectionInfo + ) { return this.getQueryOrAggregationFromUserInput( - AGGREGATION_URI, - input, + { + connectionInfo, + urlId: 'aggregation', + input, + }, validateAIAggregationResponse ); } - async getQueryFromUserInput(input: GenerativeAiInput) { + async getQueryFromUserInput( + input: GenerativeAiInput, + connectionInfo: ConnectionInfo + ) { return this.getQueryOrAggregationFromUserInput( - QUERY_URI, - input, + { + urlId: 'query', + input, + connectionInfo, + }, validateAIQueryResponse ); } diff --git a/packages/compass-generative-ai/src/provider.tsx b/packages/compass-generative-ai/src/provider.tsx index 6df896c8439..05f3bd58db6 100644 --- a/packages/compass-generative-ai/src/provider.tsx +++ b/packages/compass-generative-ai/src/provider.tsx @@ -10,23 +10,31 @@ import { const AtlasAiServiceContext = createContext(null); -export const AtlasAiServiceProvider: React.FC = createServiceProvider( - function AtlasAiServiceProvider({ children }) { - const logger = useLogger('ATLAS-AI-SERVICE'); - const preferences = preferencesLocator(); - const atlasService = atlasServiceLocator(); +export const AtlasAiServiceProvider: React.FC<{ + apiURLPreset: 'admin-api' | 'cloud'; +}> = createServiceProvider(function AtlasAiServiceProvider({ + apiURLPreset, + children, +}) { + const logger = useLogger('ATLAS-AI-SERVICE'); + const preferences = preferencesLocator(); + const atlasService = atlasServiceLocator(); - const aiService = useMemo(() => { - return new AtlasAiService(atlasService, preferences, logger); - }, [preferences, logger, atlasService]); + const aiService = useMemo(() => { + return new AtlasAiService({ + apiURLPreset, + atlasService, + preferences, + logger, + }); + }, [apiURLPreset, preferences, logger, atlasService]); - return ( - - {children} - - ); - } -); + return ( + + {children} + + ); +}); function useAtlasAiServiceContext(): AtlasAiService { const service = useContext(AtlasAiServiceContext); diff --git a/packages/compass-query-bar/src/stores/ai-query-reducer.ts b/packages/compass-query-bar/src/stores/ai-query-reducer.ts index 87a9609175b..9ed8735b0b2 100644 --- a/packages/compass-query-bar/src/stores/ai-query-reducer.ts +++ b/packages/compass-query-bar/src/stores/ai-query-reducer.ts @@ -221,20 +221,23 @@ export const runAIQuery = ( const { collection: collectionName, database: databaseName } = toNS(namespace); - jsonResponse = await atlasAiService.getQueryFromUserInput({ - signal: abortController.signal, - userInput, - collectionName, - databaseName, - schema, - // Provide sample documents when the user has opted in in their settings. - ...(provideSampleDocuments - ? { - sampleDocuments, - } - : undefined), - requestId, - }); + jsonResponse = await atlasAiService.getQueryFromUserInput( + { + signal: abortController.signal, + userInput, + collectionName, + databaseName, + schema, + // Provide sample documents when the user has opted in in their settings. + ...(provideSampleDocuments + ? { + sampleDocuments, + } + : undefined), + requestId, + }, + connectionInfo + ); } catch (err: any) { if (signal.aborted) { // If we already aborted so we ignore the error. diff --git a/packages/compass-web/src/entrypoint.tsx b/packages/compass-web/src/entrypoint.tsx index e2103fe782b..13225a3c833 100644 --- a/packages/compass-web/src/entrypoint.tsx +++ b/packages/compass-web/src/entrypoint.tsx @@ -63,7 +63,9 @@ const WithAtlasProviders: React.FC = ({ children }) => { return ( - {children} + + {children} + ); diff --git a/packages/compass/src/app/components/entrypoint.tsx b/packages/compass/src/app/components/entrypoint.tsx index 1f4c0af4d65..c952028d18f 100644 --- a/packages/compass/src/app/components/entrypoint.tsx +++ b/packages/compass/src/app/components/entrypoint.tsx @@ -61,7 +61,9 @@ export const WithAtlasProviders: React.FC = ({ children }) => { }, }} > - {children} + + {children} + ); From 5c6c61b44cdce3d8e9a3ccb54aed4eadc66e743c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 15:48:55 +0000 Subject: [PATCH 16/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6442) Update report Co-authored-by: Anemy <1791149+Anemy@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 8554ededb54..ed3971564aa 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Nov 4, 2024 at 01:16 PM +Generated on Mon, Nov 4, 2024 at 03:48 PM ## Table of Contents From d7d58d566f2daee43b7d7161436a73c9b14152bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Tue, 5 Nov 2024 09:07:41 +0100 Subject: [PATCH 17/81] chore(compass-editor): refactor JSON editor actions container into its own component (#6441) * Refactor JSON editor action container into its own component * Simplified actions container * Fix types --- .../src/{actions.tsx => action-button.tsx} | 9 +- .../compass-editor/src/actions-container.tsx | 79 +++++++++++++++ packages/compass-editor/src/editor.tsx | 99 +++---------------- packages/compass-editor/src/index.ts | 12 +-- packages/compass-editor/src/types.ts | 15 +++ 5 files changed, 119 insertions(+), 95 deletions(-) rename packages/compass-editor/src/{actions.tsx => action-button.tsx} (93%) create mode 100644 packages/compass-editor/src/actions-container.tsx diff --git a/packages/compass-editor/src/actions.tsx b/packages/compass-editor/src/action-button.tsx similarity index 93% rename from packages/compass-editor/src/actions.tsx rename to packages/compass-editor/src/action-button.tsx index 49e0b25eef5..86ccbbbfcd7 100644 --- a/packages/compass-editor/src/actions.tsx +++ b/packages/compass-editor/src/action-button.tsx @@ -1,7 +1,14 @@ import { cx } from '@mongodb-js/compass-components'; import { css } from '@mongodb-js/compass-components'; -import { Button, Icon } from '@mongodb-js/compass-components'; +import { Button, Icon, type IconGlyph } from '@mongodb-js/compass-components'; import React, { useCallback, useEffect, useState } from 'react'; +import type { EditorView } from '@codemirror/view'; + +export type Action = { + icon: IconGlyph; + label: string; + action: (editor: EditorView) => boolean | void; +}; const actionButtonStyle = css({ flex: 'none', diff --git a/packages/compass-editor/src/actions-container.tsx b/packages/compass-editor/src/actions-container.tsx new file mode 100644 index 00000000000..f309f1de438 --- /dev/null +++ b/packages/compass-editor/src/actions-container.tsx @@ -0,0 +1,79 @@ +import React, { type RefObject } from 'react'; + +import { type Action, ActionButton, FormatIcon } from './action-button'; +import type { EditorRef } from './types'; +import { css, cx, spacing } from '@mongodb-js/compass-components'; + +type ActionsContainerProps = { + copyable: boolean; + formattable: boolean; + customActions?: Action[]; + className?: string; + editorRef: RefObject; +}; + +const actionsContainerStyle = css({ + position: 'absolute', + top: spacing[1], + right: spacing[2], + display: 'none', + gap: spacing[2], +}); + +export const ActionsContainer = ({ + copyable, + formattable, + customActions, + className, + editorRef, +}: ActionsContainerProps) => { + return ( +
+ {copyable && ( + { + return editorRef.current?.copyAll() ?? false; + }} + > + )} + {formattable && ( + + } + onClick={() => { + return editorRef.current?.prettify() ?? false; + }} + > + )} + {customActions && + customActions.map((action) => { + return ( + { + if (!editorRef.current?.editor) { + return false; + } + return action.action(editorRef.current.editor); + }} + > + ); + })} +
+ ); +}; diff --git a/packages/compass-editor/src/editor.tsx b/packages/compass-editor/src/editor.tsx index e366503c54a..7c5dd396f56 100644 --- a/packages/compass-editor/src/editor.tsx +++ b/packages/compass-editor/src/editor.tsx @@ -2,7 +2,6 @@ import React, { useCallback, useEffect, useLayoutEffect, - useMemo, useImperativeHandle, useRef, useState, @@ -50,7 +49,6 @@ import { snippetCompletion, startCompletion, } from '@codemirror/autocomplete'; -import type { IconGlyph } from '@mongodb-js/compass-components'; import { css, cx, @@ -74,7 +72,9 @@ import { tags as t } from '@lezer/highlight'; import { rgba } from 'polished'; import { prettify as _prettify } from './prettify'; -import { ActionButton, FormatIcon } from './actions'; +import type { Action } from './action-button'; +import { ActionsContainer } from './actions-container'; +import type { EditorRef } from './types'; // TODO(COMPASS-8453): Re-enable this once the linked tickets are resolved // https://github.com/codemirror/dev/issues/1458 @@ -697,19 +697,6 @@ function useCodemirrorExtensionCompartment( return initialExtensionRef.current; } -export type EditorRef = { - foldAll: () => boolean; - unfoldAll: () => boolean; - copyAll: () => boolean; - prettify: () => boolean; - applySnippet: (template: string) => boolean; - focus: () => boolean; - cursorDocEnd: () => boolean; - startCompletion: () => boolean; - readonly editorContents: string | null; - readonly editor: EditorView | null; -}; - const BaseEditor = React.forwardRef(function BaseEditor( { initialText: _initialText, @@ -1406,20 +1393,6 @@ const multilineEditorContainerDarkModeStyle = css({ backgroundColor: editorPalette.dark.backgroundColor, }); -const actionsContainerStyle = css({ - position: 'absolute', - top: spacing[1], - right: spacing[2], - display: 'none', - gap: spacing[2], -}); - -export type Action = { - icon: IconGlyph; - label: string; - action: (editor: EditorView) => boolean | void; -}; - type MultilineEditorProps = EditorProps & { customActions?: Action[]; copyable?: boolean; @@ -1485,50 +1458,8 @@ const MultilineEditor = React.forwardRef( [] ); - const actions = useMemo(() => { - return [ - copyable && ( - { - return editorRef.current?.copyAll() ?? false; - }} - > - ), - formattable && ( - - } - onClick={() => { - return editorRef.current?.prettify() ?? false; - }} - > - ), - ...(customActions ?? []).map((action) => { - return ( - { - if (!editorRef.current?.editor) { - return false; - } - return action.action(editorRef.current.editor); - }} - > - ); - }), - ]; - }, [copyable, formattable, customActions]); + const hasCustomActions = customActions && customActions.length > 0; + const hasActions = copyable || formattable || hasCustomActions; return ( // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions @@ -1537,7 +1468,7 @@ const MultilineEditor = React.forwardRef( className={cx( multilineEditorContainerStyle, darkMode && multilineEditorContainerDarkModeStyle, - !!actions.length && multilineEditorContainerWithActionsStyle, + hasActions && multilineEditorContainerWithActionsStyle, className )} // We want folks to be able to click into the container element @@ -1559,16 +1490,14 @@ const MultilineEditor = React.forwardRef( minLines={10} {...props} > - {actions.length > 0 && ( -
- {actions} -
+ {hasActions && ( + )} ); diff --git a/packages/compass-editor/src/index.ts b/packages/compass-editor/src/index.ts index f9a6a1876f8..5bc81f249f6 100644 --- a/packages/compass-editor/src/index.ts +++ b/packages/compass-editor/src/index.ts @@ -1,4 +1,4 @@ -export type { CompletionWithServerInfo } from './types'; +export type { CompletionWithServerInfo, EditorRef } from './types'; export { prettify } from './prettify'; export type { FormatOptions } from './prettify'; export { @@ -7,14 +7,8 @@ export { setCodemirrorEditorValue, getCodemirrorEditorValue, } from './editor'; -export type { - EditorView, - Command, - Annotation, - Action, - EditorRef, - Completer, -} from './editor'; +export type { EditorView, Command, Annotation, Completer } from './editor'; +export type { Action } from './action-button'; export { createDocumentAutocompleter } from './codemirror/document-autocompleter'; export { createValidationAutocompleter } from './codemirror/validation-autocompleter'; export { createQueryAutocompleter } from './codemirror/query-autocompleter'; diff --git a/packages/compass-editor/src/types.ts b/packages/compass-editor/src/types.ts index 039c5d6d514..f190b1d7833 100644 --- a/packages/compass-editor/src/types.ts +++ b/packages/compass-editor/src/types.ts @@ -1,3 +1,5 @@ +import type { EditorView } from '@codemirror/view'; + export type CompletionWithServerInfo = { name?: string; value?: string; @@ -14,3 +16,16 @@ export type CompletionWithServerInfo = { /** Optional completion description */ description?: string; }; + +export type EditorRef = { + foldAll: () => boolean; + unfoldAll: () => boolean; + copyAll: () => boolean; + prettify: () => boolean; + applySnippet: (template: string) => boolean; + focus: () => boolean; + cursorDocEnd: () => boolean; + startCompletion: () => boolean; + readonly editorContents: string | null; + readonly editor: EditorView | null; +}; From a175cfb56e90b1e7ea1b587abaa906737a91f208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Tue, 5 Nov 2024 09:09:31 +0100 Subject: [PATCH 18/81] chore(compass-components): less document whitespace (#6439) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Decreasing padding around icon in expand button * Decrease padding of actions group container * Remove 10px from left side of trash icon * Shave 4px off between + and ▶ * Update "show more" offset --- .../document-list/document-actions-group.tsx | 17 ++++++++++++----- .../src/components/document-list/element.tsx | 12 ++++++------ 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/compass-components/src/components/document-list/document-actions-group.tsx b/packages/compass-components/src/components/document-list/document-actions-group.tsx index de1c7c82ef8..6987721bcb9 100644 --- a/packages/compass-components/src/components/document-list/document-actions-group.tsx +++ b/packages/compass-components/src/components/document-list/document-actions-group.tsx @@ -9,11 +9,11 @@ const actionsGroupContainer = css({ position: 'absolute', display: 'flex', alignItems: 'center', - gap: spacing[2], + gap: spacing[200], width: '100%', - top: spacing[2] + spacing[1], - paddingLeft: spacing[3], - paddingRight: spacing[3], + top: spacing[300], + paddingLeft: spacing[300], + paddingRight: spacing[300], pointerEvents: 'none', }); @@ -44,6 +44,13 @@ const actionsGroupSignalPopover = css({ display: 'block !important', }); +const expandButton = css({ + '& > div:has(svg)': { + paddingLeft: 3, + paddingRight: 3, + }, +}); + function useElementParentHoverState( ref: React.RefObject ): boolean { @@ -159,7 +166,7 @@ const DocumentActionsGroup: React.FunctionComponent< aria-pressed={expanded} data-testid="expand-document-button" onClick={onExpand} - className={actionsGroupItem} + className={cx(actionsGroupItem, expandButton)} tooltipText={expanded ? 'Collapse all' : 'Expand all'} /> )} diff --git a/packages/compass-components/src/components/document-list/element.tsx b/packages/compass-components/src/components/document-list/element.tsx index de3e51e54c2..fe1a2def411 100644 --- a/packages/compass-components/src/components/document-list/element.tsx +++ b/packages/compass-components/src/components/document-list/element.tsx @@ -192,8 +192,8 @@ const expandButton = css({ const hadronElement = css({ display: 'flex', - paddingLeft: spacing[2], - paddingRight: spacing[2], + paddingLeft: spacing[50], + paddingRight: spacing[50], marginTop: 1, }); @@ -239,7 +239,7 @@ const elementRemovedDarkMode = css({ const elementActions = css({ flex: 'none', - width: spacing[3], + width: spacing[300], position: 'relative', }); @@ -364,7 +364,7 @@ const elementKeyDarkMode = css({ }); const calculateElementSpacerWidth = (editable: boolean, level: number) => { - return (editable ? spacing[200] : 0) + spacing[400] * level; + return (editable ? spacing[100] : 0) + spacing[400] * level; }; export const calculateShowMoreToggleOffset = ({ @@ -377,10 +377,10 @@ export const calculateShowMoreToggleOffset = ({ alignWithNestedExpandIcon: boolean; }) => { // the base padding that we have on all elements rendered in the document - const BASE_PADDING_LEFT = spacing[200]; + const BASE_PADDING_LEFT = spacing[50]; const OFFSET_WHEN_EDITABLE = editable ? // space taken by element actions - spacing[400] + + spacing[300] + // space and margin taken by line number element spacing[400] + spacing[100] + From 05a557b9b16a2fc18ebfc264c2a10c25be92525b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 08:14:24 +0000 Subject: [PATCH 19/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6443) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index a938094425b..298ea5d21fe 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Mon Nov 04 2024. +This document was automatically generated on Tue Nov 05 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index ed3971564aa..0d3256daddd 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Nov 4, 2024 at 03:48 PM +Generated on Tue, Nov 5, 2024 at 08:14 AM ## Table of Contents From f0558927578d7089989efbf26caa5ae9ee0fb693 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Wed, 6 Nov 2024 13:03:59 +0100 Subject: [PATCH 20/81] feat(editor): expandable json editor (#6446) * Update spacing * Fix pointer events css * Add expand button * Add whitespace to gutters * Adjust expand button offset --- .../src/components/json-editor.tsx | 13 +++++-- packages/compass-editor/src/action-button.tsx | 13 +++++-- .../compass-editor/src/actions-container.tsx | 34 +++++++++++++++++-- packages/compass-editor/src/editor.tsx | 16 ++++++++- 4 files changed, 68 insertions(+), 8 deletions(-) diff --git a/packages/compass-crud/src/components/json-editor.tsx b/packages/compass-crud/src/components/json-editor.tsx index 2dda284dba4..3c86cff5c68 100644 --- a/packages/compass-crud/src/components/json-editor.tsx +++ b/packages/compass-crud/src/components/json-editor.tsx @@ -45,8 +45,7 @@ const editorDarkModeStyles = css({ }); const actionsGroupStyles = css({ - paddingTop: spacing[2], - paddingRight: spacing[2], + padding: spacing[200], }); export type JSONEditorProps = { @@ -258,6 +257,14 @@ const JSONEditor: React.FunctionComponent = ({ onDeletionFinished, ]); + const toggleExpandCollapse = useCallback(() => { + if (doc.expanded) { + doc.collapse(); + } else { + doc.expand(); + } + }, [doc]); + // Trying to change CodeMirror editor state when an update "effect" is in // progress results in an error which is why we timeout the code mirror update // itself. @@ -297,6 +304,8 @@ const JSONEditor: React.FunctionComponent = ({ className={cx(editorStyles, darkMode && editorDarkModeStyles)} actionsClassName={actionsGroupStyles} completer={completer} + onExpand={editing ? undefined : toggleExpandCollapse} + expanded={expanded} /> div:has(svg)': { + paddingLeft: 3, + paddingRight: 3, + }, }); const actionButtonContentStyle = css({ @@ -52,7 +60,8 @@ export const ActionButton: React.FunctionComponent<{ ...args: Parameters> ) => boolean | void; 'data-testid'?: string; -}> = ({ label, icon, onClick, ...props }) => { + compact?: boolean; +}> = ({ label, icon, onClick, compact, ...props }) => { const [clickResult, setClickResult] = useState<'success' | 'error'>( 'success' ); @@ -89,7 +98,7 @@ export const ActionButton: React.FunctionComponent<{ aria-label={label} title={label} onClick={onButtonClick} - className={actionButtonStyle} + className={cx(actionButtonStyle, { [actionCompactButtonStyle]: compact })} data-testid={props['data-testid'] ?? `editor-action-${label}`} >
diff --git a/packages/compass-editor/src/actions-container.tsx b/packages/compass-editor/src/actions-container.tsx index f309f1de438..dc9e439924b 100644 --- a/packages/compass-editor/src/actions-container.tsx +++ b/packages/compass-editor/src/actions-container.tsx @@ -10,14 +10,29 @@ type ActionsContainerProps = { customActions?: Action[]; className?: string; editorRef: RefObject; + onExpand?: () => void; + expanded?: boolean; }; const actionsContainerStyle = css({ position: 'absolute', - top: spacing[1], - right: spacing[2], + top: spacing[100], + right: spacing[100], + left: spacing[100], display: 'none', - gap: spacing[2], + gap: spacing[200], + pointerEvents: 'none', +}); + +const expandContainerStyle = css({ + position: 'relative', + top: -spacing[100], + left: -spacing[100], +}); + +const actionsGroupItemSeparator = css({ + flex: '1 0 auto', + pointerEvents: 'none', }); export const ActionsContainer = ({ @@ -26,6 +41,8 @@ export const ActionsContainer = ({ customActions, className, editorRef, + onExpand, + expanded, }: ActionsContainerProps) => { return (
+ {onExpand && ( +
+ +
+ )} + {copyable && ( void; + expanded?: boolean; }; const MultilineEditor = React.forwardRef( @@ -1411,8 +1420,10 @@ const MultilineEditor = React.forwardRef( editorClassName, actionsClassName, darkMode: _darkMode, + onExpand, + expanded, ...props - }, + }: MultilineEditorProps, ref ) { const darkMode = useDarkMode(_darkMode); @@ -1469,6 +1480,7 @@ const MultilineEditor = React.forwardRef( multilineEditorContainerStyle, darkMode && multilineEditorContainerDarkModeStyle, hasActions && multilineEditorContainerWithActionsStyle, + onExpand && multilineEditorContainerWithExpandStyle, className )} // We want folks to be able to click into the container element @@ -1492,6 +1504,8 @@ const MultilineEditor = React.forwardRef( > {hasActions && ( Date: Wed, 6 Nov 2024 12:12:57 +0000 Subject: [PATCH 21/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6444) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 31 +------------------------------ docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 31 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 298ea5d21fe..bba39a2a245 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Tue Nov 05 2024. +This document was automatically generated on Wed Nov 06 2024. ## List of dependencies @@ -211,7 +211,6 @@ Package|Version|License **[cookie-signature](#28f6116b52488ac66a14424869fc346f611bea6c894e7d0f7f2ca701deb8e49c)**|1.0.6|MIT **[cookie](#6fffbd43d8f0d9a659c21e31a0935f0a1226c9990be593a9649dcd61e4db1204)**|0.7.1|MIT **[core-js](#2d0305d15eab4ad23db10b97faf9d8e8e0d5ad30a616c5892d1edd535d8a08c8)**|3.17.3|MIT -**[cpu-features](#fa992e00865a6ed732ac63bbf64c89ee2da4ec39944684e6002a3a34b5adb65c)**|0.0.9|MIT **[crelt](#9eba7acaba2af9d27a0a18fcf40d1f133ffa888d85321e4633e7dac58cab2db9)**|1.0.5|MIT **[cross-fetch](#2cd4375069c47bf89a4b399cd21cd9573086803b2cb9fc56c29df5a598e051e5)**|3.1.8|MIT **[cross-spawn](#67de3a765808182ee1018c35bc07d7a023a8d645e98cc32814dcac2fc2c427ff)**|7.0.3|MIT @@ -17718,34 +17717,6 @@ License files: - -### [cpu-features](https://www.npmjs.com/package/cpu-features) (version 0.0.9) -License tags: MIT - -License files: -* LICENSE: - - Copyright Brian White. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - - ### [crelt](https://www.npmjs.com/package/crelt) (version 1.0.5) License tags: MIT diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 0d3256daddd..af34186209e 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Nov 5, 2024 at 08:14 AM +Generated on Wed, Nov 6, 2024 at 12:12 PM ## Table of Contents From 29ee428d42d89cd13745639efd5296ef4753c248 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Wed, 6 Nov 2024 13:32:00 +0100 Subject: [PATCH 22/81] feat(compass-global-writes): incomplete sharding setup COMPASS-8372 (#6399) --- .../example-commands-markup.spec.tsx | 51 +++++ .../components/example-commands-markup.tsx | 99 ++++++++++ .../src/components/index.tsx | 8 + .../components/shard-zones-description.tsx | 53 ++++++ .../shard-zones-descripton.spec.tsx | 32 ++++ .../src/components/shard-zones-table.tsx | 2 + .../states/incomplete-sharding-setup.spec.tsx | 122 ++++++++++++ .../states/incomplete-sharding-setup.tsx | 102 ++++++++++ .../states/shard-key-correct.spec.tsx | 46 +---- .../components/states/shard-key-correct.tsx | 106 +---------- .../states/shard-key-invalid.spec.tsx | 2 +- .../states/shard-key-mismatch.spec.tsx | 2 +- .../services/atlas-global-writes-service.ts | 4 +- .../src/store/index.spec.ts | 108 ++++++++++- .../src/store/reducer.ts | 176 ++++++++++++++---- 15 files changed, 723 insertions(+), 190 deletions(-) create mode 100644 packages/compass-global-writes/src/components/example-commands-markup.spec.tsx create mode 100644 packages/compass-global-writes/src/components/example-commands-markup.tsx create mode 100644 packages/compass-global-writes/src/components/shard-zones-description.tsx create mode 100644 packages/compass-global-writes/src/components/shard-zones-descripton.spec.tsx create mode 100644 packages/compass-global-writes/src/components/states/incomplete-sharding-setup.spec.tsx create mode 100644 packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx diff --git a/packages/compass-global-writes/src/components/example-commands-markup.spec.tsx b/packages/compass-global-writes/src/components/example-commands-markup.spec.tsx new file mode 100644 index 00000000000..77cc92ed53e --- /dev/null +++ b/packages/compass-global-writes/src/components/example-commands-markup.spec.tsx @@ -0,0 +1,51 @@ +import React from 'react'; +import { renderWithStore } from '../../tests/create-store'; +import { expect } from 'chai'; +import { screen } from '@mongodb-js/testing-library-compass'; +import ExampleCommandsMarkup, { + type ExampleCommandsMarkupProps, +} from './example-commands-markup'; +import { type ShardKey } from '../store/reducer'; + +describe('ExampleCommandsMarkup', function () { + const db = 'db1'; + const coll = 'coll1'; + const namespace = `${db}.${coll}`; + const shardKey: ShardKey = { + fields: [ + { type: 'RANGE', name: 'location' }, + { type: 'HASHED', name: 'secondary' }, + ], + isUnique: false, + }; + + function renderWithProps(props?: Partial) { + return renderWithStore( + + ); + } + + it('Contains sample codes', async function () { + await renderWithProps(); + + const findingDocumentsSample = await screen.findByTestId( + 'sample-finding-documents' + ); + expect(findingDocumentsSample).to.be.visible; + expect(findingDocumentsSample.textContent).to.contain( + `use db1db["coll1"].find({"location": "US-NY", "secondary": ""})` + ); + + const insertingDocumentsSample = await screen.findByTestId( + 'sample-inserting-documents' + ); + expect(insertingDocumentsSample).to.be.visible; + expect(insertingDocumentsSample.textContent).to.contain( + `use db1db["coll1"].insertOne({"location": "US-NY", "secondary": "",...})` + ); + }); +}); diff --git a/packages/compass-global-writes/src/components/example-commands-markup.tsx b/packages/compass-global-writes/src/components/example-commands-markup.tsx new file mode 100644 index 00000000000..5171c3ecc5d --- /dev/null +++ b/packages/compass-global-writes/src/components/example-commands-markup.tsx @@ -0,0 +1,99 @@ +import { + Body, + Code, + css, + Label, + Link, + spacing, + Subtitle, +} from '@mongodb-js/compass-components'; +import React, { useMemo } from 'react'; +import type { ShardKey } from '../store/reducer'; +import toNS from 'mongodb-ns'; + +const codeBlockContainerStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[100], +}); + +export interface ExampleCommandsMarkupProps { + shardKey: ShardKey; + namespace: string; + showMetaData?: boolean; + type?: 'requested' | 'existing'; +} + +const paragraphStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[100], +}); + +export function ExampleCommandsMarkup({ + namespace, + shardKey, +}: ExampleCommandsMarkupProps) { + const customShardKeyField = useMemo(() => { + return shardKey.fields[1].name; + }, [shardKey]); + + const sampleCodes = useMemo(() => { + const { collection, database } = toNS(namespace); + return { + findingDocuments: `use ${database}\ndb[${JSON.stringify( + collection + )}].find({"location": "US-NY", "${customShardKeyField}": ""})`, + insertingDocuments: `use ${database}\ndb[${JSON.stringify( + collection + )}].insertOne({"location": "US-NY", "${customShardKeyField}": "",...})`, + }; + }, [namespace, customShardKeyField]); + + return ( + <> + Example commands +
+ + Start querying your database with some of the most{' '} + + common commands + {' '} + for Global Writes. + + + Replace the text to perform operations on different documents. US-NY + is an ISO 3166 location code referring to New York, United States. You + can look up other ISO 3166 location codes below. + +
+ +
+ + + {sampleCodes.findingDocuments} + +
+ +
+ + + {sampleCodes.insertingDocuments} + +
+ + ); +} + +export default ExampleCommandsMarkup; diff --git a/packages/compass-global-writes/src/components/index.tsx b/packages/compass-global-writes/src/components/index.tsx index f27f9c2a989..06c66095e81 100644 --- a/packages/compass-global-writes/src/components/index.tsx +++ b/packages/compass-global-writes/src/components/index.tsx @@ -15,6 +15,7 @@ import ShardKeyCorrect from './states/shard-key-correct'; import ShardKeyInvalid from './states/shard-key-invalid'; import ShardKeyMismatch from './states/shard-key-mismatch'; import ShardingError from './states/sharding-error'; +import IncompleteShardingSetup from './states/incomplete-sharding-setup'; const containerStyles = css({ paddingLeft: spacing[400], @@ -93,6 +94,13 @@ function ShardingStateView({ return ; } + if ( + shardingStatus === ShardingStatuses.INCOMPLETE_SHARDING_SETUP || + shardingStatus === ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE + ) { + return ; + } + return null; } diff --git a/packages/compass-global-writes/src/components/shard-zones-description.tsx b/packages/compass-global-writes/src/components/shard-zones-description.tsx new file mode 100644 index 00000000000..0e3d7e395ed --- /dev/null +++ b/packages/compass-global-writes/src/components/shard-zones-description.tsx @@ -0,0 +1,53 @@ +import { + Body, + css, + Link, + spacing, + Subtitle, +} from '@mongodb-js/compass-components'; +import { useConnectionInfo } from '@mongodb-js/compass-connections/provider'; +import React from 'react'; + +const paragraphStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[100], +}); + +export function ShardZonesDescription() { + const { atlasMetadata } = useConnectionInfo(); + return ( + <> + Location Codes +
+ + Each document’s first field should include an ISO 3166-1 Alpha-2 code + for the location it belongs to. + + + We also support ISO 3166-2 subdivision codes for countries containing + a cloud provider data center (both ISO 3166-1 and ISO 3166-2 codes may + be used for these countries). All valid country codes and the zones to + which they map are listed in the table below. Additionally, you can + view a list of all location codes{' '} + here. + + + {atlasMetadata?.projectId && atlasMetadata?.clusterName && ( + <> + Locations’ zone mapping can be changed by navigating to this + clusters{' '} + + Edit Configuration + {' '} + page and clicking the Configure Location Mappings’ link above the + map. + + )} + +
+ + ); +} diff --git a/packages/compass-global-writes/src/components/shard-zones-descripton.spec.tsx b/packages/compass-global-writes/src/components/shard-zones-descripton.spec.tsx new file mode 100644 index 00000000000..fe58b3819d0 --- /dev/null +++ b/packages/compass-global-writes/src/components/shard-zones-descripton.spec.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { expect } from 'chai'; +import { screen } from '@mongodb-js/testing-library-compass'; +import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider'; +import { renderWithStore } from '../../tests/create-store'; +import { ShardZonesDescription } from './shard-zones-description'; + +describe('ShardZonesDescription', () => { + it('Provides link to Edit Configuration', async function () { + const connectionInfo = { + id: 'testConnection', + connectionOptions: { + connectionString: 'mongodb://test', + }, + atlasMetadata: { + projectId: 'project1', + clusterName: 'myCluster', + } as ConnectionInfo['atlasMetadata'], + }; + await renderWithStore(, { + connectionInfo, + }); + + const link = await screen.findByRole('link', { + name: /Edit Configuration/, + }); + const expectedHref = `/v2/${connectionInfo.atlasMetadata?.projectId}#/clusters/edit/${connectionInfo.atlasMetadata?.clusterName}`; + + expect(link).to.be.visible; + expect(link).to.have.attribute('href', expectedHref); + }); +}); diff --git a/packages/compass-global-writes/src/components/shard-zones-table.tsx b/packages/compass-global-writes/src/components/shard-zones-table.tsx index 6d3952235d0..f30352f4c44 100644 --- a/packages/compass-global-writes/src/components/shard-zones-table.tsx +++ b/packages/compass-global-writes/src/components/shard-zones-table.tsx @@ -19,6 +19,7 @@ import { type LgTableRowType, } from '@mongodb-js/compass-components'; import type { ShardZoneData } from '../store/reducer'; +import { ShardZonesDescription } from './shard-zones-description'; const containerStyles = css({ height: '400px', @@ -131,6 +132,7 @@ export function ShardZonesTable({ return ( <> + {}, + }; + + const connectionInfo = { + id: 'testConnection', + connectionOptions: { + connectionString: 'mongodb://test', + }, + atlasMetadata: { + projectId: 'project1', + clusterName: 'myCluster', + } as ConnectionInfo['atlasMetadata'], + }; + + function renderWithProps( + props?: Partial, + options?: Parameters[1] + ) { + return renderWithStore( + , + { + connectionInfo, + ...options, + } + ); + } + + it('Shows description', async function () { + await renderWithProps(); + + expect(screen.findByText(/your configuration is incomplete/)).to.be.exist; + expect(screen.findByText(/Please enable Global Writes/)).to.be.exist; + }); + + it('Provides button to resume managed namespace', async function () { + const onResume = Sinon.spy(); + await renderWithProps({ onResume }); + + const btn = await screen.findByRole('button', { + name: /Enable Global Writes/, + }); + expect(btn).to.be.visible; + + userEvent.click(btn); + + expect(onResume).to.have.been.calledOnce; + }); + + it('Manage btn is disabled when the action is in progress', async function () { + const onResume = Sinon.spy(); + await renderWithProps({ onResume, isSubmittingForSharding: true }); + + const btn = await screen.findByTestId( + 'manage-collection-button' + ); + expect(btn).to.be.visible; + expect(btn.getAttribute('aria-disabled')).to.equal('true'); + + userEvent.click(btn); + + expect(onResume).not.to.have.been.called; + }); + + it('Describes the shardKey', async function () { + await renderWithProps(); + + const title = await screen.findByTestId( + 'existing-shardkey-description-title' + ); + expect(title).to.be.visible; + expect(title.textContent).to.equal( + `${baseProps.namespace} is configured with the following shard key:` + ); + const list = await screen.findByTestId( + 'existing-shardkey-description-content' + ); + expect(list).to.be.visible; + expect(list.textContent).to.contain(`"location", "secondary"`); + }); + + it('Includes code examples', async function () { + await renderWithProps(); + + const example = await screen.findByText(/Example commands/); + expect(example).to.be.visible; + }); +}); diff --git a/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx b/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx new file mode 100644 index 00000000000..8f5b4e0ba4c --- /dev/null +++ b/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx @@ -0,0 +1,102 @@ +import { + Banner, + BannerVariant, + Button, + spacing, + css, + ButtonVariant, + Link, + SpinLoader, +} from '@mongodb-js/compass-components'; +import React from 'react'; +import ShardKeyMarkup from '../shard-key-markup'; +import { + resumeManagedNamespace, + ShardingStatuses, + type ShardZoneData, + type RootState, + type ShardKey, +} from '../../store/reducer'; +import { connect } from 'react-redux'; +import ExampleCommandsMarkup from '../example-commands-markup'; +import { ShardZonesTable } from '../shard-zones-table'; + +const containerStyles = css({ + display: 'flex', + flexDirection: 'column', + gap: spacing[400], + marginBottom: spacing[400], +}); + +const manageBtnStyles = css({ + marginTop: spacing[100], +}); + +export interface IncompleteShardingSetupProps { + shardKey: ShardKey; + shardZones: ShardZoneData[]; + namespace: string; + isSubmittingForSharding: boolean; + onResume: () => void; +} + +export function IncompleteShardingSetup({ + shardKey, + shardZones, + namespace, + onResume, + isSubmittingForSharding, +}: IncompleteShardingSetupProps) { + return ( +
+ + + It looks like you've chosen a Global Writes shard key for this + collection, but your configuration is incomplete. + {' '} + Please enable Global Writes for this collection to ensure that documents + are associated with the appropriate zone.  + + Read more about Global Writes + +
+ +
+
+ + + +
+ ); +} + +export default connect( + (state: RootState) => { + if (!state.shardKey) { + throw new Error('Shard key not found in IncompleteShardingSetup'); + } + return { + namespace: state.namespace, + shardKey: state.shardKey, + shardZones: state.shardZones, + isSubmittingForSharding: + state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE, + }; + }, + { + onResume: resumeManagedNamespace, + } +)(IncompleteShardingSetup); diff --git a/packages/compass-global-writes/src/components/states/shard-key-correct.spec.tsx b/packages/compass-global-writes/src/components/states/shard-key-correct.spec.tsx index 504db736e4e..72728148cd1 100644 --- a/packages/compass-global-writes/src/components/states/shard-key-correct.spec.tsx +++ b/packages/compass-global-writes/src/components/states/shard-key-correct.spec.tsx @@ -8,9 +8,8 @@ import { import { type ShardZoneData } from '../../store/reducer'; import Sinon from 'sinon'; import { renderWithStore } from '../../../tests/create-store'; -import { type ConnectionInfo } from '@mongodb-js/compass-connections/provider'; -describe('Compass GlobalWrites Plugin', function () { +describe('ShardKeyCorrect', function () { const shardZones: ShardZoneData[] = [ { zoneId: '45893084', @@ -76,30 +75,6 @@ describe('Compass GlobalWrites Plugin', function () { expect(onUnmanageNamespace).not.to.have.been.called; }); - it('Provides link to Edit Configuration', async function () { - const connectionInfo = { - id: 'testConnection', - connectionOptions: { - connectionString: 'mongodb://test', - }, - atlasMetadata: { - projectId: 'project1', - clusterName: 'myCluster', - } as ConnectionInfo['atlasMetadata'], - }; - await renderWithProps(undefined, { - connectionInfo, - }); - - const link = await screen.findByRole('link', { - name: /Edit Configuration/, - }); - const expectedHref = `/v2/${connectionInfo.atlasMetadata?.projectId}#/clusters/edit/${connectionInfo.atlasMetadata?.clusterName}`; - - expect(link).to.be.visible; - expect(link).to.have.attribute('href', expectedHref); - }); - it('Describes the shardKey', async function () { await renderWithProps(); @@ -117,23 +92,10 @@ describe('Compass GlobalWrites Plugin', function () { expect(list.textContent).to.contain(`"location", "secondary"`); }); - it('Contains sample codes', async function () { + it('Includes code examples', async function () { await renderWithProps(); - const findingDocumentsSample = await screen.findByTestId( - 'sample-finding-documents' - ); - expect(findingDocumentsSample).to.be.visible; - expect(findingDocumentsSample.textContent).to.contain( - `use db1db["coll1"].find({"location": "US-NY", "secondary": ""})` - ); - - const insertingDocumentsSample = await screen.findByTestId( - 'sample-inserting-documents' - ); - expect(insertingDocumentsSample).to.be.visible; - expect(insertingDocumentsSample.textContent).to.contain( - `use db1db["coll1"].insertOne({"location": "US-NY", "secondary": "",...})` - ); + const example = await screen.findByText(/Example commands/); + expect(example).to.be.visible; }); }); diff --git a/packages/compass-global-writes/src/components/states/shard-key-correct.tsx b/packages/compass-global-writes/src/components/states/shard-key-correct.tsx index 12e7f64f313..356a24ca4e9 100644 --- a/packages/compass-global-writes/src/components/states/shard-key-correct.tsx +++ b/packages/compass-global-writes/src/components/states/shard-key-correct.tsx @@ -3,12 +3,7 @@ import { Banner, BannerVariant, Body, - css, - Link, - spacing, - Code, Subtitle, - Label, Button, ButtonVariant, SpinLoader, @@ -21,24 +16,13 @@ import { type ShardKey, type ShardZoneData, } from '../../store/reducer'; -import toNS from 'mongodb-ns'; import { ShardZonesTable } from '../shard-zones-table'; -import { useConnectionInfo } from '@mongodb-js/compass-connections/provider'; import ShardKeyMarkup from '../shard-key-markup'; -import { - containerStyles, - paragraphStyles, - bannerStyles, -} from '../common-styles'; +import { containerStyles, bannerStyles } from '../common-styles'; +import ExampleCommandsMarkup from '../example-commands-markup'; const nbsp = '\u00a0'; -const codeBlockContainerStyles = css({ - display: 'flex', - flexDirection: 'column', - gap: spacing[100], -}); - export type ShardKeyCorrectProps = { namespace: string; shardKey: ShardKey; @@ -58,20 +42,6 @@ export function ShardKeyCorrect({ return shardKey.fields[1].name; }, [shardKey]); - const { atlasMetadata } = useConnectionInfo(); - - const sampleCodes = useMemo(() => { - const { collection, database } = toNS(namespace); - return { - findingDocuments: `use ${database}\ndb[${JSON.stringify( - collection - )}].find({"location": "US-NY", "${customShardKeyField}": ""})`, - insertingDocuments: `use ${database}\ndb[${JSON.stringify( - collection - )}].insertOne({"location": "US-NY", "${customShardKeyField}": "",...})`, - }; - }, [namespace, customShardKeyField]); - return (
@@ -83,77 +53,7 @@ export function ShardKeyCorrect({ {nbsp}We have included a table for reference below. - Example commands -
- - Start querying your database with some of the most{' '} - - common commands - {' '} - for Global Writes. - - - Replace the text to perform operations on different documents. US-NY - is an ISO 3166 location code referring to New York, United States. You - can look up other ISO 3166 location codes below. - -
- -
- - - {sampleCodes.findingDocuments} - -
- -
- - - {sampleCodes.insertingDocuments} - -
- - Location Codes -
- - Each document’s first field should include an ISO 3166-1 Alpha-2 code - for the location it belongs to. - - - We also support ISO 3166-2 subdivision codes for countries containing - a cloud provider data center (both ISO 3166-1 and ISO 3166-2 codes may - be used for these countries). All valid country codes and the zones to - which they map are listed in the table below. Additionally, you can - view a list of all location codes{' '} - here. - - - {atlasMetadata?.projectId && atlasMetadata?.clusterName && ( - <> - Locations’ zone mapping can be changed by navigating to this - clusters{' '} - - Edit Configuration - {' '} - page and clicking the Configure Location Mappings’ link above the - map. - - )} - -
+ diff --git a/packages/compass-global-writes/src/components/states/shard-key-invalid.spec.tsx b/packages/compass-global-writes/src/components/states/shard-key-invalid.spec.tsx index 84fc8829e7e..acc8c775e7a 100644 --- a/packages/compass-global-writes/src/components/states/shard-key-invalid.spec.tsx +++ b/packages/compass-global-writes/src/components/states/shard-key-invalid.spec.tsx @@ -7,7 +7,7 @@ import { } from './shard-key-invalid'; import { renderWithStore } from '../../../tests/create-store'; -describe('Compass GlobalWrites Plugin', function () { +describe('ShardKeyInvalid', function () { const baseProps: ShardKeyInvalidProps = { namespace: 'db1.coll1', shardKey: { diff --git a/packages/compass-global-writes/src/components/states/shard-key-mismatch.spec.tsx b/packages/compass-global-writes/src/components/states/shard-key-mismatch.spec.tsx index 25bf89f7193..67dbf52bd75 100644 --- a/packages/compass-global-writes/src/components/states/shard-key-mismatch.spec.tsx +++ b/packages/compass-global-writes/src/components/states/shard-key-mismatch.spec.tsx @@ -8,7 +8,7 @@ import { import { renderWithStore } from '../../../tests/create-store'; import Sinon from 'sinon'; -describe('Compass GlobalWrites Plugin', function () { +describe('ShardKeyMismatch', function () { const baseProps: ShardKeyMismatchProps = { namespace: 'db1.coll1', shardKey: { diff --git a/packages/compass-global-writes/src/services/atlas-global-writes-service.ts b/packages/compass-global-writes/src/services/atlas-global-writes-service.ts index 8ce8f1456c7..f36f224637e 100644 --- a/packages/compass-global-writes/src/services/atlas-global-writes-service.ts +++ b/packages/compass-global-writes/src/services/atlas-global-writes-service.ts @@ -135,7 +135,7 @@ export class AtlasGlobalWritesService { ); } - async createShardKey(namespace: string, keyData: CreateShardKeyData) { + async manageNamespace(namespace: string, keyData: CreateShardKeyData) { const clusterDetails = await this.getClusterDetails(); const { database, collection } = toNS(namespace); const requestData: GeoShardingData = { @@ -222,7 +222,7 @@ export class AtlasGlobalWritesService { const data = res.response; if (data.length === 0) { - return null; + return undefined; } const { key, unique } = data[0]; diff --git a/packages/compass-global-writes/src/store/index.spec.ts b/packages/compass-global-writes/src/store/index.spec.ts index a32c7d032ff..b6e905ac54b 100644 --- a/packages/compass-global-writes/src/store/index.spec.ts +++ b/packages/compass-global-writes/src/store/index.spec.ts @@ -6,6 +6,7 @@ import { type CreateShardKeyData, unmanageNamespace, cancelSharding, + resumeManagedNamespace, POLLING_INTERVAL, type ShardKey, } from './reducer'; @@ -89,7 +90,7 @@ function createStore({ } = {}): GlobalWritesStore { const atlasService = { authenticatedFetch: (uri: string) => { - if (uri.includes(`/geoSharding`) && failsOnShardingRequest()) { + if (uri.endsWith(`/geoSharding`) && failsOnShardingRequest()) { return Promise.reject(new Error('Failed to shard')); } @@ -179,9 +180,11 @@ describe('GlobalWritesStore Store', function () { context('scenarios', function () { it('not managed -> sharding -> valid shard key', async function () { let mockShardKey = false; + let mockManagedNamespace = false; // initial state === unsharded const store = createStore({ hasShardKey: Sinon.fake(() => mockShardKey), + isNamespaceManaged: Sinon.fake(() => mockManagedNamespace), }); await waitFor(() => { expect(store.getState().status).to.equal('UNSHARDED'); @@ -194,6 +197,7 @@ describe('GlobalWritesStore Store', function () { }); const promise = store.dispatch(createShardKey(shardKeyData)); expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); + mockManagedNamespace = true; await promise; expect(store.getState().status).to.equal('SHARDING'); @@ -309,7 +313,101 @@ describe('GlobalWritesStore Store', function () { }); }); - it('valid shard key -> not managed', async function () { + it('incomplete setup -> sharding -> shard key correct', async function () { + // initial state -> incomplete shardingSetup + clock = sinon.useFakeTimers({ + shouldAdvanceTime: true, + }); + let mockManagedNamespace = false; + const store = createStore({ + isNamespaceManaged: Sinon.fake(() => mockManagedNamespace), + hasShardKey: () => true, + }); + await waitFor(() => { + expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); + expect(store.getState().managedNamespace).to.be.undefined; + }); + + // user asks to resume geosharding + const promise = store.dispatch(resumeManagedNamespace()); + mockManagedNamespace = true; + expect(store.getState().status).to.equal( + 'SUBMITTING_FOR_SHARDING_INCOMPLETE' + ); + await promise; + + // sharding + expect(store.getState().status).to.equal('SHARDING'); + + // done + clock.tick(POLLING_INTERVAL); + await waitFor(() => { + expect(store.getState().status).to.equal('SHARD_KEY_CORRECT'); + }); + }); + + it('incomplete setup -> sharding -> incomplete setup (request was cancelled)', async function () { + // initial state -> incomplete shardingSetup + clock = sinon.useFakeTimers({ + shouldAdvanceTime: true, + }); + const store = createStore({ + isNamespaceManaged: () => false, + hasShardKey: () => true, + }); + await waitFor(() => { + expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); + expect(store.getState().managedNamespace).to.be.undefined; + }); + + // user asks to resume geosharding + const promise = store.dispatch(resumeManagedNamespace()); + expect(store.getState().status).to.equal( + 'SUBMITTING_FOR_SHARDING_INCOMPLETE' + ); + await promise; + + // sharding + expect(store.getState().status).to.equal('SHARDING'); + + // user cancels the request - we go back to incomplete + const promise2 = store.dispatch(cancelSharding()); + await promise2; + clock.tick(POLLING_INTERVAL); + await waitFor(() => { + expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); + }); + }); + + it('incomplete setup -> incomplete setup (failed manage attempt)', async function () { + // initial state -> incomplete shardingSetup + clock = sinon.useFakeTimers({ + shouldAdvanceTime: true, + }); + const store = createStore({ + isNamespaceManaged: () => false, + hasShardKey: () => true, + failsOnShardingRequest: () => true, + }); + await waitFor(() => { + expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); + expect(store.getState().managedNamespace).to.be.undefined; + }); + + // user asks to resume geosharding + const promise = store.dispatch(resumeManagedNamespace()); + expect(store.getState().status).to.equal( + 'SUBMITTING_FOR_SHARDING_INCOMPLETE' + ); + await promise; + + // it failed + await waitFor(() => { + expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); + }); + }); + + it('valid shard key -> incomplete', async function () { // initial state === shard key correct const store = createStore({ isNamespaceManaged: () => true, @@ -324,7 +422,7 @@ describe('GlobalWritesStore Store', function () { const promise = store.dispatch(unmanageNamespace()); expect(store.getState().status).to.equal('UNMANAGING_NAMESPACE'); await promise; - expect(store.getState().status).to.equal('UNSHARDED'); + expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); }); it('valid shard key -> valid shard key (failed unmanage attempt)', async function () { @@ -420,7 +518,7 @@ describe('GlobalWritesStore Store', function () { }); }); - it('mismatch -> unmanaged', async function () { + it('mismatch -> incomplete sharding setup', async function () { // initial state - mismatch const store = createStore({ isNamespaceManaged: () => true, @@ -443,7 +541,7 @@ describe('GlobalWritesStore Store', function () { 'UNMANAGING_NAMESPACE_MISMATCH' ); await promise; - expect(store.getState().status).to.equal('UNSHARDED'); + expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); }); }); diff --git a/packages/compass-global-writes/src/store/reducer.ts b/packages/compass-global-writes/src/store/reducer.ts index 97b6d18b3c8..2c2279f44f3 100644 --- a/packages/compass-global-writes/src/store/reducer.ts +++ b/packages/compass-global-writes/src/store/reducer.ts @@ -59,7 +59,7 @@ type NamespaceShardingErrorFetchedAction = { type NamespaceShardKeyFetchedAction = { type: GlobalWritesActionTypes.NamespaceShardKeyFetched; - shardKey: ShardKey; + shardKey?: ShardKey; }; type ShardZonesFetchedAction = { @@ -125,12 +125,20 @@ export enum ShardingStatuses { */ UNSHARDED = 'UNSHARDED', + /** + * Incomplete sharding setup + * sharding key exists but namespace is not managed + * (can happen when already sharded namespace is unmanaged) + */ + INCOMPLETE_SHARDING_SETUP = 'INCOMPLETE_SHARDING_SETUP', + /** * State when user submits namespace to be sharded and * we are waiting for server to accept the request. */ SUBMITTING_FOR_SHARDING = 'SUBMITTING_FOR_SHARDING', SUBMITTING_FOR_SHARDING_ERROR = 'SUBMITTING_FOR_SHARDING_ERROR', + SUBMITTING_FOR_SHARDING_INCOMPLETE = 'SUBMITTING_FOR_SHARDING_INCOMPLETE', /** * Namespace is being sharded. @@ -207,11 +215,9 @@ export type RootState = { | ShardingStatuses.UNSHARDED | ShardingStatuses.SUBMITTING_FOR_SHARDING | ShardingStatuses.CANCELLING_SHARDING; - /** - * note: shardKey might exist even for unsharded. - * if the collection was sharded previously and then unmanaged - */ shardKey?: ShardKey; + // shardKey might exist if the collection was sharded before + // and then unmanaged shardingError?: never; pollingTimeout?: never; } @@ -240,7 +246,9 @@ export type RootState = { | ShardingStatuses.SHARD_KEY_INVALID | ShardingStatuses.SHARD_KEY_MISMATCH | ShardingStatuses.UNMANAGING_NAMESPACE - | ShardingStatuses.UNMANAGING_NAMESPACE_MISMATCH; + | ShardingStatuses.UNMANAGING_NAMESPACE_MISMATCH + | ShardingStatuses.INCOMPLETE_SHARDING_SETUP + | ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE; shardKey: ShardKey; shardingError?: never; pollingTimeout?: never; @@ -264,9 +272,6 @@ const reducer: Reducer = (state = initialState, action) => { return { ...state, managedNamespace: action.managedNamespace, - status: !action.managedNamespace - ? ShardingStatuses.UNSHARDED - : state.status, }; } @@ -296,20 +301,43 @@ const reducer: Reducer = (state = initialState, action) => { GlobalWritesActionTypes.NamespaceShardKeyFetched ) && (state.status === ShardingStatuses.NOT_READY || - state.status === ShardingStatuses.SHARDING) + state.status === ShardingStatuses.SHARDING) && + action.shardKey ) { if (state.pollingTimeout) { throw new Error('Polling was not stopped'); } return { ...state, - status: getStatusFromShardKey(action.shardKey, state.managedNamespace), + status: getStatusFromShardKeyAndManaged( + action.shardKey, + state.managedNamespace + ), shardKey: action.shardKey, shardingError: undefined, pollingTimeout: state.pollingTimeout, }; } + if ( + isAction( + action, + GlobalWritesActionTypes.NamespaceShardKeyFetched + ) && + state.status === ShardingStatuses.NOT_READY && + !action.shardKey && + !state.managedNamespace + ) { + if (state.pollingTimeout) { + throw new Error('Polling was not stopped'); + } + return { + ...state, + status: ShardingStatuses.UNSHARDED, + pollingTimeout: state.pollingTimeout, + }; + } + if ( isAction( action, @@ -348,6 +376,19 @@ const reducer: Reducer = (state = initialState, action) => { }; } + if ( + isAction( + action, + GlobalWritesActionTypes.SubmittingForShardingStarted + ) && + state.status === ShardingStatuses.INCOMPLETE_SHARDING_SETUP + ) { + return { + ...state, + status: ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE, + }; + } + if ( isAction( action, @@ -355,6 +396,7 @@ const reducer: Reducer = (state = initialState, action) => { ) && (state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING || state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR || + state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE || state.status === ShardingStatuses.NOT_READY) ) { return { @@ -443,8 +485,9 @@ const reducer: Reducer = (state = initialState, action) => { ) && (state.status === ShardingStatuses.CANCELLING_SHARDING || state.status === ShardingStatuses.SHARDING_ERROR || - state.status === ShardingStatuses.CANCELLING_SHARDING_ERROR) + state.status === ShardingStatuses.CANCELLING_SHARDING_ERROR) && // the error might come before the cancel request was processed + !state.shardKey ) { return { ...state, @@ -453,6 +496,22 @@ const reducer: Reducer = (state = initialState, action) => { }; } + if ( + isAction( + action, + GlobalWritesActionTypes.CancellingShardingFinished + ) && + state.status === ShardingStatuses.CANCELLING_SHARDING && + state.shardKey + ) { + return { + ...state, + shardKey: state.shardKey, + status: ShardingStatuses.INCOMPLETE_SHARDING_SETUP, + shardingError: undefined, + }; + } + if ( isAction( action, @@ -467,6 +526,34 @@ const reducer: Reducer = (state = initialState, action) => { }; } + if ( + isAction( + action, + GlobalWritesActionTypes.SubmittingForShardingErrored + ) && + state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR + ) { + return { + ...state, + managedNamespace: undefined, + status: ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR, + }; + } + + if ( + isAction( + action, + GlobalWritesActionTypes.SubmittingForShardingErrored + ) && + state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE + ) { + return { + ...state, + managedNamespace: undefined, + status: ShardingStatuses.INCOMPLETE_SHARDING_SETUP, + }; + } + if ( isAction( action, @@ -495,7 +582,7 @@ const reducer: Reducer = (state = initialState, action) => { return { ...state, managedNamespace: undefined, - status: ShardingStatuses.UNSHARDED, + status: ShardingStatuses.INCOMPLETE_SHARDING_SETUP, }; } @@ -524,9 +611,6 @@ export const fetchClusterShardingData = ) => { const { namespace } = getState(); try { - // Call the API to check if the namespace is managed. If the namespace is managed, - // we would want to fetch more data that is needed to figure out the state and - // accordingly show the UI to the user. const managedNamespace = await atlasGlobalWritesService.getManagedNamespace(namespace); @@ -534,11 +618,7 @@ export const fetchClusterShardingData = type: GlobalWritesActionTypes.ManagedNamespaceFetched, managedNamespace, }); - if (!managedNamespace) { - return; - } - // At this point, the namespace is managed and we want to fetch the sharding key. void dispatch(fetchNamespaceShardKey()); } catch (error) { logger.log.error( @@ -561,6 +641,23 @@ export const fetchClusterShardingData = } }; +export const resumeManagedNamespace = (): ReturnType => { + return async (dispatch, getState) => { + const { shardKey } = getState(); + if (!shardKey) { + throw new Error('Cannot resume managed namespace without a shardKey'); + } + const data: CreateShardKeyData = { + customShardKey: shardKey.fields[1].name, + isShardKeyUnique: shardKey.isUnique, + isCustomShardKeyHashed: shardKey.fields[1].type === 'HASHED', + numInitialChunks: null, // default + presplitHashedZones: false, // default + }; + await dispatch(createShardKey(data)); + }; +}; + export const createShardKey = ( data: CreateShardKeyData ): GlobalWritesThunkAction< @@ -580,7 +677,7 @@ export const createShardKey = ( }); try { - const managedNamespace = await atlasGlobalWritesService.createShardKey( + const managedNamespace = await atlasGlobalWritesService.manageNamespace( namespace, data ); @@ -724,7 +821,7 @@ export const fetchNamespaceShardKey = (): GlobalWritesThunkAction< getState, { atlasGlobalWritesService, logger, connectionInfoRef } ) => { - const { namespace, status } = getState(); + const { namespace, status, managedNamespace } = getState(); try { const [shardingError, shardKey] = await Promise.all([ @@ -732,7 +829,15 @@ export const fetchNamespaceShardKey = (): GlobalWritesThunkAction< atlasGlobalWritesService.getShardingKeys(namespace), ]); - if (shardingError && !shardKey) { + if (status === ShardingStatuses.SHARDING && (shardKey || shardingError)) { + dispatch(stopPollingForShardKey()); + } + + if (managedNamespace && !shardKey) { + if (!shardingError) { + dispatch(setNamespaceBeingSharded()); + return; + } // if there is an existing shard key and an error both, // means we have a key mismatch // this will be handled in NamespaceShardKeyFetched @@ -746,18 +851,12 @@ export const fetchNamespaceShardKey = (): GlobalWritesThunkAction< return; } - if (!shardKey) { - dispatch(setNamespaceBeingSharded()); - return; - } - - if (status === ShardingStatuses.SHARDING) { - dispatch(stopPollingForShardKey()); - } dispatch({ type: GlobalWritesActionTypes.NamespaceShardKeyFetched, shardKey, }); + // if there is a key, we fetch sharding zones + if (!shardKey) return; void dispatch(fetchShardingZones()); } catch (error) { logger.log.error( @@ -835,7 +934,7 @@ export const unmanageNamespace = (): GlobalWritesThunkAction< }; }; -export function getStatusFromShardKey( +export function getStatusFromShardKeyAndManaged( shardKey: ShardKey, managedNamespace?: ManagedNamespace ) { @@ -848,6 +947,15 @@ export function getStatusFromShardKey( const isLocatonKeyValid = firstShardKey.name === 'location' && firstShardKey.type === 'RANGE'; + + if (!isLocatonKeyValid || !secondShardKey) { + return ShardingStatuses.SHARD_KEY_INVALID; + } + + if (!managedNamespace) { + return ShardingStatuses.INCOMPLETE_SHARDING_SETUP; + } + const isCustomKeyValid = managedNamespace && managedNamespace.isShardKeyUnique === shardKey.isUnique && @@ -855,10 +963,6 @@ export function getStatusFromShardKey( secondShardKey.type === (managedNamespace.isCustomShardKeyHashed ? 'HASHED' : 'RANGE'); - if (!isLocatonKeyValid || !secondShardKey) { - return ShardingStatuses.SHARD_KEY_INVALID; - } - if (!isCustomKeyValid) { return ShardingStatuses.SHARD_KEY_MISMATCH; } From 9c7339f1a187bfe5c666f92671513fc6c9c0dfe7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 12:38:46 +0000 Subject: [PATCH 23/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6450) Update report Co-authored-by: paula-stacho <5196720+paula-stacho@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 29 +++++++++++++++++++++++++++++ docs/tracking-plan.md | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index bba39a2a245..cf7fd1a5eee 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -211,6 +211,7 @@ Package|Version|License **[cookie-signature](#28f6116b52488ac66a14424869fc346f611bea6c894e7d0f7f2ca701deb8e49c)**|1.0.6|MIT **[cookie](#6fffbd43d8f0d9a659c21e31a0935f0a1226c9990be593a9649dcd61e4db1204)**|0.7.1|MIT **[core-js](#2d0305d15eab4ad23db10b97faf9d8e8e0d5ad30a616c5892d1edd535d8a08c8)**|3.17.3|MIT +**[cpu-features](#fa992e00865a6ed732ac63bbf64c89ee2da4ec39944684e6002a3a34b5adb65c)**|0.0.9|MIT **[crelt](#9eba7acaba2af9d27a0a18fcf40d1f133ffa888d85321e4633e7dac58cab2db9)**|1.0.5|MIT **[cross-fetch](#2cd4375069c47bf89a4b399cd21cd9573086803b2cb9fc56c29df5a598e051e5)**|3.1.8|MIT **[cross-spawn](#67de3a765808182ee1018c35bc07d7a023a8d645e98cc32814dcac2fc2c427ff)**|7.0.3|MIT @@ -17717,6 +17718,34 @@ License files: + +### [cpu-features](https://www.npmjs.com/package/cpu-features) (version 0.0.9) +License tags: MIT + +License files: +* LICENSE: + + Copyright Brian White. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to + deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + IN THE SOFTWARE. + + ### [crelt](https://www.npmjs.com/package/crelt) (version 1.0.5) License tags: MIT diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index af34186209e..af708890eee 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Nov 6, 2024 at 12:12 PM +Generated on Wed, Nov 6, 2024 at 12:38 PM ## Table of Contents From 8101f319c0485787cae73190b5f3bbd388a5897e Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Wed, 6 Nov 2024 15:14:06 +0100 Subject: [PATCH 24/81] chore(ci): allow for more numbers in tickets (#6453) --- .github/workflows/check-pr-title.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check-pr-title.yml b/.github/workflows/check-pr-title.yml index 3d7b5a61987..28a8d5e72e6 100644 --- a/.github/workflows/check-pr-title.yml +++ b/.github/workflows/check-pr-title.yml @@ -19,6 +19,6 @@ jobs: # Skip the JIRA ticket check for PRs opened by bots if: ${{ !contains(github.event.pull_request.user.login, '[bot]') }} with: - regex: '[A-Z]{4,10}-[0-9]{1,5}$' + regex: '[A-Z]{4,10}-[0-9]{1,10}$' error-hint: 'Invalid PR title. Make sure it ends with a JIRA ticket - i.e. COMPASS-1234 or add the no-title-validation label' ignore-labels: 'no-title-validation' From 69ac5e83262f7a9a86cf2d5b5f395b3a08628373 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:20:38 +0000 Subject: [PATCH 25/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6454) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index af708890eee..50f490a1807 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Nov 6, 2024 at 12:38 PM +Generated on Wed, Nov 6, 2024 at 02:20 PM ## Table of Contents From f173a4eac7f63c5324412f656bf7a738a0f3370c Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Wed, 6 Nov 2024 16:40:43 +0100 Subject: [PATCH 26/81] chore(web): reduce bundle size and add regression checks when packaging CLOUDP-278538 (#6452) * chore(schema): replace moment usage with Date * chore(webpack-config): make sure lg testing tools are not bundled with the app * chore(web): add a local polyfill for tr46; add bundle size checks --- configs/webpack-config-compass/src/index.ts | 4 +++ package-lock.json | 2 -- packages/compass-schema/package.json | 1 - packages/compass-schema/src/modules/date.js | 13 ++++++--- packages/compass-web/.mocharc.js | 7 ++++- .../compass-web/polyfills/tr46/index.spec.ts | 27 +++++++++++++++++++ packages/compass-web/polyfills/tr46/index.ts | 17 ++++++++++++ packages/compass-web/webpack.config.js | 20 +++++++++++--- 8 files changed, 80 insertions(+), 11 deletions(-) create mode 100644 packages/compass-web/polyfills/tr46/index.spec.ts create mode 100644 packages/compass-web/polyfills/tr46/index.ts diff --git a/configs/webpack-config-compass/src/index.ts b/configs/webpack-config-compass/src/index.ts index 2211b985f74..1b01bd891b4 100644 --- a/configs/webpack-config-compass/src/index.ts +++ b/configs/webpack-config-compass/src/index.ts @@ -107,6 +107,10 @@ const sharedResolveOptions = ( // This is an optional dependency of the AWS SDK that doesn't look like // an optional dependency to webpack because it's not wrapped in try/catch. '@aws-sdk/client-sso-oidc': false, + + // Some lg test helpers that are getting bundled due to re-exporting from + // the actual component packages, never needed in the webpack bundles + '@lg-tools/test-harnesses': false, }, }; }; diff --git a/package-lock.json b/package-lock.json index e51763a1c15..599183a7731 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45727,7 +45727,6 @@ "leaflet-defaulticon-compatibility": "^0.1.1", "leaflet-draw": "^1.0.4", "lodash": "^4.17.21", - "moment": "^2.29.4", "mongodb": "^6.9.0", "mongodb-query-util": "^2.2.9", "mongodb-schema": "^12.2.0", @@ -56709,7 +56708,6 @@ "leaflet-draw": "^1.0.4", "lodash": "^4.17.21", "mocha": "^10.2.0", - "moment": "^2.29.4", "mongodb": "^6.9.0", "mongodb-query-util": "^2.2.9", "mongodb-schema": "^12.2.0", diff --git a/packages/compass-schema/package.json b/packages/compass-schema/package.json index 12aafda2adb..a9d40c5c4f2 100644 --- a/packages/compass-schema/package.json +++ b/packages/compass-schema/package.json @@ -89,7 +89,6 @@ "leaflet-defaulticon-compatibility": "^0.1.1", "leaflet-draw": "^1.0.4", "lodash": "^4.17.21", - "moment": "^2.29.4", "mongodb": "^6.9.0", "mongodb-query-util": "^2.2.9", "mongodb-schema": "^12.2.0", diff --git a/packages/compass-schema/src/modules/date.js b/packages/compass-schema/src/modules/date.js index 5aed500473e..2a18fbe5547 100644 --- a/packages/compass-schema/src/modules/date.js +++ b/packages/compass-schema/src/modules/date.js @@ -1,7 +1,6 @@ /* eslint-disable no-use-before-define */ import d3 from 'd3'; import { isEqual, range, minBy, maxBy, sortBy, groupBy, map } from 'lodash'; -import moment from 'moment'; import { inValueRange } from 'mongodb-query-util'; import { palette, spacing } from '@mongodb-js/compass-components'; @@ -33,7 +32,15 @@ const minicharts_d3fns_date = (changeQueryFn) => { const options = {}; const subcharts = []; - const weekdayLabels = moment.weekdays(); + const weekdayLabels = [ + 'Sunday', + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + ]; // A formatter for dates const format = d3.time.format.utc('%Y-%m-%d %H:%M:%S'); @@ -215,7 +222,7 @@ const minicharts_d3fns_date = (changeQueryFn) => { // group by weekdays const w = groupBy(values, function (d) { - return moment(d.ts).weekday(); + return new Date(d.ts).getDay(); }); const wd = { ...generateDefaults(7), ...w }; const weekdays = map(wd, function (d, i) { diff --git a/packages/compass-web/.mocharc.js b/packages/compass-web/.mocharc.js index 61091edba73..101c4b4629a 100644 --- a/packages/compass-web/.mocharc.js +++ b/packages/compass-web/.mocharc.js @@ -1,2 +1,7 @@ 'use strict'; -module.exports = require('@mongodb-js/mocha-config-compass/compass-plugin'); +const config = require('@mongodb-js/mocha-config-compass/compass-plugin'); + +module.exports = { + ...config, + spec: [...config.spec, 'polyfills/**/*.spec.*', 'polyfills/**/*.test.*'], +}; diff --git a/packages/compass-web/polyfills/tr46/index.spec.ts b/packages/compass-web/polyfills/tr46/index.spec.ts new file mode 100644 index 00000000000..21deb017114 --- /dev/null +++ b/packages/compass-web/polyfills/tr46/index.spec.ts @@ -0,0 +1,27 @@ +import { expect } from 'chai'; +import { toASCII } from './index'; + +// Keep in sync with https://github.com/jsdom/tr46/blob/main/scripts/getLatestTests.js when updating whatwg-url +const wptSHA = '72b915d4b3754f081ef5899bf6a777efe71b2fc5'; + +describe('tr46 polyfill', function () { + describe('toASCII', function () { + let tests: { input: string; output: string }[] = []; + + before(async function () { + tests = await fetch( + `https://raw.githubusercontent.com/web-platform-tests/wpt/${wptSHA}/url/resources/toascii.json` + ).then((res) => res.json()); + }); + + it('should pass wpt specs', function () { + for (const test of tests) { + // String items are just comments in the test data + if (typeof test === 'string') { + return; + } + expect(toASCII(test.input)).to.eq(test.output); + } + }); + }); +}); diff --git a/packages/compass-web/polyfills/tr46/index.ts b/packages/compass-web/polyfills/tr46/index.ts new file mode 100644 index 00000000000..97a39f947d4 --- /dev/null +++ b/packages/compass-web/polyfills/tr46/index.ts @@ -0,0 +1,17 @@ +/** + * This is a dependency of whatwg-url package, we can't fully replace it with + * the globalThis.URL due to subtle differences in packages behavior, but we can + * substitue one of the biggest chunks of the package (tr46) with a browser + * implementation. + */ +export function toASCII(domain: string) { + try { + return new window.URL(`http://${domain}`).hostname; + } catch { + return null; + } +} + +export function toUnicode() { + throw new Error('Not implemented'); +} diff --git a/packages/compass-web/webpack.config.js b/packages/compass-web/webpack.config.js index 5a614982eb7..f339ccd703d 100644 --- a/packages/compass-web/webpack.config.js +++ b/packages/compass-web/webpack.config.js @@ -15,6 +15,13 @@ function localPolyfill(name) { return path.resolve(__dirname, 'polyfills', ...name.split('/'), 'index.ts'); } +/** + * Atlas Cloud uses in-flight compression that doesn't compress anything that is + * bigger than 10MB, we want to make sure that compass-web assets stay under the + * limit so that they are compressed when served + */ +const MAX_COMPRESSION_FILE_SIZE = 10_000_000; + module.exports = (env, args) => { const serve = isServe({ env }); @@ -28,7 +35,6 @@ module.exports = (env, args) => { config = merge(config, { context: __dirname, - resolve: { alias: { // Dependencies for the unsupported connection types in data-service @@ -90,12 +96,13 @@ module.exports = (env, args) => { vm: require.resolve('vm-browserify'), // TODO(NODE-5408): requires a polyfill to be able to parse connection - // string correctly at the moment, but we should also omit some - // depdendencies that might not be required for this to work in the - // browser + // string correctly at the moment url: require.resolve('whatwg-url'), // Make sure we're not getting multiple versions included 'whatwg-url': require.resolve('whatwg-url'), + // Heavy dependency of whatwg-url that we can replace in the browser + // environment + tr46: localPolyfill('tr46'), // Polyfills that are required for the driver to function in browser // environment @@ -140,6 +147,11 @@ module.exports = (env, args) => { process: [localPolyfill('process'), 'process'], }), ], + performance: { + hints: serve ? 'warning' : 'error', + maxEntrypointSize: MAX_COMPRESSION_FILE_SIZE, + maxAssetSize: MAX_COMPRESSION_FILE_SIZE, + }, }); if (serve) { From 1037badfa5c12b52a8fa581424cf7e01654f809d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 15:48:24 +0000 Subject: [PATCH 27/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6455) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 1573 ---------------------------------------- docs/tracking-plan.md | 2 +- 2 files changed, 1 insertion(+), 1574 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index cf7fd1a5eee..18a6f8d1905 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -96,7 +96,6 @@ Package|Version|License **[@lezer/javascript](#6f8d761b240b610d6ad180799f8b36219b20649cbce80bd3cb7e669082e92ef3)**|1.3.2|MIT **[@lezer/json](#7869bdb7c09e2ae1e28909eb504f475477cc5ed0750dc8ccee42886961975253)**|1.0.0|MIT **[@lezer/lr](#1443872b0ea87b0af4967c9026094e634c83118fb811349742ca05bde397412b)**|1.4.1|MIT -**[@lg-tools/test-harnesses](#d9d520c615bec249e9215664d5dbb781e77d0e048253f0f1de362a8bb6212d6e)**|0.1.2|Apache-2.0 **[@lukeed/uuid](#82700fba068def47ea9842f28d700a387f59da805f74a6ed10a5eb7eece4cdab)**|2.0.1|MIT **[@nicolo-ribaudo/semver-v6](#0db933ddbe9acfd097ee5ee08e4afb1f4f7a64ef9712f95fef7958494c8e02cd)**|6.3.3|ISC **[@react-aria/interactions](#638eaf69f422aa3fbe2277f9e95b6b87e64569742134491d2653e9fc05c8f58a)**|3.9.1|Apache-2.0 @@ -144,7 +143,6 @@ Package|Version|License **[@smithy/util-utf8](#c0da7acc7121c0e4e76c58d92e290275318534cfce16949c7b916cfa0301c3b9)**|3.0.0|Apache-2.0 **[@tanstack/react-table](#3472fd929bf691e34b02f3f62232cafe55163b92e3c51afc884780ba2413e67f)**|8.14.0|MIT **[@tanstack/table-core](#8a18d3df915b2b72a0c8a845e2a930504b08cb745c8e0b5537de30793b71c967)**|8.14.0|MIT -**[@testing-library/dom](#15e0d0db2fcc307557d106b8a27b182d980d667836b8d8cbb6edb67a0aab34ee)**|9.3.1|MIT **[@tootallnate/quickjs-emscripten](#dda6dbabe98503ac1af20979be1778d7a1c8f355b85377124a909567193c2cd3)**|0.23.0|MIT **[accepts](#4c224d266c36e8e0abc4a53eb7eaa038504ee20b9b91f3e761187298a447d76b)**|1.3.8|MIT **[acorn](#4aa96f656a11c11b0e17ee35cc26cad7c13dcf4afdff6431e6d074261b59f47d)**|8.8.2|MIT @@ -163,18 +161,13 @@ Package|Version|License **[ampersand-state](#5a76226bf9a842fcccb127eb22fdd20e0bf973f5c4d2e3330bb88a587cbcdb38)**|4.8.2|MIT **[ampersand-state](#50886d5661d4241b348d233af087614640a657fad2d772282410875a410ba00a)**|5.0.3|MIT **[ampersand-view](#04597f3cef8beed68d8312481c66b00b5cfb5700dcd5e7fc97a1358472ad7dd0)**|9.0.2|MIT -**[ansi-regex](#7fa0e28daa6f9c697017b06f32a9e31a57ccfb4f138a8daded68a5d002231e29)**|5.0.1|MIT **[ansi-styles](#3d188f4ce9ad01e2061b3dafeb74005547429b09fb5b114980303db9cf34f4ee)**|3.2.1|MIT **[ansi-styles](#22c90e10fdbeeedded470f2fb78a8094893efd4675108074eddde452da52ef87)**|4.3.0|MIT -**[ansi-styles](#a480abbdfa49ebce7f9eb04451485c433d1fa24a2ddc4380cc92fd2d34642d82)**|5.2.0|MIT **[antlr4](#c5ad356fae2f067425b6c90b7251290842a1f2dec296bbd5afd5ccc32dcf3acc)**|4.7.2|BSD-3-Clause -**[aria-query](#ea709a066de0bac38519808675639c17ed8511255f6f1604c0262ea3914cfd2f)**|5.1.3|Apache-2.0 -**[array-buffer-byte-length](#cc88781e246dc898d7b281d0c92ffc26ae81261dc07ec4ea7d1257688f769328)**|1.0.1|MIT **[array-flatten](#832052c97b92484a7685d432fbdac9cb8d6cd26a0de715df336780d91762bfc9)**|1.1.1|MIT **[array-next](#2eca7126c828f7c4b047e8bc3982acc390adc906c9e1fd2ab512d7ade811a40d)**|0.0.1|MIT **[asn1](#c03a7b8eb9b75e350660b88148698446ab536a4ea01c5f321c14036a86aac2ef)**|0.2.6|MIT **[ast-types](#b10f17e6889028ee16e1f388d24ed535333cd289f0871c70d99c6180f498c6e0)**|0.13.4|MIT -**[available-typed-arrays](#b26a9227325a0e2f27e4793244a52200e15f63f970e71f86ead22e0f696c4a41)**|1.0.7|MIT **[aws4](#10a86cbc2356f4c2e30ecdd2d3f40dce2dee62e2a2efa860bf539568a5d14573)**|1.11.0|MIT **[base64-js](#cf278cb8d073b3bd22b60816c2ba78b69043aec6bcd673437b4c1db3375153d6)**|1.5.1|MIT **[basic-ftp](#2893c6a2ae0507b9073fc65146e8902587fef3bfeb9e94a67ea34cb09124b902)**|5.0.5|MIT @@ -227,13 +220,11 @@ Package|Version|License **[debug](#8f6d58c520b4b6702b6fb9abb811ba1798560ac052612c0fa8dc243516825360)**|4.3.6|MIT **[debug](#8bcd678354554043662ec7b1a1fc890da6dca2f1f245833d5400831daaeb3fc5)**|4.3.7|MIT **[decompress-response](#71cad5eab34cc643a6a7853a43d3090ac7e8b6014c9ec55fabb8112cdbfd9fbd)**|5.0.0|MIT -**[deep-equal](#2f9e585913d3ba1d9ffaf3e79f616e66788fa687f6069a567aee25bb3045410a)**|2.2.3|MIT **[deep-extend](#654bd7d00073c2195bca924a07d93393b2aaf5cacbb6f52a383877f6f33dbfbf)**|0.6.0|MIT **[default-browser-id](#bc6a381b83371172dbb72cac459792e2d4d55ecb71165c082142ef085b2130ee)**|3.0.0|MIT **[default-browser](#bf5c7331e49e4c648e57747ffd553870a7fe79fea24780366a6bc22ef346f304)**|4.0.0|MIT **[define-data-property](#a776d26c4eb3429c37b30afeed2ddcd9be51dec6d9ea7025b0e6426a5d4f78d6)**|1.1.4|MIT **[define-lazy-prop](#6e79b04c4690532e40a5cdfb76f3ab49de1d6778466fede1548a2e19ac8e75c4)**|3.0.0|MIT -**[define-properties](#332935df321f270f8588f3ae5e25759d1611d1610bd987eac78b79dd1ee5fe35)**|1.2.1|MIT **[degenerator](#6cb75d096539cebca1a3054d0012d40eda0230d9c8da8455621c9d78b92f0b69)**|5.0.1|MIT **[delegate-events](#9bd9e92528721909dffad7816bd183b65a96891a390f9420036ba9a2cc6ae291)**|1.1.1|MIT **[delegate](#bc2c0cfa061f5865ffa83a2bf2c0f3e29dc3a2056113b1ce3e9acd33709e7606)**|3.2.0|MIT @@ -241,7 +232,6 @@ Package|Version|License **[destroy](#b0d735940e17a041d544c301b27489e5d09c3032fa11e7832f03be6541182fd6)**|1.2.0|MIT **[detect-libc](#75227d1b1c09630ea361abee4d27101e350832bbeab9640a013c82662408b467)**|2.0.1|Apache-2.0 **[diff-match-patch](#850176c67954354dc12126896278644187ef9d1eeeaa1d67f1b6ef48b0c23321)**|1.0.5|Apache-2.0 -**[dom-accessibility-api](#a91e4ceabaaddea1b80532694b37621980591fa28c7144a3a848e66363bfee06)**|0.5.9|MIT **[dom-helpers](#8d51cc2c2eba67a9ee7b80bdbca48b1102ceeb0618178fae05b1a82522a80e6e)**|5.2.1|MIT **[domify](#4360a769ee10e827f9ae503aa7ea9aeb9039932fa02ac938316df303704a7fb1)**|1.4.1|MIT **[dset](#f51cb933ffb40a4dfeed4e6c3f7e6299cf7d05c42528b3fccc5bc7cab310914c)**|3.1.4|MIT @@ -255,7 +245,6 @@ Package|Version|License **[ensure-error](#3b1eba5276d89414cef21a1007e85c4f1d6749bf57b300e082ab23975a41dbc9)**|3.0.1|MIT **[es-define-property](#f19a2c06a58db5974cd4d8abbd3fa0453122ea6d3bac0de0603ca69f72dcce38)**|1.0.0|MIT **[es-errors](#645b141d3027520f69209dba8e012e737f0ee8cad89ea8d0e26d02669d14a981)**|1.3.0|MIT -**[es-get-iterator](#d9180f3ad32c9d77645aa98ee5b6b8c233f3341b4cdfe00a1b8909505dc0f84b)**|1.1.3|MIT **[escape-goat](#9e11fd1d88e064409c700bdd041e7a9077ebe4bb0e8ad151a6820df52ac0a9e3)**|2.1.1|MIT **[escape-html](#5463e0a52abb42be051fba2f4ea5d49d907d2b5ed09df0983b54f88c59c8c481)**|1.0.3|MIT **[escape-string-regexp](#a9c53481a9db89e7cf01e302086c50fcfbde360978cdd2bbe1e52a430d3fee42)**|1.0.5|MIT @@ -283,14 +272,12 @@ Package|Version|License **[first-chunk-stream](#c940079dd0a2457019ab184334f928cab84e316cd4016ba3581b312aa55c70f9)**|3.0.0|MIT **[focus-trap-react](#4db13d4bfad6e874b38f8054935a1c7872c265b0a9f279e24dbe2523f3d1ce53)**|9.0.2|MIT **[focus-trap](#c34eea0a3a357645a464ee2dd814f280c9670f39b9b85132394eb15acb70916a)**|6.9.4|MIT -**[for-each](#8b82c7ffa1300f8e1575c1d59105d6b256827ec211760d6fb6f884e4290e0abe)**|0.3.3|MIT **[formdata-polyfill](#57e46e70e3cf628270eb56d751c6e2dd8332438324f1e4f5a3602c34ff7c85b9)**|4.0.10|MIT **[forwarded](#2d7f4275b09b041fd821b7672ebae7c9ccad3c87f3f37b6bd91306973c02b9a3)**|0.2.0|MIT **[fresh](#d7c677c373e09a5e9c7fe1d1ce69ca3147fe0455bf5606a26251970181d9efc4)**|0.5.2|MIT **[fs-constants](#9961a9f7535cded379a7696ad6d002a62d4826a3a8c2ffb5624383b942c879e5)**|1.0.0|MIT **[fs-extra](#f4bda72fc58b809b6533077d1826716805d4bec29651a76697ededec9689e0a4)**|11.2.0|MIT **[function-bind](#83de3b394293d96fb3fea968392a9d9ffb8b461f6c173bbb76a5bc51db5bec52)**|1.1.2|MIT -**[functions-have-names](#e47bfb8af99536984c43eccff65479505a133c528be9e5e73fa43c03b31749bf)**|1.2.3|MIT **[fuse.js](#ced18d15cdf119bfd867863e1f147fb1f4021544033d6cf956803c71a14cf53d)**|6.5.3|Apache-2.0 **[gensync](#c49cbe8d63515db5596a717f0d65eab2f06a623b4f1dfbd512d61bbdccf1aa4c)**|1.0.0-beta.2|MIT **[get-intrinsic](#2c1a0d16eee22217701f9243a8041f80f74f0a262eb6c10bf1b1f7f41e8599ac)**|1.2.4|MIT @@ -306,7 +293,6 @@ Package|Version|License **[has-property-descriptors](#4616611d5db8c73d2811bc79dd6cbde0b69f1cc891c1f997448bc79546ba9913)**|1.0.2|MIT **[has-proto](#7a8e708aab5b7c789098be88699f7f374a9b3a2f2737537a66d391147377b362)**|1.0.3|MIT **[has-symbols](#26dae1ac20c49dbfafbfca8c84abb75e056b0213a6ff12412dd23dd752e1a424)**|1.0.3|MIT -**[has-tostringtag](#e39d802569f1249ba08678c5fb24fc1b87ee4c92cc0f6eaa259f5b54038f2e13)**|1.0.2|MIT **[hasown](#ace41f4c3d63ecdc85c94d28b43fc006fc67f35c24ecaa112b631dbcb5c0b39d)**|2.0.2|MIT **[heap-js](#02ff1972404d29f951641af2b6cf6b371521d70f6daaf4196dcc45e6b5dbe96d)**|2.3.0|BSD-3-Clause **[highlight.js](#2c60adc5db39462d0c2ff2176f71b4694ffe5060c53b1aa4f6f670e269ec1905)**|11.5.1|BSD-3-Clause @@ -322,37 +308,20 @@ Package|Version|License **[imurmurhash](#d1af6342e06cf4463a1e70d43bb8fd673f060cc7c236f7fe024631d6714c81c8)**|0.1.4|MIT **[inherits](#3eafa9bfb872baf192e837ab771da2e95e983ee682371a2b1c579e518e96f7b4)**|2.0.4|ISC **[ini](#2269ab4bd2e1fa90571f520780ab5499f6d49da3b7daee9b9dfdad9e93c33a18)**|1.3.8|ISC -**[internal-slot](#1ecccc52c5daf9836e78ebc03604e73050b23a095bc4474240968ba1b9cd8892)**|1.0.7|MIT **[interruptor](#e8a35d2ce64b947fb7a1aba891bc1e4eb166be57a59249cda1fcc689e767b6bc)**|1.0.2|Apache-2.0 **[ip-address](#8de6e89459554be8a933663b25ae1d1ffee71458028fa8cbe5d68b349438a8c8)**|9.0.5|MIT **[ipaddr.js](#38a5a1606dbc89a9c65a28d1e9ebe3c8d323e107a77c495a56dbf522211676d2)**|1.9.1|MIT **[ipaddr.js](#d8a1c47a5dc5581d8d9e84268efa779a5140196540c2a4425e8317c1eeb93fb7)**|2.1.0|MIT **[ipv6-normalize](#7a4346dbf206011966449898fcd37178a9be89acf6dff120b676d4c4d0dec203)**|1.0.1|MIT -**[is-arguments](#4af472b071742337deb4d56d6c4a507fd58990e8922613def80a84ba532a2b6d)**|1.1.1|MIT -**[is-array-buffer](#442760df883a3fb368f6c5666080a8c4e07d95f5f69fc92654bed5bd4be7f814)**|3.0.4|MIT -**[is-bigint](#76328e128016cee0810bc1fd650e8f63f1ad3a062d2e0c555515448ffd3f13cd)**|1.0.2|MIT -**[is-boolean-object](#db76784fdb608b8a1760612e770f909cb121ee1d4f6067a33c25443f06b9c998)**|1.1.1|MIT -**[is-callable](#8cf8f70dfb44d8f426d81a03a0f5a1e4be28081368aa69089c22ac2571dcac14)**|1.2.7|MIT -**[is-date-object](#4e4be4dc1852d5d512c7afa3107dcff477e27efa4ac81bda7a72422f55fc5841)**|1.0.5|MIT **[is-docker](#893885e21608c60de02539fa3bd5a98f7068127aa5fab86a215bfec41a3119a4)**|2.2.1|MIT **[is-docker](#b21de9a8d47c7c165b912be5c7a36eae3939076531e05733aa2ac7f1099dc46d)**|3.0.0|MIT **[is-electron-renderer](#5f979579f0e64b4ba63a2cf1d32f11e274d285511e84ee596bddc57424d5299c)**|2.0.1|MIT **[is-inside-container](#3f45825f7cda0ec2231b94ee915a0dc76a31eb0f97746c44510d9b05d80c1a97)**|1.0.0|MIT -**[is-map](#a9d75aec4f0b5614e4286c133a5fb6390141bd79d8b5bff8f3f7815869d04f8e)**|2.0.3|MIT -**[is-number-object](#98d946a111ed40a337dcf7f4aa4824b69cfe20d4b3b230710bcd5f9c803c9348)**|1.0.5|MIT **[is-plain-obj](#6aa44f19e7afb6047589b7ad4e4ee3d44264e44f4a4ac5057efb8e3000820525)**|1.1.0|MIT -**[is-regex](#b98aa247d6a1b7f75692f6acb485fc213de3ca0cd8ecdd6bab7f96393e255d07)**|1.1.4|MIT -**[is-set](#af0e69272cbdbff01e5f873f16f9aa12c5c8fcbc228972be63e0b1ce16bd180a)**|2.0.3|MIT -**[is-shared-array-buffer](#6828bd9e33499632e06a110b3a3ecc06df254c4a28caf86e436a9939af9b3ed7)**|1.0.3|MIT **[is-stream](#6a348f7c7e9ad013ef74124a87896ed11f8bafac3344e58377dcfc0944187cf6)**|2.0.0|MIT **[is-stream](#309bd1940a381ff538d0c335564cc3e436c79307c991516433092d84e35acfc7)**|3.0.0|MIT -**[is-string](#f00a8e1cf00a8951016596ae951454a7d9944dc72a4f1b1127e7ec5879db5654)**|1.0.7|MIT -**[is-symbol](#3550f187e60fe8b94de5ebefd70dca43157d4c7a8ac847bb8d5ddfb1c59c1723)**|1.0.4|MIT **[is-utf8](#df5522c387e62effc17916c612bf340d6543c4bccca99fed4c1c1fae77ed4900)**|0.2.1|MIT -**[is-weakmap](#ed08152c59d2b4e2e55e4c75373f7cd102901b6de08e20dba61722d1bb7a5086)**|2.0.2|MIT -**[is-weakset](#5538f4c86728250aa4d278637d76d6fff7d7a2cf1ff7433f842cc4045c95ec6e)**|2.0.3|MIT **[is-wsl](#133bdb52dad1bbd87bcda9564e6df13fe7c51ae7d67575fea63cf0a2072ac884)**|2.2.0|MIT -**[isarray](#55a8a963f7aba0af49a654ea316f8dc19b717b632b88145881fda3988256ef6d)**|2.0.5|MIT **[isexe](#2f62e711a6921973ef3f9650fd3e06585fd3842e34078c8fa959481738600405)**|2.0.0|ISC **[javascript-stringify](#e0d27d21a288d227e51243715c044b3933d9fc0fb025dc16ec79c78af35f85a7)**|2.1.0|MIT **[jose](#7c6ba2890a65df8d382e1b102b311651675d0ed5fd5443e911c520b18e93f62f)**|4.15.5|MIT @@ -440,7 +409,6 @@ Package|Version|License **[lru-cache](#8d10f71b6ab389fdca1b55e9aa96d77790f776843bd42ca91804a40a0d543f19)**|11.0.1|ISC **[lru-cache](#fe7f0a2f2cf4c92f13c3a2a63f14f80f20f6919979306dc054e4f947c1234651)**|5.1.1|ISC **[lru-cache](#938513411a6603ce29334db15563fb94b7d52f839d32b9bd78c18f5d3f98aa5a)**|6.0.0|ISC -**[lz-string](#a04d0916e49897705fe7a9d865134920984a19a03f8de501d4e46c6698a6b421)**|1.5.0|MIT **[marky](#c5789082b93eeeb451a00e87792a533dd2589421119d3560a06c5f96b39414ea)**|1.2.2|Apache-2.0 **[matches-selector](#ed68b9f3ecca4297cbb806474484688a85517361d99a33773e3152603a6771e6)**|0.0.1|MIT **[matches-selector](#cec79a3cd38ecccf3066baf0e39cf87735fffea201040dd2799e4c6b5221d981)**|1.2.0|MIT @@ -459,7 +427,6 @@ Package|Version|License **[minimist](#837db6b00930af97755b724568aecf8b139361dc2148c7db77673ba6ae44a44d)**|1.2.6|MIT **[mkdirp-classic](#e79cc875152b50c2eb57a97163d99f0155bf4e4af7ba4a7e01c12a17a4a3305c)**|0.5.3|MIT **[modify-filename](#7153be07939379ccf0072006c519fba2bdf5ab79ca8bb59bc5273f87a7bacbf6)**|1.1.0|MIT -**[moment](#94975b5423311209f3beed9c2c6bb6157f622312a3f8563d507b52e804bf6285)**|2.29.4|MIT **[mongodb-build-info](#f0a98c22ae0766702726f79e058ac6dc4e4bead8557b67b816f40bd13fb54170)**|1.7.2|Apache-2.0 **[mongodb-client-encryption](#01c104ff07b0715f77217b6b7adfc9a0056f35ffd976182ffbf409f69b3a0df3)**|6.1.0|Apache-2.0 **[mongodb-cloud-info](#a784f3b401cf51746f49964e044db933529b3e3791e557702715730f5a3f1e46)**|2.1.2|Apache-2.0 @@ -489,9 +456,6 @@ Package|Version|License **[object-assign](#598e372231bb5bef26b7d61105282eb20e14ade430143052d064d2d406769b95)**|4.1.1|MIT **[object-hash](#848d5d28b20a6a7f2e701e9b2b7e65b5518313269696dacf4ac69fa8bc5b571a)**|2.2.0|MIT **[object-inspect](#b9d7050d521cb65fdc84f2212e39302b36e9bb0f7191e0be89ac3e4ea488b1fb)**|1.13.1|MIT -**[object-is](#d597163d660664be4b28b1f40171738a17ec18b028d62ee1cf2e264e30924d84)**|1.1.5|MIT -**[object-keys](#e9aac5890f5f1c6f8d56c08ce91012ba530b586511a89d1fa99ae2d7c39d8b2e)**|1.1.1|MIT -**[object.assign](#498d41061b8e766f5d53d287d41307891ca86b3d63eee61a1c4131f5dc5f185c)**|4.1.5|MIT **[oidc-token-hash](#3beaf628821d1b6d7ec7b67b3c9ceea1d37727ea52253383f31d3e73141cf29f)**|5.0.3|MIT **[on-finished](#d3c391e10faad1d82190a06f5be315d94a9194cff75aa389940432ef15cf45de)**|2.4.1|MIT **[once](#d0d1303998dfae04e4f898f477380aac35568f4d6679f4ea913c2441cf9ebb0b)**|1.4.0|ISC @@ -510,10 +474,8 @@ Package|Version|License **[path-to-regexp](#96d230365f414cce8d80ceb9d99d855685dfa922f931b49ea01952a1efe64266)**|0.1.10|MIT **[picocolors](#f964752f1f8cfd947506fd51ce1c148469ecf3b6f531d826511b720670e556f1)**|1.1.0|ISC **[polished](#a7a5d1244e48a082dbc54de31b5309caf950b12aa6bd9fefbba39e362e705f06)**|4.2.2|MIT -**[possible-typed-array-names](#5ba4283f5512abd5d57e79c0a75acb3818d98d169df979afb01ad6867cefd312)**|1.0.0|MIT **[prebuild-install](#93d13a9b3a51a6a802fcd35aa031d3ae7369aa6fd47d3a89f28a6d31ea3c9dc5)**|7.1.2|MIT **[prettier](#2e1e2077936be4bb5f075fd4d279f9ece641322ccd12a8116edb3f99f08f7411)**|2.7.1|MIT -**[pretty-format](#0c53580441217a6c2b9c885eb1ec35adde420c312ccf9f408c856dc3845cce8b)**|27.5.1|MIT **[prop-types](#e4dd0bb5b6f98fbf52f0ad7062b8514aadc56a47a692bf6d8aab369786b6039f)**|15.8.1|MIT **[proxy-addr](#7b128e3d41d39ecb1a405a490a53ae86f70ef45f01079333ed3ca49939f5fba8)**|2.0.7|MIT **[pump](#147f1bd3a6380306e696f0574feda0b1490121a1d12e4500e91ffb6e888ffa3a)**|3.0.0|MIT @@ -528,7 +490,6 @@ Package|Version|License **[react-hotkeys-hook](#6ce07fe9653ad69a76354e2d71137c70ab9a838377fe5a8f8e45c559cfbf41cc)**|4.3.7|MIT **[react-intersection-observer](#84f998bdb33a5f9330d81ef063f7ad0897f1b004661fbf131725697b847a5b6a)**|8.34.0|MIT **[react-is](#7183835e2bcaca6754fe10854fc3b65407d2cb9aa3b68b1c06ccaafb7b9be28a)**|16.13.1|MIT -**[react-is](#5ec174b50bba38f48ee8da3d8a5b9463a9e77c3f01d74a132ecc30a2be099c4b)**|17.0.2|MIT **[react-is](#5746232ad830b635a6581ee7d3b826ee932c6877087c98cb46b94101eb5ce40b)**|18.2.0|MIT **[react-keyed-flatten-children](#9c7ffa4be6351eaf0a19b808fc4048eb28455824378f089da7a566cdeb0bdd84)**|1.3.0|MIT **[react-leaflet-draw](#d80b4b765d856cdefe411a073d3b3dde06100128005f1381b4d26d6cf53134c7)**|0.19.0|ISC @@ -544,7 +505,6 @@ Package|Version|License **[redux](#98b5d53f97fab4eea98fb5f423cad33400855b69ac662f1fdf55f0fb9e33f2ab)**|4.2.1|MIT **[reflux-core](#7af6ea33b0ed18717d672b44743ae53dcef843ae464690bb9e10eb1df048e9ea)**|0.3.0|BSD-3-Clause **[reflux](#f892193924d403a4dd1a73a5861913838f1a9d704055d9d098eb0d40f752e053)**|0.4.1|BSD-3-Clause -**[regexp.prototype.flags](#51cb6c20041a1fef833bb3f46483fcbd99a186e3767ec2ad32f7b3db74d296f2)**|1.5.2|MIT **[reservoir](#84f8998f94ad5bd85b50458378edf3815fff553cdcabf8ced3db418f05e85ff6)**|0.1.2|MIT **[resolve-mongodb-srv](#2ae8b0c9dbe8e8c900bfaf5567bcf2af917e62fb0a24121b4d667dffbeaffa99)**|1.1.5|Apache-2.0 **[run-applescript](#f4d3cc18b69c2dec9e4f1d19a1cb794c8fa2e548e530f4033dc6b0caf803bebc)**|5.0.0|MIT @@ -557,7 +517,6 @@ Package|Version|License **[send](#412cd4c4a8e6aaa433d5e67852c05a1e307fd4eb9dc362bdc30fa099313c24cb)**|0.19.0|MIT **[serve-static](#9a2d04a479ef9c6e990f1fb614478dea4368c040af707296400ff7f9bb68d30b)**|1.16.2|MIT **[set-function-length](#88ee3e1c8e8c22ac3653a290c1cdc68787d064f17a743020a070b31290bb4eb9)**|1.2.2|MIT -**[set-function-name](#f9d4c9272c71403774a64f46fc69cefd1039845f2ee1d252fb62cbd97f9e7fb4)**|2.0.2|MIT **[setprototypeof](#7787a1d3bc2f39b65d75407d5d8d02d8ddb70f1cdb74897f15115e995fb64a56)**|1.2.0|ISC **[shebang-command](#a9cba97b71b818fb0a4978f8b14875ae118f292a19ffa97c8b2d848f9a897d89)**|2.0.0|MIT **[shebang-regex](#849fb37298f1c4dcdeb6065edc4242918c7533bcfda5c67747e6ce4620c587bb)**|3.0.0|MIT @@ -577,7 +536,6 @@ Package|Version|License **[sprintf-js](#d8b6ff1ba6436283de681a756ad453428005e61986c5113a3a8088ced2b36eb7)**|1.1.3|BSD-3-Clause **[ssh2](#caa88a7f6fedc946b33fe4cdcd84104598cca8b841b593d1ffb031578cd3d8c9)**|1.15.0|MIT **[statuses](#a347e5a1994ef74647a2af80f58030a572f71173d5c1dfc0ce6eb55f4005b17d)**|2.0.1|MIT -**[stop-iteration-iterator](#b4a114e720966d8d69055a584424fa2465b603774072e8b7e35619282ff67afb)**|1.0.0|MIT **[stream-chain](#dbe4594ad347bd2850f84bc41ea7ed1f0bebb82c38b9e7e0f6820d1c071e534c)**|2.2.5|BSD-3-Clause **[stream-json](#ff32de703b38cb80287bf73b31ddc47fb97277eadcfb231017f31a06824e41e0)**|1.7.5|BSD-3-Clause **[string_decoder](#b7999058a36380603fb66d82d8b9e36ddb8f0e5b81cd3f3233f31eac12b793fe)**|1.3.0|MIT @@ -627,9 +585,6 @@ Package|Version|License **[webpack](#bd55cdb69f5b1b336d12c3f00d849ccb1f2c39987c257c89027d6a790f947496)**|5.94.0|MIT **[whatwg-url](#3a968d9d3fed498fc1edf2f65459cc89b6a2fea277b5c9b5c3f3a0b41390835a)**|13.0.0|MIT **[whatwg-url](#cd3f81c4a0fd856ab1d9c9fc99c1d7eaf2c12c4867b218e9901e5020a1ffcd85)**|5.0.0|MIT -**[which-boxed-primitive](#b3f94b6da310368951f52909c400e19c4c2c7a282ba67374f41ab2d070bf83f2)**|1.0.2|MIT -**[which-collection](#8d30c0dc07cdaccc2163cb70ff87fa91c48abdf4963bf5603218d66dbd6ae538)**|1.0.2|MIT -**[which-typed-array](#949a7e27fa7c5423fa71694a92b2c5e0d1b7f9e43ba00aab74414d4311e82530)**|1.1.15|MIT **[which](#5a71f2b741944bf107d6e7f067241798a6e277e42e8ca1e28c4608ccc233f8ec)**|2.0.2|ISC **[winreg-ts](#b1df7eee15fa28ae85b9086513c8316c08a21c254e8eda11e63c6321a03ac4a7)**|1.0.4|BSD-2-Clause **[wrappy](#13cebf193d7ada5ee347b9ae819b96f5e6da21f9b53e7f268c7703b686158595)**|1.0.2|ISC @@ -7021,11 +6976,6 @@ License files: - -### [@lg-tools/test-harnesses](https://www.npmjs.com/package/@lg-tools/test-harnesses) (version 0.1.2) -License tags: Apache-2.0 - - ### [@lukeed/uuid](https://www.npmjs.com/package/@lukeed/uuid) (version 2.0.1) License tags: MIT @@ -15640,36 +15590,6 @@ License files: - -### [@testing-library/dom](https://www.npmjs.com/package/@testing-library/dom) (version 9.3.1) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - Copyright (c) 2017 Kent C. Dodds - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [@tootallnate/quickjs-emscripten](https://www.npmjs.com/package/@tootallnate/quickjs-emscripten) (version 0.23.0) License tags: MIT @@ -16216,25 +16136,6 @@ License files: - -### [ansi-regex](https://www.npmjs.com/package/ansi-regex) (version 5.0.1) -License tags: MIT - -License files: -* license: - - MIT License - - Copyright (c) Sindre Sorhus (sindresorhus.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - ### [ansi-styles](https://www.npmjs.com/package/ansi-styles) (version 3.2.1) License tags: MIT @@ -16273,272 +16174,11 @@ License files: - -### [ansi-styles](https://www.npmjs.com/package/ansi-styles) (version 5.2.0) -License tags: MIT - -License files: -* license: - - MIT License - - Copyright (c) Sindre Sorhus (sindresorhus.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - ### [antlr4](https://www.npmjs.com/package/antlr4) (version 4.7.2) License tags: BSD-3-Clause - -### [aria-query](https://www.npmjs.com/package/aria-query) (version 5.1.3) -License tags: Apache-2.0 - -License files: -* LICENSE: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2020 A11yance - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - - - -### [array-buffer-byte-length](https://www.npmjs.com/package/array-buffer-byte-length) (version 1.0.1) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2023 Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [array-flatten](https://www.npmjs.com/package/array-flatten) (version 1.1.1) License tags: MIT @@ -16634,37 +16274,6 @@ License files: - -### [available-typed-arrays](https://www.npmjs.com/package/available-typed-arrays) (version 1.0.7) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2020 Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [aws4](https://www.npmjs.com/package/aws4) (version 1.11.0) License tags: MIT @@ -18175,37 +17784,6 @@ License files: - -### [deep-equal](https://www.npmjs.com/package/deep-equal) (version 2.2.3) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2012, 2013, 2014 James Halliday , 2009 Thomas Robinson <280north.com> - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [deep-extend](https://www.npmjs.com/package/deep-extend) (version 0.6.0) License tags: MIT @@ -18324,36 +17902,6 @@ License files: - -### [define-properties](https://www.npmjs.com/package/define-properties) (version 1.2.1) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (C) 2015 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - - ### [degenerator](https://www.npmjs.com/package/degenerator) (version 5.0.1) License tags: MIT @@ -18856,37 +18404,6 @@ License files: limitations under the License. - -### [dom-accessibility-api](https://www.npmjs.com/package/dom-accessibility-api) (version 0.5.9) -License tags: MIT - -License files: -* LICENSE.md: - - MIT License - - Copyright (c) 2020 Sebastian Silbermann - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [dom-helpers](https://www.npmjs.com/package/dom-helpers) (version 5.2.1) License tags: MIT @@ -19421,37 +18938,6 @@ License files: - -### [es-get-iterator](https://www.npmjs.com/package/es-get-iterator) (version 1.1.3) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2019 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [escape-goat](https://www.npmjs.com/package/escape-goat) (version 2.1.1) License tags: MIT @@ -20192,38 +19678,6 @@ License files: - -### [for-each](https://www.npmjs.com/package/for-each) (version 0.3.3) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2012 Raynos. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - ### [formdata-polyfill](https://www.npmjs.com/package/formdata-polyfill) (version 4.0.10) License tags: MIT @@ -20406,37 +19860,6 @@ License files: - -### [functions-have-names](https://www.npmjs.com/package/functions-have-names) (version 1.2.3) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2019 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [fuse.js](https://www.npmjs.com/package/fuse.js) (version 6.5.3) License tags: Apache-2.0 @@ -20985,37 +20408,6 @@ License files: - -### [has-tostringtag](https://www.npmjs.com/package/has-tostringtag) (version 1.0.2) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2021 Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [hasown](https://www.npmjs.com/package/hasown) (version 2.0.2) License tags: MIT @@ -21821,37 +21213,6 @@ License files: - -### [internal-slot](https://www.npmjs.com/package/internal-slot) (version 1.0.7) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2019 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [interruptor](https://www.npmjs.com/package/interruptor) (version 1.0.2) License tags: Apache-2.0 @@ -22146,194 +21507,6 @@ License files: License tags: MIT - -### [is-arguments](https://www.npmjs.com/package/is-arguments) (version 1.1.1) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2014 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - - -### [is-array-buffer](https://www.npmjs.com/package/is-array-buffer) (version 3.0.4) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2015 Chen Gengyuan, Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - -### [is-bigint](https://www.npmjs.com/package/is-bigint) (version 1.0.2) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2018 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - -### [is-boolean-object](https://www.npmjs.com/package/is-boolean-object) (version 1.1.1) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2015 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - - -### [is-callable](https://www.npmjs.com/package/is-callable) (version 1.2.7) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2015 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - - -### [is-date-object](https://www.npmjs.com/package/is-date-object) (version 1.0.5) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2015 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - ### [is-docker](https://www.npmjs.com/package/is-docker) (version 2.2.1) License tags: MIT @@ -22396,69 +21569,6 @@ License files: - -### [is-map](https://www.npmjs.com/package/is-map) (version 2.0.3) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2019 Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - -### [is-number-object](https://www.npmjs.com/package/is-number-object) (version 1.0.5) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2015 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - ### [is-plain-obj](https://www.npmjs.com/package/is-plain-obj) (version 1.1.0) License tags: MIT @@ -22490,98 +21600,6 @@ License files: - -### [is-regex](https://www.npmjs.com/package/is-regex) (version 1.1.4) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2014 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - - -### [is-set](https://www.npmjs.com/package/is-set) (version 2.0.3) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2019 Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - -### [is-shared-array-buffer](https://www.npmjs.com/package/is-shared-array-buffer) (version 1.0.3) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2021 Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [is-stream](https://www.npmjs.com/package/is-stream) (version 2.0.0) License tags: MIT @@ -22620,70 +21638,6 @@ License files: - -### [is-string](https://www.npmjs.com/package/is-string) (version 1.0.7) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2015 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - - -### [is-symbol](https://www.npmjs.com/package/is-symbol) (version 1.0.4) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2015 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - ### [is-utf8](https://www.npmjs.com/package/is-utf8) (version 0.2.1) License tags: MIT @@ -22703,68 +21657,6 @@ License files: - -### [is-weakmap](https://www.npmjs.com/package/is-weakmap) (version 2.0.2) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2019 Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - -### [is-weakset](https://www.npmjs.com/package/is-weakset) (version 2.0.3) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2019 Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [is-wsl](https://www.npmjs.com/package/is-wsl) (version 2.2.0) License tags: MIT @@ -22784,37 +21676,6 @@ License files: - -### [isarray](https://www.npmjs.com/package/isarray) (version 2.0.5) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [isexe](https://www.npmjs.com/package/isexe) (version 2.0.0) License tags: ISC @@ -25826,37 +24687,6 @@ License files: - -### [lz-string](https://www.npmjs.com/package/lz-string) (version 1.5.0) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2013 pieroxy - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [marky](https://www.npmjs.com/package/marky) (version 1.2.2) License tags: Apache-2.0 @@ -26544,38 +25374,6 @@ License files: - -### [moment](https://www.npmjs.com/package/moment) (version 2.29.4) -License tags: MIT - -License files: -* LICENSE: - - Copyright (c) JS Foundation and other contributors - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - - - ### [mongodb-build-info](https://www.npmjs.com/package/mongodb-build-info) (version 1.7.2) License tags: Apache-2.0 @@ -29024,96 +27822,6 @@ License files: - -### [object-is](https://www.npmjs.com/package/object-is) (version 1.1.5) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2014 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - - -### [object-keys](https://www.npmjs.com/package/object-keys) (version 1.1.1) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (C) 2013 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - - - -### [object.assign](https://www.npmjs.com/package/object.assign) (version 4.1.5) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2014 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - ### [oidc-token-hash](https://www.npmjs.com/package/oidc-token-hash) (version 5.0.3) License tags: MIT @@ -29594,37 +28302,6 @@ License files: - -### [possible-typed-array-names](https://www.npmjs.com/package/possible-typed-array-names) (version 1.0.0) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2024 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [prebuild-install](https://www.npmjs.com/package/prebuild-install) (version 7.1.2) License tags: MIT @@ -35667,37 +34344,6 @@ License files: - -### [pretty-format](https://www.npmjs.com/package/pretty-format) (version 27.5.1) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) Facebook, Inc. and its affiliates. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [prop-types](https://www.npmjs.com/package/prop-types) (version 15.8.1) License tags: MIT @@ -36182,37 +34828,6 @@ License files: - -### [react-is](https://www.npmjs.com/package/react-is) (version 17.0.2) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) Facebook, Inc. and its affiliates. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [react-is](https://www.npmjs.com/package/react-is) (version 18.2.0) License tags: MIT @@ -36667,38 +35282,6 @@ License files: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -### [regexp.prototype.flags](https://www.npmjs.com/package/regexp.prototype.flags) (version 1.5.2) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (C) 2014 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - - - - ### [reservoir](https://www.npmjs.com/package/reservoir) (version 0.1.2) License tags: MIT @@ -37172,37 +35755,6 @@ License files: - -### [set-function-name](https://www.npmjs.com/package/set-function-name) (version 2.0.2) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) Jordan Harband and contributors - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [setprototypeof](https://www.npmjs.com/package/setprototypeof) (version 1.2.0) License tags: ISC @@ -37825,37 +36377,6 @@ License files: - -### [stop-iteration-iterator](https://www.npmjs.com/package/stop-iteration-iterator) (version 1.0.0) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2023 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - ### [stream-chain](https://www.npmjs.com/package/stream-chain) (version 2.2.5) License tags: BSD-3-Clause @@ -39801,100 +38322,6 @@ License files: - -### [which-boxed-primitive](https://www.npmjs.com/package/which-boxed-primitive) (version 1.0.2) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2019 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - -### [which-collection](https://www.npmjs.com/package/which-collection) (version 1.0.2) -License tags: MIT - -License files: -* LICENSE: - - MIT License - - Copyright (c) 2019 Inspect JS - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - -### [which-typed-array](https://www.npmjs.com/package/which-typed-array) (version 1.1.15) -License tags: MIT - -License files: -* LICENSE: - - The MIT License (MIT) - - Copyright (c) 2015 Jordan Harband - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - - - ### [which](https://www.npmjs.com/package/which) (version 2.0.2) License tags: ISC diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 50f490a1807..7c0ff46138a 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Nov 6, 2024 at 02:20 PM +Generated on Wed, Nov 6, 2024 at 03:48 PM ## Table of Contents From 0ca35205d53215fd44d6bc0aea051487e7243549 Mon Sep 17 00:00:00 2001 From: Maurizio Casimirri Date: Wed, 6 Nov 2024 17:15:19 +0100 Subject: [PATCH 28/81] chore: fix typo in AggregationCopiedEvent description (#6445) --- packages/compass-telemetry/src/telemetry-events.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compass-telemetry/src/telemetry-events.ts b/packages/compass-telemetry/src/telemetry-events.ts index 1e354add801..0355d5f2b97 100644 --- a/packages/compass-telemetry/src/telemetry-events.ts +++ b/packages/compass-telemetry/src/telemetry-events.ts @@ -550,7 +550,7 @@ type AggregationCopiedEvent = { name: 'Aggregation Copied'; payload: { /** - * A unique id for the aggregation object being deleted. + * A unique id for the aggregation object being copied. */ id: string; From bbc82421c631e0f81a19c7113b5bb289b8fb9af3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 16:21:49 +0000 Subject: [PATCH 29/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6456) Update report Co-authored-by: Anemy <1791149+Anemy@users.noreply.github.com> --- docs/tracking-plan.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 7c0ff46138a..27082aa8839 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Nov 6, 2024 at 03:48 PM +Generated on Wed, Nov 6, 2024 at 04:21 PM ## Table of Contents @@ -244,7 +244,7 @@ This event is fired when user copied the pipeline to clipboard. **Properties**: - **id** (required): `string` - - A unique id for the aggregation object being deleted. + - A unique id for the aggregation object being copied. - **screen** (required): `"my-queries"` - The screen from which the aggregation has been copied. From 8345dda6ed0873e0da73d5986c75a5c33d19f67d Mon Sep 17 00:00:00 2001 From: svc-devtoolsbot <79531021+svc-devtoolsbot@users.noreply.github.com> Date: Thu, 7 Nov 2024 03:55:22 -0500 Subject: [PATCH 30/81] chore(release): bump package versions (#6420) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- configs/webpack-config-compass/package.json | 2 +- package-lock.json | 1486 ++++++++--------- packages/atlas-service/package.json | 18 +- packages/collection-model/package.json | 4 +- packages/compass-aggregations/package.json | 40 +- packages/compass-app-stores/package.json | 16 +- packages/compass-collection/package.json | 20 +- packages/compass-components/package.json | 2 +- .../package.json | 12 +- .../package.json | 14 +- packages/compass-connections/package.json | 22 +- packages/compass-crud/package.json | 30 +- packages/compass-e2e-tests/package.json | 8 +- packages/compass-editor/package.json | 4 +- packages/compass-explain-plan/package.json | 16 +- .../compass-export-to-language/package.json | 16 +- packages/compass-field-store/package.json | 6 +- packages/compass-find-in-page/package.json | 6 +- packages/compass-generative-ai/package.json | 16 +- packages/compass-global-writes/package.json | 16 +- packages/compass-import-export/package.json | 22 +- packages/compass-indexes/package.json | 28 +- packages/compass-intercom/package.json | 6 +- packages/compass-logging/package.json | 4 +- .../package.json | 4 +- .../compass-preferences-model/package.json | 8 +- packages/compass-query-bar/package.json | 28 +- .../package.json | 22 +- .../compass-schema-validation/package.json | 26 +- packages/compass-schema/package.json | 22 +- packages/compass-serverstats/package.json | 12 +- packages/compass-settings/package.json | 14 +- packages/compass-shell/package.json | 18 +- packages/compass-sidebar/package.json | 30 +- packages/compass-telemetry/package.json | 6 +- packages/compass-user-data/package.json | 6 +- packages/compass-utils/package.json | 2 +- packages/compass-web/package.json | 54 +- packages/compass-welcome/package.json | 14 +- packages/compass-workspaces/package.json | 16 +- packages/compass/package.json | 80 +- packages/connection-form/package.json | 10 +- packages/connection-info/package.json | 4 +- packages/connection-storage/package.json | 16 +- packages/data-service/package.json | 6 +- packages/database-model/package.json | 6 +- .../databases-collections-list/package.json | 14 +- packages/databases-collections/package.json | 28 +- packages/hadron-build/package.json | 2 +- packages/hadron-ipc/package.json | 2 +- packages/instance-model/package.json | 8 +- packages/my-queries-storage/package.json | 6 +- scripts/package.json | 2 +- 53 files changed, 1140 insertions(+), 1140 deletions(-) diff --git a/configs/webpack-config-compass/package.json b/configs/webpack-config-compass/package.json index 2c9d6cac679..92b19817966 100644 --- a/configs/webpack-config-compass/package.json +++ b/configs/webpack-config-compass/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.4.5", + "version": "1.4.6", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" diff --git a/package-lock.json b/package-lock.json index 599183a7731..0077fab16fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -497,7 +497,7 @@ }, "configs/webpack-config-compass": { "name": "@mongodb-js/webpack-config-compass", - "version": "1.4.5", + "version": "1.4.6", "license": "SSPL", "dependencies": { "@babel/core": "^7.21.4", @@ -43014,22 +43014,22 @@ }, "packages/atlas-service": { "name": "@mongodb-js/atlas-service", - "version": "0.31.0", + "version": "0.31.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-user-data": "^0.3.9", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-user-data": "^0.3.10", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/devtools-connect": "^3.3.1", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/oidc-plugin": "^1.1.1", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -43120,12 +43120,12 @@ }, "packages/collection-model": { "name": "mongodb-collection-model", - "version": "5.23.6", + "version": "5.23.7", "license": "SSPL", "dependencies": { "ampersand-collection": "^2.0.2", "ampersand-model": "^8.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2" }, "devDependencies": { @@ -43155,56 +43155,56 @@ "devDependencies": { "@electron/rebuild": "^3.7.0", "@electron/remote": "^2.1.2", - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-aggregations": "^9.47.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connection-import-export": "^0.41.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-databases-collections": "^1.44.0", - "@mongodb-js/compass-explain-plan": "^6.45.0", - "@mongodb-js/compass-export-to-language": "^9.21.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-find-in-page": "^4.32.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-global-writes": "^1.4.0", - "@mongodb-js/compass-import-export": "^7.44.0", - "@mongodb-js/compass-indexes": "^5.44.0", - "@mongodb-js/compass-intercom": "^0.13.2", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.45.0", - "@mongodb-js/compass-schema": "^6.46.0", - "@mongodb-js/compass-schema-validation": "^6.45.0", - "@mongodb-js/compass-serverstats": "^16.44.0", - "@mongodb-js/compass-settings": "^0.43.0", - "@mongodb-js/compass-shell": "^3.44.0", - "@mongodb-js/compass-sidebar": "^5.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-welcome": "^0.43.0", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-info": "^0.9.2", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-aggregations": "^9.48.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connection-import-export": "^0.42.0", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-databases-collections": "^1.45.0", + "@mongodb-js/compass-explain-plan": "^6.46.0", + "@mongodb-js/compass-export-to-language": "^9.22.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-find-in-page": "^4.32.1", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-global-writes": "^1.5.0", + "@mongodb-js/compass-import-export": "^7.45.0", + "@mongodb-js/compass-indexes": "^5.45.0", + "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-saved-aggregations-queries": "^1.46.0", + "@mongodb-js/compass-schema": "^6.47.0", + "@mongodb-js/compass-schema-validation": "^6.46.0", + "@mongodb-js/compass-serverstats": "^16.45.0", + "@mongodb-js/compass-settings": "^0.44.0", + "@mongodb-js/compass-shell": "^3.45.0", + "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-welcome": "^0.44.0", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-info": "^0.9.3", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/get-os-info": "^0.3.24", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-downloader": "^0.3.5", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/sbom-tools": "^0.7.0", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.5", + "@mongodb-js/webpack-config-compass": "^1.4.6", "@segment/analytics-node": "^1.1.4", "ampersand-view": "^9.0.0", "chai": "^4.3.4", "chalk": "^4.1.2", "clean-stack": "^2.0.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -43216,8 +43216,8 @@ "ensure-error": "^3.0.1", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-build": "^25.5.13", - "hadron-ipc": "^3.2.24", + "hadron-build": "^25.5.14", + "hadron-ipc": "^3.2.25", "local-links": "^1.4.0", "make-fetch-happen": "^10.2.1", "marky": "^1.2.1", @@ -43225,8 +43225,8 @@ "mongodb-build-info": "^1.7.2", "mongodb-cloud-info": "^2.1.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-data-service": "^22.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-log-writer": "^1.4.2", "mongodb-ns": "^2.4.2", "react": "^17.0.2", @@ -43246,7 +43246,7 @@ }, "packages/compass-aggregations": { "name": "@mongodb-js/compass-aggregations", - "version": "9.47.0", + "version": "9.48.0", "license": "SSPL", "dependencies": { "@babel/generator": "^7.19.5", @@ -43255,34 +43255,34 @@ "@dnd-kit/core": "^6.0.7", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-type-checker": "^7.2.3", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6", - "mongodb-database-model": "^2.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7", + "mongodb-database-model": "^2.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", @@ -43347,17 +43347,17 @@ }, "packages/compass-app-stores": { "name": "@mongodb-js/compass-app-stores", - "version": "7.31.0", + "version": "7.32.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/connection-info": "^0.9.3", "hadron-app-registry": "^9.2.7", - "mongodb-collection-model": "^5.23.6", - "mongodb-database-model": "^2.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-database-model": "^2.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, @@ -43411,20 +43411,20 @@ }, "packages/compass-collection": { "name": "@mongodb-js/compass-collection", - "version": "4.44.0", + "version": "4.45.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/mongodb-constants": "^0.10.2", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", - "mongodb-collection-model": "^5.23.6", + "mongodb-collection-model": "^5.23.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -43485,7 +43485,7 @@ }, "packages/compass-components": { "name": "@mongodb-js/compass-components", - "version": "1.31.0", + "version": "1.31.1", "license": "SSPL", "dependencies": { "@dnd-kit/core": "^6.0.7", @@ -43694,14 +43694,14 @@ }, "packages/compass-connection-import-export": { "name": "@mongodb-js/compass-connection-import-export", - "version": "0.41.0", + "version": "0.42.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/connection-storage": "^0.22.3", - "compass-preferences-model": "^2.29.2", - "hadron-ipc": "^3.2.24", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/connection-storage": "^0.22.4", + "compass-preferences-model": "^2.29.3", + "hadron-ipc": "^3.2.25", "react": "^17.0.2" }, "devDependencies": { @@ -43756,24 +43756,24 @@ }, "packages/compass-connections": { "name": "@mongodb-js/compass-connections", - "version": "1.45.0", + "version": "1.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.2", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", + "@mongodb-js/connection-storage": "^0.22.4", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", @@ -43805,15 +43805,15 @@ }, "packages/compass-connections-navigation": { "name": "@mongodb-js/compass-connections-navigation", - "version": "1.44.0", + "version": "1.45.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", + "compass-preferences-model": "^2.29.3", "mongodb-build-info": "^1.7.2", "react": "^17.0.2", "react-virtualized-auto-sizer": "^1.0.6", @@ -43900,33 +43900,33 @@ }, "packages/compass-crud": { "name": "@mongodb-js/compass-crud", - "version": "13.45.0", + "version": "13.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/explain-plan-helper": "^1.2.4", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", "@mongodb-js/shell-bson-parser": "^1.1.2", "ag-grid-community": "^20.2.0", "ag-grid-react": "^20.2.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-type-checker": "^7.2.3", "jsondiffpatch": "^0.5.0", "lodash": "^4.17.21", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", @@ -43952,7 +43952,7 @@ "enzyme": "^3.11.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^8.1.1", @@ -44004,11 +44004,11 @@ } }, "packages/compass-e2e-tests": { - "version": "1.27.4", + "version": "1.27.5", "devDependencies": { "@electron/rebuild": "^3.7.0", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/oidc-mock-provider": "^0.9.3", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -44022,7 +44022,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -44030,7 +44030,7 @@ "electron-to-chromium": "^1.5.49", "eslint": "^7.25.0", "glob": "^10.2.5", - "hadron-build": "^25.5.13", + "hadron-build": "^25.5.14", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.9.0", @@ -44410,7 +44410,7 @@ }, "packages/compass-editor": { "name": "@mongodb-js/compass-editor", - "version": "0.32.0", + "version": "0.33.0", "license": "SSPL", "dependencies": { "@codemirror/autocomplete": "^6.17.0", @@ -44422,7 +44422,7 @@ "@codemirror/state": "^6.1.4", "@codemirror/view": "^6.7.1", "@lezer/highlight": "^1.2.0", - "@mongodb-js/compass-components": "^1.31.0", + "@mongodb-js/compass-components": "^1.31.1", "@mongodb-js/mongodb-constants": "^0.10.0", "mongodb-query-parser": "^4.2.3", "polished": "^4.2.2", @@ -44476,17 +44476,17 @@ }, "packages/compass-explain-plan": { "name": "@mongodb-js/compass-explain-plan", - "version": "6.45.0", + "version": "6.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/explain-plan-helper": "^1.2.4", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "d3": "^3.5.17", "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", @@ -44555,18 +44555,18 @@ }, "packages/compass-export-to-language": { "name": "@mongodb-js/compass-export-to-language", - "version": "9.21.0", + "version": "9.22.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.2", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson-transpilers": "^3.0.10", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", @@ -44618,11 +44618,11 @@ }, "packages/compass-field-store": { "name": "@mongodb-js/compass-field-store", - "version": "9.20.0", + "version": "9.21.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-schema": "^12.2.0", @@ -44681,12 +44681,12 @@ }, "packages/compass-find-in-page": { "name": "@mongodb-js/compass-find-in-page", - "version": "4.32.0", + "version": "4.32.1", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", + "@mongodb-js/compass-components": "^1.31.1", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", @@ -44747,23 +44747,23 @@ }, "packages/compass-generative-ai": { "name": "@mongodb-js/compass-generative-ai", - "version": "0.25.0", + "version": "0.26.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-intercom": "^0.13.2", - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-logging": "^1.4.10", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "mongodb": "^6.9.0", "mongodb-schema": "^12.2.0", "react": "^17.0.2" }, "devDependencies": { - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -44850,16 +44850,16 @@ }, "packages/compass-global-writes": { "name": "@mongodb-js/compass-global-writes", - "version": "1.4.0", + "version": "1.5.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-ns": "^2.4.2", @@ -45044,27 +45044,27 @@ }, "packages/compass-import-export": { "name": "@mongodb-js/compass-import-export", - "version": "7.44.0", + "version": "7.45.0", "license": "SSPL", "dependencies": { "@electron/remote": "^2.1.2", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-workspaces": "^0.27.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "debug": "^4.3.4", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", @@ -45138,28 +45138,28 @@ }, "packages/compass-indexes": { "name": "@mongodb-js/compass-indexes", - "version": "5.44.0", + "version": "5.45.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", @@ -45268,11 +45268,11 @@ }, "packages/compass-intercom": { "name": "@mongodb-js/compass-intercom", - "version": "0.13.2", + "version": "0.13.3", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", - "compass-preferences-model": "^2.29.2" + "@mongodb-js/compass-logging": "^1.4.10", + "compass-preferences-model": "^2.29.3" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -45375,12 +45375,12 @@ }, "packages/compass-logging": { "name": "@mongodb-js/compass-logging", - "version": "1.4.9", + "version": "1.4.10", "license": "SSPL", "dependencies": { "debug": "^4.3.4", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "is-electron-renderer": "^2.0.1", "mongodb-log-writer": "^1.4.2", "react": "^17.0.2" @@ -45433,10 +45433,10 @@ }, "packages/compass-maybe-protect-connection-string": { "name": "@mongodb-js/compass-maybe-protect-connection-string", - "version": "0.27.2", + "version": "0.27.3", "license": "SSPL", "dependencies": { - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "mongodb-connection-string-url": "^3.0.1" }, "devDependencies": { @@ -45486,15 +45486,15 @@ } }, "packages/compass-preferences-model": { - "version": "2.29.2", + "version": "2.29.3", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-user-data": "^0.3.9", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-user-data": "^0.3.10", "@mongodb-js/devtools-proxy-support": "^0.4.1", "bson": "^6.8.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "react": "^17.0.2", @@ -45552,27 +45552,27 @@ }, "packages/compass-query-bar": { "name": "@mongodb-js/compass-query-bar", - "version": "8.46.0", + "version": "8.47.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-query-util": "^2.2.9", @@ -45630,20 +45630,20 @@ }, "packages/compass-saved-aggregations-queries": { "name": "@mongodb-js/compass-saved-aggregations-queries", - "version": "1.45.0", + "version": "1.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", + "@mongodb-js/my-queries-storage": "^0.19.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "fuse.js": "^6.5.3", "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", @@ -45706,20 +45706,20 @@ }, "packages/compass-schema": { "name": "@mongodb-js/compass-schema", - "version": "6.46.0", + "version": "6.47.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/reflux-state-mixin": "^1.0.7", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "d3": "^3.5.17", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", @@ -45740,7 +45740,7 @@ "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", @@ -45764,20 +45764,20 @@ }, "packages/compass-schema-validation": { "name": "@mongodb-js/compass-schema-validation", - "version": "6.45.0", + "version": "6.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", @@ -45803,9 +45803,9 @@ "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^8.1.1", @@ -45841,14 +45841,14 @@ }, "packages/compass-serverstats": { "name": "@mongodb-js/compass-serverstats", - "version": "16.44.0", + "version": "16.45.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", @@ -45890,16 +45890,16 @@ }, "packages/compass-settings": { "name": "@mongodb-js/compass-settings", - "version": "0.43.0", + "version": "0.44.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-logging": "^1.4.9", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-logging": "^1.4.10", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", @@ -45959,21 +45959,21 @@ }, "packages/compass-shell": { "name": "@mongodb-js/compass-shell", - "version": "3.44.0", + "version": "3.45.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-user-data": "^0.3.9", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-user-data": "^0.3.10", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongosh/browser-repl": "^2.3.2", "@mongosh/logging": "^2.3.2", "@mongosh/node-runtime-worker-thread": "^2.3.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -46029,25 +46029,25 @@ }, "packages/compass-sidebar": { "name": "@mongodb-js/compass-sidebar", - "version": "5.45.0", + "version": "5.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connection-import-export": "^0.41.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-connections-navigation": "^1.44.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.2", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connection-import-export": "^0.42.0", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections-navigation": "^1.45.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -46071,7 +46071,7 @@ "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "nyc": "^15.1.0", "prettier": "^2.7.1", "react-dom": "^17.0.2", @@ -46109,12 +46109,12 @@ }, "packages/compass-telemetry": { "name": "@mongodb-js/compass-telemetry", - "version": "1.2.2", + "version": "1.2.3", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-logging": "^1.4.10", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "react": "^17.0.2" }, "devDependencies": { @@ -46270,11 +46270,11 @@ }, "packages/compass-user-data": { "name": "@mongodb-js/compass-user-data", - "version": "0.3.9", + "version": "0.3.10", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-utils": "^0.6.13", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-utils": "^0.6.14", "write-file-atomic": "^5.0.1", "zod": "^3.22.3" }, @@ -46350,7 +46350,7 @@ }, "packages/compass-utils": { "name": "@mongodb-js/compass-utils", - "version": "0.6.13", + "version": "0.6.14", "license": "SSPL", "dependencies": { "@electron/remote": "^2.1.2", @@ -46404,39 +46404,39 @@ }, "packages/compass-web": { "name": "@mongodb-js/compass-web", - "version": "0.10.0", + "version": "0.10.1", "license": "SSPL", "devDependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-aggregations": "^9.47.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-databases-collections": "^1.44.0", - "@mongodb-js/compass-explain-plan": "^6.45.0", - "@mongodb-js/compass-export-to-language": "^9.21.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-global-writes": "^1.4.0", - "@mongodb-js/compass-indexes": "^5.44.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-schema": "^6.46.0", - "@mongodb-js/compass-schema-validation": "^6.45.0", - "@mongodb-js/compass-sidebar": "^5.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-welcome": "^0.43.0", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-aggregations": "^9.48.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-databases-collections": "^1.45.0", + "@mongodb-js/compass-explain-plan": "^6.46.0", + "@mongodb-js/compass-export-to-language": "^9.22.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-global-writes": "^1.5.0", + "@mongodb-js/compass-indexes": "^5.45.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-schema": "^6.47.0", + "@mongodb-js/compass-schema-validation": "^6.46.0", + "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-welcome": "^0.44.0", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.5", + "@mongodb-js/webpack-config-compass": "^1.4.6", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", "@types/express-http-proxy": "^1.6.6", @@ -46448,7 +46448,7 @@ "bson": "^6.2.0", "buffer": "^6.0.3", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "crypto-browserify": "^3.12.0", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -46464,7 +46464,7 @@ "mocha": "^10.2.0", "mongodb": "^6.9.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "os-browserify": "^0.3.0", @@ -46669,15 +46669,15 @@ }, "packages/compass-welcome": { "name": "@mongodb-js/compass-welcome", - "version": "0.43.0", + "version": "0.44.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "redux": "^4.2.1", @@ -46735,19 +46735,19 @@ }, "packages/compass-workspaces": { "name": "@mongodb-js/compass-workspaces", - "version": "0.26.0", + "version": "0.27.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "mongodb-collection-model": "^5.23.6", - "mongodb-database-model": "^2.23.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-database-model": "^2.23.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -46915,18 +46915,18 @@ }, "packages/connection-form": { "name": "@mongodb-js/connection-form", - "version": "1.43.0", + "version": "1.44.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/shell-bson-parser": "^1.1.2", "lodash": "^4.17.21", "mongodb": "^6.9.0", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-query-parser": "^4.2.3", "react": "^17.0.2" }, @@ -46982,13 +46982,13 @@ }, "packages/connection-info": { "name": "@mongodb-js/connection-info", - "version": "0.9.2", + "version": "0.9.3", "license": "SSPL", "dependencies": { "lodash": "^4.17.21", "mongodb": "^6.9.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6" + "mongodb-data-service": "^22.23.7" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -47108,19 +47108,19 @@ }, "packages/connection-storage": { "name": "@mongodb-js/connection-storage", - "version": "0.22.3", + "version": "0.22.4", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-user-data": "^0.3.9", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-user-data": "^0.3.10", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/connection-info": "^0.9.3", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "keytar": "^7.9.0", "lodash": "^4.17.21", "mongodb-connection-string-url": "^3.0.1", @@ -47173,11 +47173,11 @@ }, "packages/data-service": { "name": "mongodb-data-service", - "version": "22.23.6", + "version": "22.23.7", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-utils": "^0.6.13", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/devtools-connect": "^3.3.1", "@mongodb-js/devtools-proxy-support": "^0.4.1", "bson": "^6.8.0", @@ -47358,13 +47358,13 @@ }, "packages/database-model": { "name": "mongodb-database-model", - "version": "2.23.6", + "version": "2.23.7", "license": "SSPL", "dependencies": { "ampersand-collection": "^2.0.2", "ampersand-model": "^8.0.1", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6" + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -47425,24 +47425,24 @@ }, "packages/databases-collections": { "name": "@mongodb-js/compass-databases-collections", - "version": "1.44.0", + "version": "1.45.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/databases-collections-list": "^1.42.0", - "@mongodb-js/my-queries-storage": "^0.18.0", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/databases-collections-list": "^1.43.0", + "@mongodb-js/my-queries-storage": "^0.19.0", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "mongodb-collection-model": "^5.23.6", - "mongodb-database-model": "^2.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-database-model": "^2.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "prop-types": "^15.7.2", @@ -47472,15 +47472,15 @@ }, "packages/databases-collections-list": { "name": "@mongodb-js/databases-collections-list", - "version": "1.42.0", + "version": "1.43.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-info": "^0.9.2", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-info": "^0.9.3", + "compass-preferences-model": "^2.29.3", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, @@ -47724,7 +47724,7 @@ } }, "packages/hadron-build": { - "version": "25.5.13", + "version": "25.5.14", "hasInstallScript": true, "license": "SSPL", "dependencies": { @@ -48601,7 +48601,7 @@ } }, "packages/hadron-ipc": { - "version": "3.2.24", + "version": "3.2.25", "license": "SSPL", "dependencies": { "debug": "^4.3.4", @@ -48672,13 +48672,13 @@ }, "packages/instance-model": { "name": "mongodb-instance-model", - "version": "12.24.6", + "version": "12.24.7", "license": "SSPL", "dependencies": { "ampersand-model": "^8.0.1", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6", - "mongodb-database-model": "^2.23.6" + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7", + "mongodb-database-model": "^2.23.7" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -48944,11 +48944,11 @@ }, "packages/my-queries-storage": { "name": "@mongodb-js/my-queries-storage", - "version": "0.18.0", + "version": "0.19.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-user-data": "^0.3.9", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-user-data": "^0.3.10", "bson": "^6.8.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2" @@ -49565,7 +49565,7 @@ }, "scripts": { "name": "@mongodb-js/compass-scripts", - "version": "0.16.24", + "version": "0.16.25", "license": "SSPL", "dependencies": { "@babel/core": "^7.24.3", @@ -54898,12 +54898,12 @@ "@mongodb-js/atlas-service": { "version": "file:packages/atlas-service", "requires": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-user-data": "^0.3.9", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-user-data": "^0.3.10", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/devtools-connect": "^3.3.1", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -54916,12 +54916,12 @@ "@types/mocha": "^9.0.0", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron": "^32.2.2", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "mocha": "^10.2.0", "nyc": "^15.1.0", @@ -54965,24 +54965,24 @@ "@dnd-kit/core": "^6.0.7", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/shell-bson-parser": "^1.1.2", "@mongodb-js/testing-library-compass": "^1.0.2", @@ -54993,7 +54993,7 @@ "@types/semver": "^7.3.9", "bson": "^6.8.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", @@ -55004,10 +55004,10 @@ "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.9.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6", - "mongodb-database-model": "^2.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7", + "mongodb-database-model": "^2.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", @@ -55051,10 +55051,10 @@ "@mongodb-js/compass-app-stores": { "version": "file:packages/compass-app-stores", "requires": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55069,9 +55069,9 @@ "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-database-model": "^2.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-database-model": "^2.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -55106,13 +55106,13 @@ "@mongodb-js/compass-collection": { "version": "file:packages/compass-collection", "requires": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.2", @@ -55126,13 +55126,13 @@ "@types/react-dom": "^17.0.10", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.6", + "mongodb-collection-model": "^5.23.7", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -55360,9 +55360,9 @@ "@mongodb-js/compass-connection-import-export": { "version": "file:packages/compass-connection-import-export", "requires": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55374,11 +55374,11 @@ "@types/react": "^17.0.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "mocha": "^10.2.0", "nyc": "^15.1.0", @@ -55415,14 +55415,14 @@ "@mongodb-js/compass-connections": { "version": "file:packages/compass-connections", "requires": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.2", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55436,7 +55436,7 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -55445,7 +55445,7 @@ "mocha": "^10.2.0", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "nyc": "^15.1.0", "prettier": "^2.7.1", "react": "^17.0.2", @@ -55484,11 +55484,11 @@ "@mongodb-js/compass-connections-navigation": { "version": "file:packages/compass-connections-navigation", "requires": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55503,7 +55503,7 @@ "@types/react-window": "^1.8.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -55545,21 +55545,21 @@ "@mongodb-js/compass-crud": { "version": "file:packages/compass-crud", "requires": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/reflux-state-mixin": "^1.0.7", "@mongodb-js/shell-bson-parser": "^1.1.2", @@ -55572,7 +55572,7 @@ "bson": "^6.8.0", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", @@ -55584,8 +55584,8 @@ "jsondiffpatch": "^0.5.0", "lodash": "^4.17.21", "mocha": "^10.2.0", - "mongodb-data-service": "^22.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-data-service": "^22.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", @@ -55609,32 +55609,32 @@ "@mongodb-js/compass-databases-collections": { "version": "file:packages/databases-collections", "requires": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/databases-collections-list": "^1.42.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/databases-collections-list": "^1.43.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "enzyme": "^3.11.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-database-model": "^2.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-database-model": "^2.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "nyc": "^15.1.0", @@ -55683,7 +55683,7 @@ "@codemirror/state": "^6.1.4", "@codemirror/view": "^6.7.1", "@lezer/highlight": "^1.2.0", - "@mongodb-js/compass-components": "^1.31.0", + "@mongodb-js/compass-components": "^1.31.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.0", @@ -55733,12 +55733,12 @@ "@mongodb-js/compass-explain-plan": { "version": "file:packages/compass-explain-plan", "requires": { - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -55749,7 +55749,7 @@ "@types/d3-flextree": "^2.1.0", "@types/d3-hierarchy": "^3.1.2", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "d3": "^3.5.17", "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", @@ -55803,12 +55803,12 @@ "@mongodb-js/compass-export-to-language": { "version": "file:packages/compass-export-to-language", "requires": { - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.2", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55817,7 +55817,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "bson-transpilers": "^3.0.10", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -55859,8 +55859,8 @@ "@mongodb-js/compass-field-store": { "version": "file:packages/compass-field-store", "requires": { - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55913,7 +55913,7 @@ "@mongodb-js/compass-find-in-page": { "version": "file:packages/compass-find-in-page", "requires": { - "@mongodb-js/compass-components": "^1.31.0", + "@mongodb-js/compass-components": "^1.31.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55931,7 +55931,7 @@ "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "mocha": "^10.2.0", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -55972,12 +55972,12 @@ "@mongodb-js/compass-generative-ai": { "version": "file:packages/compass-generative-ai", "requires": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-intercom": "^0.13.2", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55990,7 +55990,7 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -56054,13 +56054,13 @@ "@mongodb-js/compass-global-writes": { "version": "file:packages/compass-global-writes", "requires": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -56172,14 +56172,14 @@ "version": "file:packages/compass-import-export", "requires": { "@electron/remote": "^2.1.2", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -56198,7 +56198,7 @@ "bson": "^6.8.0", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^32.2.2", @@ -56206,11 +56206,11 @@ "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.9.0", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", @@ -56256,16 +56256,16 @@ "@mongodb-js/compass-indexes": { "version": "file:packages/compass-indexes", "requires": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.0", @@ -56276,7 +56276,7 @@ "@types/numeral": "^2.0.5", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", @@ -56285,8 +56285,8 @@ "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.9.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", @@ -56334,7 +56334,7 @@ "@mongodb-js/compass-intercom": { "version": "file:packages/compass-intercom", "requires": { - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -56343,7 +56343,7 @@ "@types/mocha": "^9.0.0", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", @@ -56450,7 +56450,7 @@ "depcheck": "^1.4.1", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "is-electron-renderer": "^2.0.1", "mocha": "^10.2.0", "mongodb-log-writer": "^1.4.2", @@ -56496,7 +56496,7 @@ "@types/mocha": "^9.0.0", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", @@ -56535,26 +56535,26 @@ "@mongodb-js/compass-query-bar": { "version": "file:packages/compass-query-bar", "requires": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", @@ -56563,7 +56563,7 @@ "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.9.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-query-util": "^2.2.9", @@ -56604,17 +56604,17 @@ "@mongodb-js/compass-saved-aggregations-queries": { "version": "file:packages/compass-saved-aggregations-queries", "requires": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", @@ -56626,7 +56626,7 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -56673,17 +56673,17 @@ "@mongodb-js/compass-schema": { "version": "file:packages/compass-schema", "requires": { - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/reflux-state-mixin": "^1.0.7", "@mongodb-js/testing-library-compass": "^1.0.2", @@ -56696,7 +56696,7 @@ "@types/react-dom": "^17.0.10", "bson": "^6.8.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "d3": "^3.5.17", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", @@ -56749,15 +56749,15 @@ "@mongodb-js/compass-schema-validation": { "version": "file:packages/compass-schema-validation", "requires": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -56766,18 +56766,18 @@ "@types/enzyme": "^3.10.14", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "nyc": "^15.1.0", @@ -56986,11 +56986,11 @@ "@mongodb-js/compass-serverstats": { "version": "file:packages/compass-serverstats", "requires": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57033,10 +57033,10 @@ "@mongodb-js/compass-settings": { "version": "file:packages/compass-settings", "requires": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57049,12 +57049,12 @@ "@types/react-dom": "^17.0.10", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "mocha": "^10.2.0", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -57095,13 +57095,13 @@ "@mongodb-js/compass-shell": { "version": "file:packages/compass-shell", "requires": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-user-data": "^0.3.9", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-user-data": "^0.3.10", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57113,7 +57113,7 @@ "@types/enzyme": "^3.10.14", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", @@ -57156,17 +57156,17 @@ "@mongodb-js/compass-sidebar": { "version": "file:packages/compass-sidebar", "requires": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connection-import-export": "^0.41.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-connections-navigation": "^1.44.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.2", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connection-import-export": "^0.42.0", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections-navigation": "^1.45.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57179,7 +57179,7 @@ "@types/react-dom": "^17.0.10", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -57187,8 +57187,8 @@ "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.9.0", - "mongodb-data-service": "^22.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-data-service": "^22.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -57229,7 +57229,7 @@ "@mongodb-js/compass-telemetry": { "version": "file:packages/compass-telemetry", "requires": { - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57242,7 +57242,7 @@ "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "mocha": "^10.2.0", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -57377,8 +57377,8 @@ "@mongodb-js/compass-user-data": { "version": "file:packages/compass-user-data", "requires": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-utils": "^0.6.13", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57486,36 +57486,36 @@ "@mongodb-js/compass-web": { "version": "file:packages/compass-web", "requires": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-aggregations": "^9.47.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-databases-collections": "^1.44.0", - "@mongodb-js/compass-explain-plan": "^6.45.0", - "@mongodb-js/compass-export-to-language": "^9.21.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-global-writes": "^1.4.0", - "@mongodb-js/compass-indexes": "^5.44.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-schema": "^6.46.0", - "@mongodb-js/compass-schema-validation": "^6.45.0", - "@mongodb-js/compass-sidebar": "^5.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-welcome": "^0.43.0", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-aggregations": "^9.48.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-databases-collections": "^1.45.0", + "@mongodb-js/compass-explain-plan": "^6.46.0", + "@mongodb-js/compass-export-to-language": "^9.22.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-global-writes": "^1.5.0", + "@mongodb-js/compass-indexes": "^5.45.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-schema": "^6.47.0", + "@mongodb-js/compass-schema-validation": "^6.46.0", + "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-welcome": "^0.44.0", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.5", + "@mongodb-js/webpack-config-compass": "^1.4.6", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", "@types/express-http-proxy": "^1.6.6", @@ -57527,7 +57527,7 @@ "bson": "^6.2.0", "buffer": "^6.0.3", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "crypto-browserify": "^3.12.0", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -57543,7 +57543,7 @@ "mocha": "^10.2.0", "mongodb": "^6.9.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "os-browserify": "^0.3.0", @@ -57719,11 +57719,11 @@ "@mongodb-js/compass-welcome": { "version": "file:packages/compass-welcome", "requires": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57735,7 +57735,7 @@ "@types/react": "^17.0.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -57778,10 +57778,10 @@ "@mongodb-js/compass-workspaces": { "version": "file:packages/compass-workspaces", "requires": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57795,15 +57795,15 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-database-model": "^2.23.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-database-model": "^2.23.7", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -57920,9 +57920,9 @@ "@mongodb-js/connection-form": { "version": "file:packages/connection-form", "requires": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57944,7 +57944,7 @@ "mongodb": "^6.9.0", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-query-parser": "^4.2.3", "nyc": "^15.1.0", "prettier": "^2.7.1", @@ -57996,7 +57996,7 @@ "mocha": "^10.2.0", "mongodb": "^6.9.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "nyc": "^15.1.0", "prettier": "^2.7.1", "sinon": "^17.0.1", @@ -58106,11 +58106,11 @@ "@mongodb-js/connection-storage": { "version": "file:packages/connection-storage", "requires": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-user-data": "^0.3.9", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-user-data": "^0.3.10", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -58120,12 +58120,12 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "electron": "^32.2.2", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "keytar": "^7.9.0", "lodash": "^4.17.21", "mocha": "^10.2.0", @@ -58162,11 +58162,11 @@ "@mongodb-js/databases-collections-list": { "version": "file:packages/databases-collections-list", "requires": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -58178,7 +58178,7 @@ "@types/react": "^17.0.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -58799,8 +58799,8 @@ "@mongodb-js/my-queries-storage": { "version": "file:packages/my-queries-storage", "requires": { - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-user-data": "^0.3.9", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-user-data": "^0.3.10", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -66696,7 +66696,7 @@ "requires": { "@electron/rebuild": "^3.7.0", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/oidc-mock-provider": "^0.9.3", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -66710,7 +66710,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -66718,7 +66718,7 @@ "electron-to-chromium": "^1.5.49", "eslint": "^7.25.0", "glob": "^10.2.5", - "hadron-build": "^25.5.13", + "hadron-build": "^25.5.14", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.9.0", @@ -66998,8 +66998,8 @@ "compass-preferences-model": { "version": "file:packages/compass-preferences-model", "requires": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-user-data": "^0.3.9", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-user-data": "^0.3.10", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -67012,7 +67012,7 @@ "depcheck": "^1.4.1", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "mocha": "^10.2.0", @@ -78518,7 +78518,7 @@ "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "xvfb-maybe": "^0.2.1" } @@ -78528,50 +78528,50 @@ "requires": { "@electron/rebuild": "^3.7.0", "@electron/remote": "^2.1.2", - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-aggregations": "^9.47.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connection-import-export": "^0.41.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-databases-collections": "^1.44.0", - "@mongodb-js/compass-explain-plan": "^6.45.0", - "@mongodb-js/compass-export-to-language": "^9.21.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-find-in-page": "^4.32.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-global-writes": "^1.4.0", - "@mongodb-js/compass-import-export": "^7.44.0", - "@mongodb-js/compass-indexes": "^5.44.0", - "@mongodb-js/compass-intercom": "^0.13.2", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.45.0", - "@mongodb-js/compass-schema": "^6.46.0", - "@mongodb-js/compass-schema-validation": "^6.45.0", - "@mongodb-js/compass-serverstats": "^16.44.0", - "@mongodb-js/compass-settings": "^0.43.0", - "@mongodb-js/compass-shell": "^3.44.0", - "@mongodb-js/compass-sidebar": "^5.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-welcome": "^0.43.0", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-info": "^0.9.2", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-aggregations": "^9.48.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connection-import-export": "^0.42.0", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-databases-collections": "^1.45.0", + "@mongodb-js/compass-explain-plan": "^6.46.0", + "@mongodb-js/compass-export-to-language": "^9.22.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-find-in-page": "^4.32.1", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-global-writes": "^1.5.0", + "@mongodb-js/compass-import-export": "^7.45.0", + "@mongodb-js/compass-indexes": "^5.45.0", + "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-saved-aggregations-queries": "^1.46.0", + "@mongodb-js/compass-schema": "^6.47.0", + "@mongodb-js/compass-schema-validation": "^6.46.0", + "@mongodb-js/compass-serverstats": "^16.45.0", + "@mongodb-js/compass-settings": "^0.44.0", + "@mongodb-js/compass-shell": "^3.45.0", + "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-welcome": "^0.44.0", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-info": "^0.9.3", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/get-os-info": "^0.3.24", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-downloader": "^0.3.5", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/sbom-tools": "^0.7.0", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.5", + "@mongodb-js/webpack-config-compass": "^1.4.6", "@mongosh/node-runtime-worker-thread": "^2.3.2", "@segment/analytics-node": "^1.1.4", "ampersand-view": "^9.0.0", @@ -78579,7 +78579,7 @@ "chalk": "^4.1.2", "clean-stack": "^2.0.0", "clipboard": "^2.0.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -78591,8 +78591,8 @@ "ensure-error": "^3.0.1", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-build": "^25.5.13", - "hadron-ipc": "^3.2.24", + "hadron-build": "^25.5.14", + "hadron-ipc": "^3.2.25", "kerberos": "^2.2.0", "keytar": "^7.9.0", "local-links": "^1.4.0", @@ -78604,8 +78604,8 @@ "mongodb-client-encryption": "^6.1.0", "mongodb-cloud-info": "^2.1.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-data-service": "^22.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-log-writer": "^1.4.2", "mongodb-ns": "^2.4.2", "os-dns-native": "^1.2.1", @@ -78670,9 +78670,9 @@ "mongodb-data-service": { "version": "file:packages/data-service", "requires": { - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/compass-utils": "^0.6.13", + "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/devtools-connect": "^3.3.1", "@mongodb-js/devtools-docker-test-envs": "^1.3.3", "@mongodb-js/devtools-proxy-support": "^0.4.1", @@ -78825,8 +78825,8 @@ "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6" + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7" } }, "mongodb-download-url": { @@ -78860,9 +78860,9 @@ "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6", - "mongodb-database-model": "^2.23.6" + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7", + "mongodb-database-model": "^2.23.7" } }, "mongodb-js-cli": { diff --git a/packages/atlas-service/package.json b/packages/atlas-service/package.json index 8166484a3ed..f9d605b2e18 100644 --- a/packages/atlas-service/package.json +++ b/packages/atlas-service/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.31.0", + "version": "0.31.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -73,19 +73,19 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-user-data": "^0.3.9", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-user-data": "^0.3.10", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/devtools-connect": "^3.3.1", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/oidc-plugin": "^1.1.1", "hadron-app-registry": "^9.2.7", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "electron": "^32.2.2", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/collection-model/package.json b/packages/collection-model/package.json index 42c5c11a3e7..8dceec2ff92 100644 --- a/packages/collection-model/package.json +++ b/packages/collection-model/package.json @@ -2,7 +2,7 @@ "name": "mongodb-collection-model", "description": "MongoDB collection model", "author": "Lucas Hrabovsky ", - "version": "5.23.6", + "version": "5.23.7", "bugs": { "url": "https://jira.mongodb.org/projects/COMPASS/issues", "email": "compass@mongodb.com" @@ -31,7 +31,7 @@ "dependencies": { "ampersand-collection": "^2.0.2", "ampersand-model": "^8.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2" }, "devDependencies": { diff --git a/packages/compass-aggregations/package.json b/packages/compass-aggregations/package.json index 9fc31abeffb..bf08f2af9f2 100644 --- a/packages/compass-aggregations/package.json +++ b/packages/compass-aggregations/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-aggregations", "description": "Compass Aggregation Pipeline Builder", "private": true, - "version": "9.47.0", + "version": "9.48.0", "main": "dist/index.js", "compass:main": "src/index.ts", "types": "dist/index.d.ts", @@ -61,34 +61,34 @@ "@dnd-kit/core": "^6.0.7", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-type-checker": "^7.2.3", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6", - "mongodb-database-model": "^2.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7", + "mongodb-database-model": "^2.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", diff --git a/packages/compass-app-stores/package.json b/packages/compass-app-stores/package.json index 2c6b9c3470a..50d5194a72e 100644 --- a/packages/compass-app-stores/package.json +++ b/packages/compass-app-stores/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "7.31.0", + "version": "7.32.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -73,14 +73,14 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/connection-info": "^0.9.3", "hadron-app-registry": "^9.2.7", - "mongodb-collection-model": "^5.23.6", - "mongodb-database-model": "^2.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-database-model": "^2.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, diff --git a/packages/compass-collection/package.json b/packages/compass-collection/package.json index 33a597ff289..66c86f83967 100644 --- a/packages/compass-collection/package.json +++ b/packages/compass-collection/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "4.44.0", + "version": "4.45.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,17 +48,17 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/mongodb-constants": "^0.10.2", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", - "mongodb-collection-model": "^5.23.6", + "mongodb-collection-model": "^5.23.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/compass-components/package.json b/packages/compass-components/package.json index 1066802b726..aee1cf502fb 100644 --- a/packages/compass-components/package.json +++ b/packages/compass-components/package.json @@ -1,6 +1,6 @@ { "name": "@mongodb-js/compass-components", - "version": "1.31.0", + "version": "1.31.1", "description": "React Components used in Compass", "license": "SSPL", "main": "lib/index.js", diff --git a/packages/compass-connection-import-export/package.json b/packages/compass-connection-import-export/package.json index 3a38a4f87a2..6c7c4a41929 100644 --- a/packages/compass-connection-import-export/package.json +++ b/packages/compass-connection-import-export/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.41.0", + "version": "0.42.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,11 +51,11 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/connection-storage": "^0.22.3", - "compass-preferences-model": "^2.29.2", - "hadron-ipc": "^3.2.24", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/connection-storage": "^0.22.4", + "compass-preferences-model": "^2.29.3", + "hadron-ipc": "^3.2.25", "react": "^17.0.2" }, "devDependencies": { diff --git a/packages/compass-connections-navigation/package.json b/packages/compass-connections-navigation/package.json index d1f7129104b..a9cc0dbcf27 100644 --- a/packages/compass-connections-navigation/package.json +++ b/packages/compass-connections-navigation/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.44.0", + "version": "1.45.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,12 +49,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/connection-info": "^0.9.2", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/compass-workspaces": "^0.26.0", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/connection-info": "^0.9.3", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/compass-workspaces": "^0.27.0", + "compass-preferences-model": "^2.29.3", "mongodb-build-info": "^1.7.2", "react": "^17.0.2", "react-virtualized-auto-sizer": "^1.0.6", diff --git a/packages/compass-connections/package.json b/packages/compass-connections/package.json index 8789d0cb781..816415b16f6 100644 --- a/packages/compass-connections/package.json +++ b/packages/compass-connections/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.45.0", + "version": "1.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,21 +51,21 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.2", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", + "@mongodb-js/connection-storage": "^0.22.4", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", diff --git a/packages/compass-crud/package.json b/packages/compass-crud/package.json index 824fe06f1ef..584ea3d4ee6 100644 --- a/packages/compass-crud/package.json +++ b/packages/compass-crud/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "13.45.0", + "version": "13.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -64,37 +64,37 @@ "enzyme": "^3.11.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^8.1.1", "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongodb-js/explain-plan-helper": "^1.2.4", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", "@mongodb-js/shell-bson-parser": "^1.1.2", "ag-grid-community": "^20.2.0", "ag-grid-react": "^20.2.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-type-checker": "^7.2.3", "jsondiffpatch": "^0.5.0", "lodash": "^4.17.21", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "numeral": "^2.0.6", diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index cae7fa21011..0f2dc3ecc2e 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "compass-e2e-tests", - "version": "1.27.4", + "version": "1.27.5", "private": true, "description": "E2E test suite for Compass app that follows smoke tests / feature testing matrix", "scripts": { @@ -33,7 +33,7 @@ "devDependencies": { "@electron/rebuild": "^3.7.0", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/oidc-mock-provider": "^0.9.3", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -47,7 +47,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -55,7 +55,7 @@ "electron-to-chromium": "^1.5.49", "eslint": "^7.25.0", "glob": "^10.2.5", - "hadron-build": "^25.5.13", + "hadron-build": "^25.5.14", "lodash": "^4.17.21", "mocha": "^10.2.0", "mongodb": "^6.9.0", diff --git a/packages/compass-editor/package.json b/packages/compass-editor/package.json index 85c2ef7f6c9..de0626507a9 100644 --- a/packages/compass-editor/package.json +++ b/packages/compass-editor/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.32.0", + "version": "0.33.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -72,7 +72,7 @@ "@codemirror/state": "^6.1.4", "@codemirror/view": "^6.7.1", "@lezer/highlight": "^1.2.0", - "@mongodb-js/compass-components": "^1.31.0", + "@mongodb-js/compass-components": "^1.31.1", "@mongodb-js/mongodb-constants": "^0.10.0", "mongodb-query-parser": "^4.2.3", "polished": "^4.2.2", diff --git a/packages/compass-explain-plan/package.json b/packages/compass-explain-plan/package.json index d6c35ca71f4..cd63f27892a 100644 --- a/packages/compass-explain-plan/package.json +++ b/packages/compass-explain-plan/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.45.0", + "version": "6.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -69,14 +69,14 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/explain-plan-helper": "^1.2.4", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "d3": "^3.5.17", "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", diff --git a/packages/compass-export-to-language/package.json b/packages/compass-export-to-language/package.json index 42813e88814..a7d43b0120a 100644 --- a/packages/compass-export-to-language/package.json +++ b/packages/compass-export-to-language/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.21.0", + "version": "9.22.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,15 +48,15 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.2", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson-transpilers": "^3.0.10", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", diff --git a/packages/compass-field-store/package.json b/packages/compass-field-store/package.json index 07fbabb3a34..d4f79b27c09 100644 --- a/packages/compass-field-store/package.json +++ b/packages/compass-field-store/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.20.0", + "version": "9.21.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -69,8 +69,8 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-schema": "^12.2.0", diff --git a/packages/compass-find-in-page/package.json b/packages/compass-find-in-page/package.json index d75ec0a3d65..e5daf114476 100644 --- a/packages/compass-find-in-page/package.json +++ b/packages/compass-find-in-page/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "4.32.0", + "version": "4.32.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -73,9 +73,9 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", + "@mongodb-js/compass-components": "^1.31.1", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", diff --git a/packages/compass-generative-ai/package.json b/packages/compass-generative-ai/package.json index 3f4ffbf2ba8..361f69ede9a 100644 --- a/packages/compass-generative-ai/package.json +++ b/packages/compass-generative-ai/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.25.0", + "version": "0.26.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,20 +52,20 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-intercom": "^0.13.2", - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-logging": "^1.4.10", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "mongodb": "^6.9.0", "mongodb-schema": "^12.2.0", "react": "^17.0.2" }, "devDependencies": { - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", diff --git a/packages/compass-global-writes/package.json b/packages/compass-global-writes/package.json index 4d49e7b09ec..af36b76a655 100644 --- a/packages/compass-global-writes/package.json +++ b/packages/compass-global-writes/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.4.0", + "version": "1.5.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,15 +49,15 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "@mongodb-js/compass-field-store": "^9.20.0", + "@mongodb-js/compass-field-store": "^9.21.0", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/compass-import-export/package.json b/packages/compass-import-export/package.json index 02d06604bba..451d23efe2e 100644 --- a/packages/compass-import-export/package.json +++ b/packages/compass-import-export/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "7.44.0", + "version": "7.45.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,23 +49,23 @@ }, "dependencies": { "@electron/remote": "^2.1.2", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-workspaces": "^0.27.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "debug": "^4.3.4", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-schema": "^12.2.0", diff --git a/packages/compass-indexes/package.json b/packages/compass-indexes/package.json index 5c4d6f498d5..947f13e48f2 100644 --- a/packages/compass-indexes/package.json +++ b/packages/compass-indexes/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "5.44.0", + "version": "5.45.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -67,25 +67,25 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7", "mongodb-query-parser": "^4.2.3", "mongodb-ns": "^2.4.2", "numeral": "^2.0.6", diff --git a/packages/compass-intercom/package.json b/packages/compass-intercom/package.json index 9ddeb6f49d8..6ce34b33f61 100644 --- a/packages/compass-intercom/package.json +++ b/packages/compass-intercom/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.13.2", + "version": "0.13.3", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -67,7 +67,7 @@ "typescript": "^5.0.4" }, "dependencies": { - "compass-preferences-model": "^2.29.2", - "@mongodb-js/compass-logging": "^1.4.9" + "compass-preferences-model": "^2.29.3", + "@mongodb-js/compass-logging": "^1.4.10" } } diff --git a/packages/compass-logging/package.json b/packages/compass-logging/package.json index aa312c6dc2e..0e222d7e978 100644 --- a/packages/compass-logging/package.json +++ b/packages/compass-logging/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.4.9", + "version": "1.4.10", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -53,7 +53,7 @@ "dependencies": { "debug": "^4.3.4", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "is-electron-renderer": "^2.0.1", "mongodb-log-writer": "^1.4.2", "react": "^17.0.2" diff --git a/packages/compass-maybe-protect-connection-string/package.json b/packages/compass-maybe-protect-connection-string/package.json index c5d55987d1c..69fe9af1e55 100644 --- a/packages/compass-maybe-protect-connection-string/package.json +++ b/packages/compass-maybe-protect-connection-string/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.27.2", + "version": "0.27.3", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,7 +50,7 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "mongodb-connection-string-url": "^3.0.1" }, "devDependencies": { diff --git a/packages/compass-preferences-model/package.json b/packages/compass-preferences-model/package.json index 4827c4195c9..1c15db7e596 100644 --- a/packages/compass-preferences-model/package.json +++ b/packages/compass-preferences-model/package.json @@ -2,7 +2,7 @@ "name": "compass-preferences-model", "description": "Compass preferences model", "author": "Lucas Hrabovsky ", - "version": "2.29.2", + "version": "2.29.3", "bugs": { "url": "https://jira.mongodb.org/projects/COMPASS/issues", "email": "compass@mongodb.com" @@ -49,12 +49,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-user-data": "^0.3.9", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-user-data": "^0.3.10", "@mongodb-js/devtools-proxy-support": "^0.4.1", "bson": "^6.8.0", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "js-yaml": "^4.1.0", "lodash": "^4.17.21", "react": "^17.0.2", diff --git a/packages/compass-query-bar/package.json b/packages/compass-query-bar/package.json index f6aa1907e77..288269b18e3 100644 --- a/packages/compass-query-bar/package.json +++ b/packages/compass-query-bar/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "8.46.0", + "version": "8.47.0", "homepage": "https://github.com/mongodb-js/compass", "license": "SSPL", "bugs": { @@ -66,24 +66,24 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "mongodb-query-util": "^2.2.9", diff --git a/packages/compass-saved-aggregations-queries/package.json b/packages/compass-saved-aggregations-queries/package.json index 0fa574d269b..a7676570927 100644 --- a/packages/compass-saved-aggregations-queries/package.json +++ b/packages/compass-saved-aggregations-queries/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.45.0", + "version": "1.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,17 +48,17 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", + "@mongodb-js/my-queries-storage": "^0.19.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "fuse.js": "^6.5.3", "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", diff --git a/packages/compass-schema-validation/package.json b/packages/compass-schema-validation/package.json index bf327eead79..098a1c9cf62 100644 --- a/packages/compass-schema-validation/package.json +++ b/packages/compass-schema-validation/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.45.0", + "version": "6.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -60,26 +60,26 @@ "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "mocha": "^10.2.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "nyc": "^15.1.0", "react-dom": "^17.0.2", "sinon": "^8.1.1", "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", diff --git a/packages/compass-schema/package.json b/packages/compass-schema/package.json index a9d40c5c4f2..d53d380b0c5 100644 --- a/packages/compass-schema/package.json +++ b/packages/compass-schema/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.46.0", + "version": "6.47.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,7 +50,7 @@ "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", @@ -72,16 +72,16 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/connection-storage": "^0.22.4", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "d3": "^3.5.17", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", diff --git a/packages/compass-serverstats/package.json b/packages/compass-serverstats/package.json index c273a02fba4..58d476667aa 100644 --- a/packages/compass-serverstats/package.json +++ b/packages/compass-serverstats/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-serverstats", "description": "Compass Real Time", "private": true, - "version": "16.44.0", + "version": "16.45.0", "main": "dist/index.js", "compass:main": "src/index.ts", "exports": { @@ -30,11 +30,11 @@ }, "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", diff --git a/packages/compass-settings/package.json b/packages/compass-settings/package.json index d89210adc9f..d3aae846e19 100644 --- a/packages/compass-settings/package.json +++ b/packages/compass-settings/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.43.0", + "version": "0.44.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,13 +49,13 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-logging": "^1.4.9", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-logging": "^1.4.10", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "react": "^17.0.2", "react-redux": "^8.1.3", "redux": "^4.2.1", diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index 71b9306e6c2..f66cbde84f2 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "3.44.0", + "version": "3.45.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,18 +49,18 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-user-data": "^0.3.9", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-workspaces": "^0.26.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-user-data": "^0.3.10", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-workspaces": "^0.27.0", "@mongosh/browser-repl": "^2.3.2", "@mongosh/logging": "^2.3.2", "@mongosh/node-runtime-worker-thread": "^2.3.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/compass-sidebar/package.json b/packages/compass-sidebar/package.json index 87902dc3673..c9febd4e904 100644 --- a/packages/compass-sidebar/package.json +++ b/packages/compass-sidebar/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "5.45.0", + "version": "5.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,22 +48,22 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connection-import-export": "^0.41.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-connections-navigation": "^1.44.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.2", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-form": "^1.43.0", - "@mongodb-js/connection-info": "^0.9.2", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connection-import-export": "^0.42.0", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections-navigation": "^1.45.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-form": "^1.44.0", + "@mongodb-js/connection-info": "^0.9.3", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", - "mongodb-instance-model": "^12.24.6", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -87,7 +87,7 @@ "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "nyc": "^15.1.0", "prettier": "^2.7.1", "react-dom": "^17.0.2", diff --git a/packages/compass-telemetry/package.json b/packages/compass-telemetry/package.json index 68b21c9ce9a..94db150d116 100644 --- a/packages/compass-telemetry/package.json +++ b/packages/compass-telemetry/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.2.2", + "version": "1.2.3", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,9 +52,9 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-logging": "^1.4.10", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "react": "^17.0.2" }, "devDependencies": { diff --git a/packages/compass-user-data/package.json b/packages/compass-user-data/package.json index 94236f814ce..fee3ff33dca 100644 --- a/packages/compass-user-data/package.json +++ b/packages/compass-user-data/package.json @@ -12,7 +12,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.3.9", + "version": "0.3.10", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,8 +49,8 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-utils": "^0.6.13", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-utils": "^0.6.14", "write-file-atomic": "^5.0.1", "zod": "^3.22.3" }, diff --git a/packages/compass-utils/package.json b/packages/compass-utils/package.json index 0f5a3813421..5635eb09258 100644 --- a/packages/compass-utils/package.json +++ b/packages/compass-utils/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.6.13", + "version": "0.6.14", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index b08b9bf6ffb..958df68a552 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.10.0", + "version": "0.10.1", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -63,36 +63,36 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-aggregations": "^9.47.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-databases-collections": "^1.44.0", - "@mongodb-js/compass-explain-plan": "^6.45.0", - "@mongodb-js/compass-export-to-language": "^9.21.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-global-writes": "^1.4.0", - "@mongodb-js/compass-indexes": "^5.44.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-schema": "^6.46.0", - "@mongodb-js/compass-schema-validation": "^6.45.0", - "@mongodb-js/compass-sidebar": "^5.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-welcome": "^0.43.0", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-aggregations": "^9.48.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-databases-collections": "^1.45.0", + "@mongodb-js/compass-explain-plan": "^6.46.0", + "@mongodb-js/compass-export-to-language": "^9.22.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-global-writes": "^1.5.0", + "@mongodb-js/compass-indexes": "^5.45.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-schema": "^6.47.0", + "@mongodb-js/compass-schema-validation": "^6.46.0", + "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-welcome": "^0.44.0", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.5", + "@mongodb-js/webpack-config-compass": "^1.4.6", "@types/chai": "^4.2.21", "@types/chai-dom": "^0.0.10", "@types/express-http-proxy": "^1.6.6", @@ -104,7 +104,7 @@ "bson": "^6.2.0", "buffer": "^6.0.3", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "crypto-browserify": "^3.12.0", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -120,7 +120,7 @@ "mocha": "^10.2.0", "mongodb": "^6.9.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-ns": "^2.4.2", "nyc": "^15.1.0", "os-browserify": "^0.3.0", diff --git a/packages/compass-welcome/package.json b/packages/compass-welcome/package.json index 7d09adb834d..219fb9e4913 100644 --- a/packages/compass-welcome/package.json +++ b/packages/compass-welcome/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.43.0", + "version": "0.44.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,12 +49,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "redux": "^4.2.1", diff --git a/packages/compass-workspaces/package.json b/packages/compass-workspaces/package.json index ee3f8f2b0fd..ecf179779af 100644 --- a/packages/compass-workspaces/package.json +++ b/packages/compass-workspaces/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.26.0", + "version": "0.27.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,16 +51,16 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-logging": "^1.4.9", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-logging": "^1.4.10", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "mongodb-collection-model": "^5.23.6", - "mongodb-database-model": "^2.23.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-database-model": "^2.23.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/compass/package.json b/packages/compass/package.json index 779dbabd789..e84747b9ae8 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -190,56 +190,56 @@ "devDependencies": { "@electron/rebuild": "^3.7.0", "@electron/remote": "^2.1.2", - "@mongodb-js/atlas-service": "^0.31.0", - "@mongodb-js/compass-aggregations": "^9.47.0", - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-collection": "^4.44.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connection-import-export": "^0.41.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-crud": "^13.45.0", - "@mongodb-js/compass-databases-collections": "^1.44.0", - "@mongodb-js/compass-explain-plan": "^6.45.0", - "@mongodb-js/compass-export-to-language": "^9.21.0", - "@mongodb-js/compass-field-store": "^9.20.0", - "@mongodb-js/compass-find-in-page": "^4.32.0", - "@mongodb-js/compass-generative-ai": "^0.25.0", - "@mongodb-js/compass-global-writes": "^1.4.0", - "@mongodb-js/compass-import-export": "^7.44.0", - "@mongodb-js/compass-indexes": "^5.44.0", - "@mongodb-js/compass-intercom": "^0.13.2", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-query-bar": "^8.46.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.45.0", - "@mongodb-js/compass-schema": "^6.46.0", - "@mongodb-js/compass-schema-validation": "^6.45.0", - "@mongodb-js/compass-serverstats": "^16.44.0", - "@mongodb-js/compass-settings": "^0.43.0", - "@mongodb-js/compass-shell": "^3.44.0", - "@mongodb-js/compass-sidebar": "^5.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/compass-welcome": "^0.43.0", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-info": "^0.9.2", - "@mongodb-js/connection-storage": "^0.22.3", + "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/compass-aggregations": "^9.48.0", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connection-import-export": "^0.42.0", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-databases-collections": "^1.45.0", + "@mongodb-js/compass-explain-plan": "^6.46.0", + "@mongodb-js/compass-export-to-language": "^9.22.0", + "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-find-in-page": "^4.32.1", + "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-global-writes": "^1.5.0", + "@mongodb-js/compass-import-export": "^7.45.0", + "@mongodb-js/compass-indexes": "^5.45.0", + "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-saved-aggregations-queries": "^1.46.0", + "@mongodb-js/compass-schema": "^6.47.0", + "@mongodb-js/compass-schema-validation": "^6.46.0", + "@mongodb-js/compass-serverstats": "^16.45.0", + "@mongodb-js/compass-settings": "^0.44.0", + "@mongodb-js/compass-shell": "^3.45.0", + "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/compass-welcome": "^0.44.0", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-info": "^0.9.3", + "@mongodb-js/connection-storage": "^0.22.4", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/get-os-info": "^0.3.24", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-downloader": "^0.3.5", - "@mongodb-js/my-queries-storage": "^0.18.0", + "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/prettier-config-compass": "^1.0.2", "@mongodb-js/sbom-tools": "^0.7.0", "@mongodb-js/testing-library-compass": "^1.0.2", "@mongodb-js/tsconfig-compass": "^1.0.5", - "@mongodb-js/webpack-config-compass": "^1.4.5", + "@mongodb-js/webpack-config-compass": "^1.4.6", "@segment/analytics-node": "^1.1.4", "ampersand-view": "^9.0.0", "chai": "^4.3.4", "chalk": "^4.1.2", "clean-stack": "^2.0.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -251,8 +251,8 @@ "ensure-error": "^3.0.1", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", - "hadron-build": "^25.5.13", - "hadron-ipc": "^3.2.24", + "hadron-build": "^25.5.14", + "hadron-ipc": "^3.2.25", "local-links": "^1.4.0", "make-fetch-happen": "^10.2.1", "marky": "^1.2.1", @@ -260,8 +260,8 @@ "mongodb-build-info": "^1.7.2", "mongodb-cloud-info": "^2.1.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-data-service": "^22.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-log-writer": "^1.4.2", "mongodb-ns": "^2.4.2", "react": "^17.0.2", diff --git a/packages/connection-form/package.json b/packages/connection-form/package.json index 323ade6c0c6..133c2bccf08 100644 --- a/packages/connection-form/package.json +++ b/packages/connection-form/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.43.0", + "version": "1.44.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,15 +48,15 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/shell-bson-parser": "^1.1.2", "lodash": "^4.17.21", "mongodb": "^6.9.0", "mongodb-build-info": "^1.7.2", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6", + "mongodb-data-service": "^22.23.7", "mongodb-query-parser": "^4.2.3", "react": "^17.0.2" }, diff --git a/packages/connection-info/package.json b/packages/connection-info/package.json index a15cfe2d8f3..b8336dafb28 100644 --- a/packages/connection-info/package.json +++ b/packages/connection-info/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.9.2", + "version": "0.9.3", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -54,7 +54,7 @@ "lodash": "^4.17.21", "mongodb": "^6.9.0", "mongodb-connection-string-url": "^3.0.1", - "mongodb-data-service": "^22.23.6" + "mongodb-data-service": "^22.23.7" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", diff --git a/packages/connection-storage/package.json b/packages/connection-storage/package.json index 1c65e8f9696..0cc46e1cf95 100644 --- a/packages/connection-storage/package.json +++ b/packages/connection-storage/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.22.3", + "version": "0.22.4", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -56,16 +56,16 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-user-data": "^0.3.9", - "@mongodb-js/compass-utils": "^0.6.13", - "@mongodb-js/connection-info": "^0.9.2", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-user-data": "^0.3.10", + "@mongodb-js/compass-utils": "^0.6.14", + "@mongodb-js/connection-info": "^0.9.3", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.2", + "compass-preferences-model": "^2.29.3", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", - "hadron-ipc": "^3.2.24", + "hadron-ipc": "^3.2.25", "keytar": "^7.9.0", "lodash": "^4.17.21", "mongodb-connection-string-url": "^3.0.1", diff --git a/packages/data-service/package.json b/packages/data-service/package.json index 6c33a016f01..af228ec8e8b 100644 --- a/packages/data-service/package.json +++ b/packages/data-service/package.json @@ -7,7 +7,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "22.23.6", + "version": "22.23.7", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,8 +51,8 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-utils": "^0.6.13", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/devtools-connect": "^3.3.1", "@mongodb-js/devtools-proxy-support": "^0.4.1", "bson": "^6.8.0", diff --git a/packages/database-model/package.json b/packages/database-model/package.json index d524fe2713d..3a587223969 100644 --- a/packages/database-model/package.json +++ b/packages/database-model/package.json @@ -2,7 +2,7 @@ "name": "mongodb-database-model", "description": "MongoDB database model", "author": "Lucas Hrabovsky ", - "version": "2.23.6", + "version": "2.23.7", "bugs": { "url": "https://jira.mongodb.org/projects/COMPASS/issues", "email": "compass@mongodb.com" @@ -30,8 +30,8 @@ "dependencies": { "ampersand-collection": "^2.0.2", "ampersand-model": "^8.0.1", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6" + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", diff --git a/packages/databases-collections-list/package.json b/packages/databases-collections-list/package.json index 6f07a4d0108..5b26d73f558 100644 --- a/packages/databases-collections-list/package.json +++ b/packages/databases-collections-list/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.42.0", + "version": "1.43.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,12 +48,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/connection-info": "^0.9.2", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/connection-info": "^0.9.3", + "compass-preferences-model": "^2.29.3", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, diff --git a/packages/databases-collections/package.json b/packages/databases-collections/package.json index 1c6a55eb64b..d266c0aae17 100644 --- a/packages/databases-collections/package.json +++ b/packages/databases-collections/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-databases-collections", "description": "Plugin for viewing the list of, creating, and dropping databases and collections", "private": true, - "version": "1.44.0", + "version": "1.45.0", "license": "SSPL", "homepage": "https://github.com/mongodb-js/compass", "bugs": { @@ -59,21 +59,21 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.31.0", - "@mongodb-js/compass-components": "^1.31.0", - "@mongodb-js/compass-connections": "^1.45.0", - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-logging": "^1.4.9", - "@mongodb-js/compass-telemetry": "^1.2.2", - "@mongodb-js/compass-workspaces": "^0.26.0", - "@mongodb-js/databases-collections-list": "^1.42.0", - "@mongodb-js/my-queries-storage": "^0.18.0", - "compass-preferences-model": "^2.29.2", + "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-components": "^1.31.1", + "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-telemetry": "^1.2.3", + "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/databases-collections-list": "^1.43.0", + "@mongodb-js/my-queries-storage": "^0.19.0", + "compass-preferences-model": "^2.29.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "mongodb-collection-model": "^5.23.6", - "mongodb-database-model": "^2.23.6", - "mongodb-instance-model": "^12.24.6", + "mongodb-collection-model": "^5.23.7", + "mongodb-database-model": "^2.23.7", + "mongodb-instance-model": "^12.24.7", "mongodb-ns": "^2.4.2", "mongodb-query-parser": "^4.2.3", "prop-types": "^15.7.2", diff --git a/packages/hadron-build/package.json b/packages/hadron-build/package.json index fbddd8879f7..84268157a8b 100644 --- a/packages/hadron-build/package.json +++ b/packages/hadron-build/package.json @@ -1,7 +1,7 @@ { "name": "hadron-build", "description": "Tooling for Hadron apps like Compass", - "version": "25.5.13", + "version": "25.5.14", "scripts": { "check": "npm run lint && npm run depcheck", "test": "mocha -R spec", diff --git a/packages/hadron-ipc/package.json b/packages/hadron-ipc/package.json index 570b0bf2ba6..b5205a65295 100644 --- a/packages/hadron-ipc/package.json +++ b/packages/hadron-ipc/package.json @@ -1,7 +1,7 @@ { "name": "hadron-ipc", "description": "Simplified IPC for electron apps.", - "version": "3.2.24", + "version": "3.2.25", "author": { "name": "MongoDB Inc", "email": "compass@mongodb.com" diff --git a/packages/instance-model/package.json b/packages/instance-model/package.json index 2bc195de79f..b9eaf0e9046 100644 --- a/packages/instance-model/package.json +++ b/packages/instance-model/package.json @@ -2,7 +2,7 @@ "name": "mongodb-instance-model", "description": "MongoDB instance model", "author": "Lucas Hrabovsky ", - "version": "12.24.6", + "version": "12.24.7", "bugs": { "url": "https://jira.mongodb.org/projects/COMPASS/issues", "email": "compass@mongodb.com" @@ -29,9 +29,9 @@ }, "dependencies": { "ampersand-model": "^8.0.1", - "mongodb-collection-model": "^5.23.6", - "mongodb-data-service": "^22.23.6", - "mongodb-database-model": "^2.23.6" + "mongodb-collection-model": "^5.23.7", + "mongodb-data-service": "^22.23.7", + "mongodb-database-model": "^2.23.7" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", diff --git a/packages/my-queries-storage/package.json b/packages/my-queries-storage/package.json index 1f62ea70519..316e0e98633 100644 --- a/packages/my-queries-storage/package.json +++ b/packages/my-queries-storage/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.18.0", + "version": "0.19.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -73,8 +73,8 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-editor": "^0.32.0", - "@mongodb-js/compass-user-data": "^0.3.9", + "@mongodb-js/compass-editor": "^0.33.0", + "@mongodb-js/compass-user-data": "^0.3.10", "bson": "^6.8.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2" diff --git a/scripts/package.json b/scripts/package.json index aa8fa87bd85..88265000c93 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.16.24", + "version": "0.16.25", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" From ab3ba0517320b565a7680f4313aba59242b24a52 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 09:02:28 +0000 Subject: [PATCH 31/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6457) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 18a6f8d1905..531aa2bd44e 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Wed Nov 06 2024. +This document was automatically generated on Thu Nov 07 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 27082aa8839..34533e47b83 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Nov 6, 2024 at 04:21 PM +Generated on Thu, Nov 7, 2024 at 09:02 AM ## Table of Contents From 8585db77aedc2065c71ca325c2496c441d241ca6 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Thu, 7 Nov 2024 12:41:13 +0100 Subject: [PATCH 32/81] chore(global-writes): fix subtab container styles (#6459) --- .../src/components/index.tsx | 47 +++++++++---------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/packages/compass-global-writes/src/components/index.tsx b/packages/compass-global-writes/src/components/index.tsx index 06c66095e81..902342e1ce0 100644 --- a/packages/compass-global-writes/src/components/index.tsx +++ b/packages/compass-global-writes/src/components/index.tsx @@ -18,23 +18,20 @@ import ShardingError from './states/sharding-error'; import IncompleteShardingSetup from './states/incomplete-sharding-setup'; const containerStyles = css({ - paddingLeft: spacing[400], - paddingRight: spacing[400], display: 'flex', width: '100%', - height: '100%', - maxWidth: '700px', -}); - -const workspaceContentStyles = css({ paddingTop: spacing[400], + paddingLeft: spacing[400], + paddingRight: spacing[400], + maxWidth: '700px', }); -const centeredContent = css({ +const loaderStyles = css({ display: 'flex', + alignItems: 'flex-start', justifyContent: 'center', - alignItems: 'center', - height: '100%', + width: '100%', + marginTop: spacing[1800] * 2, }); type GlobalWritesProps = { @@ -44,16 +41,8 @@ type GlobalWritesProps = { function ShardingStateView({ shardingStatus, }: { - shardingStatus: ShardingStatus; + shardingStatus: Exclude; }) { - if (shardingStatus === ShardingStatuses.NOT_READY) { - return ( -
- -
- ); - } - if ( shardingStatus === ShardingStatuses.UNSHARDED || shardingStatus === ShardingStatuses.SUBMITTING_FOR_SHARDING @@ -105,14 +94,22 @@ function ShardingStateView({ } export function GlobalWrites({ shardingStatus }: GlobalWritesProps) { + if (shardingStatus === ShardingStatuses.NOT_READY) { + return ( +
+ +
+ ); + } + return ( -
- - + + +
- - -
+
+ + ); } export default connect((state: RootState) => ({ From 1aabedc50d7d727ef7c3261fd8b702aef1e6eb1c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 11:47:43 +0000 Subject: [PATCH 33/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6461) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 34533e47b83..0bf010c114a 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Nov 7, 2024 at 09:02 AM +Generated on Thu, Nov 7, 2024 at 11:47 AM ## Table of Contents From 636a9c48a3ef8b36d3459071b421ccd0989fe128 Mon Sep 17 00:00:00 2001 From: djechlin-mongodb <132293929+djechlin-mongodb@users.noreply.github.com> Date: Thu, 7 Nov 2024 12:52:56 -0500 Subject: [PATCH 34/81] fix(compass-global-writes): try/catch and show error when global-writes fetch fails COMPASS-8333 (#6408) * changes * remove throw error * start tests * tests * Update packages/compass-global-writes/src/store/reducer.ts Co-authored-by: Paula Stachova * reformat --------- Co-authored-by: Paula Stachova --- .../src/store/index.spec.ts | 25 +++++++++- .../src/store/reducer.ts | 50 ++++++++++++++++--- 2 files changed, 67 insertions(+), 8 deletions(-) diff --git a/packages/compass-global-writes/src/store/index.spec.ts b/packages/compass-global-writes/src/store/index.spec.ts index b6e905ac54b..74a1ac056ec 100644 --- a/packages/compass-global-writes/src/store/index.spec.ts +++ b/packages/compass-global-writes/src/store/index.spec.ts @@ -72,6 +72,7 @@ function createStore({ hasShardingError = () => false, hasShardKey = () => false, failsOnShardingRequest = () => false, + failsOnShardZoneRequest = () => false, authenticatedFetchStub, }: | { @@ -79,6 +80,7 @@ function createStore({ hasShardingError?: () => boolean; hasShardKey?: () => boolean | AtlasShardKey; failsOnShardingRequest?: () => boolean; + failsOnShardZoneRequest?: () => boolean; authenticatedFetchStub?: never; } | { @@ -86,11 +88,12 @@ function createStore({ hasShardingError?: never; hasShardKey?: () => boolean | ShardKey; failsOnShardingRequest?: never; + failsOnShardZoneRequest?: () => never; authenticatedFetchStub?: () => void; } = {}): GlobalWritesStore { const atlasService = { authenticatedFetch: (uri: string) => { - if (uri.endsWith(`/geoSharding`) && failsOnShardingRequest()) { + if (uri.endsWith('/geoSharding') && failsOnShardingRequest()) { return Promise.reject(new Error('Failed to shard')); } @@ -112,6 +115,13 @@ function createStore({ }); } + if ( + /geoSharding.*newFormLocationMapping/.test(uri) && + failsOnShardZoneRequest() + ) { + return Promise.reject(new Error('Failed to fetch shard zones')); + } + return createAuthFetchResponse({}); }, automationAgentRequest: (_meta: unknown, type: string) => ({ @@ -266,6 +276,7 @@ describe('GlobalWritesStore Store', function () { const store = createStore({ isNamespaceManaged: () => true, hasShardKey: Sinon.fake(() => mockShardKey), + failsOnShardZoneRequest: () => true, }); await waitFor(() => { expect(store.getState().status).to.equal('SHARDING'); @@ -313,6 +324,18 @@ describe('GlobalWritesStore Store', function () { }); }); + it('valid shard key -> failsOnShardZoneRequest', async function () { + const store = createStore({ + isNamespaceManaged: () => true, + hasShardKey: () => true, + failsOnShardZoneRequest: () => true, + }); + await waitFor(() => { + expect(store.getState().status).to.equal('SHARD_KEY_CORRECT'); + expect(store.getState().managedNamespace).to.equal(managedNamespace); + }); + }); + it('incomplete setup -> sharding -> shard key correct', async function () { // initial state -> incomplete shardingSetup clock = sinon.useFakeTimers({ diff --git a/packages/compass-global-writes/src/store/reducer.ts b/packages/compass-global-writes/src/store/reducer.ts index 2c2279f44f3..44a655f79d3 100644 --- a/packages/compass-global-writes/src/store/reducer.ts +++ b/packages/compass-global-writes/src/store/reducer.ts @@ -30,6 +30,7 @@ enum GlobalWritesActionTypes { NamespaceShardKeyFetched = 'global-writes/NamespaceShardKeyFetched', ShardZonesFetched = 'global-writes/ShardZonesFetched', + ShardZonesFetchedError = 'global-writes/ShardZonesFetchedError', SubmittingForShardingStarted = 'global-writes/SubmittingForShardingStarted', SubmittingForShardingFinished = 'global-writes/SubmittingForShardingFinished', @@ -67,6 +68,10 @@ type ShardZonesFetchedAction = { shardZones: ShardZoneData[]; }; +type ShardZonesFetchedErrorAction = { + type: GlobalWritesActionTypes.ShardZonesFetchedError; +}; + type SubmittingForShardingStartedAction = { type: GlobalWritesActionTypes.SubmittingForShardingStarted; }; @@ -350,6 +355,18 @@ const reducer: Reducer = (state = initialState, action) => { }; } + if ( + isAction( + action, + GlobalWritesActionTypes.ShardZonesFetchedError + ) + ) { + return { + ...state, + shardZones: [], + }; + } + if ( isAction( action, @@ -880,18 +897,37 @@ export const fetchNamespaceShardKey = (): GlobalWritesThunkAction< export const fetchShardingZones = (): GlobalWritesThunkAction< Promise, - ShardZonesFetchedAction + ShardZonesFetchedAction | ShardZonesFetchedErrorAction > => { - return async (dispatch, getState, { atlasGlobalWritesService }) => { + return async ( + dispatch, + getState, + { atlasGlobalWritesService, connectionInfoRef } + ) => { const { shardZones } = getState(); if (shardZones.length > 0) { return; } - const shardingZones = await atlasGlobalWritesService.getShardingZones(); - dispatch({ - type: GlobalWritesActionTypes.ShardZonesFetched, - shardZones: shardingZones, - }); + try { + const shardingZones = await atlasGlobalWritesService.getShardingZones(); + dispatch({ + type: GlobalWritesActionTypes.ShardZonesFetched, + shardZones: shardingZones, + }); + } catch (error) { + dispatch({ + type: GlobalWritesActionTypes.ShardZonesFetchedError, + }); + openToast( + `global-writes-fetch-sharding-zones-error-${connectionInfoRef.current.id}`, + { + title: `Failed to fetch sharding zones: ${(error as Error).message}`, + dismissible: true, + timeout: 5000, + variant: 'important', + } + ); + } }; }; From d3ae8951cd40bd0e361891846d4644b06240481c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 17:59:27 +0000 Subject: [PATCH 35/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6462) Update report Co-authored-by: djechlin-mongodb <132293929+djechlin-mongodb@users.noreply.github.com> --- AUTHORS | 1 + docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index 761597a732d..8ce2627f986 100644 --- a/AUTHORS +++ b/AUTHORS @@ -94,3 +94,4 @@ Kræn Hansen Ruchitha Rajaghatta <77162985+ruchitharajaghatta@users.noreply.github.com> syn-zhu <167124917+syn-zhu@users.noreply.github.com> Nikola Irinchev +djechlin-mongodb <132293929+djechlin-mongodb@users.noreply.github.com> diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 0bf010c114a..275b4c37ace 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Nov 7, 2024 at 11:47 AM +Generated on Thu, Nov 7, 2024 at 05:59 PM ## Table of Contents From 5bc3fe9231968f1f4036845d581b49f750f287da Mon Sep 17 00:00:00 2001 From: Ruchitha Rajaghatta <77162985+ruchitharajaghatta@users.noreply.github.com> Date: Thu, 7 Nov 2024 18:52:29 -0500 Subject: [PATCH 36/81] feat: Add gen ai org and project settings to Compass for CompassWeb usage COMPASS-8377 (#6434) * limit increased and message improved for PROMPT_TOO_LONG * updating prompt_too_long error msg * updating test * initial ticket changes * entrypoint changed * prefProps for atlas org and atlas proj prefs * function name change * fixing base values * changing ui default back * comment nit * moving prop defs so defaults get set as part of userpreferences * updating tests * updating tests --- .../src/compass-web-preferences-access.ts | 75 +++++++++++++++++++ .../src/preferences-schema.ts | 74 +++++++++++++++++- .../src/preferences.spec.ts | 8 +- .../compass-preferences-model/src/provider.ts | 1 + packages/compass-web/src/entrypoint.tsx | 5 +- 5 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 packages/compass-preferences-model/src/compass-web-preferences-access.ts diff --git a/packages/compass-preferences-model/src/compass-web-preferences-access.ts b/packages/compass-preferences-model/src/compass-web-preferences-access.ts new file mode 100644 index 00000000000..abad3f2446d --- /dev/null +++ b/packages/compass-preferences-model/src/compass-web-preferences-access.ts @@ -0,0 +1,75 @@ +import { createNoopLogger } from '@mongodb-js/compass-logging/provider'; +import { Preferences, type PreferencesAccess } from './preferences'; +import type { UserPreferences } from './preferences-schema'; +import { type AllPreferences } from './preferences-schema'; +import { InMemoryStorage } from './preferences-in-memory-storage'; +import { getActiveUser } from './utils'; + +export class CompassWebPreferencesAccess implements PreferencesAccess { + private _preferences: Preferences; + constructor(preferencesOverrides?: Partial) { + this._preferences = new Preferences({ + logger: createNoopLogger(), + preferencesStorage: new InMemoryStorage(preferencesOverrides), + }); + } + + savePreferences(_attributes: Partial) { + // Only allow saving the optInDataExplorerGenAIFeatures preference. + if ( + Object.keys(_attributes).length === 1 && + 'optInDataExplorerGenAIFeatures' in _attributes + ) { + return Promise.resolve(this._preferences.savePreferences(_attributes)); + } + return Promise.resolve(this._preferences.getPreferences()); + } + + refreshPreferences() { + return Promise.resolve(this._preferences.getPreferences()); + } + + getPreferences() { + return this._preferences.getPreferences(); + } + + ensureDefaultConfigurableUserPreferences() { + return this._preferences.ensureDefaultConfigurableUserPreferences(); + } + + getConfigurableUserPreferences() { + return Promise.resolve(this._preferences.getConfigurableUserPreferences()); + } + + getPreferenceStates() { + return Promise.resolve(this._preferences.getPreferenceStates()); + } + + onPreferenceValueChanged( + preferenceName: K, + callback: (value: AllPreferences[K]) => void + ) { + return ( + this._preferences?.onPreferencesChanged?.( + (preferences: Partial) => { + if (Object.keys(preferences).includes(preferenceName)) { + return callback((preferences as AllPreferences)[preferenceName]); + } + } + ) ?? + (() => { + /* no fallback */ + }) + ); + } + + createSandbox() { + return Promise.resolve( + new CompassWebPreferencesAccess(this.getPreferences()) + ); + } + + getPreferencesUser() { + return getActiveUser(this); + } +} diff --git a/packages/compass-preferences-model/src/preferences-schema.ts b/packages/compass-preferences-model/src/preferences-schema.ts index 60b5d900484..53d49eb2052 100644 --- a/packages/compass-preferences-model/src/preferences-schema.ts +++ b/packages/compass-preferences-model/src/preferences-schema.ts @@ -56,6 +56,7 @@ export type UserConfigurablePreferences = PermanentFeatureFlags & | 'web-sandbox-atlas-local' | 'web-sandbox-atlas-dev' | 'web-sandbox-atlas'; + optInDataExplorerGenAIFeatures: boolean; // Features that are enabled by default in Compass, but are disabled in Data // Explorer enableExplainPlan: boolean; @@ -92,7 +93,9 @@ export type InternalUserPreferences = { // UserPreferences contains all preferences stored to disk. export type UserPreferences = UserConfigurablePreferences & - InternalUserPreferences; + InternalUserPreferences & + AtlasOrgPreferences & + AtlasProjectPreferences; export type CliOnlyPreferences = { exportConnections?: string; @@ -210,6 +213,15 @@ export type StoredPreferencesValidator = ReturnType< export type StoredPreferences = z.output; +export type AtlasProjectPreferences = { + enableGenAIFeaturesAtlasProject: boolean; + enableGenAISampleDocumentPassingOnAtlasProject: boolean; +}; + +export type AtlasOrgPreferences = { + enableGenAIFeaturesAtlasOrg: boolean; +}; + // Preference definitions const featureFlagsProps: Required<{ [K in keyof FeatureFlags]: PreferenceDefinition; @@ -461,7 +473,10 @@ export const storedUserPreferencesProps: Required<{ short: 'Enable AI Features', long: 'Allow the use of AI features in Compass which make requests to 3rd party services.', }, - deriveValue: deriveNetworkTrafficOptionState('enableGenAIFeatures'), + deriveValue: deriveValueFromOtherPreferencesAsLogicalAnd( + 'enableGenAIFeatures', + ['enableGenAIFeaturesAtlasOrg', 'networkTraffic'] + ), validator: z.boolean().default(true), type: 'boolean', }, @@ -679,6 +694,16 @@ export const storedUserPreferencesProps: Required<{ .default('atlas'), type: 'string', }, + optInDataExplorerGenAIFeatures: { + ui: true, + cli: false, + global: false, + description: { + short: 'User Opt-in for Data Explorer Gen AI Features', + }, + validator: z.boolean().default(true), + type: 'boolean', + }, enableAtlasSearchIndexes: { ui: true, @@ -861,6 +886,36 @@ export const storedUserPreferencesProps: Required<{ validator: z.boolean().default(false), type: 'boolean', }, + enableGenAIFeaturesAtlasProject: { + ui: false, + cli: true, + global: true, + description: { + short: 'Enable Gen AI Features on Atlas Project Level', + }, + validator: z.boolean().default(true), + type: 'boolean', + }, + enableGenAISampleDocumentPassingOnAtlasProject: { + ui: false, + cli: true, + global: true, + description: { + short: 'Enable Gen AI Sample Document Passing on Atlas Project Level', + }, + validator: z.boolean().default(true), + type: 'boolean', + }, + enableGenAIFeaturesAtlasOrg: { + ui: false, + cli: true, + global: true, + description: { + short: 'Enable Gen AI Features on Atlas Org Level', + }, + validator: z.boolean().default(true), + type: 'boolean', + }, ...allFeatureFlagsProps, }; @@ -1027,6 +1082,21 @@ function deriveNetworkTrafficOptionState( }); } +/** Helper for deriving value/state for preferences from other preferences */ +function deriveValueFromOtherPreferencesAsLogicalAnd< + K extends keyof AllPreferences +>(property: K, preferencesToDeriveFrom: K[]): DeriveValueFunction { + return (v, s) => ({ + value: v(property) && preferencesToDeriveFrom.every((p) => v(p)), + state: + s(property) ?? + (preferencesToDeriveFrom.every((p) => v(p)) + ? preferencesToDeriveFrom.map((p) => s(p)).filter(Boolean)?.[0] ?? + 'derived' + : undefined), + }); +} + /** Helper for defining how to derive value/state for feature-restricting preferences */ function deriveFeatureRestrictingOptionsState( property: K diff --git a/packages/compass-preferences-model/src/preferences.spec.ts b/packages/compass-preferences-model/src/preferences.spec.ts index c1acb216973..d8cd53a8e48 100644 --- a/packages/compass-preferences-model/src/preferences.spec.ts +++ b/packages/compass-preferences-model/src/preferences.spec.ts @@ -132,6 +132,7 @@ describe('Preferences class', function () { expect(states).to.deep.equal({ trackUsageStatistics: 'set-global', enableMaps: 'set-cli', + enableGenAIFeatures: 'derived', ...expectedReleasedFeatureFlagsStates, }); }); @@ -163,7 +164,6 @@ describe('Preferences class', function () { enableDevTools: 'set-global', networkTraffic: 'set-global', trackUsageStatistics: 'set-global', - enableGenAIFeatures: 'set-global', enableMaps: 'set-cli', enableShell: 'set-cli', readOnly: 'set-global', @@ -185,6 +185,7 @@ describe('Preferences class', function () { expect(states).to.deep.equal({ readOnly: 'set-global', + enableGenAIFeatures: 'derived', ...expectedReleasedFeatureFlagsStates, }); }); @@ -227,8 +228,8 @@ describe('Preferences class', function () { }, { networkTraffic: false, - enableGenAIFeatures: false, enableMaps: false, + enableGenAIFeatures: false, enableFeedbackPanel: false, trackUsageStatistics: false, autoUpdates: false, @@ -250,6 +251,7 @@ describe('Preferences class', function () { }, hardcoded: { networkTraffic: false, + enableGenAIFeatures: false, }, }); const result = preferences.getPreferences(); @@ -294,6 +296,7 @@ describe('Preferences class', function () { expect(mainPreferencesStates).to.deep.equal({ trackUsageStatistics: 'set-global', + enableGenAIFeatures: 'derived', enableMaps: 'set-cli', ...expectedReleasedFeatureFlagsStates, }); @@ -301,6 +304,7 @@ describe('Preferences class', function () { const sandboxPreferencesStates = sandbox.getPreferenceStates(); expect(sandboxPreferencesStates).to.deep.equal({ enableDevTools: 'derived', + enableGenAIFeatures: 'derived', trackUsageStatistics: 'set-global', enableMaps: 'set-cli', enableShell: 'derived', diff --git a/packages/compass-preferences-model/src/provider.ts b/packages/compass-preferences-model/src/provider.ts index b5f3bfc92dc..ef2fa77b65c 100644 --- a/packages/compass-preferences-model/src/provider.ts +++ b/packages/compass-preferences-model/src/provider.ts @@ -1,5 +1,6 @@ export * from './react'; export { ReadOnlyPreferenceAccess } from './read-only-preferences-access'; +export { CompassWebPreferencesAccess } from './compass-web-preferences-access'; export { useIsAIFeatureEnabled, isAIFeatureEnabled, diff --git a/packages/compass-web/src/entrypoint.tsx b/packages/compass-web/src/entrypoint.tsx index 13225a3c833..bc5b7736656 100644 --- a/packages/compass-web/src/entrypoint.tsx +++ b/packages/compass-web/src/entrypoint.tsx @@ -39,7 +39,7 @@ import { } from '@mongodb-js/compass-databases-collections'; import { PreferencesProvider, - ReadOnlyPreferenceAccess, + CompassWebPreferencesAccess, } from 'compass-preferences-model/provider'; import type { AllPreferences } from 'compass-preferences-model/provider'; import FieldStorePlugin from '@mongodb-js/compass-field-store'; @@ -262,7 +262,7 @@ const CompassWeb = ({ }); const preferencesAccess = useRef( - new ReadOnlyPreferenceAccess({ + new CompassWebPreferencesAccess({ maxTimeMS: 10_000, enableExplainPlan: true, enableAggregationBuilderRunPipeline: true, @@ -279,6 +279,7 @@ const CompassWeb = ({ enableShell: false, enableCreatingNewConnections: false, enableGlobalWrites: false, + optInDataExplorerGenAIFeatures: false, ...initialPreferences, }) ); From 75a08520bb5ba63a6d9ae2732c753ddae46d9f46 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 23:58:57 +0000 Subject: [PATCH 37/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6463) Update report Co-authored-by: ruchitharajaghatta <77162985+ruchitharajaghatta@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 275b4c37ace..45444ba8ceb 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Nov 7, 2024 at 05:59 PM +Generated on Thu, Nov 7, 2024 at 11:58 PM ## Table of Contents From f0655e0b63726268811956b33dff6e27a81f56fa Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Fri, 8 Nov 2024 14:15:12 +0100 Subject: [PATCH 38/81] fix(atlas-service): pass csrf tokens with the requests COMPASS-8490 (#6465) fix(atlas-service): pass csrf tokens with the requests --- .../atlas-service/src/atlas-service.spec.ts | 26 ++++++++++++++++++ packages/atlas-service/src/atlas-service.ts | 18 +++++++++++++ packages/compass-web/sandbox/index.tsx | 22 +++++++++++++-- .../sandbox/sandbox-atlas-sign-in.tsx | 27 ++++++++++++++----- .../compass-web/scripts/electron-proxy.js | 3 --- 5 files changed, 84 insertions(+), 12 deletions(-) diff --git a/packages/atlas-service/src/atlas-service.spec.ts b/packages/atlas-service/src/atlas-service.spec.ts index 956ee370462..b63d7a9a1d6 100644 --- a/packages/atlas-service/src/atlas-service.spec.ts +++ b/packages/atlas-service/src/atlas-service.spec.ts @@ -132,4 +132,30 @@ describe('AtlasService', function () { ); expect(getAuthHeadersFn.calledOnce).to.be.true; }); + + it('should set CSRF headers when available', async function () { + const fetchStub = sandbox.stub().resolves({ status: 200, ok: true }); + global.fetch = fetchStub; + document.head.append( + (() => { + const el = document.createElement('meta'); + el.setAttribute('name', 'csrf-token'); + el.setAttribute('content', 'token'); + return el; + })() + ); + document.head.append( + (() => { + const el = document.createElement('meta'); + el.setAttribute('name', 'CSRF-TIME'); + el.setAttribute('content', 'time'); + return el; + })() + ); + await atlasService.fetch('/foo/bar', { method: 'POST' }); + expect(fetchStub.firstCall.lastArg.headers).to.deep.eq({ + 'X-CSRF-Time': 'time', + 'X-CSRF-Token': 'token', + }); + }); }); diff --git a/packages/atlas-service/src/atlas-service.ts b/packages/atlas-service/src/atlas-service.ts index 528e4ef6de5..bdd401f7fdb 100644 --- a/packages/atlas-service/src/atlas-service.ts +++ b/packages/atlas-service/src/atlas-service.ts @@ -19,6 +19,23 @@ function normalizePath(path?: string) { return encodeURI(path); } +function getCSRFHeaders() { + return { + 'X-CSRF-Token': + document + .querySelector('meta[name="csrf-token" i]') + ?.getAttribute('content') ?? '', + 'X-CSRF-Time': + document + .querySelector('meta[name="csrf-time" i]') + ?.getAttribute('content') ?? '', + }; +} + +function shouldAddCSRFHeaders(method = 'get') { + return !/^(get|head|options|trace)$/.test(method.toLowerCase()); +} + export class AtlasService { private config: AtlasServiceConfig; constructor( @@ -60,6 +77,7 @@ export class AtlasService { ...init, headers: { ...this.options?.defaultHeaders, + ...(shouldAddCSRFHeaders(init?.method) && getCSRFHeaders()), ...init?.headers, }, }); diff --git a/packages/compass-web/sandbox/index.tsx b/packages/compass-web/sandbox/index.tsx index c539e9ad9f8..a481158c4dc 100644 --- a/packages/compass-web/sandbox/index.tsx +++ b/packages/compass-web/sandbox/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useLayoutEffect } from 'react'; import ReactDOM from 'react-dom'; import { resetGlobalCSS, css, Body } from '@mongodb-js/compass-components'; import { CompassWeb } from '../src/index'; @@ -16,9 +16,22 @@ const sandboxContainerStyles = css({ resetGlobalCSS(); +function getMetaEl(name: string) { + return ( + document.querySelector(`meta[name="${name}" i]`) ?? + (() => { + const el = document.createElement('meta'); + el.setAttribute('name', name); + document.head.prepend(el); + return el; + })() + ); +} + const App = () => { const [currentTab, updateCurrentTab] = useWorkspaceTabRouter(); - const { status, projectId } = useAtlasProxySignIn(); + const { status, projectParams } = useAtlasProxySignIn(); + const { projectId, csrfToken, csrfTime } = projectParams ?? {}; const atlasServiceSandboxBackendVariant = process.env.COMPASS_WEB_HTTP_PROXY_CLOUD_CONFIG === 'local' @@ -28,6 +41,11 @@ const App = () => { ? 'web-sandbox-atlas-dev' : 'web-sandbox-atlas'; + useLayoutEffect(() => { + getMetaEl('csrf-token').setAttribute('content', csrfToken ?? ''); + getMetaEl('csrf-time').setAttribute('content', csrfTime ?? ''); + }, [csrfToken, csrfTime]); + if (status === 'checking') { return null; } diff --git a/packages/compass-web/sandbox/sandbox-atlas-sign-in.tsx b/packages/compass-web/sandbox/sandbox-atlas-sign-in.tsx index 00b04fb64fb..f75dce93c3d 100644 --- a/packages/compass-web/sandbox/sandbox-atlas-sign-in.tsx +++ b/packages/compass-web/sandbox/sandbox-atlas-sign-in.tsx @@ -12,12 +12,18 @@ console.info( type SignInStatus = 'checking' | 'signed-in' | 'signed-out'; +type ProjectParams = { + projectId: string; + csrfToken: string; + csrfTime: string; +}; + type AtlasLoginReturnValue = | { status: 'checking' | 'signed-out'; - projectId: null; + projectParams: null; } - | { status: 'signed-in'; projectId: string }; + | { status: 'signed-in'; projectParams: ProjectParams }; const bodyContainerStyles = css({ display: 'flex', @@ -64,7 +70,9 @@ const IS_CI = export function useAtlasProxySignIn(): AtlasLoginReturnValue { const [status, setStatus] = useState('checking'); - const [projectId, setProjectId] = useState(null); + const [projectParams, setProjectParams] = useState( + null + ); const signIn = ((window as any).__signIn = useCallback(async () => { try { @@ -104,7 +112,12 @@ export function useAtlasProxySignIn(): AtlasLoginReturnValue { if (!projectId) { throw new Error('failed to get projectId'); } - setProjectId(projectId); + const { csrfToken, csrfTime } = await fetch( + `/cloud-mongodb-com/v2/${projectId}/params` + ).then((res) => { + return res.json(); + }); + setProjectParams({ projectId, csrfToken, csrfTime }); setStatus('signed-in'); if (IS_CI) { return; @@ -151,12 +164,12 @@ export function useAtlasProxySignIn(): AtlasLoginReturnValue { if (status === 'checking' || status === 'signed-out') { return { status, - projectId: null, + projectParams: null, }; } - if (status === 'signed-in' && projectId) { - return { status, projectId }; + if (status === 'signed-in' && projectParams) { + return { status, projectParams }; } throw new Error('Weird state, ask for help in Compass dev channel'); diff --git a/packages/compass-web/scripts/electron-proxy.js b/packages/compass-web/scripts/electron-proxy.js index df51a2d87bb..4b670414527 100644 --- a/packages/compass-web/scripts/electron-proxy.js +++ b/packages/compass-web/scripts/electron-proxy.js @@ -168,14 +168,11 @@ class AtlasCloudAuthenticator { } async getCloudHeaders() { - // Order is important, fetching data can update the cookies - const csrfHeaders = await this.#getCSRFHeaders(); const cookie = (await this.#getCloudSessionCookies()).join('; '); return { cookie, host: CLOUD_HOST, origin: CLOUD_ORIGIN, - ...csrfHeaders, }; } From 072e8318c0d164874b9e1901f581839b544c65f8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 13:21:50 +0000 Subject: [PATCH 39/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6466) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 531aa2bd44e..425695f46b5 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Thu Nov 07 2024. +This document was automatically generated on Fri Nov 08 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 45444ba8ceb..5bf835083b1 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Nov 7, 2024 at 11:58 PM +Generated on Fri, Nov 8, 2024 at 01:21 PM ## Table of Contents From b51b26c54c273b01935812a7e82fe4a410e3ef3d Mon Sep 17 00:00:00 2001 From: svc-devtoolsbot <79531021+svc-devtoolsbot@users.noreply.github.com> Date: Fri, 8 Nov 2024 09:03:33 -0500 Subject: [PATCH 40/81] chore(release): bump package versions (#6460) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- package-lock.json | 718 +++++++++--------- packages/atlas-service/package.json | 4 +- packages/compass-aggregations/package.json | 20 +- packages/compass-app-stores/package.json | 4 +- packages/compass-collection/package.json | 10 +- .../package.json | 8 +- .../package.json | 8 +- packages/compass-connections/package.json | 8 +- packages/compass-crud/package.json | 16 +- packages/compass-e2e-tests/package.json | 4 +- packages/compass-explain-plan/package.json | 8 +- .../compass-export-to-language/package.json | 10 +- packages/compass-field-store/package.json | 4 +- packages/compass-generative-ai/package.json | 10 +- packages/compass-global-writes/package.json | 10 +- packages/compass-import-export/package.json | 8 +- packages/compass-indexes/package.json | 16 +- packages/compass-intercom/package.json | 4 +- .../package.json | 4 +- .../compass-preferences-model/package.json | 2 +- packages/compass-query-bar/package.json | 16 +- .../package.json | 10 +- .../compass-schema-validation/package.json | 14 +- packages/compass-schema/package.json | 14 +- packages/compass-serverstats/package.json | 8 +- packages/compass-settings/package.json | 8 +- packages/compass-shell/package.json | 8 +- packages/compass-sidebar/package.json | 16 +- packages/compass-web/package.json | 44 +- packages/compass-welcome/package.json | 8 +- packages/compass-workspaces/package.json | 8 +- packages/compass/package.json | 56 +- packages/connection-storage/package.json | 4 +- .../databases-collections-list/package.json | 8 +- packages/databases-collections/package.json | 12 +- 35 files changed, 555 insertions(+), 555 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0077fab16fb..6d84e918a93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43014,7 +43014,7 @@ }, "packages/atlas-service": { "name": "@mongodb-js/atlas-service", - "version": "0.31.1", + "version": "0.32.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.31.1", @@ -43026,7 +43026,7 @@ "@mongodb-js/devtools-connect": "^3.3.1", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/oidc-plugin": "^1.1.1", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", @@ -43155,39 +43155,39 @@ "devDependencies": { "@electron/rebuild": "^3.7.0", "@electron/remote": "^2.1.2", - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-aggregations": "^9.48.0", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-aggregations": "^9.49.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connection-import-export": "^0.42.0", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", - "@mongodb-js/compass-databases-collections": "^1.45.0", - "@mongodb-js/compass-explain-plan": "^6.46.0", - "@mongodb-js/compass-export-to-language": "^9.22.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-connection-import-export": "^0.43.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", + "@mongodb-js/compass-databases-collections": "^1.46.0", + "@mongodb-js/compass-explain-plan": "^6.47.0", + "@mongodb-js/compass-export-to-language": "^9.23.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-find-in-page": "^4.32.1", - "@mongodb-js/compass-generative-ai": "^0.26.0", - "@mongodb-js/compass-global-writes": "^1.5.0", - "@mongodb-js/compass-import-export": "^7.45.0", - "@mongodb-js/compass-indexes": "^5.45.0", - "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-generative-ai": "^0.27.0", + "@mongodb-js/compass-global-writes": "^1.6.0", + "@mongodb-js/compass-import-export": "^7.46.0", + "@mongodb-js/compass-indexes": "^5.46.0", + "@mongodb-js/compass-intercom": "^0.14.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.46.0", - "@mongodb-js/compass-schema": "^6.47.0", - "@mongodb-js/compass-schema-validation": "^6.46.0", - "@mongodb-js/compass-serverstats": "^16.45.0", - "@mongodb-js/compass-settings": "^0.44.0", - "@mongodb-js/compass-shell": "^3.45.0", - "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-query-bar": "^8.48.0", + "@mongodb-js/compass-saved-aggregations-queries": "^1.47.0", + "@mongodb-js/compass-schema": "^6.48.0", + "@mongodb-js/compass-schema-validation": "^6.47.0", + "@mongodb-js/compass-serverstats": "^16.46.0", + "@mongodb-js/compass-settings": "^0.45.0", + "@mongodb-js/compass-shell": "^3.46.0", + "@mongodb-js/compass-sidebar": "^5.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-welcome": "^0.44.0", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-welcome": "^0.45.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-info": "^0.9.3", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/get-os-info": "^0.3.24", @@ -43204,7 +43204,7 @@ "chai": "^4.3.4", "chalk": "^4.1.2", "clean-stack": "^2.0.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -43246,7 +43246,7 @@ }, "packages/compass-aggregations": { "name": "@mongodb-js/compass-aggregations", - "version": "9.48.0", + "version": "9.49.0", "license": "SSPL", "dependencies": { "@babel/generator": "^7.19.5", @@ -43255,25 +43255,25 @@ "@dnd-kit/core": "^6.0.7", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", - "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-field-store": "^9.22.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-type-checker": "^7.2.3", @@ -43347,11 +43347,11 @@ }, "packages/compass-app-stores": { "name": "@mongodb-js/compass-app-stores", - "version": "7.32.0", + "version": "7.33.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/connection-info": "^0.9.3", "hadron-app-registry": "^9.2.7", @@ -43411,18 +43411,18 @@ }, "packages/compass-collection": { "name": "@mongodb-js/compass-collection", - "version": "4.45.0", + "version": "4.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/mongodb-constants": "^0.10.2", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "mongodb-collection-model": "^5.23.7", "mongodb-ns": "^2.4.2", @@ -43694,13 +43694,13 @@ }, "packages/compass-connection-import-export": { "name": "@mongodb-js/compass-connection-import-export", - "version": "0.42.0", + "version": "0.43.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/connection-storage": "^0.22.4", - "compass-preferences-model": "^2.29.3", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/connection-storage": "^0.23.0", + "compass-preferences-model": "^2.30.0", "hadron-ipc": "^3.2.25", "react": "^17.0.2" }, @@ -43756,19 +43756,19 @@ }, "packages/compass-connections": { "name": "@mongodb-js/compass-connections", - "version": "1.46.0", + "version": "1.47.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.31.1", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.28.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/connection-storage": "^0.23.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-build-info": "^1.7.2", @@ -43805,15 +43805,15 @@ }, "packages/compass-connections-navigation": { "name": "@mongodb-js/compass-connections-navigation", - "version": "1.45.0", + "version": "1.46.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "mongodb-build-info": "^1.7.2", "react": "^17.0.2", "react-virtualized-auto-sizer": "^1.0.6", @@ -43900,19 +43900,19 @@ }, "packages/compass-crud": { "name": "@mongodb-js/compass-crud", - "version": "13.46.0", + "version": "13.47.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-query-bar": "^8.48.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", @@ -43920,7 +43920,7 @@ "ag-grid-community": "^20.2.0", "ag-grid-react": "^20.2.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-type-checker": "^7.2.3", @@ -44004,7 +44004,7 @@ } }, "packages/compass-e2e-tests": { - "version": "1.27.5", + "version": "1.27.6", "devDependencies": { "@electron/rebuild": "^3.7.0", "@mongodb-js/compass-test-server": "^0.1.22", @@ -44022,7 +44022,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -44476,17 +44476,17 @@ }, "packages/compass-explain-plan": { "name": "@mongodb-js/compass-explain-plan", - "version": "6.46.0", + "version": "6.47.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/explain-plan-helper": "^1.2.4", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "d3": "^3.5.17", "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", @@ -44555,18 +44555,18 @@ }, "packages/compass-export-to-language": { "name": "@mongodb-js/compass-export-to-language", - "version": "9.22.0", + "version": "9.23.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.28.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson-transpilers": "^3.0.10", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", @@ -44618,10 +44618,10 @@ }, "packages/compass-field-store": { "name": "@mongodb-js/compass-field-store", - "version": "9.21.0", + "version": "9.22.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", @@ -44747,16 +44747,16 @@ }, "packages/compass-generative-ai": { "name": "@mongodb-js/compass-generative-ai", - "version": "0.26.0", + "version": "0.27.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/atlas-service": "^0.32.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-intercom": "^0.14.0", "@mongodb-js/compass-logging": "^1.4.10", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "mongodb": "^6.9.0", "mongodb-schema": "^12.2.0", @@ -44850,14 +44850,14 @@ }, "packages/compass-global-writes": { "name": "@mongodb-js/compass-global-writes", - "version": "1.5.0", + "version": "1.6.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "hadron-app-registry": "^9.2.7", @@ -45044,19 +45044,19 @@ }, "packages/compass-import-export": { "name": "@mongodb-js/compass-import-export", - "version": "7.45.0", + "version": "7.46.0", "license": "SSPL", "dependencies": { "@electron/remote": "^2.1.2", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "debug": "^4.3.4", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", @@ -45138,23 +45138,23 @@ }, "packages/compass-indexes": { "name": "@mongodb-js/compass-indexes", - "version": "5.45.0", + "version": "5.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/compass-workspaces": "^0.28.0", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", @@ -45268,11 +45268,11 @@ }, "packages/compass-intercom": { "name": "@mongodb-js/compass-intercom", - "version": "0.13.3", + "version": "0.14.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-logging": "^1.4.10", - "compass-preferences-model": "^2.29.3" + "compass-preferences-model": "^2.30.0" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -45433,10 +45433,10 @@ }, "packages/compass-maybe-protect-connection-string": { "name": "@mongodb-js/compass-maybe-protect-connection-string", - "version": "0.27.3", + "version": "0.28.0", "license": "SSPL", "dependencies": { - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "mongodb-connection-string-url": "^3.0.1" }, "devDependencies": { @@ -45486,7 +45486,7 @@ } }, "packages/compass-preferences-model": { - "version": "2.29.3", + "version": "2.30.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-logging": "^1.4.10", @@ -45552,23 +45552,23 @@ }, "packages/compass-query-bar": { "name": "@mongodb-js/compass-query-bar", - "version": "8.47.0", + "version": "8.48.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", - "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-field-store": "^9.22.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/my-queries-storage": "^0.19.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", @@ -45630,20 +45630,20 @@ }, "packages/compass-saved-aggregations-queries": { "name": "@mongodb-js/compass-saved-aggregations-queries", - "version": "1.46.0", + "version": "1.47.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/my-queries-storage": "^0.19.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "fuse.js": "^6.5.3", "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", @@ -45706,20 +45706,20 @@ }, "packages/compass-schema": { "name": "@mongodb-js/compass-schema", - "version": "6.47.0", + "version": "6.48.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-query-bar": "^8.48.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "d3": "^3.5.17", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", @@ -45764,20 +45764,20 @@ }, "packages/compass-schema-validation": { "name": "@mongodb-js/compass-schema-validation", - "version": "6.46.0", + "version": "6.47.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", @@ -45841,14 +45841,14 @@ }, "packages/compass-serverstats": { "name": "@mongodb-js/compass-serverstats", - "version": "16.45.0", + "version": "16.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", @@ -45890,14 +45890,14 @@ }, "packages/compass-settings": { "name": "@mongodb-js/compass-settings", - "version": "0.44.0", + "version": "0.45.0", "license": "SSPL", "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/atlas-service": "^0.32.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", "@mongodb-js/compass-logging": "^1.4.10", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", "react": "^17.0.2", @@ -45959,21 +45959,21 @@ }, "packages/compass-shell": { "name": "@mongodb-js/compass-shell", - "version": "3.45.0", + "version": "3.46.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-user-data": "^0.3.10", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongosh/browser-repl": "^2.3.2", "@mongosh/logging": "^2.3.2", "@mongosh/node-runtime-worker-thread": "^2.3.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "react-redux": "^8.1.3", @@ -46029,21 +46029,21 @@ }, "packages/compass-sidebar": { "name": "@mongodb-js/compass-sidebar", - "version": "5.46.0", + "version": "5.47.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connection-import-export": "^0.42.0", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-connections-navigation": "^1.45.0", + "@mongodb-js/compass-connection-import-export": "^0.43.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-connections-navigation": "^1.46.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.28.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", @@ -46404,32 +46404,32 @@ }, "packages/compass-web": { "name": "@mongodb-js/compass-web", - "version": "0.10.1", + "version": "0.11.0", "license": "SSPL", "devDependencies": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-aggregations": "^9.48.0", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-aggregations": "^9.49.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", - "@mongodb-js/compass-databases-collections": "^1.45.0", - "@mongodb-js/compass-explain-plan": "^6.46.0", - "@mongodb-js/compass-export-to-language": "^9.22.0", - "@mongodb-js/compass-field-store": "^9.21.0", - "@mongodb-js/compass-generative-ai": "^0.26.0", - "@mongodb-js/compass-global-writes": "^1.5.0", - "@mongodb-js/compass-indexes": "^5.45.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", + "@mongodb-js/compass-databases-collections": "^1.46.0", + "@mongodb-js/compass-explain-plan": "^6.47.0", + "@mongodb-js/compass-export-to-language": "^9.23.0", + "@mongodb-js/compass-field-store": "^9.22.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", + "@mongodb-js/compass-global-writes": "^1.6.0", + "@mongodb-js/compass-indexes": "^5.46.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", - "@mongodb-js/compass-schema": "^6.47.0", - "@mongodb-js/compass-schema-validation": "^6.46.0", - "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-query-bar": "^8.48.0", + "@mongodb-js/compass-schema": "^6.48.0", + "@mongodb-js/compass-schema-validation": "^6.47.0", + "@mongodb-js/compass-sidebar": "^5.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-welcome": "^0.44.0", - "@mongodb-js/compass-workspaces": "^0.27.0", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/compass-welcome": "^0.45.0", + "@mongodb-js/compass-workspaces": "^0.28.0", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -46448,7 +46448,7 @@ "bson": "^6.2.0", "buffer": "^6.0.3", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "crypto-browserify": "^3.12.0", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -46669,15 +46669,15 @@ }, "packages/compass-welcome": { "name": "@mongodb-js/compass-welcome", - "version": "0.44.0", + "version": "0.45.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", - "compass-preferences-model": "^2.29.3", + "@mongodb-js/compass-workspaces": "^0.28.0", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "redux": "^4.2.1", @@ -46735,15 +46735,15 @@ }, "packages/compass-workspaces": { "name": "@mongodb-js/compass-workspaces", - "version": "0.27.0", + "version": "0.28.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-collection-model": "^5.23.7", @@ -47108,7 +47108,7 @@ }, "packages/connection-storage": { "name": "@mongodb-js/connection-storage", - "version": "0.22.4", + "version": "0.23.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-logging": "^1.4.10", @@ -47117,7 +47117,7 @@ "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/connection-info": "^0.9.3", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", @@ -47425,19 +47425,19 @@ }, "packages/databases-collections": { "name": "@mongodb-js/compass-databases-collections", - "version": "1.45.0", + "version": "1.46.0", "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", - "@mongodb-js/databases-collections-list": "^1.43.0", + "@mongodb-js/compass-workspaces": "^0.28.0", + "@mongodb-js/databases-collections-list": "^1.44.0", "@mongodb-js/my-queries-storage": "^0.19.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-collection-model": "^5.23.7", @@ -47472,15 +47472,15 @@ }, "packages/databases-collections-list": { "name": "@mongodb-js/databases-collections-list", - "version": "1.43.0", + "version": "1.44.0", "license": "SSPL", "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-info": "^0.9.3", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, @@ -54916,7 +54916,7 @@ "@types/mocha": "^9.0.0", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron": "^32.2.2", "eslint": "^7.25.0", @@ -54965,19 +54965,19 @@ "@dnd-kit/core": "^6.0.7", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", - "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-field-store": "^9.22.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -54993,7 +54993,7 @@ "@types/semver": "^7.3.9", "bson": "^6.8.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", @@ -55052,7 +55052,7 @@ "version": "file:packages/compass-app-stores", "requires": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -55106,12 +55106,12 @@ "@mongodb-js/compass-collection": { "version": "file:packages/compass-collection", "requires": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -55126,7 +55126,7 @@ "@types/react-dom": "^17.0.10", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -55361,8 +55361,8 @@ "version": "file:packages/compass-connection-import-export", "requires": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55374,7 +55374,7 @@ "@types/react": "^17.0.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", @@ -55417,12 +55417,12 @@ "requires": { "@mongodb-js/compass-components": "^1.31.1", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.28.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -55436,7 +55436,7 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -55485,8 +55485,8 @@ "version": "file:packages/compass-connections-navigation", "requires": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -55503,7 +55503,7 @@ "@types/react-window": "^1.8.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -55545,17 +55545,17 @@ "@mongodb-js/compass-crud": { "version": "file:packages/compass-crud", "requires": { - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-query-bar": "^8.48.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-test-server": "^0.1.22", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -55572,7 +55572,7 @@ "bson": "^6.8.0", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", @@ -55609,14 +55609,14 @@ "@mongodb-js/compass-databases-collections": { "version": "file:packages/databases-collections", "requires": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", - "@mongodb-js/databases-collections-list": "^1.43.0", + "@mongodb-js/compass-workspaces": "^0.28.0", + "@mongodb-js/databases-collections-list": "^1.44.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/my-queries-storage": "^0.19.0", @@ -55625,7 +55625,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -55733,9 +55733,9 @@ "@mongodb-js/compass-explain-plan": { "version": "file:packages/compass-explain-plan", "requires": { - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", @@ -55749,7 +55749,7 @@ "@types/d3-flextree": "^2.1.0", "@types/d3-hierarchy": "^3.1.2", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "d3": "^3.5.17", "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", @@ -55803,11 +55803,11 @@ "@mongodb-js/compass-export-to-language": { "version": "file:packages/compass-export-to-language", "requires": { - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.28.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -55817,7 +55817,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "bson-transpilers": "^3.0.10", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -55859,7 +55859,7 @@ "@mongodb-js/compass-field-store": { "version": "file:packages/compass-field-store", "requires": { - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -55972,10 +55972,10 @@ "@mongodb-js/compass-generative-ai": { "version": "file:packages/compass-generative-ai", "requires": { - "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/atlas-service": "^0.32.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-intercom": "^0.14.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -55990,7 +55990,7 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -56054,11 +56054,11 @@ "@mongodb-js/compass-global-writes": { "version": "file:packages/compass-global-writes", "requires": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -56173,13 +56173,13 @@ "requires": { "@electron/remote": "^2.1.2", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -56198,7 +56198,7 @@ "bson": "^6.8.0", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^32.2.2", @@ -56256,16 +56256,16 @@ "@mongodb-js/compass-indexes": { "version": "file:packages/compass-indexes", "requires": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/compass-workspaces": "^0.28.0", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/mongodb-constants": "^0.10.0", @@ -56276,7 +56276,7 @@ "@types/numeral": "^2.0.5", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", @@ -56343,7 +56343,7 @@ "@types/mocha": "^9.0.0", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", @@ -56496,7 +56496,7 @@ "@types/mocha": "^9.0.0", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", @@ -56535,14 +56535,14 @@ "@mongodb-js/compass-query-bar": { "version": "file:packages/compass-query-bar", "requires": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", - "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-field-store": "^9.22.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -56554,7 +56554,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", @@ -56604,12 +56604,12 @@ "@mongodb-js/compass-saved-aggregations-queries": { "version": "file:packages/compass-saved-aggregations-queries", "requires": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -56626,7 +56626,7 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -56673,14 +56673,14 @@ "@mongodb-js/compass-schema": { "version": "file:packages/compass-schema", "requires": { - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-query-bar": "^8.48.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/my-queries-storage": "^0.19.0", @@ -56696,7 +56696,7 @@ "@types/react-dom": "^17.0.10", "bson": "^6.8.0", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "d3": "^3.5.17", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", @@ -56749,13 +56749,13 @@ "@mongodb-js/compass-schema-validation": { "version": "file:packages/compass-schema-validation", "requires": { - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -56766,7 +56766,7 @@ "@types/enzyme": "^3.10.14", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", @@ -56986,11 +56986,11 @@ "@mongodb-js/compass-serverstats": { "version": "file:packages/compass-serverstats", "requires": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57033,9 +57033,9 @@ "@mongodb-js/compass-settings": { "version": "file:packages/compass-settings", "requires": { - "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/atlas-service": "^0.32.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -57049,7 +57049,7 @@ "@types/react-dom": "^17.0.10", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -57096,12 +57096,12 @@ "version": "file:packages/compass-shell", "requires": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-user-data": "^0.3.10", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57113,7 +57113,7 @@ "@types/enzyme": "^3.10.14", "bson": "^6.8.0", "chai": "^4.2.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron": "^32.2.2", "electron-mocha": "^12.2.0", @@ -57156,15 +57156,15 @@ "@mongodb-js/compass-sidebar": { "version": "file:packages/compass-sidebar", "requires": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connection-import-export": "^0.42.0", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-connections-navigation": "^1.45.0", + "@mongodb-js/compass-connection-import-export": "^0.43.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-connections-navigation": "^1.46.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.28.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -57179,7 +57179,7 @@ "@types/react-dom": "^17.0.10", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -57486,29 +57486,29 @@ "@mongodb-js/compass-web": { "version": "file:packages/compass-web", "requires": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-aggregations": "^9.48.0", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-aggregations": "^9.49.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", - "@mongodb-js/compass-databases-collections": "^1.45.0", - "@mongodb-js/compass-explain-plan": "^6.46.0", - "@mongodb-js/compass-export-to-language": "^9.22.0", - "@mongodb-js/compass-field-store": "^9.21.0", - "@mongodb-js/compass-generative-ai": "^0.26.0", - "@mongodb-js/compass-global-writes": "^1.5.0", - "@mongodb-js/compass-indexes": "^5.45.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", + "@mongodb-js/compass-databases-collections": "^1.46.0", + "@mongodb-js/compass-explain-plan": "^6.47.0", + "@mongodb-js/compass-export-to-language": "^9.23.0", + "@mongodb-js/compass-field-store": "^9.22.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", + "@mongodb-js/compass-global-writes": "^1.6.0", + "@mongodb-js/compass-indexes": "^5.46.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", - "@mongodb-js/compass-schema": "^6.47.0", - "@mongodb-js/compass-schema-validation": "^6.46.0", - "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-query-bar": "^8.48.0", + "@mongodb-js/compass-schema": "^6.48.0", + "@mongodb-js/compass-schema-validation": "^6.47.0", + "@mongodb-js/compass-sidebar": "^5.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-welcome": "^0.44.0", - "@mongodb-js/compass-workspaces": "^0.27.0", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/compass-welcome": "^0.45.0", + "@mongodb-js/compass-workspaces": "^0.28.0", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -57527,7 +57527,7 @@ "bson": "^6.2.0", "buffer": "^6.0.3", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "crypto-browserify": "^3.12.0", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -57720,10 +57720,10 @@ "version": "file:packages/compass-welcome", "requires": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", "@mongodb-js/prettier-config-compass": "^1.0.2", @@ -57735,7 +57735,7 @@ "@types/react": "^17.0.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -57778,9 +57778,9 @@ "@mongodb-js/compass-workspaces": { "version": "file:packages/compass-workspaces", "requires": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -57795,7 +57795,7 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", @@ -58120,7 +58120,7 @@ "@types/sinon-chai": "^3.2.5", "bson": "^6.8.0", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "electron": "^32.2.2", "eslint": "^7.25.0", @@ -58163,9 +58163,9 @@ "version": "file:packages/databases-collections-list", "requires": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -58178,7 +58178,7 @@ "@types/react": "^17.0.5", "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -66710,7 +66710,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", @@ -78528,39 +78528,39 @@ "requires": { "@electron/rebuild": "^3.7.0", "@electron/remote": "^2.1.2", - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-aggregations": "^9.48.0", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-aggregations": "^9.49.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connection-import-export": "^0.42.0", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", - "@mongodb-js/compass-databases-collections": "^1.45.0", - "@mongodb-js/compass-explain-plan": "^6.46.0", - "@mongodb-js/compass-export-to-language": "^9.22.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-connection-import-export": "^0.43.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", + "@mongodb-js/compass-databases-collections": "^1.46.0", + "@mongodb-js/compass-explain-plan": "^6.47.0", + "@mongodb-js/compass-export-to-language": "^9.23.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-find-in-page": "^4.32.1", - "@mongodb-js/compass-generative-ai": "^0.26.0", - "@mongodb-js/compass-global-writes": "^1.5.0", - "@mongodb-js/compass-import-export": "^7.45.0", - "@mongodb-js/compass-indexes": "^5.45.0", - "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-generative-ai": "^0.27.0", + "@mongodb-js/compass-global-writes": "^1.6.0", + "@mongodb-js/compass-import-export": "^7.46.0", + "@mongodb-js/compass-indexes": "^5.46.0", + "@mongodb-js/compass-intercom": "^0.14.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.46.0", - "@mongodb-js/compass-schema": "^6.47.0", - "@mongodb-js/compass-schema-validation": "^6.46.0", - "@mongodb-js/compass-serverstats": "^16.45.0", - "@mongodb-js/compass-settings": "^0.44.0", - "@mongodb-js/compass-shell": "^3.45.0", - "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-query-bar": "^8.48.0", + "@mongodb-js/compass-saved-aggregations-queries": "^1.47.0", + "@mongodb-js/compass-schema": "^6.48.0", + "@mongodb-js/compass-schema-validation": "^6.47.0", + "@mongodb-js/compass-serverstats": "^16.46.0", + "@mongodb-js/compass-settings": "^0.45.0", + "@mongodb-js/compass-shell": "^3.46.0", + "@mongodb-js/compass-sidebar": "^5.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-welcome": "^0.44.0", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-welcome": "^0.45.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-info": "^0.9.3", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/get-os-info": "^0.3.24", @@ -78579,7 +78579,7 @@ "chalk": "^4.1.2", "clean-stack": "^2.0.0", "clipboard": "^2.0.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", diff --git a/packages/atlas-service/package.json b/packages/atlas-service/package.json index f9d605b2e18..129ccb1d7e5 100644 --- a/packages/atlas-service/package.json +++ b/packages/atlas-service/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.31.1", + "version": "0.32.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -83,7 +83,7 @@ "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/oidc-plugin": "^1.1.1", "hadron-app-registry": "^9.2.7", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "electron": "^32.2.2", "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", diff --git a/packages/compass-aggregations/package.json b/packages/compass-aggregations/package.json index bf08f2af9f2..7d4d1c19efd 100644 --- a/packages/compass-aggregations/package.json +++ b/packages/compass-aggregations/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-aggregations", "description": "Compass Aggregation Pipeline Builder", "private": true, - "version": "9.48.0", + "version": "9.49.0", "main": "dist/index.js", "compass:main": "src/index.ts", "types": "dist/index.d.ts", @@ -61,25 +61,25 @@ "@dnd-kit/core": "^6.0.7", "@dnd-kit/sortable": "^7.0.2", "@dnd-kit/utilities": "^3.2.1", - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", - "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-field-store": "^9.22.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-type-checker": "^7.2.3", diff --git a/packages/compass-app-stores/package.json b/packages/compass-app-stores/package.json index 50d5194a72e..eaa45e1512f 100644 --- a/packages/compass-app-stores/package.json +++ b/packages/compass-app-stores/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "7.32.0", + "version": "7.33.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -74,7 +74,7 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/connection-info": "^0.9.3", "hadron-app-registry": "^9.2.7", diff --git a/packages/compass-collection/package.json b/packages/compass-collection/package.json index 66c86f83967..f11679274c8 100644 --- a/packages/compass-collection/package.json +++ b/packages/compass-collection/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "4.45.0", + "version": "4.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,15 +48,15 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/mongodb-constants": "^0.10.2", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "mongodb-collection-model": "^5.23.7", "mongodb-ns": "^2.4.2", diff --git a/packages/compass-connection-import-export/package.json b/packages/compass-connection-import-export/package.json index 6c7c4a41929..fa3748dfd82 100644 --- a/packages/compass-connection-import-export/package.json +++ b/packages/compass-connection-import-export/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.42.0", + "version": "0.43.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,9 +52,9 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/connection-storage": "^0.22.4", - "compass-preferences-model": "^2.29.3", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/connection-storage": "^0.23.0", + "compass-preferences-model": "^2.30.0", "hadron-ipc": "^3.2.25", "react": "^17.0.2" }, diff --git a/packages/compass-connections-navigation/package.json b/packages/compass-connections-navigation/package.json index a9cc0dbcf27..377754421c2 100644 --- a/packages/compass-connections-navigation/package.json +++ b/packages/compass-connections-navigation/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.45.0", + "version": "1.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,12 +49,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-components": "^1.31.1", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/connection-form": "^1.44.0", - "@mongodb-js/compass-workspaces": "^0.27.0", - "compass-preferences-model": "^2.29.3", + "@mongodb-js/compass-workspaces": "^0.28.0", + "compass-preferences-model": "^2.30.0", "mongodb-build-info": "^1.7.2", "react": "^17.0.2", "react-virtualized-auto-sizer": "^1.0.6", diff --git a/packages/compass-connections/package.json b/packages/compass-connections/package.json index 816415b16f6..5f078107074 100644 --- a/packages/compass-connections/package.json +++ b/packages/compass-connections/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.46.0", + "version": "1.47.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -53,14 +53,14 @@ "dependencies": { "@mongodb-js/compass-components": "^1.31.1", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.28.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/connection-storage": "^0.23.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-build-info": "^1.7.2", diff --git a/packages/compass-crud/package.json b/packages/compass-crud/package.json index 584ea3d4ee6..63c7df8547d 100644 --- a/packages/compass-crud/package.json +++ b/packages/compass-crud/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "13.46.0", + "version": "13.47.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -71,16 +71,16 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", + "@mongodb-js/compass-query-bar": "^8.48.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/explain-plan-helper": "^1.2.4", "@mongodb-js/my-queries-storage": "^0.19.0", "@mongodb-js/reflux-state-mixin": "^1.0.7", @@ -88,7 +88,7 @@ "ag-grid-community": "^20.2.0", "ag-grid-react": "^20.2.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-type-checker": "^7.2.3", diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index 0f2dc3ecc2e..c48719b554b 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "compass-e2e-tests", - "version": "1.27.5", + "version": "1.27.6", "private": true, "description": "E2E test suite for Compass app that follows smoke tests / feature testing matrix", "scripts": { @@ -47,7 +47,7 @@ "chai": "^4.3.4", "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", diff --git a/packages/compass-explain-plan/package.json b/packages/compass-explain-plan/package.json index cd63f27892a..ae9693f5875 100644 --- a/packages/compass-explain-plan/package.json +++ b/packages/compass-explain-plan/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.46.0", + "version": "6.47.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -69,14 +69,14 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/explain-plan-helper": "^1.2.4", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "d3": "^3.5.17", "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", diff --git a/packages/compass-export-to-language/package.json b/packages/compass-export-to-language/package.json index a7d43b0120a..6013719b957 100644 --- a/packages/compass-export-to-language/package.json +++ b/packages/compass-export-to-language/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.22.0", + "version": "9.23.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,15 +48,15 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.28.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson-transpilers": "^3.0.10", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", "react": "^17.0.2", diff --git a/packages/compass-field-store/package.json b/packages/compass-field-store/package.json index d4f79b27c09..cd77a525040 100644 --- a/packages/compass-field-store/package.json +++ b/packages/compass-field-store/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "9.21.0", + "version": "9.22.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -69,7 +69,7 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", diff --git a/packages/compass-generative-ai/package.json b/packages/compass-generative-ai/package.json index 361f69ede9a..5c051a9c6ac 100644 --- a/packages/compass-generative-ai/package.json +++ b/packages/compass-generative-ai/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.26.0", + "version": "0.27.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -52,13 +52,13 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/atlas-service": "^0.32.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-intercom": "^0.14.0", "@mongodb-js/compass-logging": "^1.4.10", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "mongodb": "^6.9.0", "mongodb-schema": "^12.2.0", diff --git a/packages/compass-global-writes/package.json b/packages/compass-global-writes/package.json index af36b76a655..e7eb1fa76ad 100644 --- a/packages/compass-global-writes/package.json +++ b/packages/compass-global-writes/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.5.0", + "version": "1.6.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,15 +49,15 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "mongodb-ns": "^2.4.2", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/compass-import-export/package.json b/packages/compass-import-export/package.json index 451d23efe2e..57a6100dc77 100644 --- a/packages/compass-import-export/package.json +++ b/packages/compass-import-export/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "7.45.0", + "version": "7.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,14 +50,14 @@ "dependencies": { "@electron/remote": "^2.1.2", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "debug": "^4.3.4", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", diff --git a/packages/compass-indexes/package.json b/packages/compass-indexes/package.json index 947f13e48f2..b15458ed56a 100644 --- a/packages/compass-indexes/package.json +++ b/packages/compass-indexes/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "5.45.0", + "version": "5.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -67,20 +67,20 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/compass-workspaces": "^0.28.0", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/shell-bson-parser": "^1.1.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", diff --git a/packages/compass-intercom/package.json b/packages/compass-intercom/package.json index 6ce34b33f61..59d1a5791be 100644 --- a/packages/compass-intercom/package.json +++ b/packages/compass-intercom/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.13.3", + "version": "0.14.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -67,7 +67,7 @@ "typescript": "^5.0.4" }, "dependencies": { - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "@mongodb-js/compass-logging": "^1.4.10" } } diff --git a/packages/compass-maybe-protect-connection-string/package.json b/packages/compass-maybe-protect-connection-string/package.json index 69fe9af1e55..09c2839d60b 100644 --- a/packages/compass-maybe-protect-connection-string/package.json +++ b/packages/compass-maybe-protect-connection-string/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.27.3", + "version": "0.28.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,7 +50,7 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "mongodb-connection-string-url": "^3.0.1" }, "devDependencies": { diff --git a/packages/compass-preferences-model/package.json b/packages/compass-preferences-model/package.json index 1c15db7e596..80ef521c779 100644 --- a/packages/compass-preferences-model/package.json +++ b/packages/compass-preferences-model/package.json @@ -2,7 +2,7 @@ "name": "compass-preferences-model", "description": "Compass preferences model", "author": "Lucas Hrabovsky ", - "version": "2.29.3", + "version": "2.30.0", "bugs": { "url": "https://jira.mongodb.org/projects/COMPASS/issues", "email": "compass@mongodb.com" diff --git a/packages/compass-query-bar/package.json b/packages/compass-query-bar/package.json index 288269b18e3..1da0cfda8e7 100644 --- a/packages/compass-query-bar/package.json +++ b/packages/compass-query-bar/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "8.47.0", + "version": "8.48.0", "homepage": "https://github.com/mongodb-js/compass", "license": "SSPL", "bugs": { @@ -66,20 +66,20 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", - "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-field-store": "^9.22.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/mongodb-constants": "^0.10.0", "@mongodb-js/my-queries-storage": "^0.19.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", diff --git a/packages/compass-saved-aggregations-queries/package.json b/packages/compass-saved-aggregations-queries/package.json index a7676570927..de31dc42a42 100644 --- a/packages/compass-saved-aggregations-queries/package.json +++ b/packages/compass-saved-aggregations-queries/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.46.0", + "version": "1.47.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,17 +48,17 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/my-queries-storage": "^0.19.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "fuse.js": "^6.5.3", "hadron-app-registry": "^9.2.7", "mongodb-ns": "^2.4.2", diff --git a/packages/compass-schema-validation/package.json b/packages/compass-schema-validation/package.json index 098a1c9cf62..06112e4a56f 100644 --- a/packages/compass-schema-validation/package.json +++ b/packages/compass-schema-validation/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.46.0", + "version": "6.47.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -69,17 +69,17 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", "@mongodb-js/compass-editor": "^0.33.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "javascript-stringify": "^2.0.1", "lodash": "^4.17.21", diff --git a/packages/compass-schema/package.json b/packages/compass-schema/package.json index d53d380b0c5..ca9bb14792f 100644 --- a/packages/compass-schema/package.json +++ b/packages/compass-schema/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "6.47.0", + "version": "6.48.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -72,16 +72,16 @@ "xvfb-maybe": "^0.2.1" }, "dependencies": { - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-query-bar": "^8.47.0", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/compass-query-bar": "^8.48.0", + "@mongodb-js/connection-storage": "^0.23.0", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "d3": "^3.5.17", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", diff --git a/packages/compass-serverstats/package.json b/packages/compass-serverstats/package.json index 58d476667aa..b73502b9195 100644 --- a/packages/compass-serverstats/package.json +++ b/packages/compass-serverstats/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-serverstats", "description": "Compass Real Time", "private": true, - "version": "16.45.0", + "version": "16.46.0", "main": "dist/index.js", "compass:main": "src/index.ts", "exports": { @@ -30,11 +30,11 @@ }, "license": "SSPL", "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "d3": "^3.5.17", "d3-timer": "^1.0.3", "debug": "^4.3.4", diff --git a/packages/compass-settings/package.json b/packages/compass-settings/package.json index d3aae846e19..418f4539bb5 100644 --- a/packages/compass-settings/package.json +++ b/packages/compass-settings/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.44.0", + "version": "0.45.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,11 +49,11 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/atlas-service": "^0.31.1", + "@mongodb-js/atlas-service": "^0.32.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-generative-ai": "^0.26.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", "@mongodb-js/compass-logging": "^1.4.10", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", "react": "^17.0.2", diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index f66cbde84f2..99e7f608bf8 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -6,7 +6,7 @@ "email": "compass@mongodb.com" }, "private": true, - "version": "3.45.0", + "version": "3.46.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,17 +50,17 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-user-data": "^0.3.10", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongosh/browser-repl": "^2.3.2", "@mongosh/logging": "^2.3.2", "@mongosh/node-runtime-worker-thread": "^2.3.2", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "react-redux": "^8.1.3", diff --git a/packages/compass-sidebar/package.json b/packages/compass-sidebar/package.json index c9febd4e904..4e384789096 100644 --- a/packages/compass-sidebar/package.json +++ b/packages/compass-sidebar/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "5.46.0", + "version": "5.47.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -48,18 +48,18 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connection-import-export": "^0.42.0", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-connections-navigation": "^1.45.0", + "@mongodb-js/compass-connection-import-export": "^0.43.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-connections-navigation": "^1.46.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-maybe-protect-connection-string": "^0.27.3", + "@mongodb-js/compass-maybe-protect-connection-string": "^0.28.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-form": "^1.44.0", "@mongodb-js/connection-info": "^0.9.3", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb": "^6.9.0", diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index 958df68a552..e55f0885d4c 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -14,7 +14,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.10.1", + "version": "0.11.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -63,29 +63,29 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-aggregations": "^9.48.0", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-aggregations": "^9.49.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", - "@mongodb-js/compass-databases-collections": "^1.45.0", - "@mongodb-js/compass-explain-plan": "^6.46.0", - "@mongodb-js/compass-export-to-language": "^9.22.0", - "@mongodb-js/compass-field-store": "^9.21.0", - "@mongodb-js/compass-generative-ai": "^0.26.0", - "@mongodb-js/compass-global-writes": "^1.5.0", - "@mongodb-js/compass-indexes": "^5.45.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", + "@mongodb-js/compass-databases-collections": "^1.46.0", + "@mongodb-js/compass-explain-plan": "^6.47.0", + "@mongodb-js/compass-export-to-language": "^9.23.0", + "@mongodb-js/compass-field-store": "^9.22.0", + "@mongodb-js/compass-generative-ai": "^0.27.0", + "@mongodb-js/compass-global-writes": "^1.6.0", + "@mongodb-js/compass-indexes": "^5.46.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", - "@mongodb-js/compass-schema": "^6.47.0", - "@mongodb-js/compass-schema-validation": "^6.46.0", - "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-query-bar": "^8.48.0", + "@mongodb-js/compass-schema": "^6.48.0", + "@mongodb-js/compass-schema-validation": "^6.47.0", + "@mongodb-js/compass-sidebar": "^5.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-welcome": "^0.44.0", - "@mongodb-js/compass-workspaces": "^0.27.0", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/compass-welcome": "^0.45.0", + "@mongodb-js/compass-workspaces": "^0.28.0", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -104,7 +104,7 @@ "bson": "^6.2.0", "buffer": "^6.0.3", "chai": "^4.3.6", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "crypto-browserify": "^3.12.0", "debug": "^4.3.4", "depcheck": "^1.4.1", diff --git a/packages/compass-welcome/package.json b/packages/compass-welcome/package.json index 219fb9e4913..a31c82bf223 100644 --- a/packages/compass-welcome/package.json +++ b/packages/compass-welcome/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.44.0", + "version": "0.45.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -50,11 +50,11 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", - "compass-preferences-model": "^2.29.3", + "@mongodb-js/compass-workspaces": "^0.28.0", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "react": "^17.0.2", "redux": "^4.2.1", diff --git a/packages/compass-workspaces/package.json b/packages/compass-workspaces/package.json index ecf179779af..f100e729c3a 100644 --- a/packages/compass-workspaces/package.json +++ b/packages/compass-workspaces/package.json @@ -11,7 +11,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.27.0", + "version": "0.28.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -51,12 +51,12 @@ "reformat": "npm run eslint . -- --fix && npm run prettier -- --write ." }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-logging": "^1.4.10", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-collection-model": "^5.23.7", diff --git a/packages/compass/package.json b/packages/compass/package.json index e84747b9ae8..82797da4515 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -190,39 +190,39 @@ "devDependencies": { "@electron/rebuild": "^3.7.0", "@electron/remote": "^2.1.2", - "@mongodb-js/atlas-service": "^0.31.1", - "@mongodb-js/compass-aggregations": "^9.48.0", - "@mongodb-js/compass-app-stores": "^7.32.0", - "@mongodb-js/compass-collection": "^4.45.0", + "@mongodb-js/atlas-service": "^0.32.0", + "@mongodb-js/compass-aggregations": "^9.49.0", + "@mongodb-js/compass-app-stores": "^7.33.0", + "@mongodb-js/compass-collection": "^4.46.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connection-import-export": "^0.42.0", - "@mongodb-js/compass-connections": "^1.46.0", - "@mongodb-js/compass-crud": "^13.46.0", - "@mongodb-js/compass-databases-collections": "^1.45.0", - "@mongodb-js/compass-explain-plan": "^6.46.0", - "@mongodb-js/compass-export-to-language": "^9.22.0", - "@mongodb-js/compass-field-store": "^9.21.0", + "@mongodb-js/compass-connection-import-export": "^0.43.0", + "@mongodb-js/compass-connections": "^1.47.0", + "@mongodb-js/compass-crud": "^13.47.0", + "@mongodb-js/compass-databases-collections": "^1.46.0", + "@mongodb-js/compass-explain-plan": "^6.47.0", + "@mongodb-js/compass-export-to-language": "^9.23.0", + "@mongodb-js/compass-field-store": "^9.22.0", "@mongodb-js/compass-find-in-page": "^4.32.1", - "@mongodb-js/compass-generative-ai": "^0.26.0", - "@mongodb-js/compass-global-writes": "^1.5.0", - "@mongodb-js/compass-import-export": "^7.45.0", - "@mongodb-js/compass-indexes": "^5.45.0", - "@mongodb-js/compass-intercom": "^0.13.3", + "@mongodb-js/compass-generative-ai": "^0.27.0", + "@mongodb-js/compass-global-writes": "^1.6.0", + "@mongodb-js/compass-import-export": "^7.46.0", + "@mongodb-js/compass-indexes": "^5.46.0", + "@mongodb-js/compass-intercom": "^0.14.0", "@mongodb-js/compass-logging": "^1.4.10", - "@mongodb-js/compass-query-bar": "^8.47.0", - "@mongodb-js/compass-saved-aggregations-queries": "^1.46.0", - "@mongodb-js/compass-schema": "^6.47.0", - "@mongodb-js/compass-schema-validation": "^6.46.0", - "@mongodb-js/compass-serverstats": "^16.45.0", - "@mongodb-js/compass-settings": "^0.44.0", - "@mongodb-js/compass-shell": "^3.45.0", - "@mongodb-js/compass-sidebar": "^5.46.0", + "@mongodb-js/compass-query-bar": "^8.48.0", + "@mongodb-js/compass-saved-aggregations-queries": "^1.47.0", + "@mongodb-js/compass-schema": "^6.48.0", + "@mongodb-js/compass-schema-validation": "^6.47.0", + "@mongodb-js/compass-serverstats": "^16.46.0", + "@mongodb-js/compass-settings": "^0.45.0", + "@mongodb-js/compass-shell": "^3.46.0", + "@mongodb-js/compass-sidebar": "^5.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", "@mongodb-js/compass-utils": "^0.6.14", - "@mongodb-js/compass-welcome": "^0.44.0", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-welcome": "^0.45.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-info": "^0.9.3", - "@mongodb-js/connection-storage": "^0.22.4", + "@mongodb-js/connection-storage": "^0.23.0", "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/get-os-info": "^0.3.24", @@ -239,7 +239,7 @@ "chai": "^4.3.4", "chalk": "^4.1.2", "clean-stack": "^2.0.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", diff --git a/packages/connection-storage/package.json b/packages/connection-storage/package.json index 0cc46e1cf95..23b9ec6bd7e 100644 --- a/packages/connection-storage/package.json +++ b/packages/connection-storage/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "0.22.4", + "version": "0.23.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -62,7 +62,7 @@ "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/connection-info": "^0.9.3", "bson": "^6.8.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "electron": "^32.2.2", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", diff --git a/packages/databases-collections-list/package.json b/packages/databases-collections-list/package.json index 5b26d73f558..b46d78b4f6f 100644 --- a/packages/databases-collections-list/package.json +++ b/packages/databases-collections-list/package.json @@ -13,7 +13,7 @@ "email": "compass@mongodb.com" }, "homepage": "https://github.com/mongodb-js/compass", - "version": "1.43.0", + "version": "1.44.0", "repository": { "type": "git", "url": "https://github.com/mongodb-js/compass.git" @@ -49,11 +49,11 @@ }, "dependencies": { "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", + "@mongodb-js/compass-workspaces": "^0.28.0", "@mongodb-js/connection-info": "^0.9.3", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "mongodb-ns": "^2.4.2", "react": "^17.0.2" }, diff --git a/packages/databases-collections/package.json b/packages/databases-collections/package.json index d266c0aae17..0a8444c966e 100644 --- a/packages/databases-collections/package.json +++ b/packages/databases-collections/package.json @@ -2,7 +2,7 @@ "name": "@mongodb-js/compass-databases-collections", "description": "Plugin for viewing the list of, creating, and dropping databases and collections", "private": true, - "version": "1.45.0", + "version": "1.46.0", "license": "SSPL", "homepage": "https://github.com/mongodb-js/compass", "bugs": { @@ -59,16 +59,16 @@ "typescript": "^5.0.4" }, "dependencies": { - "@mongodb-js/compass-app-stores": "^7.32.0", + "@mongodb-js/compass-app-stores": "^7.33.0", "@mongodb-js/compass-components": "^1.31.1", - "@mongodb-js/compass-connections": "^1.46.0", + "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-editor": "^0.33.0", "@mongodb-js/compass-logging": "^1.4.10", "@mongodb-js/compass-telemetry": "^1.2.3", - "@mongodb-js/compass-workspaces": "^0.27.0", - "@mongodb-js/databases-collections-list": "^1.43.0", + "@mongodb-js/compass-workspaces": "^0.28.0", + "@mongodb-js/databases-collections-list": "^1.44.0", "@mongodb-js/my-queries-storage": "^0.19.0", - "compass-preferences-model": "^2.29.3", + "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "lodash": "^4.17.21", "mongodb-collection-model": "^5.23.7", From 9959dfeaa8208145e74e64e7841162acd7b6fb7f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 14:10:51 +0000 Subject: [PATCH 41/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6467) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 5bf835083b1..a2f48357f35 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Nov 8, 2024 at 01:21 PM +Generated on Fri, Nov 8, 2024 at 02:10 PM ## Table of Contents From c179bd49ed88aa5bd6dfe1200621b3c101612987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Fri, 8 Nov 2024 16:31:36 +0100 Subject: [PATCH 42/81] fix(crud): expandable readonly document COMPASS-4635 (#6447) * Make ReadonlyDocument expandable * Add extra gutter width on ReadonlyDocument * fixup! Add extra gutter width on ReadonlyDocument Passing extraGutterWidth through to children * fixup! Add extra gutter width on ReadonlyDocument Pass extraGutterWidth to calculateShowMoreToggleOffset in document * fixup! Add extra gutter width on ReadonlyDocument Remove unused readOnlySpacer CSS * fixup! Add extra gutter width on ReadonlyDocument Use existing element spacer --- .../src/components/document-list/document.tsx | 13 ++- .../src/components/document-list/element.tsx | 41 +++++---- .../src/components/readonly-document.tsx | 90 ++++++++++++++++++- 3 files changed, 122 insertions(+), 22 deletions(-) diff --git a/packages/compass-components/src/components/document-list/document.tsx b/packages/compass-components/src/components/document-list/document.tsx index d7bef7101be..2e2d9cb540c 100644 --- a/packages/compass-components/src/components/document-list/document.tsx +++ b/packages/compass-components/src/components/document-list/document.tsx @@ -85,7 +85,14 @@ const HadronDocument: React.FunctionComponent<{ editable?: boolean; editing?: boolean; onEditStart?: () => void; -}> = ({ value: document, editable = false, editing = false, onEditStart }) => { + extraGutterWidth?: number; +}> = ({ + value: document, + editable = false, + editing = false, + onEditStart, + extraGutterWidth, +}) => { const { elements, visibleElements } = useHadronDocument(document); const [autoFocus, setAutoFocus] = useState<{ id: string; @@ -113,8 +120,9 @@ const HadronDocument: React.FunctionComponent<{ editable, level: 0, alignWithNestedExpandIcon: false, + extraGutterWidth, }), - [editable] + [editable, extraGutterWidth] ); return ( @@ -147,6 +155,7 @@ const HadronDocument: React.FunctionComponent<{ type: el.parent?.currentType === 'Array' ? 'value' : 'key', }); }} + extraGutterWidth={extraGutterWidth} > ); })} diff --git a/packages/compass-components/src/components/document-list/element.tsx b/packages/compass-components/src/components/document-list/element.tsx index fe1a2def411..85197f9e709 100644 --- a/packages/compass-components/src/components/document-list/element.tsx +++ b/packages/compass-components/src/components/document-list/element.tsx @@ -363,36 +363,39 @@ const elementKeyDarkMode = css({ color: palette.gray.light2, }); -const calculateElementSpacerWidth = (editable: boolean, level: number) => { - return (editable ? spacing[100] : 0) + spacing[400] * level; +const calculateElementSpacerWidth = ( + editable: boolean, + level: number, + extra: number +) => { + return (editable ? spacing[100] : 0) + extra + spacing[400] * level; }; export const calculateShowMoreToggleOffset = ({ editable, level, alignWithNestedExpandIcon, + extraGutterWidth = 0, }: { editable: boolean; level: number; alignWithNestedExpandIcon: boolean; + extraGutterWidth: number | undefined; }) => { - // the base padding that we have on all elements rendered in the document - const BASE_PADDING_LEFT = spacing[50]; - const OFFSET_WHEN_EDITABLE = editable + const spacerWidth = calculateElementSpacerWidth( + editable, + level, + extraGutterWidth + ); + const editableOffset = editable ? // space taken by element actions spacing[300] + // space and margin taken by line number element spacing[400] + - spacing[100] + - // element spacer width that we render - calculateElementSpacerWidth(editable, level) + spacing[100] : 0; - const EXPAND_ICON_SIZE = spacing[400]; - return ( - BASE_PADDING_LEFT + - OFFSET_WHEN_EDITABLE + - (alignWithNestedExpandIcon ? EXPAND_ICON_SIZE : 0) - ); + const expandIconSize = alignWithNestedExpandIcon ? spacing[400] : 0; + return spacerWidth + editableOffset + expandIconSize; }; export const HadronElement: React.FunctionComponent<{ @@ -402,6 +405,7 @@ export const HadronElement: React.FunctionComponent<{ onEditStart?: (id: string, field: 'key' | 'value' | 'type') => void; lineNumberSize: number; onAddElement(el: HadronElementType): void; + extraGutterWidth?: number; }> = ({ value: element, editable, @@ -409,6 +413,7 @@ export const HadronElement: React.FunctionComponent<{ onEditStart, lineNumberSize, onAddElement, + extraGutterWidth = 0, }) => { const darkMode = useDarkMode(); const autoFocus = useAutoFocusContext(); @@ -445,8 +450,8 @@ export const HadronElement: React.FunctionComponent<{ }, [lineNumberSize, editingEnabled]); const elementSpacerWidth = useMemo( - () => calculateElementSpacerWidth(editable, level), - [editable, level] + () => calculateElementSpacerWidth(editable, level, extraGutterWidth), + [editable, level, extraGutterWidth] ); // To render the "Show more" toggle for the nested expandable elements we need @@ -457,8 +462,9 @@ export const HadronElement: React.FunctionComponent<{ editable, level, alignWithNestedExpandIcon: true, + extraGutterWidth, }), - [editable, level] + [editable, level, extraGutterWidth] ); const isValid = key.valid && value.valid; @@ -711,6 +717,7 @@ export const HadronElement: React.FunctionComponent<{ onEditStart={onEditStart} lineNumberSize={lineNumberSize} onAddElement={onAddElement} + extraGutterWidth={extraGutterWidth} > ); })} diff --git a/packages/compass-crud/src/components/readonly-document.tsx b/packages/compass-crud/src/components/readonly-document.tsx index e4815ad70ee..9397e959797 100644 --- a/packages/compass-crud/src/components/readonly-document.tsx +++ b/packages/compass-crud/src/components/readonly-document.tsx @@ -5,6 +5,7 @@ import type Document from 'hadron-document'; import type { TypeCastMap } from 'hadron-type-checker'; import { withPreferences } from 'compass-preferences-model/provider'; import { getInsightsForDocument } from '../utils'; +import { DocumentEvents } from 'hadron-document'; type BSONObject = TypeCastMap['Object']; export const documentStyles = css({ @@ -30,10 +31,73 @@ export type ReadonlyDocumentProps = { showInsights?: boolean; }; +type ReadonlyDocumentState = { + expanded: boolean; +}; + /** * Component for a single readonly document in a list of documents. */ -class ReadonlyDocument extends React.Component { +class ReadonlyDocument extends React.Component< + ReadonlyDocumentProps, + ReadonlyDocumentState +> { + constructor(props: ReadonlyDocumentProps) { + super(props); + this.state = { + expanded: props.doc.expanded, + }; + } + + /** + * Subscribe to the update store on mount. + */ + componentDidMount() { + this.subscribeToDocumentEvents(this.props.doc); + } + + /** + * Refreshing the list updates the doc in the props so we should update the + * document on the instance. + */ + componentDidUpdate(prevProps: ReadonlyDocumentProps) { + if (prevProps.doc !== this.props.doc) { + this.unsubscribeFromDocumentEvents(prevProps.doc); + this.subscribeToDocumentEvents(this.props.doc); + } + } + + /** + * Unsubscribe from the update store on unmount. + */ + componentWillUnmount() { + this.unsubscribeFromDocumentEvents(this.props.doc); + } + + /** + * Subscribe to the document events. + */ + subscribeToDocumentEvents(doc: Document) { + doc.on(DocumentEvents.Expanded, this.handleExpanded); + doc.on(DocumentEvents.Collapsed, this.handleCollapsed); + } + + /** + * Unsubscribe from the document events. + */ + unsubscribeFromDocumentEvents(doc: Document) { + doc.on(DocumentEvents.Expanded, this.handleExpanded); + doc.on(DocumentEvents.Collapsed, this.handleCollapsed); + } + + handleExpanded = () => { + this.setState({ expanded: true }); + }; + + handleCollapsed = () => { + this.setState({ expanded: false }); + }; + handleClone = () => { const clonedDoc = this.props.doc.generateObject({ excludeInternalFields: true, @@ -48,13 +112,32 @@ class ReadonlyDocument extends React.Component { this.props.copyToClipboard?.(this.props.doc); }; + /** + * Handle clicking the expand all button. + */ + handleExpandAll = () => { + const { doc } = this.props; + // Update the doc directly - the components internal state will update via events + if (doc.expanded) { + doc.collapse(); + } else { + doc.expand(); + } + }; + /** * Get the elements for the document. * * @returns {Array} The elements. */ renderElements() { - return ; + return ( + + ); } renderActions() { @@ -64,6 +147,8 @@ class ReadonlyDocument extends React.Component { onClone={ this.props.openInsertDocumentDialog ? this.handleClone : undefined } + onExpand={this.handleExpandAll} + expanded={this.state.expanded} insights={ this.props.showInsights ? getInsightsForDocument(this.props.doc) @@ -94,7 +179,6 @@ class ReadonlyDocument extends React.Component { static propTypes = { copyToClipboard: PropTypes.func, doc: PropTypes.object.isRequired, - expandAll: PropTypes.bool, openInsertDocumentDialog: PropTypes.func, showInsights: PropTypes.bool, }; From fac4f9d038586f6f58d70fd0b04d5f37f158a986 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 15:38:14 +0000 Subject: [PATCH 43/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6469) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index a2f48357f35..1f4e494cc44 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Nov 8, 2024 at 02:10 PM +Generated on Fri, Nov 8, 2024 at 03:38 PM ## Table of Contents From 06999d8924a7229cda68eb4f905928eaf27da04e Mon Sep 17 00:00:00 2001 From: Rhys Date: Fri, 8 Nov 2024 13:50:47 -0500 Subject: [PATCH 44/81] chore(generative-ai): move ai sign in modal to gen ai package from atlas-service COMPASS-8459 (#6448) --- package-lock.json | 12 +- packages/atlas-service/package.json | 1 - .../atlas-service/src/atlas-auth-service.ts | 2 +- .../src/compass-atlas-auth-service.ts | 7 +- packages/atlas-service/src/renderer.ts | 3 +- .../src/store/atlas-signin-reducer.spec.ts | 99 +---- .../src/store/atlas-signin-reducer.ts | 67 +--- packages/compass-aggregations/src/index.ts | 2 - .../compass-aggregations/src/modules/index.ts | 2 - .../modules/pipeline-builder/pipeline-ai.ts | 4 +- .../pipeline-builder/stage-editor.spec.ts | 1 - .../text-editor-pipeline.spec.ts | 1 - .../compass-aggregations/src/stores/store.ts | 4 - .../test/configure-store.ts | 24 +- .../src/components/crud-toolbar.spec.tsx | 1 - packages/compass-generative-ai/package.json | 6 +- .../src/atlas-ai-service.ts | 8 + .../atlas-signin}/ai-signin-banner-image.tsx | 0 .../atlas-signin}/ai-signin-modal.tsx | 4 +- .../src/components/atlas-signin}/index.tsx | 0 .../src/components/index.ts | 1 + packages/compass-generative-ai/src/index.ts | 17 + .../src/store/atlas-signin-reducer.spec.ts | 189 ++++++++++ .../src/store/atlas-signin-reducer.ts | 357 ++++++++++++++++++ .../src/store/atlas-signin-store.ts | 54 +++ packages/compass-query-bar/src/index.tsx | 2 - .../src/stores/ai-query-reducer.spec.ts | 5 - .../src/stores/ai-query-reducer.ts | 4 +- .../src/stores/query-bar-store.spec.ts | 1 - .../src/stores/query-bar-store.ts | 7 +- .../src/components/field.spec.tsx | 1 - .../schema-toolbar/schema-toolbar.spec.tsx | 1 - packages/compass/src/app/components/home.tsx | 2 + 33 files changed, 657 insertions(+), 232 deletions(-) rename packages/{atlas-service/src/components => compass-generative-ai/src/components/atlas-signin}/ai-signin-banner-image.tsx (100%) rename packages/{atlas-service/src/components => compass-generative-ai/src/components/atlas-signin}/ai-signin-modal.tsx (95%) rename packages/{atlas-service/src/components => compass-generative-ai/src/components/atlas-signin}/index.tsx (100%) create mode 100644 packages/compass-generative-ai/src/store/atlas-signin-reducer.spec.ts create mode 100644 packages/compass-generative-ai/src/store/atlas-signin-reducer.ts create mode 100644 packages/compass-generative-ai/src/store/atlas-signin-store.ts diff --git a/package-lock.json b/package-lock.json index 6d84e918a93..80f1be6c2cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43032,7 +43032,6 @@ "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "react": "^17.0.2", - "react-redux": "^8.1.3", "redux": "^4.2.1", "redux-thunk": "^2.4.2" }, @@ -44755,12 +44754,16 @@ "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-intercom": "^0.14.0", "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-utils": "^0.6.14", "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "mongodb": "^6.9.0", "mongodb-schema": "^12.2.0", - "react": "^17.0.2" + "react": "^17.0.2", + "react-redux": "^8.1.3", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2" }, "devDependencies": { "@mongodb-js/connection-info": "^0.9.3", @@ -54927,7 +54930,6 @@ "nyc": "^15.1.0", "prettier": "^2.7.1", "react": "^17.0.2", - "react-redux": "^8.1.3", "redux": "^4.2.1", "redux-thunk": "^2.4.2", "sinon": "^9.2.3", @@ -55977,6 +55979,7 @@ "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-intercom": "^0.14.0", "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-utils": "^0.6.14", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", "@mongodb-js/mocha-config-compass": "^1.4.2", @@ -56002,6 +56005,9 @@ "p-queue": "^7.4.1", "prettier": "^2.7.1", "react": "^17.0.2", + "react-redux": "^8.1.3", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", "sinon": "^9.2.3", "typescript": "^5.0.4", "xvfb-maybe": "^0.2.1" diff --git a/packages/atlas-service/package.json b/packages/atlas-service/package.json index 129ccb1d7e5..1978054d3b4 100644 --- a/packages/atlas-service/package.json +++ b/packages/atlas-service/package.json @@ -88,7 +88,6 @@ "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "react": "^17.0.2", - "react-redux": "^8.1.3", "redux": "^4.2.1", "redux-thunk": "^2.4.2" } diff --git a/packages/atlas-service/src/atlas-auth-service.ts b/packages/atlas-service/src/atlas-auth-service.ts index 22cf698a786..76f2ff6acf8 100644 --- a/packages/atlas-service/src/atlas-auth-service.ts +++ b/packages/atlas-service/src/atlas-auth-service.ts @@ -4,7 +4,7 @@ import type { AtlasUserInfo } from './util'; export type ArgsWithSignal> = T & { signal?: AbortSignal; }; -export type SignInPrompt = 'none' | 'ai-promo-modal'; +export type SignInPrompt = 'none'; type AtlasAuthServiceEvents = { 'signed-in': []; diff --git a/packages/atlas-service/src/compass-atlas-auth-service.ts b/packages/atlas-service/src/compass-atlas-auth-service.ts index d4ee83c9072..51f3fed1535 100644 --- a/packages/atlas-service/src/compass-atlas-auth-service.ts +++ b/packages/atlas-service/src/compass-atlas-auth-service.ts @@ -1,9 +1,6 @@ import { ipcRenderer } from 'hadron-ipc'; import type { CompassAuthService as AtlasServiceMain } from './main'; -import { - signInWithModalPrompt, - signInWithoutPrompt, -} from './store/atlas-signin-reducer'; +import { signInWithoutPrompt } from './store/atlas-signin-reducer'; import { getStore } from './store/atlas-signin-store'; import { AtlasAuthService } from './atlas-auth-service'; import type { ArgsWithSignal, SignInPrompt } from './atlas-auth-service'; @@ -46,8 +43,6 @@ export class CompassAtlasAuthService extends AtlasAuthService { switch (promptType) { case 'none': return getStore().dispatch(signInWithoutPrompt({ signal })); - case 'ai-promo-modal': - return getStore().dispatch(signInWithModalPrompt({ signal })); default: return this.ipc.signIn({ signal }); } diff --git a/packages/atlas-service/src/renderer.ts b/packages/atlas-service/src/renderer.ts index 2407aee7b21..f69e1ce5225 100644 --- a/packages/atlas-service/src/renderer.ts +++ b/packages/atlas-service/src/renderer.ts @@ -1,12 +1,11 @@ import { registerHadronPlugin } from 'hadron-app-registry'; import { activatePlugin } from './store/atlas-signin-store'; import { atlasAuthServiceLocator } from './provider'; -import { AtlasSignIn } from './components'; export const AtlasAuthPlugin = registerHadronPlugin( { name: 'AtlasAuth', - component: AtlasSignIn, + component: () => null, activate: activatePlugin, }, { diff --git a/packages/atlas-service/src/store/atlas-signin-reducer.spec.ts b/packages/atlas-service/src/store/atlas-signin-reducer.spec.ts index 653097138ab..0c13a4bc062 100644 --- a/packages/atlas-service/src/store/atlas-signin-reducer.spec.ts +++ b/packages/atlas-service/src/store/atlas-signin-reducer.spec.ts @@ -5,8 +5,6 @@ import { cancelSignIn, attemptId, AttemptStateMap, - signInWithModalPrompt, - closeSignInModal, signInWithoutPrompt, } from './atlas-signin-reducer'; import { expect } from 'chai'; @@ -176,7 +174,7 @@ describe('atlasSignInReducer', function () { atlasAuthService: mockAtlasService as any, }); - void store.dispatch(signInWithModalPrompt()).catch(() => {}); + void store.dispatch(signInWithoutPrompt()).catch(() => {}); await Promise.all([ store.dispatch(signIn()), @@ -186,101 +184,6 @@ describe('atlasSignInReducer', function () { }); }); - describe('signInWithModalPrompt', function () { - it('should resolve when user finishes sign in with prompt flow', async function () { - const mockAtlasService = { - isAuthenticated: sandbox.stub().resolves(false), - signIn: sandbox.stub().resolves({ sub: '1234' }), - getUserInfo: sandbox.stub().resolves({ sub: '1234' }), - emit: sandbox.stub(), - }; - const store = configureStore({ - atlasAuthService: mockAtlasService as any, - }); - - const signInPromise = store.dispatch(signInWithModalPrompt()); - await store.dispatch(signIn()); - await signInPromise; - - expect(store.getState()).to.have.property('state', 'success'); - }); - - it('should reject if sign in flow fails', async function () { - const mockAtlasService = { - isAuthenticated: sandbox.stub().resolves(false), - signIn: sandbox.stub().rejects(new Error('Whoops!')), - getUserInfo: sandbox.stub().resolves({ sub: '1234' }), - emit: sandbox.stub(), - }; - const store = configureStore({ - atlasAuthService: mockAtlasService as any, - }); - - const signInPromise = store.dispatch(signInWithModalPrompt()); - await store.dispatch(signIn()); - - try { - await signInPromise; - throw new Error('Expected signInPromise to throw'); - } catch (err) { - expect(err).to.have.property('message', 'Whoops!'); - } - - expect(store.getState()).to.have.property('state', 'error'); - }); - - it('should reject if user dismissed the modal', async function () { - const mockAtlasService = { - isAuthenticated: sandbox.stub().resolves(false), - signIn: sandbox.stub().resolves({ sub: '1234' }), - getUserInfo: sandbox.stub().resolves({ sub: '1234' }), - emit: sandbox.stub(), - }; - const store = configureStore({ - atlasAuthService: mockAtlasService as any, - }); - - const signInPromise = store.dispatch(signInWithModalPrompt()); - store.dispatch(closeSignInModal()); - - try { - await signInPromise; - throw new Error('Expected signInPromise to throw'); - } catch (err) { - expect(err).to.have.property('message', 'This operation was aborted'); - } - - expect(store.getState()).to.have.property('state', 'canceled'); - }); - - it('should reject if provided signal was aborted', async function () { - const mockAtlasService = { - isAuthenticated: sandbox.stub().resolves(false), - signIn: sandbox.stub().resolves({ sub: '1234' }), - getUserInfo: sandbox.stub().resolves({ sub: '1234' }), - emit: sandbox.stub(), - }; - const store = configureStore({ - atlasAuthService: mockAtlasService as any, - }); - - const c = new AbortController(); - const signInPromise = store.dispatch( - signInWithModalPrompt({ signal: c.signal }) - ); - c.abort(new Error('Aborted from outside')); - - try { - await signInPromise; - throw new Error('Expected signInPromise to throw'); - } catch (err) { - expect(err).to.have.property('message', 'Aborted from outside'); - } - - expect(store.getState()).to.have.property('state', 'canceled'); - }); - }); - describe('signInWithoutPrompt', function () { it('should resolve when sign in flow finishes', async function () { const mockAtlasService = { diff --git a/packages/atlas-service/src/store/atlas-signin-reducer.ts b/packages/atlas-service/src/store/atlas-signin-reducer.ts index b1d4c4d8b6f..92561fdee0c 100644 --- a/packages/atlas-service/src/store/atlas-signin-reducer.ts +++ b/packages/atlas-service/src/store/atlas-signin-reducer.ts @@ -14,7 +14,6 @@ export function isAction( export type AtlasSignInState = { error: string | null; - isModalOpen: boolean; // For managing attempt state that doesn't belong in the store currentAttemptId: number | null; } & ( @@ -37,8 +36,6 @@ export type AtlasSignInThunkAction< > = ThunkAction; export const enum AtlasSignInActions { - OpenSignInModal = 'atlas-service/atlas-signin/OpenSignInModal', - CloseSignInModal = 'atlas-service/atlas-signin/CloseSignInModal', RestoringStart = 'atlas-service/atlas-signin/StartRestoring', RestoringFailed = 'atlas-service/atlas-signin/RestoringFailed', RestoringSuccess = 'atlas-service/atlas-signin/RestoringSuccess', @@ -52,14 +49,6 @@ export const enum AtlasSignInActions { SignedOut = 'atlas-service/atlas-signin/SignedOut', } -export type AtlasSignInOpenModalAction = { - type: AtlasSignInActions.OpenSignInModal; -}; - -export type AtlasSignInCloseModalAction = { - type: AtlasSignInActions.CloseSignInModal; -}; - export type AtlasSignInRestoringStartAction = { type: AtlasSignInActions.RestoringStart; }; @@ -250,24 +239,6 @@ const reducer: Reducer = ( return { ...INITIAL_STATE, state: 'canceled' }; } - if ( - isAction( - action, - AtlasSignInActions.OpenSignInModal - ) - ) { - return { ...state, isModalOpen: true }; - } - - if ( - isAction( - action, - AtlasSignInActions.CloseSignInModal - ) - ) { - return { ...state, isModalOpen: false }; - } - if ( isAction( action, @@ -337,29 +308,6 @@ const startAttempt = (fn: () => void): AtlasSignInThunkAction => { }; }; -export const signInWithModalPrompt = ({ - signal, -}: { signal?: AbortSignal } = {}): AtlasSignInThunkAction< - Promise -> => { - return async (dispatch, getState) => { - // Nothing to do if we already signed in - const { state, userInfo } = getState(); - if (state === 'success') { - return userInfo; - } - const attempt = dispatch( - startAttempt(() => { - dispatch(openSignInModal()); - }) - ); - signal?.addEventListener('abort', () => { - dispatch(closeSignInModal(signal.reason)); - }); - return attempt.promise; - }; -}; - export const signInWithoutPrompt = ({ signal, }: { signal?: AbortSignal } = {}): AtlasSignInThunkAction< @@ -383,12 +331,8 @@ export const signInWithoutPrompt = ({ }; }; -export const openSignInModal = () => { - return { type: AtlasSignInActions.OpenSignInModal }; -}; - /** - * Sign in from the opt in window + * Sign into Atlas. To be called when the user isn't signed in yet. */ export const signIn = (): AtlasSignInThunkAction> => { return async (dispatch, getState, { atlasAuthService }) => { @@ -434,15 +378,6 @@ export const signIn = (): AtlasSignInThunkAction> => { }; }; -export const closeSignInModal = ( - reason?: any -): AtlasSignInThunkAction => { - return (dispatch) => { - dispatch(cancelSignIn(reason)); - dispatch({ type: AtlasSignInActions.CloseSignInModal }); - }; -}; - export const cancelSignIn = (reason?: any): AtlasSignInThunkAction => { return (dispatch, getState) => { // Can't cancel sign in after the flow was finished indicated by current diff --git a/packages/compass-aggregations/src/index.ts b/packages/compass-aggregations/src/index.ts index 386fef6a51e..967b2e091bb 100644 --- a/packages/compass-aggregations/src/index.ts +++ b/packages/compass-aggregations/src/index.ts @@ -25,7 +25,6 @@ import { } from '@mongodb-js/compass-app-stores/provider'; import { workspacesServiceLocator } from '@mongodb-js/compass-workspaces/provider'; import { preferencesLocator } from 'compass-preferences-model/provider'; -import { atlasAuthServiceLocator } from '@mongodb-js/atlas-service/provider'; import { atlasAiServiceLocator } from '@mongodb-js/compass-generative-ai/provider'; import { pipelineStorageLocator } from '@mongodb-js/my-queries-storage/provider'; import { connectionRepositoryAccessLocator } from '@mongodb-js/compass-connections/provider'; @@ -49,7 +48,6 @@ const CompassAggregationsHadronPlugin = registerHadronPlugin( preferences: preferencesLocator, logger: createLoggerLocator('COMPASS-AGGREGATIONS-UI'), track: telemetryLocator, - atlasAuthService: atlasAuthServiceLocator, atlasAiService: atlasAiServiceLocator, pipelineStorage: pipelineStorageLocator, connectionInfoRef: connectionInfoRefLocator, diff --git a/packages/compass-aggregations/src/modules/index.ts b/packages/compass-aggregations/src/modules/index.ts index 2a58a0a6cf0..59686b726d0 100644 --- a/packages/compass-aggregations/src/modules/index.ts +++ b/packages/compass-aggregations/src/modules/index.ts @@ -42,7 +42,6 @@ import type { PreferencesAccess } from 'compass-preferences-model'; import type { Logger } from '@mongodb-js/compass-logging/provider'; import type AppRegistry from 'hadron-app-registry'; import type { AtlasAiService } from '@mongodb-js/compass-generative-ai/provider'; -import type { AtlasAuthService } from '@mongodb-js/atlas-service/provider'; import type { MongoDBInstance } from 'mongodb-instance-model'; import type { DataService } from '../modules/data-service'; import type { @@ -100,7 +99,6 @@ export type PipelineBuilderExtraArgs = { localAppRegistry: AppRegistry; pipelineBuilder: PipelineBuilder; pipelineStorage: PipelineStorage; - atlasAuthService: AtlasAuthService; workspaces: WorkspacesService; preferences: PreferencesAccess; logger: Logger; diff --git a/packages/compass-aggregations/src/modules/pipeline-builder/pipeline-ai.ts b/packages/compass-aggregations/src/modules/pipeline-builder/pipeline-ai.ts index 5c60b683f8c..f2f980d485a 100644 --- a/packages/compass-aggregations/src/modules/pipeline-builder/pipeline-ai.ts +++ b/packages/compass-aggregations/src/modules/pipeline-builder/pipeline-ai.ts @@ -447,10 +447,10 @@ export const resetIsAggregationGeneratedFromQuery = }; export const showInput = (): PipelineBuilderThunkAction> => { - return async (dispatch, _getState, { atlasAuthService }) => { + return async (dispatch, _getState, { atlasAiService }) => { try { if (process.env.COMPASS_E2E_SKIP_ATLAS_SIGNIN !== 'true') { - await atlasAuthService.signIn({ promptType: 'ai-promo-modal' }); + await atlasAiService.ensureAiFeatureAccess(); } dispatch({ type: AIPipelineActionTypes.ShowInput, diff --git a/packages/compass-aggregations/src/modules/pipeline-builder/stage-editor.spec.ts b/packages/compass-aggregations/src/modules/pipeline-builder/stage-editor.spec.ts index 8de3a4be5ae..b85472af616 100644 --- a/packages/compass-aggregations/src/modules/pipeline-builder/stage-editor.spec.ts +++ b/packages/compass-aggregations/src/modules/pipeline-builder/stage-editor.spec.ts @@ -128,7 +128,6 @@ function createStore({ thunk.withExtraArgument({ globalAppRegistry: new AppRegistry(), localAppRegistry: new AppRegistry(), - atlasAuthService: {} as any, atlasAiService: {} as any, pipelineBuilder, pipelineStorage: new CompassPipelineStorage(), diff --git a/packages/compass-aggregations/src/modules/pipeline-builder/text-editor-pipeline.spec.ts b/packages/compass-aggregations/src/modules/pipeline-builder/text-editor-pipeline.spec.ts index ee34bed867b..72a4743c575 100644 --- a/packages/compass-aggregations/src/modules/pipeline-builder/text-editor-pipeline.spec.ts +++ b/packages/compass-aggregations/src/modules/pipeline-builder/text-editor-pipeline.spec.ts @@ -44,7 +44,6 @@ function createStore( }, applyMiddleware( thunk.withExtraArgument({ - atlasAuthService: {} as any, atlasAiService: {} as any, pipelineBuilder, pipelineStorage: new CompassPipelineStorage(), diff --git a/packages/compass-aggregations/src/stores/store.ts b/packages/compass-aggregations/src/stores/store.ts index 4f0d950be02..7ee9ebedb01 100644 --- a/packages/compass-aggregations/src/stores/store.ts +++ b/packages/compass-aggregations/src/stores/store.ts @@ -33,7 +33,6 @@ import type { CollectionTabPluginMetadata } from '@mongodb-js/compass-collection import type { PreferencesAccess } from 'compass-preferences-model'; import type { Logger } from '@mongodb-js/compass-logging/provider'; import type { AtlasAiService } from '@mongodb-js/compass-generative-ai/provider'; -import type { AtlasAuthService } from '@mongodb-js/atlas-service/provider'; import type { PipelineStorage } from '@mongodb-js/my-queries-storage/provider'; import { maxTimeMSChanged } from '../modules/max-time-ms'; import type { @@ -80,7 +79,6 @@ export type AggregationsPluginServices = { preferences: PreferencesAccess; logger: Logger; track: TrackFunction; - atlasAuthService: AtlasAuthService; atlasAiService: AtlasAiService; pipelineStorage?: PipelineStorage; connectionInfoRef: ConnectionInfoRef; @@ -100,7 +98,6 @@ export function activateAggregationsPlugin( logger, track, atlasAiService, - atlasAuthService, pipelineStorage, connectionInfoRef, connectionScopedAppRegistry, @@ -184,7 +181,6 @@ export function activateAggregationsPlugin( localAppRegistry, pipelineBuilder, pipelineStorage, - atlasAuthService, workspaces, instance, preferences, diff --git a/packages/compass-aggregations/test/configure-store.ts b/packages/compass-aggregations/test/configure-store.ts index a211c17dea9..4cf517cbbf8 100644 --- a/packages/compass-aggregations/test/configure-store.ts +++ b/packages/compass-aggregations/test/configure-store.ts @@ -3,31 +3,12 @@ import type { ConfigureStoreOptions, } from '../src/stores/store'; import { mockDataService } from './mocks/data-service'; -import { AtlasAuthService } from '@mongodb-js/atlas-service/provider'; import { createPluginTestHelpers } from '@mongodb-js/testing-library-compass'; import { CompassAggregationsPlugin } from '../src/index'; import type { DataService } from '@mongodb-js/compass-connections/provider'; import React from 'react'; import { PipelineStorageProvider } from '@mongodb-js/my-queries-storage/provider'; -export class MockAtlasAuthService extends AtlasAuthService { - isAuthenticated() { - return Promise.resolve(true); - } - async getUserInfo() { - return Promise.resolve({} as any); - } - async signIn() { - return Promise.resolve({} as any); - } - async signOut() { - return Promise.resolve(); - } - getAuthHeaders() { - return Promise.resolve({}); - } -} - export class MockAtlasAiService { async getAggregationFromUserInput() { return Promise.resolve({}); @@ -35,6 +16,9 @@ export class MockAtlasAiService { async getQueryFromUserInput() { return Promise.resolve({}); } + async ensureAiFeatureAccess() { + return Promise.resolve(); + } } function getMockedPluginArgs( @@ -42,11 +26,9 @@ function getMockedPluginArgs( dataService: Partial = mockDataService(), services: Partial = {} ) { - const atlasAuthService = new MockAtlasAuthService(); const atlasAiService = new MockAtlasAiService(); return [ CompassAggregationsPlugin.provider.withMockServices({ - atlasAuthService, atlasAiService, collection: { toJSON: () => ({}), diff --git a/packages/compass-crud/src/components/crud-toolbar.spec.tsx b/packages/compass-crud/src/components/crud-toolbar.spec.tsx index 77b4643f491..43ce37903c3 100644 --- a/packages/compass-crud/src/components/crud-toolbar.spec.tsx +++ b/packages/compass-crud/src/components/crud-toolbar.spec.tsx @@ -39,7 +39,6 @@ const MockQueryBarPlugin = QueryBarPlugin.withMockServices({ favoriteQueryStorageAccess: compassFavoriteQueryStorageAccess, recentQueryStorageAccess: compassRecentQueryStorageAccess, atlasAiService: {} as any, - atlasAuthService: { on() {}, removeListener() {} } as any, }); const addDataText = 'Add Data'; diff --git a/packages/compass-generative-ai/package.json b/packages/compass-generative-ai/package.json index 5c051a9c6ac..b7a0114f514 100644 --- a/packages/compass-generative-ai/package.json +++ b/packages/compass-generative-ai/package.json @@ -57,12 +57,16 @@ "@mongodb-js/compass-connections": "^1.47.0", "@mongodb-js/compass-intercom": "^0.14.0", "@mongodb-js/compass-logging": "^1.4.10", + "@mongodb-js/compass-utils": "^0.6.14", "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", "hadron-app-registry": "^9.2.7", "mongodb": "^6.9.0", "mongodb-schema": "^12.2.0", - "react": "^17.0.2" + "react": "^17.0.2", + "react-redux": "^8.1.3", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2" }, "devDependencies": { "@mongodb-js/connection-info": "^0.9.3", diff --git a/packages/compass-generative-ai/src/atlas-ai-service.ts b/packages/compass-generative-ai/src/atlas-ai-service.ts index b5038c1faf9..89cdccfaf8f 100644 --- a/packages/compass-generative-ai/src/atlas-ai-service.ts +++ b/packages/compass-generative-ai/src/atlas-ai-service.ts @@ -9,6 +9,8 @@ import type { ConnectionInfo } from '@mongodb-js/compass-connections/provider'; import type { Document } from 'mongodb'; import type { Logger } from '@mongodb-js/compass-logging'; import { EJSON } from 'bson'; +import { signIntoAtlasWithModalPrompt } from './store/atlas-signin-reducer'; +import { getStore } from './store/atlas-signin-store'; type GenerativeAiInput = { userInput: string; @@ -324,6 +326,12 @@ export class AtlasAiService { } } + async ensureAiFeatureAccess({ signal }: { signal?: AbortSignal } = {}) { + // When the ai feature is attempted to be opened we make sure + // the user is signed into Atlas and opted in. + return getStore().dispatch(signIntoAtlasWithModalPrompt({ signal })); + } + private getQueryOrAggregationFromUserInput = async ( { urlId, diff --git a/packages/atlas-service/src/components/ai-signin-banner-image.tsx b/packages/compass-generative-ai/src/components/atlas-signin/ai-signin-banner-image.tsx similarity index 100% rename from packages/atlas-service/src/components/ai-signin-banner-image.tsx rename to packages/compass-generative-ai/src/components/atlas-signin/ai-signin-banner-image.tsx diff --git a/packages/atlas-service/src/components/ai-signin-modal.tsx b/packages/compass-generative-ai/src/components/atlas-signin/ai-signin-modal.tsx similarity index 95% rename from packages/atlas-service/src/components/ai-signin-modal.tsx rename to packages/compass-generative-ai/src/components/atlas-signin/ai-signin-modal.tsx index 464dc88a559..a199945b067 100644 --- a/packages/atlas-service/src/components/ai-signin-modal.tsx +++ b/packages/compass-generative-ai/src/components/atlas-signin/ai-signin-modal.tsx @@ -11,8 +11,8 @@ import { useDarkMode, } from '@mongodb-js/compass-components'; import { AISignInImageBanner } from './ai-signin-banner-image'; -import type { AtlasSignInState } from '../store/atlas-signin-reducer'; -import { closeSignInModal, signIn } from '../store/atlas-signin-reducer'; +import type { AtlasSignInState } from '../../store/atlas-signin-reducer'; +import { closeSignInModal, signIn } from '../../store/atlas-signin-reducer'; const GEN_AI_FAQ_LINK = 'https://www.mongodb.com/docs/generative-ai-faq/'; diff --git a/packages/atlas-service/src/components/index.tsx b/packages/compass-generative-ai/src/components/atlas-signin/index.tsx similarity index 100% rename from packages/atlas-service/src/components/index.tsx rename to packages/compass-generative-ai/src/components/atlas-signin/index.tsx diff --git a/packages/compass-generative-ai/src/components/index.ts b/packages/compass-generative-ai/src/components/index.ts index f2f97da4ac7..cc65c9df4f4 100644 --- a/packages/compass-generative-ai/src/components/index.ts +++ b/packages/compass-generative-ai/src/components/index.ts @@ -3,3 +3,4 @@ export { AIExperienceEntry, createAIPlaceholderHTMLPlaceholder, } from './ai-experience-entry'; +export { AtlasSignIn } from './atlas-signin'; diff --git a/packages/compass-generative-ai/src/index.ts b/packages/compass-generative-ai/src/index.ts index caf0b37a175..a6f55d1bbec 100644 --- a/packages/compass-generative-ai/src/index.ts +++ b/packages/compass-generative-ai/src/index.ts @@ -1,3 +1,20 @@ +import { registerHadronPlugin } from 'hadron-app-registry'; +import { atlasAuthServiceLocator } from '@mongodb-js/atlas-service/provider'; + +import { activatePlugin } from './store/atlas-signin-store'; +import { AtlasSignIn } from './components'; + +export const CompassGenerativeAIPlugin = registerHadronPlugin( + { + name: 'CompassGenerativeAI', + component: AtlasSignIn, + activate: activatePlugin, + }, + { + atlasAuthService: atlasAuthServiceLocator, + } +); + export { AIExperienceEntry, GenerativeAIInput, diff --git a/packages/compass-generative-ai/src/store/atlas-signin-reducer.spec.ts b/packages/compass-generative-ai/src/store/atlas-signin-reducer.spec.ts new file mode 100644 index 00000000000..3a036cb536c --- /dev/null +++ b/packages/compass-generative-ai/src/store/atlas-signin-reducer.spec.ts @@ -0,0 +1,189 @@ +import Sinon from 'sinon'; +import { expect } from 'chai'; + +import { + signIn, + cancelSignIn, + attemptId, + AttemptStateMap, + signIntoAtlasWithModalPrompt, + closeSignInModal, + atlasServiceSignedIn, +} from './atlas-signin-reducer'; +import { configureStore } from './atlas-signin-store'; + +describe('atlasSignInReducer', function () { + const sandbox = Sinon.createSandbox(); + + afterEach(function () { + sandbox.reset(); + }); + + describe('signIn', function () { + it('should check authenticated state and set state to success if already authenticated', async function () { + const mockAtlasService = { + signIn: sandbox.stub().resolves({ sub: '1234' }), + }; + const store = configureStore({ + atlasAuthService: mockAtlasService as any, + }); + + expect(store.getState()).to.have.nested.property('state', 'initial'); + void store.dispatch(atlasServiceSignedIn()); + await store.dispatch(signIn()); + expect(mockAtlasService.signIn).not.to.have.been.called; + expect(store.getState()).to.have.nested.property('state', 'success'); + }); + + it('should start sign in, and set state to success', async function () { + const mockAtlasService = { + signIn: sandbox.stub().resolves({ sub: '1234' }), + }; + const store = configureStore({ + atlasAuthService: mockAtlasService as any, + }); + + expect(store.getState()).to.have.nested.property('state', 'initial'); + void store.dispatch(signIntoAtlasWithModalPrompt()).catch(() => {}); + await store.dispatch(signIn()); + expect(mockAtlasService.signIn).to.have.been.calledOnce; + expect(store.getState()).to.have.nested.property('state', 'success'); + }); + + it('should fail sign in if sign in failed', async function () { + const mockAtlasService = { + signIn: sandbox.stub().rejects(new Error('Pineapples!')), + }; + const store = configureStore({ + atlasAuthService: mockAtlasService as any, + }); + + void store.dispatch(signIntoAtlasWithModalPrompt()).catch(() => {}); + const signInPromise = store.dispatch(signIn()); + // Avoid unhandled rejections. + AttemptStateMap.get(attemptId)?.promise.catch(() => {}); + await signInPromise; + expect(mockAtlasService.signIn).to.have.been.calledOnce; + expect(store.getState()).to.have.nested.property('state', 'error'); + }); + }); + + describe('cancelSignIn', function () { + it('should do nothing if no sign in is in progress', function () { + const store = configureStore({ + atlasAuthService: {} as any, + }); + expect(store.getState()).to.have.nested.property('state', 'initial'); + store.dispatch(cancelSignIn()); + expect(store.getState()).to.have.nested.property('state', 'initial'); + }); + + it('should cancel sign in if sign in is in progress', async function () { + const mockAtlasService = { + signIn: sandbox + .stub() + .callsFake(({ signal }: { signal: AbortSignal }) => { + return new Promise((resolve, reject) => { + signal.addEventListener('abort', () => { + reject(signal.reason); + }); + }); + }), + }; + const store = configureStore({ + atlasAuthService: mockAtlasService as any, + }); + + void store.dispatch(signIntoAtlasWithModalPrompt()).catch(() => {}); + + await Promise.all([ + store.dispatch(signIn()), + store.dispatch(cancelSignIn()), + ]); + expect(store.getState()).to.have.nested.property('state', 'canceled'); + }); + }); + + describe('signIntoAtlasWithModalPrompt', function () { + it('should resolve when user finishes sign in with prompt flow', async function () { + const mockAtlasService = { + signIn: sandbox.stub().resolves({ sub: '1234' }), + }; + const store = configureStore({ + atlasAuthService: mockAtlasService as any, + }); + + const signInPromise = store.dispatch(signIntoAtlasWithModalPrompt()); + await store.dispatch(signIn()); + await signInPromise; + + expect(store.getState()).to.have.property('state', 'success'); + }); + + it('should reject if sign in flow fails', async function () { + const mockAtlasService = { + signIn: sandbox.stub().rejects(new Error('Whoops!')), + }; + const store = configureStore({ + atlasAuthService: mockAtlasService as any, + }); + + const signInPromise = store.dispatch(signIntoAtlasWithModalPrompt()); + await store.dispatch(signIn()); + + try { + await signInPromise; + throw new Error('Expected signInPromise to throw'); + } catch (err) { + expect(err).to.have.property('message', 'Whoops!'); + } + + expect(store.getState()).to.have.property('state', 'error'); + }); + + it('should reject if user dismissed the modal', async function () { + const mockAtlasService = { + signIn: sandbox.stub().resolves({ sub: '1234' }), + }; + const store = configureStore({ + atlasAuthService: mockAtlasService as any, + }); + + const signInPromise = store.dispatch(signIntoAtlasWithModalPrompt()); + store.dispatch(closeSignInModal(new Error('This operation was aborted'))); + + try { + await signInPromise; + throw new Error('Expected signInPromise to throw'); + } catch (err) { + expect(err).to.have.property('message', 'This operation was aborted'); + } + + expect(store.getState()).to.have.property('state', 'canceled'); + }); + + it('should reject if provided signal was aborted', async function () { + const mockAtlasService = { + signIn: sandbox.stub().resolves({ sub: '1234' }), + }; + const store = configureStore({ + atlasAuthService: mockAtlasService as any, + }); + + const c = new AbortController(); + const signInPromise = store.dispatch( + signIntoAtlasWithModalPrompt({ signal: c.signal }) + ); + c.abort(new Error('Aborted from outside')); + + try { + await signInPromise; + throw new Error('Expected signInPromise to throw'); + } catch (err) { + expect(err).to.have.property('message', 'Aborted from outside'); + } + + expect(store.getState()).to.have.property('state', 'canceled'); + }); + }); +}); diff --git a/packages/compass-generative-ai/src/store/atlas-signin-reducer.ts b/packages/compass-generative-ai/src/store/atlas-signin-reducer.ts new file mode 100644 index 00000000000..52b15b96920 --- /dev/null +++ b/packages/compass-generative-ai/src/store/atlas-signin-reducer.ts @@ -0,0 +1,357 @@ +import type { Action, AnyAction, Reducer } from 'redux'; +import type { ThunkAction } from 'redux-thunk'; +import type { AtlasAuthService } from '@mongodb-js/atlas-service/provider'; +import { throwIfAborted } from '@mongodb-js/compass-utils'; + +function isAction( + action: AnyAction, + type: A['type'] +): action is A { + return action.type === type; +} + +type AttemptState = { + id: number; + controller: AbortController; + promise: Promise; + resolve: () => void; + reject: (reason?: any) => void; +}; + +export type AtlasSignInState = { + error: string | null; + isModalOpen: boolean; + attemptId: number | null; +} & ( + | { + state: 'initial' | 'in-progress' | 'error' | 'canceled'; + } + | { state: 'success' } +); + +export type GenAIAtlasSignInThunkAction< + R, + A extends AnyAction = AnyAction +> = ThunkAction; + +export const enum AtlasSignInActions { + OpenSignInModal = 'compass-generative-ai/atlas-signin/OpenSignInModal', + CloseSignInModal = 'compass-generative-ai/atlas-signin/CloseSignInModal', + AttemptStart = 'compass-generative-ai/atlas-signin/AttemptStart', + AttemptEnd = 'compass-generative-ai/atlas-signin/AttemptEnd', + Start = 'compass-generative-ai/atlas-signin/AtlasSignInStart', + Success = 'compass-generative-ai/atlas-signin/AtlasSignInSuccess', + Error = 'compass-generative-ai/atlas-signin/AtlasSignInError', + Cancel = 'compass-generative-ai/atlas-signin/AtlasSignInCancel', + TokenRefreshFailed = 'compass-generative-ai/atlas-signin/TokenRefreshFailed', + SignedOut = 'compass-generative-ai/atlas-signin/SignedOut', +} + +export type AtlasSignInOpenModalAction = { + type: AtlasSignInActions.OpenSignInModal; +}; + +export type AtlasSignInCloseModalAction = { + type: AtlasSignInActions.CloseSignInModal; +}; + +export type AtlasSignInAttemptStartAction = { + type: AtlasSignInActions.AttemptStart; + attemptId: number; +}; + +export type AtlasSignInAttemptEndAction = { + type: AtlasSignInActions.AttemptEnd; + attemptId: number; +}; + +export type AtlasSignInStartAction = { + type: AtlasSignInActions.Start; +}; + +export type AtlasSignInSuccessAction = { + type: AtlasSignInActions.Success; +}; + +export type AtlasSignInErrorAction = { + type: AtlasSignInActions.Error; + error: string; +}; + +export type AtlasSignInTokenRefreshFailedAction = { + type: AtlasSignInActions.TokenRefreshFailed; +}; + +export type AtlasSignInSignedOutAction = { + type: AtlasSignInActions.SignedOut; +}; + +export type AtlasSignInCancelAction = { type: AtlasSignInActions.Cancel }; + +const INITIAL_STATE = { + state: 'initial' as const, + error: null, + isModalOpen: false, + attemptId: null, +}; + +// Exported for testing purposes only. +export const AttemptStateMap = new Map(); + +export let attemptId = 0; + +export function getAttempt(id?: number | null): AttemptState { + if (!id) { + id = ++attemptId; + const controller = new AbortController(); + let resolve; + let reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + if (resolve && reject) { + AttemptStateMap.set(id, { + id, + controller, + promise, + resolve: resolve, + reject: reject, + }); + } + } + const attemptState = AttemptStateMap.get(id); + if (!attemptState) { + throw new Error( + 'Trying to get the state for a non-existing sign in attempt' + ); + } + return attemptState; +} + +const reducer: Reducer = ( + state = { ...INITIAL_STATE }, + action +) => { + if ( + isAction( + action, + AtlasSignInActions.AttemptStart + ) + ) { + return { + ...state, + attemptId: action.attemptId, + }; + } + + if ( + isAction(action, AtlasSignInActions.AttemptEnd) + ) { + return { + ...state, + attemptId: null, + }; + } + + if (isAction(action, AtlasSignInActions.Start)) { + return { ...state, state: 'in-progress' }; + } + + if (isAction(action, AtlasSignInActions.Success)) { + return { + ...state, + state: 'success', + error: null, + isModalOpen: false, + }; + } + + if (isAction(action, AtlasSignInActions.Error)) { + return { + ...state, + state: 'error', + error: action.error, + isModalOpen: false, + }; + } + + if (isAction(action, AtlasSignInActions.Cancel)) { + return { ...INITIAL_STATE, state: 'canceled' }; + } + + if ( + isAction( + action, + AtlasSignInActions.OpenSignInModal + ) + ) { + return { ...state, isModalOpen: true }; + } + + if ( + isAction( + action, + AtlasSignInActions.CloseSignInModal + ) + ) { + return { ...state, isModalOpen: false }; + } + + if ( + isAction( + action, + AtlasSignInActions.TokenRefreshFailed + ) + ) { + // Only reset state on refresh failed when we are currently successfully + // signed in. All other cases mean that either there is a sign in already + // in progress or something else already failed: no need to update either + // way + if (state.state !== 'success') { + return state; + } + return { ...INITIAL_STATE, state: 'error' }; + } + + if ( + isAction(action, AtlasSignInActions.SignedOut) + ) { + return { ...INITIAL_STATE }; + } + + return state; +}; + +const startAttempt = ( + fn: () => void +): GenAIAtlasSignInThunkAction => { + return (dispatch, getState) => { + if (getState().attemptId) { + throw new Error( + "Can't start sign in with prompt while another sign in attempt is in progress" + ); + } + const attempt = getAttempt(); + dispatch({ type: AtlasSignInActions.AttemptStart, attemptId: attempt.id }); + attempt.promise + .finally(() => { + dispatch({ + type: AtlasSignInActions.AttemptEnd, + attemptId: attempt.id, + }); + }) + .catch(() => { + // noop for the promise created by `finally`, original promise rejection + // should be handled by the service user + }); + setTimeout(fn); + return attempt; + }; +}; + +export const signIntoAtlasWithModalPrompt = ({ + signal, +}: { signal?: AbortSignal } = {}): GenAIAtlasSignInThunkAction< + Promise +> => { + return (dispatch, getState) => { + // Nothing to do if we already signed in. + const { state } = getState(); + if (state === 'success') { + return Promise.resolve(); + } + const attempt = dispatch( + startAttempt(() => { + dispatch(openSignInModal()); + }) + ); + signal?.addEventListener('abort', () => { + dispatch(closeSignInModal(signal.reason)); + }); + return attempt.promise; + }; +}; + +export const signIn = (): GenAIAtlasSignInThunkAction> => { + return async (dispatch, getState, { atlasAuthService }) => { + if (['in-progress', 'authenticated'].includes(getState().state)) { + return; + } + const { attemptId } = getState(); + if (attemptId === null) { + return; + } + const { + controller: { signal }, + resolve, + reject, + } = getAttempt(getState().attemptId); + dispatch({ + type: AtlasSignInActions.Start, + }); + + try { + throwIfAborted(signal); + + await atlasAuthService.signIn({ + signal, + promptType: 'none', + }); + dispatch(atlasServiceSignedIn()); + resolve(); + } catch (err) { + if (signal.aborted) { + return; + } + dispatch({ + type: AtlasSignInActions.Error, + error: (err as Error).message, + }); + reject(err); + } + }; +}; + +export const openSignInModal = () => { + return { type: AtlasSignInActions.OpenSignInModal }; +}; + +export const closeSignInModal = ( + reason?: any +): GenAIAtlasSignInThunkAction => { + return (dispatch) => { + dispatch(cancelSignIn(reason)); + dispatch({ type: AtlasSignInActions.CloseSignInModal }); + }; +}; + +export const cancelSignIn = ( + reason?: any +): GenAIAtlasSignInThunkAction => { + return (dispatch, getState) => { + // Can't cancel sign in after the flow was finished indicated by current + // attempt id being set to null. + if (getState().attemptId === null) { + return; + } + const attempt = getAttempt(getState().attemptId); + attempt.controller.abort(); + attempt.reject(reason ?? attempt.controller.signal.reason); + dispatch({ type: AtlasSignInActions.Cancel }); + }; +}; + +export const atlasServiceTokenRefreshFailed = () => ({ + type: AtlasSignInActions.TokenRefreshFailed, +}); + +export const atlasServiceSignedOut = () => ({ + type: AtlasSignInActions.SignedOut, +}); + +export const atlasServiceSignedIn = () => ({ + type: AtlasSignInActions.Success, +}); + +export default reducer; diff --git a/packages/compass-generative-ai/src/store/atlas-signin-store.ts b/packages/compass-generative-ai/src/store/atlas-signin-store.ts new file mode 100644 index 00000000000..389a92549bd --- /dev/null +++ b/packages/compass-generative-ai/src/store/atlas-signin-store.ts @@ -0,0 +1,54 @@ +import { createStore, applyMiddleware } from 'redux'; +import thunk from 'redux-thunk'; +import reducer, { + atlasServiceSignedOut, + atlasServiceSignedIn, + atlasServiceTokenRefreshFailed, +} from './atlas-signin-reducer'; +import type { AtlasAuthService } from '@mongodb-js/atlas-service/provider'; +import type { ActivateHelpers } from 'hadron-app-registry'; + +let store: CompassGenerativeAIServiceStore; +export function getStore() { + if (!store) { + throw new Error('CompassGenerativeAIPlugin not activated'); + } + return store; +} + +export type CompassGenerativeAIPluginServices = { + atlasAuthService: AtlasAuthService; +}; +export function activatePlugin( + _: Record, + services: CompassGenerativeAIPluginServices, + { cleanup }: ActivateHelpers +) { + store = configureStore(services); + + services.atlasAuthService.on('signed-in', () => { + void store.dispatch(atlasServiceSignedIn()); + }); + + services.atlasAuthService.on('signed-out', () => { + void store.dispatch(atlasServiceSignedOut()); + }); + + services.atlasAuthService.on('token-refresh-failed', () => { + void store.dispatch(atlasServiceTokenRefreshFailed()); + }); + + return { store, deactivate: cleanup }; +} + +export function configureStore({ + atlasAuthService, +}: CompassGenerativeAIPluginServices) { + const store = createStore( + reducer, + applyMiddleware(thunk.withExtraArgument({ atlasAuthService })) + ); + return store; +} + +export type CompassGenerativeAIServiceStore = ReturnType; diff --git a/packages/compass-query-bar/src/index.tsx b/packages/compass-query-bar/src/index.tsx index c9867acdbe0..f7e55a69ee9 100644 --- a/packages/compass-query-bar/src/index.tsx +++ b/packages/compass-query-bar/src/index.tsx @@ -20,7 +20,6 @@ import type { QueryBarService } from './components/hooks'; import QueryBarComponent from './components/query-bar'; import { preferencesLocator } from 'compass-preferences-model/provider'; import { createLoggerLocator } from '@mongodb-js/compass-logging/provider'; -import { atlasAuthServiceLocator } from '@mongodb-js/atlas-service/provider'; import { atlasAiServiceLocator } from '@mongodb-js/compass-generative-ai/provider'; import { favoriteQueryStorageAccessLocator, @@ -55,7 +54,6 @@ const QueryBarPlugin = registerHadronPlugin( track: telemetryLocator, connectionInfoRef: connectionInfoRefLocator, atlasAiService: atlasAiServiceLocator, - atlasAuthService: atlasAuthServiceLocator, favoriteQueryStorageAccess: favoriteQueryStorageAccessLocator, recentQueryStorageAccess: recentQueryStorageAccessLocator, } diff --git a/packages/compass-query-bar/src/stores/ai-query-reducer.spec.ts b/packages/compass-query-bar/src/stores/ai-query-reducer.spec.ts index 601b2eed2cd..515c03795fe 100644 --- a/packages/compass-query-bar/src/stores/ai-query-reducer.spec.ts +++ b/packages/compass-query-bar/src/stores/ai-query-reducer.spec.ts @@ -61,7 +61,6 @@ describe('aiQueryReducer', function () { { dataService: mockDataService, connectionInfoRef, - atlasAuthService: { on: sandbox.stub() }, atlasAiService: mockAtlasAiService, preferences, logger: createNoopLogger(), @@ -104,7 +103,6 @@ describe('aiQueryReducer', function () { }; const store = createStore({}, { - atlasAuthService: { on: sandbox.stub() }, atlasAiService: mockAtlasAiService, connectionInfoRef, dataService: { @@ -132,7 +130,6 @@ describe('aiQueryReducer', function () { getQueryFromUserInput: sandbox.stub().rejects(authError), }; const store = createStore({}, { - atlasAuthService: { on: sandbox.stub() }, atlasAiService: mockAtlasAiService, dataService: { sample() { @@ -182,7 +179,6 @@ describe('aiQueryReducer', function () { { dataService: mockDataService, connectionInfoRef, - atlasAuthService: { on: sandbox.stub() }, atlasAiService: mockAtlasAiService, preferences, logger: createNoopLogger(), @@ -223,7 +219,6 @@ describe('aiQueryReducer', function () { { dataService: mockDataService, connectionInfoRef, - atlasAuthService: { on: sandbox.stub() }, atlasAiService: mockAtlasAiService, preferences, logger: createNoopLogger(), diff --git a/packages/compass-query-bar/src/stores/ai-query-reducer.ts b/packages/compass-query-bar/src/stores/ai-query-reducer.ts index 9ed8735b0b2..7cb478e1a64 100644 --- a/packages/compass-query-bar/src/stores/ai-query-reducer.ts +++ b/packages/compass-query-bar/src/stores/ai-query-reducer.ts @@ -412,10 +412,10 @@ export const cancelAIQuery = (): QueryBarThunkAction< }; export const showInput = (): QueryBarThunkAction> => { - return async (dispatch, _getState, { atlasAuthService }) => { + return async (dispatch, _getState, { atlasAiService }) => { try { if (process.env.COMPASS_E2E_SKIP_ATLAS_SIGNIN !== 'true') { - await atlasAuthService.signIn({ promptType: 'ai-promo-modal' }); + await atlasAiService.ensureAiFeatureAccess(); } dispatch({ type: AIQueryActionTypes.ShowInput }); } catch { diff --git a/packages/compass-query-bar/src/stores/query-bar-store.spec.ts b/packages/compass-query-bar/src/stores/query-bar-store.spec.ts index 38e23249db7..e181190bbe5 100644 --- a/packages/compass-query-bar/src/stores/query-bar-store.spec.ts +++ b/packages/compass-query-bar/src/stores/query-bar-store.spec.ts @@ -55,7 +55,6 @@ describe('createQueryWithHistoryAutocompleter', function () { loadAll: loadAllStub, }), }, - atlasAuthService: { on: sinon.stub() }, atlasAiService: mockService, preferences, logger: createNoopLogger(), diff --git a/packages/compass-query-bar/src/stores/query-bar-store.ts b/packages/compass-query-bar/src/stores/query-bar-store.ts index 6160fec1b0c..52425866cc2 100644 --- a/packages/compass-query-bar/src/stores/query-bar-store.ts +++ b/packages/compass-query-bar/src/stores/query-bar-store.ts @@ -27,7 +27,6 @@ import type { ActivateHelpers } from 'hadron-app-registry'; import type { MongoDBInstance } from 'mongodb-instance-model'; import { QueryBarStoreContext } from './context'; import type { Logger } from '@mongodb-js/compass-logging/provider'; -import type { AtlasAuthService } from '@mongodb-js/atlas-service/provider'; import type { AtlasAiService } from '@mongodb-js/compass-generative-ai/provider'; import type { FavoriteQueryStorageAccess, @@ -49,7 +48,6 @@ type QueryBarServices = { logger: Logger; track: TrackFunction; connectionInfoRef: ConnectionInfoRef; - atlasAuthService: AtlasAuthService; atlasAiService: AtlasAiService; favoriteQueryStorageAccess?: FavoriteQueryStorageAccess; recentQueryStorageAccess?: RecentQueryStorageAccess; @@ -58,7 +56,7 @@ type QueryBarServices = { // TODO(COMPASS-7412): this doesn't have service injector // implemented yet, so we're keeping it separate from the type above type QueryBarExtraServices = { - atlasAuthService?: AtlasAuthService; + atlasAIService?: AtlasAiService; favoriteQueryStorage?: FavoriteQueryStorage; recentQueryStorage?: RecentQueryStorage; }; @@ -76,7 +74,6 @@ export type QueryBarExtraArgs = { globalAppRegistry: AppRegistry; localAppRegistry: AppRegistry; dataService: Pick; - atlasAuthService: AtlasAuthService; preferences: PreferencesAccess; favoriteQueryStorage?: FavoriteQueryStorage; recentQueryStorage?: RecentQueryStorage; @@ -126,7 +123,6 @@ export function activatePlugin( logger, track, connectionInfoRef, - atlasAuthService, atlasAiService, favoriteQueryStorageAccess, recentQueryStorageAccess, @@ -156,7 +152,6 @@ export function activatePlugin( globalAppRegistry, recentQueryStorage, favoriteQueryStorage, - atlasAuthService, preferences, logger, track, diff --git a/packages/compass-schema/src/components/field.spec.tsx b/packages/compass-schema/src/components/field.spec.tsx index 95e15a91b35..68c2ca09196 100644 --- a/packages/compass-schema/src/components/field.spec.tsx +++ b/packages/compass-schema/src/components/field.spec.tsx @@ -34,7 +34,6 @@ const MockQueryBarPlugin = QueryBarPlugin.withMockServices({ favoriteQueryStorageAccess: compassFavoriteQueryStorageAccess, recentQueryStorageAccess: compassRecentQueryStorageAccess, atlasAiService: {} as any, - atlasAuthService: { on() {}, removeListener() {} } as any, }); function renderField( diff --git a/packages/compass-schema/src/components/schema-toolbar/schema-toolbar.spec.tsx b/packages/compass-schema/src/components/schema-toolbar/schema-toolbar.spec.tsx index 4a197970e15..633350e5fb3 100644 --- a/packages/compass-schema/src/components/schema-toolbar/schema-toolbar.spec.tsx +++ b/packages/compass-schema/src/components/schema-toolbar/schema-toolbar.spec.tsx @@ -23,7 +23,6 @@ const MockQueryBarPlugin = QueryBarPlugin.withMockServices({ favoriteQueryStorageAccess: compassFavoriteQueryStorageAccess, recentQueryStorageAccess: compassRecentQueryStorageAccess, atlasAiService: {} as any, - atlasAuthService: { on() {}, removeListener() {} } as any, }); const testErrorMessage = diff --git a/packages/compass/src/app/components/home.tsx b/packages/compass/src/app/components/home.tsx index 58660f7c992..fbbd2b97f21 100644 --- a/packages/compass/src/app/components/home.tsx +++ b/packages/compass/src/app/components/home.tsx @@ -32,6 +32,7 @@ import { getExtraConnectionData } from '../utils/telemetry'; import { CompassInstanceStorePlugin } from '@mongodb-js/compass-app-stores'; import FieldStorePlugin from '@mongodb-js/compass-field-store'; import { AtlasAuthPlugin } from '@mongodb-js/atlas-service/renderer'; +import { CompassGenerativeAIPlugin } from '@mongodb-js/compass-generative-ai'; import type { WorkspaceTab } from '@mongodb-js/compass-workspaces'; import { ConnectionStorageProvider } from '@mongodb-js/connection-storage/provider'; import { @@ -220,6 +221,7 @@ function Home({ + From 2a8074596c8546d423957d0df883aa00d2dd2b9d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 18:57:49 +0000 Subject: [PATCH 45/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6470) Update report Co-authored-by: Anemy <1791149+Anemy@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 1f4e494cc44..7c659216f91 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Nov 8, 2024 at 03:38 PM +Generated on Fri, Nov 8, 2024 at 06:57 PM ## Table of Contents From efcc6ab91580b09cfbb7d0beb93840c3a186e279 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 10 Nov 2024 03:13:51 +0000 Subject: [PATCH 46/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6471) Update report Co-authored-by: mcasimir <334881+mcasimir@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 425695f46b5..7fc734b9236 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Fri Nov 08 2024. +This document was automatically generated on Sun Nov 10 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 7c659216f91..0b4bde93146 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Nov 8, 2024 at 06:57 PM +Generated on Sun, Nov 10, 2024 at 03:13 AM ## Table of Contents From 054a8c2a297d0c01daeb1c37997b2162ee4a84ce Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 05:04:59 +0000 Subject: [PATCH 47/81] v1.44.7-beta.1 --- package-lock.json | 2 +- packages/compass/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f14d7a0100..85f50ac65dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43139,7 +43139,7 @@ }, "packages/compass": { "name": "mongodb-compass", - "version": "1.44.7-beta.0", + "version": "1.44.7-beta.1", "hasInstallScript": true, "license": "SSPL", "dependencies": { diff --git a/packages/compass/package.json b/packages/compass/package.json index 948ba20ce89..cf7904b67c7 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -4,7 +4,7 @@ "productName": "MongoDB Compass", "description": "The MongoDB GUI", "homepage": "https://www.mongodb.com/products/compass", - "version": "1.44.7-beta.0", + "version": "1.44.7-beta.1", "apiVersion": "3.0.0", "main": "build/main.js", "author": { From 948c73f8f02f9bcce9f45f49708239c49665c3e5 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 11 Nov 2024 11:27:05 +0100 Subject: [PATCH 48/81] fix(compass-global-writes): handle loading error COMPASS-8446 (#6451) --- .../src/components/index.tsx | 5 + .../components/states/loading-error.spec.tsx | 20 ++++ .../src/components/states/loading-error.tsx | 26 +++++ .../src/store/index.spec.ts | 94 +++++++++++++++ .../src/store/reducer.ts | 110 ++++++++++++++---- 5 files changed, 235 insertions(+), 20 deletions(-) create mode 100644 packages/compass-global-writes/src/components/states/loading-error.spec.tsx create mode 100644 packages/compass-global-writes/src/components/states/loading-error.tsx diff --git a/packages/compass-global-writes/src/components/index.tsx b/packages/compass-global-writes/src/components/index.tsx index 902342e1ce0..d7331022a17 100644 --- a/packages/compass-global-writes/src/components/index.tsx +++ b/packages/compass-global-writes/src/components/index.tsx @@ -16,6 +16,7 @@ import ShardKeyInvalid from './states/shard-key-invalid'; import ShardKeyMismatch from './states/shard-key-mismatch'; import ShardingError from './states/sharding-error'; import IncompleteShardingSetup from './states/incomplete-sharding-setup'; +import LoadingError from './states/loading-error'; const containerStyles = css({ display: 'flex', @@ -90,6 +91,10 @@ function ShardingStateView({ return ; } + if (shardingStatus === ShardingStatuses.LOADING_ERROR) { + return ; + } + return null; } diff --git a/packages/compass-global-writes/src/components/states/loading-error.spec.tsx b/packages/compass-global-writes/src/components/states/loading-error.spec.tsx new file mode 100644 index 00000000000..2ed220dd9bd --- /dev/null +++ b/packages/compass-global-writes/src/components/states/loading-error.spec.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { expect } from 'chai'; +import { screen } from '@mongodb-js/testing-library-compass'; +import { LoadingError } from './loading-error'; +import { renderWithStore } from '../../../tests/create-store'; + +const error = 'Test failure'; + +function renderWithProps( + props?: Partial> +) { + return renderWithStore(); +} + +describe('LoadingError', function () { + it('renders the error', async function () { + await renderWithProps(); + expect(screen.getByText(error)).to.exist; + }); +}); diff --git a/packages/compass-global-writes/src/components/states/loading-error.tsx b/packages/compass-global-writes/src/components/states/loading-error.tsx new file mode 100644 index 00000000000..8a508c38316 --- /dev/null +++ b/packages/compass-global-writes/src/components/states/loading-error.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { ErrorSummary } from '@mongodb-js/compass-components'; +import { connect } from 'react-redux'; +import { type RootState, ShardingStatuses } from '../../store/reducer'; +import { containerStyles } from '../common-styles'; + +interface LoadingErrorProps { + error: string; +} + +export function LoadingError({ error }: LoadingErrorProps) { + return ( +
+ +
+ ); +} + +export default connect((state: RootState) => { + if (state.status !== ShardingStatuses.LOADING_ERROR) { + throw new Error('Error not found in LoadingError'); + } + return { + error: state.loadingError, + }; +})(LoadingError); diff --git a/packages/compass-global-writes/src/store/index.spec.ts b/packages/compass-global-writes/src/store/index.spec.ts index 74a1ac056ec..19fb3bf21a6 100644 --- a/packages/compass-global-writes/src/store/index.spec.ts +++ b/packages/compass-global-writes/src/store/index.spec.ts @@ -73,6 +73,9 @@ function createStore({ hasShardKey = () => false, failsOnShardingRequest = () => false, failsOnShardZoneRequest = () => false, + failsToFetchClusterDetails = () => false, + failsToFetchDeploymentStatus = () => false, + failsToFetchShardKey = () => false, authenticatedFetchStub, }: | { @@ -81,6 +84,9 @@ function createStore({ hasShardKey?: () => boolean | AtlasShardKey; failsOnShardingRequest?: () => boolean; failsOnShardZoneRequest?: () => boolean; + failsToFetchClusterDetails?: () => boolean; + failsToFetchDeploymentStatus?: () => boolean; + failsToFetchShardKey?: () => boolean; authenticatedFetchStub?: never; } | { @@ -89,6 +95,9 @@ function createStore({ hasShardKey?: () => boolean | ShardKey; failsOnShardingRequest?: never; failsOnShardZoneRequest?: () => never; + failsToFetchClusterDetails?: never; + failsToFetchDeploymentStatus?: never; + failsToFetchShardKey?: () => boolean; authenticatedFetchStub?: () => void; } = {}): GlobalWritesStore { const atlasService = { @@ -98,6 +107,9 @@ function createStore({ } if (uri.includes('/clusters/')) { + if (failsToFetchClusterDetails()) { + return Promise.reject(new Error('Failed to fetch cluster details')); + } return createAuthFetchResponse({ ...clusterDetails, geoSharding: { @@ -108,6 +120,9 @@ function createStore({ } if (uri.includes('/deploymentStatus/')) { + if (failsToFetchDeploymentStatus()) { + return Promise.reject(new Error('Failed to fetch deployment status')); + } return createAuthFetchResponse({ automationStatus: { processes: hasShardingError() ? [failedShardingProcess] : [], @@ -130,6 +145,10 @@ function createStore({ }), automationAgentAwait: (_meta: unknown, type: string) => { if (type === 'getShardKey') { + if (failsToFetchShardKey()) { + return Promise.reject(new Error('Failed to fetch shardKey')); + } + const shardKey = hasShardKey(); return { response: @@ -188,6 +207,35 @@ describe('GlobalWritesStore Store', function () { }); context('scenarios', function () { + context('initial load fail', function () { + it('fails to fetch cluster details', async function () { + const store = createStore({ + failsToFetchClusterDetails: () => true, + }); + await waitFor(() => { + expect(store.getState().status).to.equal('LOADING_ERROR'); + }); + }); + + it('fails to fetch shard key', async function () { + const store = createStore({ + failsToFetchShardKey: () => true, + }); + await waitFor(() => { + expect(store.getState().status).to.equal('LOADING_ERROR'); + }); + }); + + it('fails to fetch deployment status', async function () { + const store = createStore({ + failsToFetchDeploymentStatus: () => true, + }); + await waitFor(() => { + expect(store.getState().status).to.equal('LOADING_ERROR'); + }); + }); + }); + it('not managed -> sharding -> valid shard key', async function () { let mockShardKey = false; let mockManagedNamespace = false; @@ -291,6 +339,52 @@ describe('GlobalWritesStore Store', function () { }); }); + context('pulling fail', function () { + it('sharding -> error (failed to fetch shard key)', async function () { + let mockFailure = false; + // initial state === sharding + clock = sinon.useFakeTimers({ + shouldAdvanceTime: true, + }); + const store = createStore({ + isNamespaceManaged: () => true, + failsToFetchShardKey: Sinon.fake(() => mockFailure), + }); + await waitFor(() => { + expect(store.getState().status).to.equal('SHARDING'); + }); + + // sharding ends with a request failure + mockFailure = true; + clock.tick(POLLING_INTERVAL); + await waitFor(() => { + expect(store.getState().status).to.equal('LOADING_ERROR'); + }); + }); + + it('sharding -> error (failed to fetch deployment status)', async function () { + let mockFailure = false; + // initial state === sharding + clock = sinon.useFakeTimers({ + shouldAdvanceTime: true, + }); + const store = createStore({ + isNamespaceManaged: () => true, + failsToFetchDeploymentStatus: Sinon.fake(() => mockFailure), + }); + await waitFor(() => { + expect(store.getState().status).to.equal('SHARDING'); + }); + + // sharding ends with a request failure + mockFailure = true; + clock.tick(POLLING_INTERVAL); + await waitFor(() => { + expect(store.getState().status).to.equal('LOADING_ERROR'); + }); + }); + }); + it('sharding -> cancelling request -> not managed', async function () { let mockManagedNamespace = true; confirmationStub.resolves(true); diff --git a/packages/compass-global-writes/src/store/reducer.ts b/packages/compass-global-writes/src/store/reducer.ts index 44a655f79d3..aa6904b0eee 100644 --- a/packages/compass-global-writes/src/store/reducer.ts +++ b/packages/compass-global-writes/src/store/reducer.ts @@ -46,6 +46,8 @@ enum GlobalWritesActionTypes { UnmanagingNamespaceStarted = 'global-writes/UnmanagingNamespaceStarted', UnmanagingNamespaceFinished = 'global-writes/UnmanagingNamespaceFinished', UnmanagingNamespaceErrored = 'global-writes/UnmanagingNamespaceErrored', + + LoadingFailed = 'global-writes/LoadingFailed', } type ManagedNamespaceFetchedAction = { @@ -53,6 +55,11 @@ type ManagedNamespaceFetchedAction = { managedNamespace?: ManagedNamespace; }; +type LoadingFailedAction = { + type: GlobalWritesActionTypes.LoadingFailed; + error: string; +}; + type NamespaceShardingErrorFetchedAction = { type: GlobalWritesActionTypes.NamespaceShardingErrorFetched; error: string; @@ -125,6 +132,11 @@ export enum ShardingStatuses { */ NOT_READY = 'NOT_READY', + /** + * The status could not be determined because loading failed + */ + LOADING_ERROR = 'LOADING_ERROR', + /** * Namespace is not geo-sharded. */ @@ -209,11 +221,19 @@ export type RootState = { managedNamespace?: ManagedNamespace; shardZones: ShardZoneData[]; } & ( + | { + status: ShardingStatuses.LOADING_ERROR; + shardKey?: ShardKey; + shardingError?: never; + pollingTimeout?: never; + loadingError: string; + } | { status: ShardingStatuses.NOT_READY; shardKey?: never; shardingError?: never; pollingTimeout?: never; + loadingError?: never; } | { status: @@ -225,6 +245,7 @@ export type RootState = { // and then unmanaged shardingError?: never; pollingTimeout?: never; + loadingError?: never; } | { status: ShardingStatuses.SHARDING; @@ -235,6 +256,7 @@ export type RootState = { shardKey?: ShardKey; shardingError?: never; pollingTimeout?: NodeJS.Timeout; + loadingError?: never; } | { status: @@ -244,6 +266,7 @@ export type RootState = { shardKey?: never; shardingError: string; pollingTimeout?: never; + loadingError?: never; } | { status: @@ -257,6 +280,7 @@ export type RootState = { shardKey: ShardKey; shardingError?: never; pollingTimeout?: never; + loadingError?: never; } ); @@ -616,6 +640,25 @@ const reducer: Reducer = (state = initialState, action) => { }; } + if ( + isAction( + action, + GlobalWritesActionTypes.LoadingFailed + ) && + (state.status === ShardingStatuses.NOT_READY || + state.status === ShardingStatuses.SHARDING) + ) { + if (state.pollingTimeout) { + throw new Error('Polling was not stopped'); + } + return { + ...state, + status: ShardingStatuses.LOADING_ERROR, + loadingError: action.error, + pollingTimeout: state.pollingTimeout, + }; + } + return state; }; @@ -644,16 +687,12 @@ export const fetchClusterShardingData = 'Error fetching cluster sharding data', (error as Error).message ); - openToast( - `global-writes-fetch-shard-info-error-${connectionInfoRef.current.id}-${namespace}`, - { - title: `Failed to fetch sharding information: ${ - (error as Error).message - }`, - dismissible: true, - timeout: 5000, - variant: 'important', - } + dispatch( + handleLoadingError({ + error: error as Error, + id: `global-writes-fetch-shard-info-error-${connectionInfoRef.current.id}-${namespace}`, + description: 'Failed to fetch sharding information', + }) ); } }; @@ -829,15 +868,48 @@ const stopPollingForShardKey = (): GlobalWritesThunkAction< }; }; +const handleLoadingError = ({ + error, + id, + description, +}: { + error: Error; + id: string; + description: string; +}): GlobalWritesThunkAction => { + return (dispatch, getState) => { + const { status } = getState(); + const isPolling = status === ShardingStatuses.SHARDING; + const isInitialLoad = status === ShardingStatuses.NOT_READY; + const errorMessage = `${description}: ${error.message}`; + if (isInitialLoad || isPolling) { + dispatch({ + type: GlobalWritesActionTypes.LoadingFailed, + error: errorMessage, + }); + return; + } + openToast(id, { + title: errorMessage, + dismissible: true, + timeout: 5000, + variant: 'important', + }); + }; +}; + export const fetchNamespaceShardKey = (): GlobalWritesThunkAction< Promise, - NamespaceShardingErrorFetchedAction | NamespaceShardKeyFetchedAction + | NamespaceShardingErrorFetchedAction + | NamespaceShardKeyFetchedAction + | NextPollingTimeoutClearedAction > => { return async ( dispatch, getState, { atlasGlobalWritesService, logger, connectionInfoRef } ) => { + dispatch({ type: GlobalWritesActionTypes.NextPollingTimeoutCleared }); const { namespace, status, managedNamespace } = getState(); try { @@ -879,17 +951,15 @@ export const fetchNamespaceShardKey = (): GlobalWritesThunkAction< logger.log.error( logger.mongoLogId(1_001_000_333), 'AtlasFetchError', - 'Error fetching shard key', + 'Error fetching shard key / deployment status', (error as Error).message ); - openToast( - `global-writes-fetch-shard-key-error-${connectionInfoRef.current.id}-${namespace}`, - { - title: `Failed to fetch shard key: ${(error as Error).message}`, - dismissible: true, - timeout: 5000, - variant: 'important', - } + dispatch( + handleLoadingError({ + error: error as Error, + id: `global-writes-fetch-shard-key-error-${connectionInfoRef.current.id}-${namespace}`, + description: 'Failed to fetch shard key or deployment status', + }) ); } }; From 996d224bc8690482b40445f6357213836debd5f3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 10:33:33 +0000 Subject: [PATCH 49/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6473) Update report Co-authored-by: paula-stacho <5196720+paula-stacho@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 7fc734b9236..45cf5b9e355 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Sun Nov 10 2024. +This document was automatically generated on Mon Nov 11 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 0b4bde93146..d4f4a179a28 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Sun, Nov 10, 2024 at 03:13 AM +Generated on Mon, Nov 11, 2024 at 10:33 AM ## Table of Contents From 2f2a8c6adef2bd42fbd8749ea8702da2812c8e7f Mon Sep 17 00:00:00 2001 From: svc-devtoolsbot <79531021+svc-devtoolsbot@users.noreply.github.com> Date: Mon, 11 Nov 2024 06:35:25 -0500 Subject: [PATCH 50/81] chore(deps): update electron (#6428) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- configs/webpack-config-compass/package.json | 2 +- package-lock.json | 100 +++++++++--------- packages/atlas-service/package.json | 2 +- packages/compass-crud/package.json | 2 +- packages/compass-e2e-tests/package.json | 4 +- packages/compass-explain-plan/package.json | 2 +- packages/compass-find-in-page/package.json | 2 +- packages/compass-import-export/package.json | 2 +- packages/compass-indexes/package.json | 2 +- packages/compass-query-bar/package.json | 2 +- .../compass-schema-validation/package.json | 2 +- packages/compass-shell/package.json | 2 +- packages/compass-utils/package.json | 2 +- packages/compass-web/package.json | 2 +- packages/compass/package.json | 2 +- packages/connection-storage/package.json | 2 +- packages/hadron-build/package.json | 2 +- packages/hadron-ipc/package.json | 2 +- scripts/package.json | 2 +- 19 files changed, 69 insertions(+), 69 deletions(-) diff --git a/configs/webpack-config-compass/package.json b/configs/webpack-config-compass/package.json index 92b19817966..f1e4f48c453 100644 --- a/configs/webpack-config-compass/package.json +++ b/configs/webpack-config-compass/package.json @@ -73,7 +73,7 @@ "cli-progress": "^3.9.1", "core-js": "^3.17.3", "css-loader": "^4.3.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "html-webpack-plugin": "^5.6.0", "less": "^3.13.1", "less-loader": "^10.0.1", diff --git a/package-lock.json b/package-lock.json index 80f1be6c2cf..48e0fe14588 100644 --- a/package-lock.json +++ b/package-lock.json @@ -516,7 +516,7 @@ "cli-progress": "^3.9.1", "core-js": "^3.17.3", "css-loader": "^4.3.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "html-webpack-plugin": "^5.6.0", "less": "^3.13.1", "less-loader": "^10.0.1", @@ -20162,9 +20162,9 @@ } }, "node_modules/electron": { - "version": "32.2.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-32.2.2.tgz", - "integrity": "sha512-c7TRE42JcgEmJ4elJyCdKk/2os0UX7YMkRDeXBkxFEoM34iX1/2x+c5T9PgeroKz8FEG7omRU5TvjulqVtXvdw==", + "version": "32.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-32.2.3.tgz", + "integrity": "sha512-ClTJrFuwBdZpDNEnVZSV1gTIYSq7c/TYoUv9AmOypL43/xtbfxXkz2vE67ehVoamFobWsIU2by087R5Av8cxJg==", "hasInstallScript": true, "dependencies": { "@electron/get": "^2.0.0", @@ -20519,9 +20519,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.49", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", - "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==" + "version": "1.5.55", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz", + "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==" }, "node_modules/electron-window": { "version": "0.8.1", @@ -43027,7 +43027,7 @@ "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/oidc-plugin": "^1.1.1", "compass-preferences-model": "^2.30.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", @@ -43207,7 +43207,7 @@ "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-devtools-installer": "^3.2.0", "electron-dl": "^3.5.0", "electron-mocha": "^12.2.0", @@ -43946,7 +43946,7 @@ "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -44025,8 +44025,8 @@ "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", - "electron-to-chromium": "^1.5.49", + "electron": "^32.2.3", + "electron-to-chromium": "^1.5.55", "eslint": "^7.25.0", "glob": "^10.2.5", "hadron-build": "^25.5.14", @@ -44508,7 +44508,7 @@ "@types/d3-hierarchy": "^3.1.2", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -44705,7 +44705,7 @@ "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -45061,7 +45061,7 @@ "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", "debug": "^4.3.4", - "electron": "^32.2.2", + "electron": "^32.2.3", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-ipc": "^3.2.25", @@ -45181,7 +45181,7 @@ "@types/numeral": "^2.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -45593,7 +45593,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -45802,7 +45802,7 @@ "@types/enzyme": "^3.10.14", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -45992,7 +45992,7 @@ "@types/enzyme": "^3.10.14", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -46357,7 +46357,7 @@ "license": "SSPL", "dependencies": { "@electron/remote": "^2.1.2", - "electron": "^32.2.2" + "electron": "^32.2.3" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -46456,7 +46456,7 @@ "debug": "^4.3.4", "depcheck": "^1.4.1", "dns-query": "^0.11.2", - "electron": "^32.2.2", + "electron": "^32.2.3", "eslint": "^7.25.0", "events": "^3.3.0", "express": "^4.21.1", @@ -47121,7 +47121,7 @@ "@mongodb-js/connection-info": "^0.9.3", "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", "keytar": "^7.9.0", @@ -47744,7 +47744,7 @@ "debug": "^4.3.4", "del": "^2.0.2", "download": "^8.0.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-packager": "^15.5.1", "electron-packager-plugin-non-proprietary-codecs-ffmpeg": "^1.0.2", "flatnest": "^1.0.0", @@ -48608,7 +48608,7 @@ "license": "SSPL", "dependencies": { "debug": "^4.3.4", - "electron": "^32.2.2", + "electron": "^32.2.3", "is-electron-renderer": "^2.0.1" }, "devDependencies": { @@ -49574,7 +49574,7 @@ "@babel/core": "^7.24.3", "@mongodb-js/monorepo-tools": "^1.1.1", "commander": "^11.0.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "jsdom": "^24.1.3", "make-fetch-happen": "^10.2.1", "pacote": "^11.3.5", @@ -54921,7 +54921,7 @@ "chai": "^4.3.6", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", @@ -55576,7 +55576,7 @@ "chai-as-promised": "^7.1.1", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -55756,7 +55756,7 @@ "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -55929,7 +55929,7 @@ "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -56207,7 +56207,7 @@ "compass-preferences-model": "^2.30.0", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -56284,7 +56284,7 @@ "chai": "^4.2.0", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -56562,7 +56562,7 @@ "chai": "^4.2.0", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -56774,7 +56774,7 @@ "chai": "^4.2.0", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -56808,7 +56808,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "commander": "^11.0.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "eslint": "^7.25.0", "jsdom": "^24.1.3", "make-fetch-happen": "^10.2.1", @@ -57121,7 +57121,7 @@ "chai": "^4.2.0", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -57455,7 +57455,7 @@ "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", "mocha": "^10.2.0", @@ -57538,7 +57538,7 @@ "debug": "^4.3.4", "depcheck": "^1.4.1", "dns-query": "^0.11.2", - "electron": "^32.2.2", + "electron": "^32.2.3", "eslint": "^7.25.0", "events": "^3.3.0", "express": "^4.21.1", @@ -58128,7 +58128,7 @@ "chai": "^4.3.6", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", @@ -59323,7 +59323,7 @@ "core-js": "^3.17.3", "css-loader": "^4.3.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "eslint": "^7.25.0", "html-webpack-plugin": "^5.6.0", "less": "^3.13.1", @@ -66720,8 +66720,8 @@ "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", - "electron-to-chromium": "^1.5.49", + "electron": "^32.2.3", + "electron-to-chromium": "^1.5.55", "eslint": "^7.25.0", "glob": "^10.2.5", "hadron-build": "^25.5.14", @@ -69132,9 +69132,9 @@ } }, "electron": { - "version": "32.2.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-32.2.2.tgz", - "integrity": "sha512-c7TRE42JcgEmJ4elJyCdKk/2os0UX7YMkRDeXBkxFEoM34iX1/2x+c5T9PgeroKz8FEG7omRU5TvjulqVtXvdw==", + "version": "32.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-32.2.3.tgz", + "integrity": "sha512-ClTJrFuwBdZpDNEnVZSV1gTIYSq7c/TYoUv9AmOypL43/xtbfxXkz2vE67ehVoamFobWsIU2by087R5Av8cxJg==", "requires": { "@electron/get": "^2.0.0", "@types/node": "^20.9.0", @@ -69498,9 +69498,9 @@ } }, "electron-to-chromium": { - "version": "1.5.49", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", - "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==" + "version": "1.5.55", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz", + "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==" }, "electron-window": { "version": "0.8.1", @@ -72758,7 +72758,7 @@ "del": "^2.0.2", "depcheck": "^1.4.1", "download": "^8.0.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-installer-debian": "^3.2.0", "electron-installer-dmg": "^5.0.1", "electron-installer-redhat": "^2.0.0", @@ -73482,7 +73482,7 @@ "chai": "^4.3.6", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "eslint": "^7.25.0", "is-electron-renderer": "^2.0.1", "mocha": "^10.2.0", @@ -78589,7 +78589,7 @@ "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-devtools-installer": "^3.2.0", "electron-dl": "^3.5.0", "electron-mocha": "^12.2.0", diff --git a/packages/atlas-service/package.json b/packages/atlas-service/package.json index 1978054d3b4..32af413eee3 100644 --- a/packages/atlas-service/package.json +++ b/packages/atlas-service/package.json @@ -84,7 +84,7 @@ "@mongodb-js/oidc-plugin": "^1.1.1", "hadron-app-registry": "^9.2.7", "compass-preferences-model": "^2.30.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "react": "^17.0.2", diff --git a/packages/compass-crud/package.json b/packages/compass-crud/package.json index 63c7df8547d..55fef26703d 100644 --- a/packages/compass-crud/package.json +++ b/packages/compass-crud/package.json @@ -59,7 +59,7 @@ "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index c48719b554b..f35b2fcb498 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -51,8 +51,8 @@ "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", - "electron-to-chromium": "^1.5.49", + "electron": "^32.2.3", + "electron-to-chromium": "^1.5.55", "eslint": "^7.25.0", "glob": "^10.2.5", "hadron-build": "^25.5.14", diff --git a/packages/compass-explain-plan/package.json b/packages/compass-explain-plan/package.json index ae9693f5875..ace88c11206 100644 --- a/packages/compass-explain-plan/package.json +++ b/packages/compass-explain-plan/package.json @@ -58,7 +58,7 @@ "@types/d3-hierarchy": "^3.1.2", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", diff --git a/packages/compass-find-in-page/package.json b/packages/compass-find-in-page/package.json index e5daf114476..1115cff885e 100644 --- a/packages/compass-find-in-page/package.json +++ b/packages/compass-find-in-page/package.json @@ -61,7 +61,7 @@ "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", diff --git a/packages/compass-import-export/package.json b/packages/compass-import-export/package.json index 57a6100dc77..0822ea55471 100644 --- a/packages/compass-import-export/package.json +++ b/packages/compass-import-export/package.json @@ -59,7 +59,7 @@ "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", "debug": "^4.3.4", - "electron": "^32.2.2", + "electron": "^32.2.3", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-ipc": "^3.2.25", diff --git a/packages/compass-indexes/package.json b/packages/compass-indexes/package.json index b15458ed56a..06469147f26 100644 --- a/packages/compass-indexes/package.json +++ b/packages/compass-indexes/package.json @@ -56,7 +56,7 @@ "@types/numeral": "^2.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", diff --git a/packages/compass-query-bar/package.json b/packages/compass-query-bar/package.json index 1da0cfda8e7..6577ed48771 100644 --- a/packages/compass-query-bar/package.json +++ b/packages/compass-query-bar/package.json @@ -55,7 +55,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", diff --git a/packages/compass-schema-validation/package.json b/packages/compass-schema-validation/package.json index 06112e4a56f..fb048af6fb8 100644 --- a/packages/compass-schema-validation/package.json +++ b/packages/compass-schema-validation/package.json @@ -56,7 +56,7 @@ "@types/enzyme": "^3.10.14", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index 99e7f608bf8..0470f9a48d4 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -76,7 +76,7 @@ "@types/enzyme": "^3.10.14", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", diff --git a/packages/compass-utils/package.json b/packages/compass-utils/package.json index 5635eb09258..56ef39e3b43 100644 --- a/packages/compass-utils/package.json +++ b/packages/compass-utils/package.json @@ -69,6 +69,6 @@ }, "dependencies": { "@electron/remote": "^2.1.2", - "electron": "^32.2.2" + "electron": "^32.2.3" } } diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index e55f0885d4c..a9fa0e52264 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -109,7 +109,7 @@ "debug": "^4.3.4", "depcheck": "^1.4.1", "dns-query": "^0.11.2", - "electron": "^32.2.2", + "electron": "^32.2.3", "eslint": "^7.25.0", "events": "^3.3.0", "express": "^4.21.1", diff --git a/packages/compass/package.json b/packages/compass/package.json index 82797da4515..f0c3f46c44c 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -243,7 +243,7 @@ "cross-spawn": "^7.0.3", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-devtools-installer": "^3.2.0", "electron-dl": "^3.5.0", "electron-mocha": "^12.2.0", diff --git a/packages/connection-storage/package.json b/packages/connection-storage/package.json index 23b9ec6bd7e..fc26258d2f6 100644 --- a/packages/connection-storage/package.json +++ b/packages/connection-storage/package.json @@ -63,7 +63,7 @@ "@mongodb-js/connection-info": "^0.9.3", "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", "keytar": "^7.9.0", diff --git a/packages/hadron-build/package.json b/packages/hadron-build/package.json index 84268157a8b..9ad3d93ecd0 100644 --- a/packages/hadron-build/package.json +++ b/packages/hadron-build/package.json @@ -32,7 +32,7 @@ "debug": "^4.3.4", "del": "^2.0.2", "download": "^8.0.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "electron-packager": "^15.5.1", "electron-packager-plugin-non-proprietary-codecs-ffmpeg": "^1.0.2", "flatnest": "^1.0.0", diff --git a/packages/hadron-ipc/package.json b/packages/hadron-ipc/package.json index b5205a65295..4c7f658ded0 100644 --- a/packages/hadron-ipc/package.json +++ b/packages/hadron-ipc/package.json @@ -69,7 +69,7 @@ }, "dependencies": { "debug": "^4.3.4", - "electron": "^32.2.2", + "electron": "^32.2.3", "is-electron-renderer": "^2.0.1" } } diff --git a/scripts/package.json b/scripts/package.json index 88265000c93..5e9b0aead89 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -41,7 +41,7 @@ "@babel/core": "^7.24.3", "@mongodb-js/monorepo-tools": "^1.1.1", "commander": "^11.0.0", - "electron": "^32.2.2", + "electron": "^32.2.3", "jsdom": "^24.1.3", "make-fetch-happen": "^10.2.1", "pacote": "^11.3.5", From c96156ab322082d48c0b3957530744c30c1fc94a Mon Sep 17 00:00:00 2001 From: Basit <1305718+mabaasit@users.noreply.github.com> Date: Mon, 11 Nov 2024 14:26:17 +0100 Subject: [PATCH 51/81] chore(deps): bump cross-spawn (#6474) * bump cross-spawn * npm update --- package-lock.json | 84 ++++--------------------- packages/compass-e2e-tests/package.json | 2 +- packages/compass/package.json | 2 +- 3 files changed, 13 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 48e0fe14588..704f058a479 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18062,9 +18062,10 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -43204,7 +43205,7 @@ "chalk": "^4.1.2", "clean-stack": "^2.0.0", "compass-preferences-model": "^2.30.0", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^32.2.3", @@ -44022,7 +44023,7 @@ "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", "compass-preferences-model": "^2.30.0", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^32.2.3", @@ -49705,41 +49706,6 @@ } } }, - "scripts/node_modules/jsdom/node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "scripts/node_modules/jsdom/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "scripts/node_modules/jsdom/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "scripts/node_modules/nwsapi": { "version": "2.2.12", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", @@ -56898,34 +56864,6 @@ "whatwg-url": "^14.0.0", "ws": "^8.18.0", "xml-name-validator": "^5.0.0" - }, - "dependencies": { - "agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "requires": { - "debug": "^4.3.4" - } - }, - "http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "requires": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - } - }, - "https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "requires": { - "agent-base": "^7.0.2", - "debug": "4" - } - } } }, "nwsapi": { @@ -66717,7 +66655,7 @@ "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", "compass-preferences-model": "^2.30.0", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^32.2.3", @@ -67546,9 +67484,9 @@ } }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -78586,7 +78524,7 @@ "clean-stack": "^2.0.0", "clipboard": "^2.0.6", "compass-preferences-model": "^2.30.0", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^32.2.3", diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index f35b2fcb498..eb5df3360dd 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -48,7 +48,7 @@ "chai-as-promised": "^7.1.1", "clipboardy": "^2.3.0", "compass-preferences-model": "^2.30.0", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^32.2.3", diff --git a/packages/compass/package.json b/packages/compass/package.json index f0c3f46c44c..a55e319c525 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -240,7 +240,7 @@ "chalk": "^4.1.2", "clean-stack": "^2.0.0", "compass-preferences-model": "^2.30.0", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", "electron": "^32.2.3", From cc1b6342a8d83df0ee2f05f1c0bc961333d92ef8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 13:33:27 +0000 Subject: [PATCH 52/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6476) Update report Co-authored-by: mabaasit <1305718+mabaasit@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 12 ++++++------ docs/tracking-plan.md | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 45cf5b9e355..67f7f41f901 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -207,7 +207,7 @@ Package|Version|License **[cpu-features](#fa992e00865a6ed732ac63bbf64c89ee2da4ec39944684e6002a3a34b5adb65c)**|0.0.9|MIT **[crelt](#9eba7acaba2af9d27a0a18fcf40d1f133ffa888d85321e4633e7dac58cab2db9)**|1.0.5|MIT **[cross-fetch](#2cd4375069c47bf89a4b399cd21cd9573086803b2cb9fc56c29df5a598e051e5)**|3.1.8|MIT -**[cross-spawn](#67de3a765808182ee1018c35bc07d7a023a8d645e98cc32814dcac2fc2c427ff)**|7.0.3|MIT +**[cross-spawn](#18650458ca35439e7a812c8f7c2ed7a891653f9c6686fd1f0456eb4f645d367d)**|7.0.5|MIT **[css-loader](#36a5fb6f554559a2f884527f4dd7aa81131ccc3b1aee899472cfec2eda765798)**|4.3.0|MIT **[d3-flextree](#d4848a862048d0f4733db2a8631b802f3b5f86f2d4a1efb77fc8b8cf9a06bf73)**|2.1.2|WTFPL **[d3-hierarchy](#e718643319205524a77c56ca75dcbf37e3975cc5e187760d1eef01cdd94a7d74)**|1.1.9|BSD-3-Clause @@ -238,7 +238,7 @@ Package|Version|License **[ee-first](#e2746902c758ae8a6f91ffb9618cd53717f936cb33c6323e65b6b7b24f7ebefe)**|1.1.1|MIT **[electron-dl](#e97e034c7b93c63e7a433d75f6f1de3e0668764225ebbd61dbde8d1b55d6f3b7)**|3.5.0|MIT **[electron-squirrel-startup](#09fb8168e8fda2e174f8d1a1c392ffd8f762c5637c788edd00d1e2486d060349)**|1.0.1|Apache-2.0 -**[electron](#ddfad0a406da8c661d832155ebc87c378ac67db5d3c70f33126149f0084c639b)**|32.2.2|MIT +**[electron](#45d9d716eba09c27895fc97918c48d7e8fd605bb2c2a291edd07aa512ebee800)**|32.2.3|MIT **[encodeurl](#b89152db475e86531e570f87b45d8a51aa5e5d87d4cc3b960cee7b8febf1d26a)**|1.0.2|MIT **[encodeurl](#177948a319ae0aeebbd65742c53c62b37c75ec1d021afa5a188d10a7ceae6623)**|2.0.0|MIT **[end-of-stream](#fadc10994f5fa767d06fb25cfff35fb17a895daf3bc3477c782907668ed16563)**|1.4.4|MIT @@ -17415,8 +17415,8 @@ License files: -
-### [cross-spawn](https://www.npmjs.com/package/cross-spawn) (version 7.0.3) + +### [cross-spawn](https://www.npmjs.com/package/cross-spawn) (version 7.0.5) License tags: MIT License files: @@ -18732,8 +18732,8 @@ License files: - -### [electron](https://www.npmjs.com/package/electron) (version 32.2.2) + +### [electron](https://www.npmjs.com/package/electron) (version 32.2.3) License tags: MIT License files: diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index d4f4a179a28..04efab403c5 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Nov 11, 2024 at 10:33 AM +Generated on Mon, Nov 11, 2024 at 01:33 PM ## Table of Contents From 5e7600f6696e5faf9d7977701354a82622795693 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Mon, 11 Nov 2024 15:52:32 +0100 Subject: [PATCH 53/81] chore(connections): send active and inactive connections with "New Connection" telemetry event COMPASS-8476 (#6464) * Add new fields telemetry event * Send active and inactive connections --- docs/tracking-plan.md | 4 ++++ .../src/stores/connections-store-redux.ts | 12 ++++++++++++ packages/compass-telemetry/src/telemetry-events.ts | 10 ++++++++++ 3 files changed, 26 insertions(+) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 04efab403c5..eab202408d1 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -854,6 +854,10 @@ This event is fired when user successfully connects to a new server/cluster. - The OS family of the connected server. - **topology_type** (required): `string` - The type of connected topology. +- **num_active_connections** (required): `number` + - The number of active connections. +- **num_inactive_connections** (required): `number` + - The number of inactive connections. - **auth_type** (optional): `string | undefined` - Desktop only. The authentication type used in the connection. - **tunnel** (optional): `string | undefined` diff --git a/packages/compass-connections/src/stores/connections-store-redux.ts b/packages/compass-connections/src/stores/connections-store-redux.ts index 368e5875e65..f40270a6503 100644 --- a/packages/compass-connections/src/stores/connections-store-redux.ts +++ b/packages/compass-connections/src/stores/connections-store-redux.ts @@ -1739,6 +1739,16 @@ const connectWithOptions = ( getExtraConnectionData(connectionInfo), ]); + const connections = getState().connections; + // Counting all connections, we need to filter out any connections currently being created + const totalConnectionsCount = Object.values( + connections.byId + ).filter(({ isBeingCreated }) => !isBeingCreated).length; + const activeConnectionsCount = + getActiveConnectionsCount(connections); + const inactiveConnectionsCount = + totalConnectionsCount - activeConnectionsCount; + return { is_atlas: isAtlas, atlas_hostname: isAtlas ? resolvedHostname : null, @@ -1751,6 +1761,8 @@ const connectWithOptions = ( server_arch: host.arch, server_os_family: host.os_family, topology_type: dataService.getCurrentTopologyType(), + num_active_connections: activeConnectionsCount, + num_inactive_connections: inactiveConnectionsCount, ...extraInfo, }; }, diff --git a/packages/compass-telemetry/src/telemetry-events.ts b/packages/compass-telemetry/src/telemetry-events.ts index 0355d5f2b97..3d1ec55d500 100644 --- a/packages/compass-telemetry/src/telemetry-events.ts +++ b/packages/compass-telemetry/src/telemetry-events.ts @@ -790,6 +790,16 @@ type NewConnectionEvent = ConnectionScoped<{ * The type of connected topology. */ topology_type: string; + + /** + * The number of active connections. + */ + num_active_connections: number; + + /** + * The number of inactive connections. + */ + num_inactive_connections: number; } & ExtraConnectionData; }>; From 25ac91d9f4de2f84b5d17b4dc80a7825f1fa34ee Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 14:59:14 +0000 Subject: [PATCH 54/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6477) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index eab202408d1..d8065f8fb60 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Nov 11, 2024 at 01:33 PM +Generated on Mon, Nov 11, 2024 at 02:59 PM ## Table of Contents From 5a3fe5349f58dd699df52af74bdf9593559d6fe9 Mon Sep 17 00:00:00 2001 From: Basit <1305718+mabaasit@users.noreply.github.com> Date: Mon, 11 Nov 2024 17:51:11 +0100 Subject: [PATCH 55/81] test(global-writes): add e2e tests COMPASS-8441 (#6430) * global writes tests * clean up confirmation action * rename func * cr feedback * timeout * fix doc * cr feedback * clean up * sensable selector * use timeout for wait condition as well * chore(e2e): use different collection names between tests * chore(e2e): temporarily skip failing test * update test after incomplete sharding status * try to re-enable the test * remove comment --------- Co-authored-by: Sergey Petushkov Co-authored-by: Paula Stachova --- .evergreen/start-atlas-cloud-cluster.sh | 8 +- .../commands/click-confirmation-action.ts | 28 +++ .../helpers/commands/collection-workspaces.ts | 38 ++-- .../helpers/commands/hide-index.ts | 18 +- .../helpers/commands/index.ts | 1 + .../helpers/commands/unhide-index.ts | 17 +- .../compass-e2e-tests/helpers/insert-data.ts | 6 +- .../compass-e2e-tests/helpers/selectors.ts | 20 ++ .../helpers/test-runner-context.ts | 2 +- .../tests/atlas-cloud/global-writes.test.ts | 174 ++++++++++++++++++ .../tests/atlas-cloud/rolling-indexes.test.ts | 12 +- .../tests/collection-aggregations-tab.test.ts | 22 +-- .../tests/connection-form.test.ts | 9 +- .../tests/my-queries-tab.test.ts | 8 +- .../tests/protect-connection-strings.test.ts | 5 +- .../tests/search-indexes.test.ts | 12 +- .../src/components/create-shard-key-form.tsx | 3 + .../src/components/index.tsx | 4 +- 18 files changed, 279 insertions(+), 108 deletions(-) create mode 100644 packages/compass-e2e-tests/helpers/commands/click-confirmation-action.ts create mode 100644 packages/compass-e2e-tests/tests/atlas-cloud/global-writes.test.ts diff --git a/.evergreen/start-atlas-cloud-cluster.sh b/.evergreen/start-atlas-cloud-cluster.sh index 541fd7a4df1..5c38b3d1f14 100644 --- a/.evergreen/start-atlas-cloud-cluster.sh +++ b/.evergreen/start-atlas-cloud-cluster.sh @@ -19,6 +19,9 @@ DELETE_AFTER="$(date -u -Iseconds -d '+2 hours' 2>/dev/null || date -u -Iseconds # # - Setup a new org and project. Save the org id and project id for later. # +# - Add test payment details within the organization (Billing) to be able to +# create clusters. +# # - Create a new API key (Access Manager > Project Access > Create Application > # API Key) for the project you created and save the public and private keys. # @@ -101,10 +104,11 @@ export COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_USERNAME="$ATLAS_TEST_DB_USERNAME" export COMPASS_E2E_ATLAS_CLOUD_SANDBOX_DBUSER_PASSWORD="$ATLAS_TEST_DB_PASSWORD" echo "Creating Atlas deployment \`$ATLAS_CLUSTER_NAME\` to test against..." -atlascli clusters create $ATLAS_CLUSTER_NAME \ +(atlascli clusters create $ATLAS_CLUSTER_NAME \ --provider AWS \ --region US_EAST_1 \ - --tier M10 + --tier M10 \ + --type GEOSHARDED || true) # can error if custom name was provided, will fail on next step if it's not expected failure echo "Waiting for the deployment to be provisioned..." atlascli clusters watch $ATLAS_CLUSTER_NAME diff --git a/packages/compass-e2e-tests/helpers/commands/click-confirmation-action.ts b/packages/compass-e2e-tests/helpers/commands/click-confirmation-action.ts new file mode 100644 index 00000000000..9524c4ef5a3 --- /dev/null +++ b/packages/compass-e2e-tests/helpers/commands/click-confirmation-action.ts @@ -0,0 +1,28 @@ +import type { CompassBrowser } from '../compass-browser'; +import * as Selectors from '../selectors'; + +export async function clickConfirmationAction( + browser: CompassBrowser, + actionButtonSelector: string, + confirmationText?: string, + screenshot?: string +) { + await browser.clickVisible(actionButtonSelector); + + const confirmationModal = await browser.$(Selectors.ConfirmationModal); + await confirmationModal.waitForDisplayed(); + + if (confirmationText) { + await browser.setValueVisible( + Selectors.ConfirmationModalInput, + confirmationText + ); + } + + if (screenshot) { + await browser.screenshot(screenshot); + } + + await browser.clickVisible(Selectors.confirmationModalConfirmButton()); + await confirmationModal.waitForDisplayed({ reverse: true }); +} diff --git a/packages/compass-e2e-tests/helpers/commands/collection-workspaces.ts b/packages/compass-e2e-tests/helpers/commands/collection-workspaces.ts index 8ca6d89c0c3..1b2bb502ccc 100644 --- a/packages/compass-e2e-tests/helpers/commands/collection-workspaces.ts +++ b/packages/compass-e2e-tests/helpers/commands/collection-workspaces.ts @@ -2,6 +2,14 @@ import type { CompassBrowser } from '../compass-browser'; import * as Selectors from '../selectors'; import type { WorkspaceTabSelectorOptions } from '../selectors'; +type CollectionWorkspaceSubTab = + | 'Documents' + | 'Aggregations' + | 'Schema' + | 'Indexes' + | 'Validation' + | 'GlobalWrites'; + async function navigateToCollection( browser: CompassBrowser, connectionName: string, @@ -50,12 +58,8 @@ export async function navigateToCollectionTab( connectionName: string, dbName: string, collectionName: string, - tabName: - | 'Documents' - | 'Aggregations' - | 'Schema' - | 'Indexes' - | 'Validation' = 'Documents', + tabName: CollectionWorkspaceSubTab = 'Documents', + closeExistingTabs = true ): Promise { await navigateToCollection( @@ -83,12 +87,7 @@ export async function navigateToCollectionTab( export async function navigateWithinCurrentCollectionTabs( browser: CompassBrowser, - tabName: - | 'Documents' - | 'Aggregations' - | 'Schema' - | 'Indexes' - | 'Validation' = 'Documents' + tabName: CollectionWorkspaceSubTab = 'Documents' ): Promise { const tab = browser.$(Selectors.collectionSubTab(tabName)); const selectedTab = browser.$(Selectors.collectionSubTab(tabName, true)); @@ -108,13 +107,7 @@ async function waitUntilActiveCollectionTab( connectionName: string, dbName: string, collectionName: string, - tabName: - | 'Documents' - | 'Aggregations' - | 'Schema' - | 'Indexes' - | 'Validation' - | null = null + tabName: CollectionWorkspaceSubTab | null = null ) { const options: WorkspaceTabSelectorOptions = { type: 'Collection', @@ -132,12 +125,7 @@ async function waitUntilActiveCollectionTab( export async function waitUntilActiveCollectionSubTab( browser: CompassBrowser, - tabName: - | 'Documents' - | 'Aggregations' - | 'Schema' - | 'Indexes' - | 'Validation' = 'Documents' + tabName: CollectionWorkspaceSubTab = 'Documents' ) { await browser.$(Selectors.collectionSubTab(tabName, true)).waitForDisplayed(); } diff --git a/packages/compass-e2e-tests/helpers/commands/hide-index.ts b/packages/compass-e2e-tests/helpers/commands/hide-index.ts index ed1d0e5b6c6..d082ab91a98 100644 --- a/packages/compass-e2e-tests/helpers/commands/hide-index.ts +++ b/packages/compass-e2e-tests/helpers/commands/hide-index.ts @@ -11,21 +11,11 @@ export async function hideIndex( await indexComponent.waitForDisplayed(); await browser.hover(indexComponentSelector); - await browser.clickVisible( - `${indexComponentSelector} ${Selectors.HideIndexButton}` + await browser.clickConfirmationAction( + `${indexComponentSelector} ${Selectors.HideIndexButton}`, + undefined, + screenshotName ); - - const hideModal = await browser.$(Selectors.ConfirmationModal); - await hideModal.waitForDisplayed(); - - if (screenshotName) { - await browser.screenshot(screenshotName); - } - - await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - - await hideModal.waitForDisplayed({ reverse: true }); - const hiddenBadge = await browser.$(Selectors.HiddenIndexBadge(indexName)); await hiddenBadge.waitForDisplayed(); } diff --git a/packages/compass-e2e-tests/helpers/commands/index.ts b/packages/compass-e2e-tests/helpers/commands/index.ts index 2ad04e81f01..080501905f9 100644 --- a/packages/compass-e2e-tests/helpers/commands/index.ts +++ b/packages/compass-e2e-tests/helpers/commands/index.ts @@ -64,3 +64,4 @@ export * from './hide-visible-toasts'; export * from './sidebar-collection'; export * from './read-first-document-content'; export * from './read-stage-operators'; +export * from './click-confirmation-action'; diff --git a/packages/compass-e2e-tests/helpers/commands/unhide-index.ts b/packages/compass-e2e-tests/helpers/commands/unhide-index.ts index 305ce3cea96..4d7e3905b7f 100644 --- a/packages/compass-e2e-tests/helpers/commands/unhide-index.ts +++ b/packages/compass-e2e-tests/helpers/commands/unhide-index.ts @@ -11,21 +11,12 @@ export async function unhideIndex( await indexComponent.waitForDisplayed(); await browser.hover(indexComponentSelector); - await browser.clickVisible( - `${indexComponentSelector} ${Selectors.UnhideIndexButton}` + await browser.clickConfirmationAction( + `${indexComponentSelector} ${Selectors.UnhideIndexButton}`, + undefined, + screenshotName ); - const unhideModal = await browser.$(Selectors.ConfirmationModal); - await unhideModal.waitForDisplayed(); - - if (screenshotName) { - await browser.screenshot(screenshotName); - } - - await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - - await unhideModal.waitForDisplayed({ reverse: true }); - const hiddenBadge = await browser.$(Selectors.HiddenIndexBadge(indexName)); await hiddenBadge.waitForDisplayed({ reverse: true }); } diff --git a/packages/compass-e2e-tests/helpers/insert-data.ts b/packages/compass-e2e-tests/helpers/insert-data.ts index ab0fa1894b8..aa17255aad5 100644 --- a/packages/compass-e2e-tests/helpers/insert-data.ts +++ b/packages/compass-e2e-tests/helpers/insert-data.ts @@ -168,13 +168,15 @@ export async function createNumbersStringCollection( ); } -export async function createGeospatialCollection(): Promise { +export async function createGeospatialCollection( + name = 'geospatial' +): Promise { await Promise.all( test_dbs.map(async (db) => { const lon = () => Math.random() * 360 - 180; const lat = () => Math.random() * 180 - 90; - await db.collection('geospatial').insertMany( + await db.collection(name).insertMany( [...Array(1000).keys()].map(() => ({ location: { type: 'Point', coordinates: [lon(), lat()] }, })) diff --git a/packages/compass-e2e-tests/helpers/selectors.ts b/packages/compass-e2e-tests/helpers/selectors.ts index 0d4532ea4c1..e137f94b4e3 100644 --- a/packages/compass-e2e-tests/helpers/selectors.ts +++ b/packages/compass-e2e-tests/helpers/selectors.ts @@ -1400,3 +1400,23 @@ export const ProxyCustomButton = // Close tab confirmation export const ConfirmTabCloseModal = '[data-testid="confirm-tab-close"]'; + +export const GlobalWrites = { + tabStatus: (status: string) => + `[data-testid="globalwrites-content"] > [data-status="${status.toLowerCase()}"]`, + + ShardKeyFormSecondKeyInputCombobox: + '[data-testid="second-shard-key"] [role="combobox"] input', + ShardKeyFormAdvancedOptionsToggle: + '[data-testid="advanced-shard-key-configuration"]', + shardKeyFormIndexType: (type: 'UNIQUE' | 'HASHED') => + `[data-testid="${type.toLowerCase()}-index"]`, + ShardKeyFormSubmitButton: '[data-testid="shard-collection-button"]', + + CancelShardingButton: '[data-testid="cancel-sharding-btn"]', + UnmanageNamespaceButton: '[data-testid="unmanage-collection-button"]', + ManageNamespaceButton: '[data-testid="manage-collection-button"]', + + SampleFindingDocuments: '[data-testid="sample-finding-documents"]', + SampleInsertingDocuments: '[data-testid="sample-inserting-documents"]', +}; diff --git a/packages/compass-e2e-tests/helpers/test-runner-context.ts b/packages/compass-e2e-tests/helpers/test-runner-context.ts index e9ed908a4e4..2c73d855471 100644 --- a/packages/compass-e2e-tests/helpers/test-runner-context.ts +++ b/packages/compass-e2e-tests/helpers/test-runner-context.ts @@ -39,7 +39,7 @@ function buildCommonArgs(yargs: Argv) { .option('webdriver-waitfor-timeout', { type: 'number', description: 'Set a custom default webdriver waitFor timeout', - default: 120_000, // webdriver default is 3000ms + default: 1000 * 60 * 2, // 2min, webdriver default is 3s }) .option('webdriver-waitfor-interval', { type: 'number', diff --git a/packages/compass-e2e-tests/tests/atlas-cloud/global-writes.test.ts b/packages/compass-e2e-tests/tests/atlas-cloud/global-writes.test.ts new file mode 100644 index 00000000000..a45d5758761 --- /dev/null +++ b/packages/compass-e2e-tests/tests/atlas-cloud/global-writes.test.ts @@ -0,0 +1,174 @@ +import { expect } from 'chai'; +import type { Compass } from '../../helpers/compass'; +import { + cleanup, + init, + screenshotIfFailed, + Selectors, +} from '../../helpers/compass'; +import type { CompassBrowser } from '../../helpers/compass-browser'; +import { createGeospatialCollection } from '../../helpers/insert-data'; +import { + DEFAULT_CONNECTION_NAMES, + isTestingAtlasCloudSandbox, +} from '../../helpers/test-runner-context'; + +type GeoShardingFormData = { + secondShardKey: string; + keyType?: 'UNIQUE' | 'HASHED'; +}; + +type GeoShardingStatus = + | 'UNSHARDED' + | 'SHARDING' + | 'SHARD_KEY_CORRECT' + | 'INCOMPLETE_SHARDING_SETUP'; + +const WEBDRIVER_TIMEOUT = 1000 * 60 * 10; +const MOCHA_TIMEOUT = WEBDRIVER_TIMEOUT * 1.2; + +async function createGeoShardKey( + browser: CompassBrowser, + formData: GeoShardingFormData +) { + await browser.setComboBoxValue( + Selectors.GlobalWrites.ShardKeyFormSecondKeyInputCombobox, + formData.secondShardKey + ); + + if (formData.keyType) { + await browser.clickVisible( + Selectors.GlobalWrites.ShardKeyFormAdvancedOptionsToggle + ); + await browser.clickParent( + Selectors.GlobalWrites.shardKeyFormIndexType(formData.keyType) + ); + } + await browser.clickVisible(Selectors.GlobalWrites.ShardKeyFormSubmitButton); +} + +async function waitForGlobalWritesStatus( + browser: CompassBrowser, + nextStatus: GeoShardingStatus +) { + await browser.waitUntil( + async () => { + return await browser + .$(Selectors.GlobalWrites.tabStatus(nextStatus)) + .isDisplayed(); + }, + { + timeout: WEBDRIVER_TIMEOUT, + // Sharding is slow process, no need to check too often, just makes the + // logs hard to read + interval: 2_000, + } + ); +} + +describe('Global writes', function () { + // Sharding a collection takes a bit longer + this.timeout(MOCHA_TIMEOUT); + + let compass: Compass; + let browser: CompassBrowser; + + before(function () { + if (!isTestingAtlasCloudSandbox()) { + this.skip(); + } + }); + + beforeEach(async function () { + compass = await init(this.test?.fullTitle()); + browser = compass.browser; + await browser.setupDefaultConnections(); + }); + + afterEach(async function () { + await screenshotIfFailed(compass, this.currentTest); + await cleanup(compass); + }); + + it('should be able to shard an unsharded namespace and also unmanage it', async function () { + const collName = `global-writes-geospatial-${Date.now()}`; + + await createGeospatialCollection(collName); + await browser.connectToDefaults(); + await browser.navigateToCollectionTab( + DEFAULT_CONNECTION_NAMES[0], + 'test', + collName, + 'GlobalWrites' + ); + + // Initial state is loading + await waitForGlobalWritesStatus(browser, 'UNSHARDED'); + + await createGeoShardKey(browser, { + secondShardKey: 'country', + keyType: 'HASHED', + }); + + // Wait for the shard key to be correct. + await waitForGlobalWritesStatus(browser, 'SHARD_KEY_CORRECT'); + + // Expectations to see the shard key in the UI + const findingDocumentsText = await browser + .$(Selectors.GlobalWrites.SampleFindingDocuments) + .getText(); + + const insertedDocumentsText = await browser + .$(Selectors.GlobalWrites.SampleInsertingDocuments) + .getText(); + + expect(findingDocumentsText).to.include('country'); + expect(insertedDocumentsText).to.include('country'); + + // Unmanage the namespace + await browser.clickVisible(Selectors.GlobalWrites.UnmanageNamespaceButton); + + // It transitions to the unmanaging state + await waitForGlobalWritesStatus(browser, 'INCOMPLETE_SHARDING_SETUP'); + + // This time there should be a button to manage the namespace again, but not the form + await browser + .$(Selectors.GlobalWrites.ManageNamespaceButton) + .waitForDisplayed(); + await browser + .$(Selectors.GlobalWrites.ShardKeyFormSecondKeyInputCombobox) + .waitForDisplayed({ reverse: true }); + }); + + it('should be able to shard an unsharded namespace and cancel the operation', async function () { + const collName = `global-writes-geospatial-${Date.now()}`; + + await createGeospatialCollection(collName); + await browser.connectToDefaults(); + await browser.navigateToCollectionTab( + DEFAULT_CONNECTION_NAMES[0], + 'test', + collName, + 'GlobalWrites' + ); + + // Initial state is loading + await waitForGlobalWritesStatus(browser, 'UNSHARDED'); + + await createGeoShardKey(browser, { + secondShardKey: 'country', + keyType: 'UNIQUE', + }); + + // Wait for the shard key to be correct. + await waitForGlobalWritesStatus(browser, 'SHARDING'); + + // Cancel the sharding operation. + await browser.clickConfirmationAction( + Selectors.GlobalWrites.CancelShardingButton + ); + + // After its cancelled, it should transition back to the unsharded state + await waitForGlobalWritesStatus(browser, 'UNSHARDED'); + }); +}); diff --git a/packages/compass-e2e-tests/tests/atlas-cloud/rolling-indexes.test.ts b/packages/compass-e2e-tests/tests/atlas-cloud/rolling-indexes.test.ts index f09b7afcd85..e3189ba7135 100644 --- a/packages/compass-e2e-tests/tests/atlas-cloud/rolling-indexes.test.ts +++ b/packages/compass-e2e-tests/tests/atlas-cloud/rolling-indexes.test.ts @@ -30,15 +30,12 @@ describe('Rolling indexes', function () { afterEach(async function () { await screenshotIfFailed(compass, this.currentTest); - }); - - after(async function () { await cleanup(compass); }); it('should be able to create, list, and delete rolling indexes', async function () { // Building rolling indexes is a slow process - const extendedRollingIndexesTimeout = 1000 * 60 * 20; + const extendedRollingIndexesTimeout = 1000 * 60 * 10; this.timeout(extendedRollingIndexesTimeout * 1.2); @@ -77,7 +74,12 @@ describe('Rolling indexes', function () { await browser .$(Selectors.indexComponent(indexName)) .$('[data-testid="index-ready"]') - .waitForDisplayed({ timeout: extendedRollingIndexesTimeout }); + .waitForDisplayed({ + timeout: extendedRollingIndexesTimeout, + // Building a rolling index is a slow process, no need to check too + // often + interval: 2_000, + }); // Now that it's ready, delete it (it will also check that it's eventually // removed from the list) diff --git a/packages/compass-e2e-tests/tests/collection-aggregations-tab.test.ts b/packages/compass-e2e-tests/tests/collection-aggregations-tab.test.ts index 2dd52fbe505..f4db128dfd3 100644 --- a/packages/compass-e2e-tests/tests/collection-aggregations-tab.test.ts +++ b/packages/compass-e2e-tests/tests/collection-aggregations-tab.test.ts @@ -1011,13 +1011,7 @@ describe('Collection aggregations tab', function () { it('shows confirmation modal when create new pipeline is clicked and aggregation is modified', async function () { await browser.selectStageOperator(0, '$match'); - - await browser.clickVisible(Selectors.CreateNewPipelineButton); - const modalElement = await browser.$(Selectors.ConfirmationModal); - await modalElement.waitForDisplayed(); - - await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - await modalElement.waitForDisplayed({ reverse: true }); + await browser.clickConfirmationAction(Selectors.CreateNewPipelineButton); }); describe('aggregation builder in text mode', function () { @@ -1258,14 +1252,9 @@ describe('Collection aggregations tab', function () { ); await browser.hover(Selectors.AggregationSavedPipelineCard(name)); - await browser.clickVisible( + await browser.clickConfirmationAction( Selectors.AggregationSavedPipelineCardOpenButton(name) ); - - const confirmOpenModal = await browser.$(Selectors.ConfirmationModal); - await confirmOpenModal.waitForDisplayed(); - await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - await confirmOpenModal.waitForDisplayed({ reverse: true }); }); it('deletes an aggregation', async function () { @@ -1278,14 +1267,9 @@ describe('Collection aggregations tab', function () { ); await browser.hover(Selectors.AggregationSavedPipelineCard(name)); - await browser.clickVisible( + await browser.clickConfirmationAction( Selectors.AggregationSavedPipelineCardDeleteButton(name) ); - - const confirmDeleteModal = await browser.$(Selectors.ConfirmationModal); - await confirmDeleteModal.waitForDisplayed(); - await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - await confirmDeleteModal.waitForDisplayed({ reverse: true }); }); }); diff --git a/packages/compass-e2e-tests/tests/connection-form.test.ts b/packages/compass-e2e-tests/tests/connection-form.test.ts index 111c074f761..98a53f17563 100644 --- a/packages/compass-e2e-tests/tests/connection-form.test.ts +++ b/packages/compass-e2e-tests/tests/connection-form.test.ts @@ -670,14 +670,7 @@ describe('Connection form', function () { // toggle the edit connection string toggle twice await browser.clickVisible(Selectors.EditConnectionStringToggle); expect(await toggle.getAttribute('aria-checked')).to.equal('false'); - await browser.clickVisible(Selectors.EditConnectionStringToggle); - - const confirmModal = await browser.$(Selectors.ConfirmationModal); - await confirmModal.waitForDisplayed(); - - await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - - await confirmModal.waitForDisplayed({ reverse: true }); + await browser.clickConfirmationAction(Selectors.EditConnectionStringToggle); // the toggle should now be on expect(await toggle.getAttribute('aria-checked')).to.equal('true'); diff --git a/packages/compass-e2e-tests/tests/my-queries-tab.test.ts b/packages/compass-e2e-tests/tests/my-queries-tab.test.ts index 58d833dfdf1..2b57d35e2c1 100644 --- a/packages/compass-e2e-tests/tests/my-queries-tab.test.ts +++ b/packages/compass-e2e-tests/tests/my-queries-tab.test.ts @@ -301,11 +301,9 @@ describe('My Queries tab', function () { await openMenuForQueryItem(browser, newFavoriteQueryName); // delete it - await browser.clickVisible(Selectors.SavedItemMenuItemDelete); - const deleteModal = await browser.$(Selectors.ConfirmationModal); - await deleteModal.waitForDisplayed(); - await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - await renameModal.waitForDisplayed({ reverse: true }); + await browser.clickConfirmationAction( + Selectors.SavedItemMenuItemDelete + ); }); it('opens a saved aggregation', async function () { diff --git a/packages/compass-e2e-tests/tests/protect-connection-strings.test.ts b/packages/compass-e2e-tests/tests/protect-connection-strings.test.ts index c20ebc3476f..69197382d29 100644 --- a/packages/compass-e2e-tests/tests/protect-connection-strings.test.ts +++ b/packages/compass-e2e-tests/tests/protect-connection-strings.test.ts @@ -87,10 +87,7 @@ describe('protectConnectionStrings', function () { ); // Enter edit connection string mode - await browser.clickVisible(Selectors.EditConnectionStringToggle); - const confirmModal = await browser.$(Selectors.ConfirmationModal); - await confirmModal.waitForDisplayed(); - await browser.clickVisible(Selectors.confirmationModalConfirmButton()); + await browser.clickConfirmationAction(Selectors.EditConnectionStringToggle); expect( await browser.getConnectFormConnectionString(), diff --git a/packages/compass-e2e-tests/tests/search-indexes.test.ts b/packages/compass-e2e-tests/tests/search-indexes.test.ts index dbe41df9ada..264ecbc40ec 100644 --- a/packages/compass-e2e-tests/tests/search-indexes.test.ts +++ b/packages/compass-e2e-tests/tests/search-indexes.test.ts @@ -108,15 +108,11 @@ async function dropSearchIndex(browser: CompassBrowser, indexName: string) { await indexRow.waitForDisplayed(); await browser.hover(indexRowSelector); - await browser.clickVisible(Selectors.searchIndexDropButton(indexName)); - const modal = await browser.$(Selectors.ConfirmationModal); - await modal.waitForDisplayed(); - - await browser.setValueVisible(Selectors.ConfirmationModalInput, indexName); - - await browser.clickVisible(Selectors.confirmationModalConfirmButton()); - await modal.waitForDisplayed({ reverse: true }); + await browser.clickConfirmationAction( + Selectors.searchIndexDropButton(indexName), + indexName + ); await indexRow.waitForExist({ reverse: true, diff --git a/packages/compass-global-writes/src/components/create-shard-key-form.tsx b/packages/compass-global-writes/src/components/create-shard-key-form.tsx index 19c801e7b1d..34fe299ad69 100644 --- a/packages/compass-global-writes/src/components/create-shard-key-form.tsx +++ b/packages/compass-global-writes/src/components/create-shard-key-form.tsx @@ -190,6 +190,7 @@ export function CreateShardKeyForm({ @@ -255,6 +257,7 @@ export function CreateShardKeyForm({ diff --git a/packages/compass-global-writes/src/components/index.tsx b/packages/compass-global-writes/src/components/index.tsx index d7331022a17..6f4f3f55778 100644 --- a/packages/compass-global-writes/src/components/index.tsx +++ b/packages/compass-global-writes/src/components/index.tsx @@ -101,14 +101,14 @@ function ShardingStateView({ export function GlobalWrites({ shardingStatus }: GlobalWritesProps) { if (shardingStatus === ShardingStatuses.NOT_READY) { return ( -
+
); } return ( - +
From 7f1fec58efec09b7757f5c6be1cd5b8ce17857fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 16:57:38 +0000 Subject: [PATCH 56/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6478) Update report Co-authored-by: mabaasit <1305718+mabaasit@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index d8065f8fb60..0825852d8f4 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Nov 11, 2024 at 02:59 PM +Generated on Mon, Nov 11, 2024 at 04:57 PM ## Table of Contents From f0e53225ebeb76e7eeaae46b25234445f441a633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Tue, 12 Nov 2024 19:33:24 +0100 Subject: [PATCH 57/81] chore(connections-navigation): add connect button to connections in sidebar COMPASS-8381 (#6449) * Add connect action to connections in sidebar * Disable pointer cursor and connect on click for disconnected connections * Add "button" representation for the connect button * Update e2e tests * Invert sidebar test --- .../src/components/item-action-controls.tsx | 56 ++++++++++++------- .../src/base-navigation-item.tsx | 11 +++- .../src/connections-navigation-tree.tsx | 4 +- .../src/item-actions.ts | 21 ++++++- .../src/navigation-item.tsx | 3 + .../helpers/commands/connect.ts | 1 + .../compass-e2e-tests/helpers/selectors.ts | 3 +- .../multiple-connections/sidebar.spec.tsx | 11 ++-- 8 files changed, 76 insertions(+), 34 deletions(-) diff --git a/packages/compass-components/src/components/item-action-controls.tsx b/packages/compass-components/src/components/item-action-controls.tsx index 5297b7a6211..1f2d58d223f 100644 --- a/packages/compass-components/src/components/item-action-controls.tsx +++ b/packages/compass-components/src/components/item-action-controls.tsx @@ -29,6 +29,8 @@ export type ItemAction = { disabledDescription?: string; tooltip?: string; actionButtonClassName?: string; + /** How to show the item when not collapsed into the menu */ + expandedPresentation?: 'icon' | 'button'; }; export type ItemSeparator = { separator: true }; @@ -343,26 +345,42 @@ export function ItemActionGroup({ tooltip, tooltipProps, actionButtonClassName, + expandedPresentation = 'icon', } = menuItem; - const button = ( - (dataTestId, action)} - onClick={onClick} - className={cx( - actionGroupButtonStyle, - iconClassName, - actionButtonClassName - )} - style={iconStyle} - disabled={isDisabled} - /> - ); + const button = + expandedPresentation === 'icon' ? ( + (dataTestId, action)} + onClick={onClick} + className={cx( + actionGroupButtonStyle, + iconClassName, + actionButtonClassName + )} + style={iconStyle} + disabled={isDisabled} + /> + ) : ( + + ); if (tooltip) { return ( diff --git a/packages/compass-connections-navigation/src/base-navigation-item.tsx b/packages/compass-connections-navigation/src/base-navigation-item.tsx index 6434b8b0c0a..f4dfa113de4 100644 --- a/packages/compass-connections-navigation/src/base-navigation-item.tsx +++ b/packages/compass-connections-navigation/src/base-navigation-item.tsx @@ -17,6 +17,7 @@ type NavigationBaseItemProps = { isExpandDisabled: boolean; isExpanded: boolean; isFocused: boolean; + hasDefaultAction: boolean; icon: React.ReactNode; style: React.CSSProperties; @@ -37,7 +38,6 @@ const menuStyles = css({ }); const itemContainerStyles = css({ - cursor: 'pointer', color: 'var(--item-color)', backgroundColor: 'var(--item-bg-color)', '&[data-is-active="true"] .item-wrapper': { @@ -53,6 +53,10 @@ const itemContainerStyles = css({ }, }); +const itemContainerWithActionStyles = css({ + cursor: 'pointer', +}); + const itemWrapperStyles = css({ display: 'flex', height: ROW_HEIGHT, @@ -93,6 +97,7 @@ export const NavigationBaseItem: React.FC = ({ isExpandDisabled, isExpanded, isFocused, + hasDefaultAction, onExpand, children, }) => { @@ -100,7 +105,9 @@ export const NavigationBaseItem: React.FC = ({ return (
diff --git a/packages/compass-connections-navigation/src/connections-navigation-tree.tsx b/packages/compass-connections-navigation/src/connections-navigation-tree.tsx index d5a68cd560a..14e6bbec8b5 100644 --- a/packages/compass-connections-navigation/src/connections-navigation-tree.tsx +++ b/packages/compass-connections-navigation/src/connections-navigation-tree.tsx @@ -87,8 +87,6 @@ const ConnectionsNavigationTree: React.FunctionComponent< if (item.type === 'connection') { if (item.connectionStatus === 'connected') { onItemAction(item, 'select-connection'); - } else { - onItemAction(item, 'connection-connect'); } } else if (item.type === 'database') { onItemAction(item, 'select-database'); @@ -187,7 +185,7 @@ const ConnectionsNavigationTree: React.FunctionComponent< connectionInfo: item.connectionInfo, }), config: { - collapseAfter: 0, + collapseAfter: 1, }, }; } diff --git a/packages/compass-connections-navigation/src/item-actions.ts b/packages/compass-connections-navigation/src/item-actions.ts index 7930ed44e8c..c412c25279c 100644 --- a/packages/compass-connections-navigation/src/item-actions.ts +++ b/packages/compass-connections-navigation/src/item-actions.ts @@ -5,7 +5,7 @@ import { type ItemSeparator } from '@mongodb-js/compass-components'; export type NavigationItemActions = (ItemAction | ItemSeparator)[]; -export const notConnectedConnectionItemActions = ({ +export const commonConnectionItemActions = ({ connectionInfo, }: { connectionInfo: ConnectionInfo; @@ -81,7 +81,7 @@ export const connectedConnectionItemActions = ({ isShellEnabled: boolean; }): NavigationItemActions => { const isAtlas = !!connectionInfo.atlasMetadata; - const connectionManagementActions = notConnectedConnectionItemActions({ + const connectionManagementActions = commonConnectionItemActions({ connectionInfo, }); const actions: (ItemAction | ItemSeparator | null)[] = [ @@ -135,6 +135,23 @@ export const connectedConnectionItemActions = ({ }); }; +export const notConnectedConnectionItemActions = ({ + connectionInfo, +}: { + connectionInfo: ConnectionInfo; +}): NavigationItemActions => { + const commonActions = commonConnectionItemActions({ connectionInfo }); + return [ + { + action: 'connection-connect', + label: 'Connect', + icon: 'Connect', + expandedPresentation: 'button', + }, + ...commonActions, + ]; +}; + export const databaseItemActions = ({ hasWriteActionsDisabled, }: { diff --git a/packages/compass-connections-navigation/src/navigation-item.tsx b/packages/compass-connections-navigation/src/navigation-item.tsx index e655bbe04f9..a5b3d530070 100644 --- a/packages/compass-connections-navigation/src/navigation-item.tsx +++ b/packages/compass-connections-navigation/src/navigation-item.tsx @@ -251,6 +251,9 @@ export function NavigationItem({ isActive={isActive} isFocused={isFocused} isExpanded={!!item.isExpanded} + hasDefaultAction={ + item.type !== 'connection' || item.connectionStatus === 'connected' + } icon={itemIcon} name={item.name} style={style} diff --git a/packages/compass-e2e-tests/helpers/commands/connect.ts b/packages/compass-e2e-tests/helpers/commands/connect.ts index 97356a91de5..0dada57a24f 100644 --- a/packages/compass-e2e-tests/helpers/commands/connect.ts +++ b/packages/compass-e2e-tests/helpers/commands/connect.ts @@ -185,6 +185,7 @@ export async function connectByName( connectionName: string, options: ConnectionResultOptions = {} ) { + await browser.hover(Selectors.sidebarConnection(connectionName)); await browser.clickVisible(Selectors.sidebarConnectionButton(connectionName)); await browser.waitForConnectionResult(connectionName, options); } diff --git a/packages/compass-e2e-tests/helpers/selectors.ts b/packages/compass-e2e-tests/helpers/selectors.ts index e137f94b4e3..235df5d5f1f 100644 --- a/packages/compass-e2e-tests/helpers/selectors.ts +++ b/packages/compass-e2e-tests/helpers/selectors.ts @@ -281,6 +281,7 @@ export const Single = { // Multiple Connections sidebar export const Multiple = { ConnectionsTitle: '[data-testid="connections-header"]', + ConnectButton: '[data-action="connection-connect"]', SidebarNewConnectionButton: '[data-action="add-new-connection"]', ConnectionMenu: '[data-testid="sidebar-navigation-item-actions"]', CreateDatabaseButton: @@ -402,7 +403,7 @@ export const sidebarConnection = (connectionName: string): string => { }; export const sidebarConnectionButton = (connectionName: string): string => { - return `${sidebarConnection(connectionName)} > div > button`; + return `${sidebarConnection(connectionName)} ${Multiple.ConnectButton}`; }; export const sidebarConnectionActionButton = ( diff --git a/packages/compass-sidebar/src/components/multiple-connections/sidebar.spec.tsx b/packages/compass-sidebar/src/components/multiple-connections/sidebar.spec.tsx index 109d9398dfc..d883192a959 100644 --- a/packages/compass-sidebar/src/components/multiple-connections/sidebar.spec.tsx +++ b/packages/compass-sidebar/src/components/multiple-connections/sidebar.spec.tsx @@ -460,18 +460,15 @@ describe('Multiple Connections Sidebar Component', function () { expect(connectionsStoreActions.disconnect).to.have.been.called; }); - it('should connect when the user tries to expand an inactive connection', async function () { + it('should not connect when the user tries to expand an inactive connection', function () { const connectionItem = screen.getByTestId(savedRecentConnection.id); userEvent.click( within(connectionItem).getByLabelText('Caret Right Icon') ); - - await waitFor(() => { - expect(connectionsStoreActions.connect).to.be.calledWith( - savedRecentConnection - ); - }); + expect(connectionsStoreActions.connect).to.not.be.calledWith( + savedRecentConnection + ); }); it('should open edit connection modal when clicked on edit connection action', function () { From 421c06d2c6b9ec621fed9abfd6c3f7740dc8fd33 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 18:40:08 +0000 Subject: [PATCH 58/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6481) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 67f7f41f901..77d6e183188 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Mon Nov 11 2024. +This document was automatically generated on Tue Nov 12 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 0825852d8f4..6634a14af0c 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Nov 11, 2024 at 04:57 PM +Generated on Tue, Nov 12, 2024 at 06:40 PM ## Table of Contents From 81e415699fea2e40239c144a60f1908e8f77484c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Tue, 12 Nov 2024 19:40:59 +0100 Subject: [PATCH 59/81] feat(sidebar): active connections toggle COMPASS-8114 (#6458) * Add ConnectedPlugs and DisconnectedPlug icons * Show icon button to the right of NavigationItemsFilter * Add "exclude inactive" to connections filtering * Turn IconButton active when filtering is active * fixup! Show icon button to the right of NavigationItemsFilter Use default align for the Tooltip * Fix existing tests * Add a new test * fixup! Add a new test Use queryByTestId to fix test * fixup! fixup! Add a new test Move asserts into a shared expectElementByTestId * Add useFilteredConnections tests * fixup! fixup! fixup! Add a new test Revert the shared helper * fixup! fixup! fixup! fixup! Add a new test Remove unused import --- .../src/components/icons/connected-plugs.tsx | 46 +++++++++ .../components/icons/disconnected-plug.tsx | 27 ++++++ packages/compass-components/src/index.ts | 2 + .../connections-navigation.tsx | 55 +++++++++-- .../multiple-connections/sidebar.spec.tsx | 30 ++++++ .../multiple-connections/sidebar.tsx | 6 ++ .../components/navigation-items-filter.tsx | 7 +- .../use-filtered-connections.spec.ts | 94 ++++++++++++++++++- .../components/use-filtered-connections.ts | 47 +++++++--- 9 files changed, 288 insertions(+), 26 deletions(-) create mode 100644 packages/compass-components/src/components/icons/connected-plugs.tsx create mode 100644 packages/compass-components/src/components/icons/disconnected-plug.tsx diff --git a/packages/compass-components/src/components/icons/connected-plugs.tsx b/packages/compass-components/src/components/icons/connected-plugs.tsx new file mode 100644 index 00000000000..a9e4912e384 --- /dev/null +++ b/packages/compass-components/src/components/icons/connected-plugs.tsx @@ -0,0 +1,46 @@ +import { palette } from '@leafygreen-ui/palette'; +import React, { useMemo } from 'react'; + +import { useDarkMode } from '../../hooks/use-theme'; + +const ConnectedPlugsIcon: React.FunctionComponent = () => { + const darkMode = useDarkMode(); + + const fillColor = useMemo( + () => (darkMode ? palette.white : palette.black), + [darkMode] + ); + + const sparkColor = palette.green.dark1; + + return ( + + + + + + + + + ); +}; + +export { ConnectedPlugsIcon }; diff --git a/packages/compass-components/src/components/icons/disconnected-plug.tsx b/packages/compass-components/src/components/icons/disconnected-plug.tsx new file mode 100644 index 00000000000..efd40a711d3 --- /dev/null +++ b/packages/compass-components/src/components/icons/disconnected-plug.tsx @@ -0,0 +1,27 @@ +import { palette } from '@leafygreen-ui/palette'; +import React, { useMemo } from 'react'; + +import { useDarkMode } from '../../hooks/use-theme'; + +const DisconnectedPlugIcon: React.FunctionComponent = () => { + const darkMode = useDarkMode(); + + const fillColor = useMemo( + () => (darkMode ? palette.white : palette.black), + [darkMode] + ); + + return ( + + + + ); +}; + +export { DisconnectedPlugIcon }; diff --git a/packages/compass-components/src/index.ts b/packages/compass-components/src/index.ts index 3d80c9d7d2f..15e7af1afe8 100644 --- a/packages/compass-components/src/index.ts +++ b/packages/compass-components/src/index.ts @@ -59,6 +59,8 @@ export { DocumentIcon } from './components/icons/document-icon'; export { FavoriteIcon } from './components/icons/favorite-icon'; export { ServerIcon } from './components/icons/server-icon'; export { NoSavedItemsIcon } from './components/icons/no-saved-items-icon'; +export { ConnectedPlugsIcon } from './components/icons/connected-plugs'; +export { DisconnectedPlugIcon } from './components/icons/disconnected-plug'; export { GuideCue as LGGuideCue } from '@leafygreen-ui/guide-cue'; export { Variant as BadgeVariant } from '@leafygreen-ui/badge'; export { Variant as BannerVariant } from '@leafygreen-ui/banner'; diff --git a/packages/compass-sidebar/src/components/multiple-connections/connections-navigation.tsx b/packages/compass-sidebar/src/components/multiple-connections/connections-navigation.tsx index e727ec6d858..00438b6d9e7 100644 --- a/packages/compass-sidebar/src/components/multiple-connections/connections-navigation.tsx +++ b/packages/compass-sidebar/src/components/multiple-connections/connections-navigation.tsx @@ -12,6 +12,10 @@ import { Button, Icon, ButtonVariant, + IconButton, + ConnectedPlugsIcon, + DisconnectedPlugIcon, + Tooltip, } from '@mongodb-js/compass-components'; import { ConnectionsNavigationTree } from '@mongodb-js/compass-connections-navigation'; import type { MapDispatchToProps, MapStateToProps } from 'react-redux'; @@ -80,11 +84,19 @@ const connectionCountStyles = css({ marginLeft: spacing[100], }); -const searchStyles = css({ +const filterContainerStyles = css({ + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + gap: spacing[200], paddingLeft: spacing[400], paddingRight: spacing[400], }); +const searchFormStyles = css({ + flexGrow: 1, +}); + const noDeploymentStyles = css({ paddingLeft: spacing[400], paddingRight: spacing[400], @@ -112,7 +124,9 @@ type ConnectionsNavigationComponentProps = { connectionsWithStatus: ReturnType; activeWorkspace: WorkspaceTab | null; filterRegex: RegExp | null; + excludeInactive: boolean; onFilterChange(regex: RegExp | null): void; + onToggleExcludeInactive(): void; onConnect(info: ConnectionInfo): void; onNewConnection(): void; onEditConnection(info: ConnectionInfo): void; @@ -154,10 +168,12 @@ const ConnectionsNavigation: React.FC = ({ connectionsWithStatus, activeWorkspace, filterRegex, + excludeInactive, instances, databases, isPerformanceTabSupported, onFilterChange, + onToggleExcludeInactive, onConnect, onNewConnection, onEditConnection, @@ -257,6 +273,7 @@ const ConnectionsNavigation: React.FC = ({ filterRegex, fetchAllCollections, onDatabaseExpand, + excludeInactive, }); const connectionListTitleActions = @@ -502,11 +519,37 @@ const ConnectionsNavigation: React.FC = ({
{connections.length > 0 && ( <> - +
+ + + {excludeInactive ? ( + + ) : ( + + )} + + } + > + {excludeInactive + ? 'Showing active connections' + : 'Showing all connections'} + +
{ + await renderAndWaitForNavigationTree(); + + const favoriteConnectionId = savedFavoriteConnection.id; + const recentConnectionId = savedRecentConnection.id; + + const activeConnectionsToggleButton = screen.getByLabelText( + 'Showing all connections' + ); + + expect(screen.queryByTestId(favoriteConnectionId)).to.be.visible; + expect(screen.queryByTestId(recentConnectionId)).to.be.visible; + + userEvent.click(activeConnectionsToggleButton); + expect(activeConnectionsToggleButton.ariaLabel).equals( + 'Showing active connections' + ); + + expect(screen.queryByTestId(favoriteConnectionId)).to.be.null; + expect(screen.queryByTestId(recentConnectionId)).to.be.null; + + await connectAndNotifyInstanceManager(savedFavoriteConnection); + expect(screen.queryByTestId(favoriteConnectionId)).to.be.visible; + expect(screen.queryByTestId(recentConnectionId)).to.be.null; + + await connectAndNotifyInstanceManager(savedRecentConnection); + expect(screen.queryByTestId(favoriteConnectionId)).to.be.visible; + expect(screen.queryByTestId(recentConnectionId)).to.be.visible; + }); + context('and performing actions', function () { beforeEach(async function () { await renderAndWaitForNavigationTree({ diff --git a/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx b/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx index 3abebc22e78..d21a551b368 100644 --- a/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx +++ b/packages/compass-sidebar/src/components/multiple-connections/sidebar.tsx @@ -103,6 +103,10 @@ export function MultipleConnectionSidebar({ useState(null); const [connectionInfoModalConnectionId, setConnectionInfoModalConnectionId] = useState(); + const [excludeInactive, setExcludeInactiveConnections] = useState(false); + const toggleExcludeInactiveConnections = useCallback(() => { + setExcludeInactiveConnections((previous) => !previous); + }, []); const formPreferences = useConnectionFormPreferences(); const maybeProtectConnectionString = useMaybeProtectConnectionString(); @@ -204,7 +208,9 @@ export function MultipleConnectionSidebar({ connectionsWithStatus={connectionsWithStatus} activeWorkspace={activeWorkspace} filterRegex={activeConnectionsFilterRegex} + excludeInactive={excludeInactive} onFilterChange={onActiveConnectionFilterChange} + onToggleExcludeInactive={toggleExcludeInactiveConnections} onConnect={(connectionInfo) => { void connect(connectionInfo); }} diff --git a/packages/compass-sidebar/src/components/navigation-items-filter.tsx b/packages/compass-sidebar/src/components/navigation-items-filter.tsx index 7601816238e..98c7abf4e57 100644 --- a/packages/compass-sidebar/src/components/navigation-items-filter.tsx +++ b/packages/compass-sidebar/src/components/navigation-items-filter.tsx @@ -6,13 +6,13 @@ export default function NavigationItemsFilter({ ariaLabel = 'Search', title = 'Search', onFilterChange, - searchInputClassName, + className, }: { placeholder?: string; ariaLabel?: string; title?: string; - searchInputClassName?: string; onFilterChange(regex: RegExp | null): void; + className?: string; }): React.ReactElement { const onChange = useCallback( (event) => { @@ -37,7 +37,7 @@ export default function NavigationItemsFilter({ }, []); return ( -
+ ); diff --git a/packages/compass-sidebar/src/components/use-filtered-connections.spec.ts b/packages/compass-sidebar/src/components/use-filtered-connections.spec.ts index dae61d4cf34..5d93c0b65e1 100644 --- a/packages/compass-sidebar/src/components/use-filtered-connections.spec.ts +++ b/packages/compass-sidebar/src/components/use-filtered-connections.spec.ts @@ -140,6 +140,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -155,6 +156,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -167,6 +169,38 @@ describe('useFilteredConnections', function () { }); }); + context('excluding inactive connections', function () { + it('should match only connected collections items', function () { + const { result, rerender } = renderHookWithContext( + useFilteredConnections, + { + initialProps: { + connections: mockSidebarConnections, + filterRegex: null, + fetchAllCollections: fetchAllCollectionsStub, + onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: true, + }, + } + ); + + expect(result.current.filtered).to.be.deep.equal([ + sidebarConnections[0], + sidebarConnections[1], + ]); + + rerender({ + connections: mockSidebarConnections, + filterRegex: null, + fetchAllCollections: fetchAllCollectionsStub, + onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, + }); + + expect(result.current.filtered).to.be.undefined; + }); + }); + context('and a connection is toggled', function () { it('should return the appropriate connection expanded state for the toggled connection', async function () { const { result } = renderHookWithContext(useFilteredConnections, { @@ -175,6 +209,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -206,6 +241,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -258,6 +294,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -294,6 +331,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -340,6 +378,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -373,6 +412,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, } ); @@ -407,6 +447,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }); // should remove the expanded state of connection 2 await waitFor(() => { @@ -423,6 +464,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }); await waitFor(() => { expect(result.current.expanded).to.deep.equal({ @@ -445,6 +487,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('_connection', 'i'), // match everything basically fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, } ); @@ -460,6 +503,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('disconnected_connection', 'i'), // match disconnected one fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }); await waitFor(() => { expect(result.current.filtered).to.be.deep.equal([ @@ -475,6 +519,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('db_ready_1_1', 'i'), // match first database basically fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -515,6 +560,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('Matching', 'i'), // this matches connection as well as database fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -532,6 +578,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('coll_ready_2_1', 'i'), // match second db's collection fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -560,6 +607,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('ready_2_1', 'i'), // this matches 1 database and 1 collection fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -578,6 +626,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('coll_ready_1_1', 'i'), fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -592,6 +641,40 @@ describe('useFilteredConnections', function () { }); }); + context('excluding inactive connections', function () { + it('should match only connected collections items', function () { + const { result, rerender } = renderHookWithContext( + useFilteredConnections, + { + initialProps: { + connections: mockSidebarConnections, + filterRegex: new RegExp('connection_1'), + fetchAllCollections: fetchAllCollectionsStub, + onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: true, + }, + } + ); + + expect(result.current.filtered).to.be.deep.equal([ + sidebarConnections[0], + ]); + + rerender({ + connections: mockSidebarConnections, + filterRegex: new RegExp('connection_1'), + fetchAllCollections: fetchAllCollectionsStub, + onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, + }); + + expect(result.current.filtered).to.be.deep.equal([ + sidebarConnections[0], + sidebarConnections[2], + ]); + }); + }); + context('and items are already collapsed', function () { it('should expand the items temporarily', async function () { const { result, rerender } = renderHookWithContext( @@ -599,9 +682,10 @@ describe('useFilteredConnections', function () { { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filterRegex: null as RegExp | null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, } ); @@ -620,6 +704,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('coll_ready_1_1', 'i'), fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }); await waitFor(() => { expect(result.current.expanded).to.deep.equal({ @@ -640,9 +725,10 @@ describe('useFilteredConnections', function () { { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('coll_ready_1_1', 'i'), + filterRegex: new RegExp('coll_ready_1_1', 'i') as RegExp | null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, } ); @@ -661,6 +747,7 @@ describe('useFilteredConnections', function () { filterRegex: null, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }); await waitFor(() => { expect(result.current.expanded).to.deep.equal({ @@ -682,6 +769,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('coll_ready_1_1', 'i'), fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -714,6 +802,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('coll_ready_1_1', 'i'), fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); @@ -752,6 +841,7 @@ describe('useFilteredConnections', function () { filterRegex: new RegExp('coll_ready_1_1', 'i'), fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, + excludeInactive: false, }, }); diff --git a/packages/compass-sidebar/src/components/use-filtered-connections.ts b/packages/compass-sidebar/src/components/use-filtered-connections.ts index 2d882324dee..a90c6589c9f 100644 --- a/packages/compass-sidebar/src/components/use-filtered-connections.ts +++ b/packages/compass-sidebar/src/components/use-filtered-connections.ts @@ -42,11 +42,19 @@ type FilteredConnection = ( const filterConnections = ( connections: SidebarConnection[], - regex: RegExp + regex: RegExp | null, + excludeInactive: boolean ): FilteredConnection[] => { const results: FilteredConnection[] = []; for (const connection of connections) { - const isMatch = regex.test(connection.name); + // Conditionally skip connections that aren't considered active + const inactive = + connection.connectionStatus !== 'connected' && + connection.connectionStatus !== 'connecting'; + if (excludeInactive && inactive) { + continue; + } + const isMatch = !regex || regex.test(connection.name); let childMatches: FilteredDatabase[] = []; if (connection.connectionStatus === 'connected') { childMatches = filterDatabases(connection.databases, regex); @@ -72,11 +80,11 @@ const filterConnections = ( const filterDatabases = ( databases: SidebarDatabase[], - regex: RegExp + regex: RegExp | null ): FilteredDatabase[] => { const results: FilteredDatabase[] = []; for (const db of databases) { - const isMatch = regex.test(db.name); + const isMatch = !regex || regex.test(db.name); const childMatches = filterCollections(db.collections, regex); if (isMatch || childMatches.length) { @@ -89,7 +97,7 @@ const filterDatabases = ( ? childMatches : db.collections.map((collection) => ({ ...collection, - isMatch: regex.test(collection.name), + isMatch: !regex || regex.test(collection.name), })); results.push({ ...db, @@ -103,10 +111,10 @@ const filterDatabases = ( const filterCollections = ( collections: SidebarCollection[], - regex: RegExp + regex: RegExp | null ): FilteredCollection[] => { return collections - .filter(({ name }) => regex.test(name)) + .filter(({ name }) => !regex || regex.test(name)) .map((collection) => ({ ...collection, isMatch: true })); }; @@ -205,7 +213,8 @@ const FILTER_CONNECTIONS = interface FilterConnectionsAction { type: typeof FILTER_CONNECTIONS; connections: SidebarConnection[]; - filterRegex: RegExp; + filterRegex: RegExp | null; + excludeInactive: boolean; } const CLEAR_FILTER = 'sidebar/active-connections/CLEAR_FILTER' as const; @@ -265,7 +274,8 @@ const connectionsReducer = ( case FILTER_CONNECTIONS: { const filtered = filterConnections( action.connections, - action.filterRegex + action.filterRegex, + action.excludeInactive ); const persistingExpanded = revertTemporaryExpanded(state.expanded); return { @@ -381,11 +391,13 @@ function filteredConnectionsToSidebarConnection( export const useFilteredConnections = ({ connections, filterRegex, + excludeInactive, fetchAllCollections, onDatabaseExpand, }: { connections: SidebarConnection[]; filterRegex: RegExp | null; + excludeInactive: boolean; fetchAllCollections: () => void; onDatabaseExpand: (connectionId: string, databaseId: string) => void; }): UseFilteredConnectionsHookResult => { @@ -410,11 +422,12 @@ export const useFilteredConnections = ({ // filter updates // connections change often, but the effect only uses connections if the filter is active // so we use this conditional dependency to avoid too many calls - const connectionsButOnlyIfFilterIsActive = filterRegex && connections; + const connectionsWhenFiltering = + (filterRegex || excludeInactive) && connections; useEffect(() => { - if (!filterRegex) { + if (!filterRegex && !excludeInactive) { dispatch({ type: CLEAR_FILTER }); - } else if (connectionsButOnlyIfFilterIsActive) { + } else if (connectionsWhenFiltering) { // the above check is extra just to please TS // When filtering, emit an event so that we can fetch all collections. This @@ -424,11 +437,17 @@ export const useFilteredConnections = ({ dispatch({ type: FILTER_CONNECTIONS, - connections: connectionsButOnlyIfFilterIsActive, + connections: connectionsWhenFiltering, filterRegex, + excludeInactive, }); } - }, [filterRegex, connectionsButOnlyIfFilterIsActive, fetchAllCollections]); + }, [ + filterRegex, + excludeInactive, + connectionsWhenFiltering, + fetchAllCollections, + ]); const onConnectionToggle = useCallback( (connectionId: string, expand: boolean) => From 117c32f8ddd5d2bf4f8fceec5b324bf9866de66e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 18:47:22 +0000 Subject: [PATCH 60/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6482) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 6634a14af0c..fba5532e8c5 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Nov 12, 2024 at 06:40 PM +Generated on Tue, Nov 12, 2024 at 06:47 PM ## Table of Contents From e07f2292c59f872e5d92248f4dadd8ab6c4c8c20 Mon Sep 17 00:00:00 2001 From: djechlin-mongodb <132293929+djechlin-mongodb@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:48:23 -0500 Subject: [PATCH 61/81] fix(compass-global-writes): make global writes tab not appear for readonly and config/local/admin collections COMPASS-8447 (#6479) * changes * specialish --- .../compass-collection/src/components/collection-tab.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/compass-collection/src/components/collection-tab.tsx b/packages/compass-collection/src/components/collection-tab.tsx index f4da240c81b..305a115204d 100644 --- a/packages/compass-collection/src/components/collection-tab.tsx +++ b/packages/compass-collection/src/components/collection-tab.tsx @@ -3,6 +3,7 @@ import { connect } from 'react-redux'; import { type CollectionState, selectTab } from '../modules/collection-tab'; import { css, ErrorBoundary, TabNavBar } from '@mongodb-js/compass-components'; import CollectionHeader from './collection-header'; +import toNS from 'mongodb-ns'; import { useLogger } from '@mongodb-js/compass-logging/provider'; import { useCollectionQueryBar, @@ -118,10 +119,10 @@ function WithErrorBoundary({ function useCollectionTabs(props: CollectionMetadata) { const pluginTabs = useCollectionSubTabs(); const connectionInfoRef = useConnectionInfoRef(); - const isGlobalWritesSupported = useConnectionSupports( - connectionInfoRef.current.id, - 'globalWrites' - ); + const isGlobalWritesSupported = + useConnectionSupports(connectionInfoRef.current.id, 'globalWrites') && + !props.isReadonly && + !toNS(props.namespace).specialish; return pluginTabs .filter((x) => { if (x.name === 'GlobalWrites' && !isGlobalWritesSupported) { From e084705fa66fc030b2582518d3aeb3a2feba79d8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 14:54:43 +0000 Subject: [PATCH 62/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6487) Update report Co-authored-by: djechlin-mongodb <132293929+djechlin-mongodb@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 77d6e183188..7337b92416a 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Tue Nov 12 2024. +This document was automatically generated on Wed Nov 13 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index fba5532e8c5..691cde1f1ab 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Tue, Nov 12, 2024 at 06:47 PM +Generated on Wed, Nov 13, 2024 at 02:54 PM ## Table of Contents From 39c09c9b73acac9dedf3b620b46ee3e64d83cbaa Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Wed, 13 Nov 2024 16:41:09 +0100 Subject: [PATCH 63/81] fix(compass-global-writes): unite banner btn styles COMPASS-8451 (#6484) fix(compass-global-writes): unite banner btn styles Co-authored-by: Paula Stachova --- .../src/components/common-styles.ts | 5 +++++ .../states/incomplete-sharding-setup.tsx | 7 ++----- .../src/components/states/shard-key-mismatch.tsx | 14 ++++++-------- .../src/components/states/sharding-error.tsx | 13 ++++++------- .../src/components/states/sharding.tsx | 15 ++++++--------- 5 files changed, 25 insertions(+), 29 deletions(-) diff --git a/packages/compass-global-writes/src/components/common-styles.ts b/packages/compass-global-writes/src/components/common-styles.ts index b9ec0bd7e84..a73a688af02 100644 --- a/packages/compass-global-writes/src/components/common-styles.ts +++ b/packages/compass-global-writes/src/components/common-styles.ts @@ -17,3 +17,8 @@ export const containerStyles = css({ marginBottom: spacing[400], textAlign: 'justify', }); + +export const bannerBtnStyles = css({ + float: 'right', + height: `${spacing[600]}px`, +}); diff --git a/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx b/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx index 8f5b4e0ba4c..3ead0059e21 100644 --- a/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx +++ b/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx @@ -20,6 +20,7 @@ import { import { connect } from 'react-redux'; import ExampleCommandsMarkup from '../example-commands-markup'; import { ShardZonesTable } from '../shard-zones-table'; +import { bannerBtnStyles } from '../common-styles'; const containerStyles = css({ display: 'flex', @@ -28,10 +29,6 @@ const containerStyles = css({ marginBottom: spacing[400], }); -const manageBtnStyles = css({ - marginTop: spacing[100], -}); - export interface IncompleteShardingSetupProps { shardKey: ShardKey; shardZones: ShardZoneData[]; @@ -70,7 +67,7 @@ export function IncompleteShardingSetup({ variant={ButtonVariant.Default} isLoading={isSubmittingForSharding} loadingIndicator={} - className={manageBtnStyles} + className={bannerBtnStyles} > Enable Global Writes diff --git a/packages/compass-global-writes/src/components/states/shard-key-mismatch.tsx b/packages/compass-global-writes/src/components/states/shard-key-mismatch.tsx index 33d3b87be2d..bad54b20256 100644 --- a/packages/compass-global-writes/src/components/states/shard-key-mismatch.tsx +++ b/packages/compass-global-writes/src/components/states/shard-key-mismatch.tsx @@ -2,8 +2,6 @@ import { Banner, BannerVariant, Button, - spacing, - css, ButtonVariant, SpinLoader, } from '@mongodb-js/compass-components'; @@ -17,11 +15,11 @@ import { } from '../../store/reducer'; import { connect } from 'react-redux'; import type { ManagedNamespace } from '../../services/atlas-global-writes-service'; -import { containerStyles, bannerStyles } from '../common-styles'; - -const unmanageBtnStyles = css({ - marginTop: spacing[100], -}); +import { + containerStyles, + bannerStyles, + bannerBtnStyles, +} from '../common-styles'; const getRequestedShardKey = ( managedNamespace: ManagedNamespace @@ -71,7 +69,7 @@ export function ShardKeyMismatch({ variant={ButtonVariant.Default} isLoading={isUnmanagingNamespace} loadingIndicator={} - className={unmanageBtnStyles} + className={bannerBtnStyles} > Unmanage collection diff --git a/packages/compass-global-writes/src/components/states/sharding-error.tsx b/packages/compass-global-writes/src/components/states/sharding-error.tsx index a71c2d583b6..7988299616e 100644 --- a/packages/compass-global-writes/src/components/states/sharding-error.tsx +++ b/packages/compass-global-writes/src/components/states/sharding-error.tsx @@ -14,12 +14,11 @@ import { ShardingStatuses, } from '../../store/reducer'; import CreateShardKeyForm from '../create-shard-key-form'; -import { containerStyles, bannerStyles } from '../common-styles'; - -const btnStyles = css({ - float: 'right', - height: spacing[600], -}); +import { + containerStyles, + bannerStyles, + bannerBtnStyles, +} from '../common-styles'; const errorStyles = css({ marginTop: spacing[200], @@ -47,7 +46,7 @@ export function ShardingError({ make any necessary changes to your collection, and try again.
{shardingError}
{connections.length > 0 && ( <> -
- - - {excludeInactive ? ( - - ) : ( - - )} - - } - > - {excludeInactive - ? 'Showing active connections' - : 'Showing all connections'} - -
+ (undefined); - const [activeConnectionsFilterRegex, setActiveConnectionsFilterRegex] = - useState(null); + const [connectionsFilter, setConnectionsFilter] = useState( + { regex: null, excludeInactive: false } + ); const [connectionInfoModalConnectionId, setConnectionInfoModalConnectionId] = useState(); - const [excludeInactive, setExcludeInactiveConnections] = useState(false); - const toggleExcludeInactiveConnections = useCallback(() => { - setExcludeInactiveConnections((previous) => !previous); - }, []); const formPreferences = useConnectionFormPreferences(); const maybeProtectConnectionString = useMaybeProtectConnectionString(); @@ -142,12 +141,6 @@ export function MultipleConnectionSidebar({ )?.connectionInfo; }; - const onActiveConnectionFilterChange = useCallback( - (filterRegex: RegExp | null) => - setActiveConnectionsFilterRegex(filterRegex), - [setActiveConnectionsFilterRegex] - ); - const onOpenConnectionInfo = useCallback((connectionId: string) => { return setConnectionInfoModalConnectionId(connectionId); }, []); @@ -207,10 +200,8 @@ export function MultipleConnectionSidebar({ { void connect(connectionInfo); }} diff --git a/packages/compass-sidebar/src/components/navigation-items-filter.tsx b/packages/compass-sidebar/src/components/navigation-items-filter.tsx index 98c7abf4e57..558ba8948e5 100644 --- a/packages/compass-sidebar/src/components/navigation-items-filter.tsx +++ b/packages/compass-sidebar/src/components/navigation-items-filter.tsx @@ -1,43 +1,63 @@ -import React, { useCallback } from 'react'; -import { TextInput } from '@mongodb-js/compass-components'; +import React, { useCallback, useState } from 'react'; +import { css, spacing, TextInput } from '@mongodb-js/compass-components'; +import type { ConnectionsFilter } from './use-filtered-connections'; +import ConnectionsFilterPopover from './connections-filter-popover'; + +const filterContainerStyles = css({ + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + gap: spacing[200], + paddingLeft: spacing[400], + paddingRight: spacing[400], +}); + +const textInputStyles = css({ + flexGrow: 1, +}); + +function createRegExp(input: string) { + try { + return input ? new RegExp(input, 'i') : null; + } catch (e) { + return null; + } +} export default function NavigationItemsFilter({ placeholder = 'Search', ariaLabel = 'Search', title = 'Search', + filter, onFilterChange, - className, }: { placeholder?: string; ariaLabel?: string; title?: string; - onFilterChange(regex: RegExp | null): void; - className?: string; + filter: ConnectionsFilter; + onFilterChange( + updater: (filter: ConnectionsFilter) => ConnectionsFilter + ): void; }): React.ReactElement { - const onChange = useCallback( + const onChange = useCallback>( (event) => { - const searchString: string = event.target.value; - - let re; - - try { - re = searchString ? new RegExp(searchString, 'i') : null; - } catch (e) { - re = null; - } - - onFilterChange(re); + onFilterChange((filter) => ({ + ...filter, + regex: createRegExp(event.target.value), + })); }, [onFilterChange] ); + const [isPopoverOpen, setPopoverOpen] = useState(false); + const onSubmit = useCallback((evt) => { evt.preventDefault(); evt.stopPropagation(); }, []); return ( -
+ + ); diff --git a/packages/compass-sidebar/src/components/use-filtered-connections.spec.ts b/packages/compass-sidebar/src/components/use-filtered-connections.spec.ts index 5d93c0b65e1..8a9aa3e71e3 100644 --- a/packages/compass-sidebar/src/components/use-filtered-connections.spec.ts +++ b/packages/compass-sidebar/src/components/use-filtered-connections.spec.ts @@ -137,10 +137,9 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -153,10 +152,9 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -176,10 +174,9 @@ describe('useFilteredConnections', function () { { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: true }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: true, }, } ); @@ -191,10 +188,9 @@ describe('useFilteredConnections', function () { rerender({ connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }); expect(result.current.filtered).to.be.undefined; @@ -206,10 +202,9 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -238,10 +233,9 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -291,10 +285,9 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -328,10 +321,9 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -375,10 +367,9 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -409,10 +400,9 @@ describe('useFilteredConnections', function () { { initialProps: { connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, } ); @@ -444,10 +434,9 @@ describe('useFilteredConnections', function () { ]; rerender({ connections: newConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }); // should remove the expanded state of connection 2 await waitFor(() => { @@ -461,10 +450,9 @@ describe('useFilteredConnections', function () { // now pretend again that connection2 is connected rerender({ connections: mockSidebarConnections, - filterRegex: null, + filter: { regex: null, excludeInactive: false }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }); await waitFor(() => { expect(result.current.expanded).to.deep.equal({ @@ -484,10 +472,12 @@ describe('useFilteredConnections', function () { { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('_connection', 'i'), // match everything basically + filter: { + regex: new RegExp('_connection', 'i'), // match everything basically + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, } ); @@ -500,10 +490,12 @@ describe('useFilteredConnections', function () { rerender({ connections: mockSidebarConnections, - filterRegex: new RegExp('disconnected_connection', 'i'), // match disconnected one + filter: { + regex: new RegExp('disconnected_connection', 'i'), // match disconnected one + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }); await waitFor(() => { expect(result.current.filtered).to.be.deep.equal([ @@ -516,10 +508,12 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('db_ready_1_1', 'i'), // match first database basically + filter: { + regex: new RegExp('db_ready_1_1', 'i'), // match first database basically + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -557,10 +551,12 @@ describe('useFilteredConnections', function () { ], } as SidebarConnectedConnection, ], - filterRegex: new RegExp('Matching', 'i'), // this matches connection as well as database + filter: { + regex: new RegExp('Matching', 'i'), // this matches connection as well as database + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -575,10 +571,12 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('coll_ready_2_1', 'i'), // match second db's collection + filter: { + regex: new RegExp('coll_ready_2_1', 'i'), // match second db's collection + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -604,10 +602,12 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('ready_2_1', 'i'), // this matches 1 database and 1 collection + filter: { + regex: new RegExp('ready_2_1', 'i'), // this matches 1 database and 1 collection + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -623,10 +623,12 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('coll_ready_1_1', 'i'), + filter: { + regex: new RegExp('coll_ready_1_1', 'i'), + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -648,10 +650,12 @@ describe('useFilteredConnections', function () { { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('connection_1'), + filter: { + regex: new RegExp('connection_1'), + excludeInactive: true, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: true, }, } ); @@ -662,10 +666,12 @@ describe('useFilteredConnections', function () { rerender({ connections: mockSidebarConnections, - filterRegex: new RegExp('connection_1'), + filter: { + regex: new RegExp('connection_1'), + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }); expect(result.current.filtered).to.be.deep.equal([ @@ -682,10 +688,12 @@ describe('useFilteredConnections', function () { { initialProps: { connections: mockSidebarConnections, - filterRegex: null as RegExp | null, + filter: { + regex: null as RegExp | null, + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, } ); @@ -701,10 +709,12 @@ describe('useFilteredConnections', function () { rerender({ connections: mockSidebarConnections, - filterRegex: new RegExp('coll_ready_1_1', 'i'), + filter: { + regex: new RegExp('coll_ready_1_1', 'i'), + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }); await waitFor(() => { expect(result.current.expanded).to.deep.equal({ @@ -725,10 +735,12 @@ describe('useFilteredConnections', function () { { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('coll_ready_1_1', 'i') as RegExp | null, + filter: { + regex: new RegExp('coll_ready_1_1', 'i') as RegExp | null, + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, } ); @@ -744,10 +756,12 @@ describe('useFilteredConnections', function () { rerender({ connections: mockSidebarConnections, - filterRegex: null, + filter: { + regex: null, + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }); await waitFor(() => { expect(result.current.expanded).to.deep.equal({ @@ -766,10 +780,12 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('coll_ready_1_1', 'i'), + filter: { + regex: new RegExp('coll_ready_1_1', 'i'), + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -799,10 +815,12 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('coll_ready_1_1', 'i'), + filter: { + regex: new RegExp('coll_ready_1_1', 'i'), + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); @@ -838,10 +856,12 @@ describe('useFilteredConnections', function () { const { result } = renderHookWithContext(useFilteredConnections, { initialProps: { connections: mockSidebarConnections, - filterRegex: new RegExp('coll_ready_1_1', 'i'), + filter: { + regex: new RegExp('coll_ready_1_1', 'i'), + excludeInactive: false, + }, fetchAllCollections: fetchAllCollectionsStub, onDatabaseExpand: onDatabaseExpandStub, - excludeInactive: false, }, }); diff --git a/packages/compass-sidebar/src/components/use-filtered-connections.ts b/packages/compass-sidebar/src/components/use-filtered-connections.ts index a90c6589c9f..e2ffb8b1384 100644 --- a/packages/compass-sidebar/src/components/use-filtered-connections.ts +++ b/packages/compass-sidebar/src/components/use-filtered-connections.ts @@ -388,16 +388,19 @@ function filteredConnectionsToSidebarConnection( return sidebarConnections; } +export type ConnectionsFilter = { + regex: RegExp | null; + excludeInactive: boolean; +}; + export const useFilteredConnections = ({ connections, - filterRegex, - excludeInactive, + filter, fetchAllCollections, onDatabaseExpand, }: { connections: SidebarConnection[]; - filterRegex: RegExp | null; - excludeInactive: boolean; + filter: ConnectionsFilter; fetchAllCollections: () => void; onDatabaseExpand: (connectionId: string, databaseId: string) => void; }): UseFilteredConnectionsHookResult => { @@ -423,9 +426,9 @@ export const useFilteredConnections = ({ // connections change often, but the effect only uses connections if the filter is active // so we use this conditional dependency to avoid too many calls const connectionsWhenFiltering = - (filterRegex || excludeInactive) && connections; + (filter.regex || filter.excludeInactive) && connections; useEffect(() => { - if (!filterRegex && !excludeInactive) { + if (!filter.regex && !filter.excludeInactive) { dispatch({ type: CLEAR_FILTER }); } else if (connectionsWhenFiltering) { // the above check is extra just to please TS @@ -438,13 +441,13 @@ export const useFilteredConnections = ({ dispatch({ type: FILTER_CONNECTIONS, connections: connectionsWhenFiltering, - filterRegex, - excludeInactive, + filterRegex: filter.regex, + excludeInactive: filter.excludeInactive, }); } }, [ - filterRegex, - excludeInactive, + filter.regex, + filter.excludeInactive, connectionsWhenFiltering, fetchAllCollections, ]); From cd2ec02539cf57c2914506edabee0efbd97c31f0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 12:12:36 +0000 Subject: [PATCH 66/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6492) Update report Co-authored-by: kraenhansen <1243959+kraenhansen@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 7337b92416a..0cfe17e9c89 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Wed Nov 13 2024. +This document was automatically generated on Thu Nov 14 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 0c28db04643..c75d6a4b919 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Wed, Nov 13, 2024 at 03:47 PM +Generated on Thu, Nov 14, 2024 at 12:12 PM ## Table of Contents From 9908bb9166f9738630acdc7d2918f58661e623b9 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Thu, 14 Nov 2024 13:49:38 +0100 Subject: [PATCH 67/81] fix(components): fix incorrect usage of useid (#6491) --- .../src/components/interactive-popover.tsx | 3 +-- packages/compass-components/src/hooks/use-sort.spec.ts | 8 ++++---- packages/compass-components/src/hooks/use-sort.tsx | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/compass-components/src/components/interactive-popover.tsx b/packages/compass-components/src/components/interactive-popover.tsx index e7ed4aa442c..901c01353ae 100644 --- a/packages/compass-components/src/components/interactive-popover.tsx +++ b/packages/compass-components/src/components/interactive-popover.tsx @@ -8,7 +8,6 @@ import { palette } from '@leafygreen-ui/palette'; import { rgba } from 'polished'; import { useDarkMode } from '../hooks/use-theme'; import { useHotkeys } from '../hooks/use-hotkeys'; -import { useId } from '@react-aria/utils'; const borderRadius = spacing[2]; @@ -162,7 +161,7 @@ function InteractivePopover({ useHotkeys('Escape', onClose, { enabled: open }, [onClose]); - const closeButtonId = useId('close-button-id'); + const closeButtonId = 'close-button-id'; return trigger({ onClick: onClickTrigger, diff --git a/packages/compass-components/src/hooks/use-sort.spec.ts b/packages/compass-components/src/hooks/use-sort.spec.ts index af0e3cff926..da177b4a8ac 100644 --- a/packages/compass-components/src/hooks/use-sort.spec.ts +++ b/packages/compass-components/src/hooks/use-sort.spec.ts @@ -57,7 +57,7 @@ describe('use-sort', function () { expect( screen .getByRole('button', { - name: /title/i, + name: 'Sort by', }) .getAttribute('aria-disabled') ).to.equal('true'); @@ -70,7 +70,7 @@ describe('use-sort', function () { // Opens dropdown userEvent.click( screen.getByRole('button', { - name: /title/i, + name: 'Sort by', }), undefined, { @@ -111,7 +111,7 @@ describe('use-sort', function () { // Opens dropdown userEvent.click( screen.getByRole('button', { - name: /title/i, + name: 'Sort by', }), undefined, { @@ -141,7 +141,7 @@ describe('use-sort', function () { // Opens dropdown userEvent.click( screen.getByRole('button', { - name: /title/i, + name: 'Sort by', }), undefined, { diff --git a/packages/compass-components/src/hooks/use-sort.tsx b/packages/compass-components/src/hooks/use-sort.tsx index 54efc07fe53..5fdec02a9c5 100644 --- a/packages/compass-components/src/hooks/use-sort.tsx +++ b/packages/compass-components/src/hooks/use-sort.tsx @@ -43,7 +43,7 @@ export function useSortControls( items: readonly { name: T; label: string }[], options?: SortOptions ): [React.ReactElement, SortState['name']>] { - const labelId = useId('Sort by'); + const labelId = 'sort-by'; const controlId = useId(); const [sortState, dispatch] = useReducer( From 03e86942a29061b235f41a91d2184bc0a2d2b11e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 12:56:14 +0000 Subject: [PATCH 68/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6493) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index c75d6a4b919..4c3548d8906 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Nov 14, 2024 at 12:12 PM +Generated on Thu, Nov 14, 2024 at 12:56 PM ## Table of Contents From 4341cdbc773a58bcc02e2c3e79487b85acd7de82 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Thu, 14 Nov 2024 17:16:43 +0100 Subject: [PATCH 69/81] chore(compass): work around local dev issue with loading worker from a file COMPASS-8504 (#6494) chore(compass): work around local dev issue with loading worker from a file --- packages/compass/src/setup-hadron-distribution.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/compass/src/setup-hadron-distribution.ts b/packages/compass/src/setup-hadron-distribution.ts index 534a402175f..ea8ba62212a 100644 --- a/packages/compass/src/setup-hadron-distribution.ts +++ b/packages/compass/src/setup-hadron-distribution.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { app } from 'electron'; +import { app, protocol, net } from 'electron'; /** * All these variables below are used by Compass and its plugins in one way or @@ -54,6 +54,16 @@ if ( // seemingly nothing is using this path anyway, we probably can ignore an // error here app.setPath('userCache', path.join(app.getPath('cache'), app.getName())); + + // TODO(COMPASS-8269): even with `webSecurity` disabled for local dev, + // file:// requests for shell worker are silently getting canceled by the + // browser, adding explicit protocol handler for it that just does the same + // request using electron network stack works around the issue + void app.whenReady().then(() => { + protocol.handle('file', (req) => { + return net.fetch(req, { bypassCustomProtocolHandlers: true }); + }); + }); } app.setPath( From c79c948a41a6af46ed7159ca226969c47ff7b808 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 16:23:11 +0000 Subject: [PATCH 70/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6497) Update report Co-authored-by: gribnoysup <5036933+gribnoysup@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 4c3548d8906..8be2b925979 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Nov 14, 2024 at 12:56 PM +Generated on Thu, Nov 14, 2024 at 04:23 PM ## Table of Contents From 203ce42a04e4f310cdaa4cf1bad564506b8e93df Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Fri, 15 Nov 2024 16:38:06 +0100 Subject: [PATCH 71/81] refactor(compass-global-writes): remove in-progress states (#6475) --- .../src/components/create-shard-key-form.tsx | 19 +- .../src/components/index.spec.tsx | 7 - .../src/components/index.tsx | 31 +- .../states/incomplete-sharding-setup.tsx | 3 +- .../components/states/shard-key-correct.tsx | 4 +- .../components/states/shard-key-mismatch.tsx | 4 +- .../src/components/states/sharding-error.tsx | 11 +- .../src/components/states/sharding.tsx | 8 +- .../src/store/index.spec.ts | 124 +++++- .../compass-global-writes/src/store/index.ts | 7 + .../src/store/reducer.ts | 393 ++++++------------ 11 files changed, 261 insertions(+), 350 deletions(-) diff --git a/packages/compass-global-writes/src/components/create-shard-key-form.tsx b/packages/compass-global-writes/src/components/create-shard-key-form.tsx index 34fe299ad69..98e504e6d8e 100644 --- a/packages/compass-global-writes/src/components/create-shard-key-form.tsx +++ b/packages/compass-global-writes/src/components/create-shard-key-form.tsx @@ -21,7 +21,6 @@ import { import { createShardKey, type RootState, - ShardingStatuses, type CreateShardKeyData, } from '../store/reducer'; import { useAutocompleteFields } from '@mongodb-js/compass-field-store'; @@ -320,19 +319,11 @@ export function CreateShardKeyForm({ } export default connect( - (state: RootState) => { - return { - namespace: state.namespace, - isSubmittingForSharding: [ - ShardingStatuses.SUBMITTING_FOR_SHARDING, - ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR, - ].includes(state.status), - isCancellingSharding: [ - ShardingStatuses.CANCELLING_SHARDING, - ShardingStatuses.CANCELLING_SHARDING_ERROR, - ].includes(state.status), - }; - }, + (state: RootState) => ({ + namespace: state.namespace, + isSubmittingForSharding: state.userActionInProgress === 'submitForSharding', + isCancellingSharding: state.userActionInProgress === 'cancelSharding', + }), { onCreateShardKey: createShardKey, } diff --git a/packages/compass-global-writes/src/components/index.spec.tsx b/packages/compass-global-writes/src/components/index.spec.tsx index 4aff0336345..c5ab3f89791 100644 --- a/packages/compass-global-writes/src/components/index.spec.tsx +++ b/packages/compass-global-writes/src/components/index.spec.tsx @@ -15,13 +15,6 @@ describe('Compass GlobalWrites Plugin', function () { expect(screen.getByTestId('shard-collection-button')).to.exist; }); - it('renders plugin in SUBMITTING_FOR_SHARDING state', async function () { - await renderWithStore( - - ); - expect(screen.getByTestId('shard-collection-button')).to.exist; - }); - it('renders plugin in SHARDING state', async function () { await renderWithStore(); expect(screen.getByText(/sharding your collection/i)).to.exist; diff --git a/packages/compass-global-writes/src/components/index.tsx b/packages/compass-global-writes/src/components/index.tsx index 6f4f3f55778..87396d02b50 100644 --- a/packages/compass-global-writes/src/components/index.tsx +++ b/packages/compass-global-writes/src/components/index.tsx @@ -44,32 +44,19 @@ function ShardingStateView({ }: { shardingStatus: Exclude; }) { - if ( - shardingStatus === ShardingStatuses.UNSHARDED || - shardingStatus === ShardingStatuses.SUBMITTING_FOR_SHARDING - ) { + if (shardingStatus === ShardingStatuses.UNSHARDED) { return ; } - if ( - shardingStatus === ShardingStatuses.SHARDING || - shardingStatus === ShardingStatuses.CANCELLING_SHARDING - ) { + if (shardingStatus === ShardingStatuses.SHARDING) { return ; } - if ( - shardingStatus === ShardingStatuses.SHARDING_ERROR || - shardingStatus === ShardingStatuses.CANCELLING_SHARDING_ERROR || - shardingStatus === ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR - ) { + if (shardingStatus === ShardingStatuses.SHARDING_ERROR) { return ; } - if ( - shardingStatus === ShardingStatuses.SHARD_KEY_CORRECT || - shardingStatus === ShardingStatuses.UNMANAGING_NAMESPACE - ) { + if (shardingStatus === ShardingStatuses.SHARD_KEY_CORRECT) { return ; } @@ -77,17 +64,11 @@ function ShardingStateView({ return ; } - if ( - shardingStatus === ShardingStatuses.SHARD_KEY_MISMATCH || - shardingStatus === ShardingStatuses.UNMANAGING_NAMESPACE_MISMATCH - ) { + if (shardingStatus === ShardingStatuses.SHARD_KEY_MISMATCH) { return ; } - if ( - shardingStatus === ShardingStatuses.INCOMPLETE_SHARDING_SETUP || - shardingStatus === ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE - ) { + if (shardingStatus === ShardingStatuses.INCOMPLETE_SHARDING_SETUP) { return ; } diff --git a/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx b/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx index 3ead0059e21..e45e0ac135d 100644 --- a/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx +++ b/packages/compass-global-writes/src/components/states/incomplete-sharding-setup.tsx @@ -12,7 +12,6 @@ import React from 'react'; import ShardKeyMarkup from '../shard-key-markup'; import { resumeManagedNamespace, - ShardingStatuses, type ShardZoneData, type RootState, type ShardKey, @@ -90,7 +89,7 @@ export default connect( shardKey: state.shardKey, shardZones: state.shardZones, isSubmittingForSharding: - state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE, + state.userActionInProgress === 'submitForSharding', }; }, { diff --git a/packages/compass-global-writes/src/components/states/shard-key-correct.tsx b/packages/compass-global-writes/src/components/states/shard-key-correct.tsx index 356a24ca4e9..3608de29d5e 100644 --- a/packages/compass-global-writes/src/components/states/shard-key-correct.tsx +++ b/packages/compass-global-writes/src/components/states/shard-key-correct.tsx @@ -10,7 +10,6 @@ import { } from '@mongodb-js/compass-components'; import { connect } from 'react-redux'; import { - ShardingStatuses, unmanageNamespace, type RootState, type ShardKey, @@ -86,8 +85,7 @@ export default connect( namespace: state.namespace, shardKey: state.shardKey, shardZones: state.shardZones, - isUnmanagingNamespace: - state.status === ShardingStatuses.UNMANAGING_NAMESPACE, + isUnmanagingNamespace: state.userActionInProgress === 'unmanageNamespace', }; }, { diff --git a/packages/compass-global-writes/src/components/states/shard-key-mismatch.tsx b/packages/compass-global-writes/src/components/states/shard-key-mismatch.tsx index bad54b20256..5f6cbde240d 100644 --- a/packages/compass-global-writes/src/components/states/shard-key-mismatch.tsx +++ b/packages/compass-global-writes/src/components/states/shard-key-mismatch.tsx @@ -8,7 +8,6 @@ import { import React from 'react'; import ShardKeyMarkup from '../shard-key-markup'; import { - ShardingStatuses, unmanageNamespace, type RootState, type ShardKey, @@ -102,8 +101,7 @@ export default connect( shardKey: state.shardKey, requestedShardKey: state.managedNamespace && getRequestedShardKey(state.managedNamespace), - isUnmanagingNamespace: - state.status === ShardingStatuses.UNMANAGING_NAMESPACE_MISMATCH, + isUnmanagingNamespace: state.userActionInProgress === 'unmanageNamespace', }; }, { diff --git a/packages/compass-global-writes/src/components/states/sharding-error.tsx b/packages/compass-global-writes/src/components/states/sharding-error.tsx index 7988299616e..ead1e46c98f 100644 --- a/packages/compass-global-writes/src/components/states/sharding-error.tsx +++ b/packages/compass-global-writes/src/components/states/sharding-error.tsx @@ -8,11 +8,7 @@ import { SpinLoader, } from '@mongodb-js/compass-components'; import { connect } from 'react-redux'; -import { - cancelSharding, - type RootState, - ShardingStatuses, -} from '../../store/reducer'; +import { cancelSharding, type RootState } from '../../store/reducer'; import CreateShardKeyForm from '../create-shard-key-form'; import { containerStyles, @@ -68,10 +64,9 @@ export default connect( } return { shardingError: state.shardingError, - isCancellingSharding: - state.status === ShardingStatuses.CANCELLING_SHARDING_ERROR, + isCancellingSharding: state.userActionInProgress === 'cancelSharding', isSubmittingForSharding: - state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR, + state.userActionInProgress === 'submitForSharding', }; }, { diff --git a/packages/compass-global-writes/src/components/states/sharding.tsx b/packages/compass-global-writes/src/components/states/sharding.tsx index 0eebdf0f12e..a07a297bf10 100644 --- a/packages/compass-global-writes/src/components/states/sharding.tsx +++ b/packages/compass-global-writes/src/components/states/sharding.tsx @@ -8,11 +8,7 @@ import { SpinLoader, } from '@mongodb-js/compass-components'; import { connect } from 'react-redux'; -import { - cancelSharding, - type RootState, - ShardingStatuses, -} from '../../store/reducer'; +import { cancelSharding, type RootState } from '../../store/reducer'; import { containerStyles, bannerStyles, @@ -62,7 +58,7 @@ export function ShardingState({ export default connect( (state: RootState) => ({ - isCancellingSharding: state.status === ShardingStatuses.CANCELLING_SHARDING, + isCancellingSharding: state.userActionInProgress === 'cancelSharding', }), { onCancelSharding: cancelSharding, diff --git a/packages/compass-global-writes/src/store/index.spec.ts b/packages/compass-global-writes/src/store/index.spec.ts index 19fb3bf21a6..4fb17b07b21 100644 --- a/packages/compass-global-writes/src/store/index.spec.ts +++ b/packages/compass-global-writes/src/store/index.spec.ts @@ -67,6 +67,34 @@ function createAuthFetchResponse< }; } +function wait(ms: number) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +const expectPolling = async ({ + spy, + clock, + interval, + reverse, +}: { + spy: Sinon.SinonSpy; + clock: Sinon.SinonFakeTimers; + interval: number; + reverse?: boolean; +}) => { + spy.resetHistory(); + clock.tick(interval); + // leaving time for the poll to actually execute after the clock tick + await wait(1); + if (!reverse) { + expect(spy).to.have.been.called; + } else { + expect(spy).not.to.have.been.called; + } +}; + function createStore({ isNamespaceManaged = () => false, hasShardingError = () => false, @@ -236,12 +264,13 @@ describe('GlobalWritesStore Store', function () { }); }); - it('not managed -> sharding -> valid shard key', async function () { + it('not managed -> sharding -> shard key correct', async function () { let mockShardKey = false; let mockManagedNamespace = false; + const hasShardKey = Sinon.fake(() => mockShardKey); // initial state === unsharded const store = createStore({ - hasShardKey: Sinon.fake(() => mockShardKey), + hasShardKey, isNamespaceManaged: Sinon.fake(() => mockManagedNamespace), }); await waitFor(() => { @@ -254,16 +283,36 @@ describe('GlobalWritesStore Store', function () { shouldAdvanceTime: true, }); const promise = store.dispatch(createShardKey(shardKeyData)); - expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); + expect(store.getState().userActionInProgress).to.equal( + 'submitForSharding' + ); mockManagedNamespace = true; await promise; expect(store.getState().status).to.equal('SHARDING'); + // empty polling for a while + await expectPolling({ + clock, + interval: POLLING_INTERVAL, + spy: hasShardKey, + }); + await expectPolling({ + clock, + interval: POLLING_INTERVAL, + spy: hasShardKey, + }); + // sharding ends with a shardKey mockShardKey = true; - clock.tick(POLLING_INTERVAL); + await expectPolling({ + clock, + interval: POLLING_INTERVAL, + spy: hasShardKey, + }); + await waitFor(() => { expect(store.getState().status).to.equal('SHARD_KEY_CORRECT'); + expect(store.getState().userActionInProgress).to.be.undefined; }); }); @@ -283,7 +332,9 @@ describe('GlobalWritesStore Store', function () { shouldAdvanceTime: true, }); const promise = store.dispatch(createShardKey(shardKeyData)); - expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); + expect(store.getState().userActionInProgress).to.equal( + 'submitForSharding' + ); await promise; expect(store.getState().status).to.equal('SHARDING'); @@ -292,6 +343,7 @@ describe('GlobalWritesStore Store', function () { clock.tick(POLLING_INTERVAL); await waitFor(() => { expect(store.getState().status).to.equal('SHARDING_ERROR'); + expect(store.getState().userActionInProgress).to.be.undefined; expect(store.getState().shardingError).to.equal( `Failed to shard ${NS}` ); // the original error text was: `before timestamp[01:02:03.456]Failed to shard ${NS}` @@ -310,9 +362,12 @@ describe('GlobalWritesStore Store', function () { // user tries to submit for sharding, but the request fails const promise = store.dispatch(createShardKey(shardKeyData)); - expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING'); + expect(store.getState().userActionInProgress).to.equal( + 'submitForSharding' + ); await promise; expect(store.getState().status).to.equal('UNSHARDED'); + expect(store.getState().userActionInProgress).to.be.undefined; }); it('sharding -> valid shard key', async function () { @@ -387,24 +442,41 @@ describe('GlobalWritesStore Store', function () { it('sharding -> cancelling request -> not managed', async function () { let mockManagedNamespace = true; + const hasShardKey = Sinon.fake(() => false); confirmationStub.resolves(true); // initial state === sharding + clock = sinon.useFakeTimers({ + shouldAdvanceTime: true, + }); const store = createStore({ isNamespaceManaged: Sinon.fake(() => mockManagedNamespace), + hasShardKey, }); await waitFor(() => { expect(store.getState().status).to.equal('SHARDING'); - expect(store.getState().pollingTimeout).not.to.be.undefined; expect(store.getState().managedNamespace).to.equal(managedNamespace); }); + await expectPolling({ + clock, + interval: POLLING_INTERVAL, + spy: hasShardKey, + }); + // user cancels the sharding request const promise = store.dispatch(cancelSharding()); mockManagedNamespace = false; await promise; expect(store.getState().status).to.equal('UNSHARDED'); - expect(store.getState().pollingTimeout).to.be.undefined; expect(confirmationStub).to.have.been.called; + + // is no longer polling + await expectPolling({ + reverse: true, + clock, + interval: POLLING_INTERVAL, + spy: hasShardKey, + }); }); it('valid shard key', async function () { @@ -448,8 +520,8 @@ describe('GlobalWritesStore Store', function () { // user asks to resume geosharding const promise = store.dispatch(resumeManagedNamespace()); mockManagedNamespace = true; - expect(store.getState().status).to.equal( - 'SUBMITTING_FOR_SHARDING_INCOMPLETE' + expect(store.getState().userActionInProgress).to.equal( + 'submitForSharding' ); await promise; @@ -460,6 +532,7 @@ describe('GlobalWritesStore Store', function () { clock.tick(POLLING_INTERVAL); await waitFor(() => { expect(store.getState().status).to.equal('SHARD_KEY_CORRECT'); + expect(store.getState().userActionInProgress).to.be.undefined; }); }); @@ -479,8 +552,8 @@ describe('GlobalWritesStore Store', function () { // user asks to resume geosharding const promise = store.dispatch(resumeManagedNamespace()); - expect(store.getState().status).to.equal( - 'SUBMITTING_FOR_SHARDING_INCOMPLETE' + expect(store.getState().userActionInProgress).to.equal( + 'submitForSharding' ); await promise; @@ -493,6 +566,8 @@ describe('GlobalWritesStore Store', function () { clock.tick(POLLING_INTERVAL); await waitFor(() => { expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); + expect(store.getState().userActionInProgress).to.be.undefined; + expect(store.getState().userActionInProgress).to.be.undefined; }); }); @@ -513,14 +588,15 @@ describe('GlobalWritesStore Store', function () { // user asks to resume geosharding const promise = store.dispatch(resumeManagedNamespace()); - expect(store.getState().status).to.equal( - 'SUBMITTING_FOR_SHARDING_INCOMPLETE' + expect(store.getState().userActionInProgress).to.equal( + 'submitForSharding' ); await promise; // it failed await waitFor(() => { expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); + expect(store.getState().userActionInProgress).to.be.undefined; }); }); @@ -537,9 +613,12 @@ describe('GlobalWritesStore Store', function () { // user asks to unmanage const promise = store.dispatch(unmanageNamespace()); - expect(store.getState().status).to.equal('UNMANAGING_NAMESPACE'); + expect(store.getState().userActionInProgress).to.equal( + 'unmanageNamespace' + ); await promise; expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); + expect(store.getState().userActionInProgress).to.be.undefined; }); it('valid shard key -> valid shard key (failed unmanage attempt)', async function () { @@ -559,9 +638,12 @@ describe('GlobalWritesStore Store', function () { // user asks to unmanage mockFailure = true; const promise = store.dispatch(unmanageNamespace()); - expect(store.getState().status).to.equal('UNMANAGING_NAMESPACE'); + expect(store.getState().userActionInProgress).to.equal( + 'unmanageNamespace' + ); await promise; expect(store.getState().status).to.equal('SHARD_KEY_CORRECT'); + expect(store.getState().userActionInProgress).to.be.undefined; }); context('invalid and mismatching shard keys', function () { @@ -654,11 +736,12 @@ describe('GlobalWritesStore Store', function () { // user asks to unmanage const promise = store.dispatch(unmanageNamespace()); - expect(store.getState().status).to.equal( - 'UNMANAGING_NAMESPACE_MISMATCH' + expect(store.getState().userActionInProgress).to.equal( + 'unmanageNamespace' ); await promise; expect(store.getState().status).to.equal('INCOMPLETE_SHARDING_SETUP'); + expect(store.getState().userActionInProgress).to.be.undefined; }); }); @@ -707,7 +790,9 @@ describe('GlobalWritesStore Store', function () { // user submits the form const promise = store.dispatch(createShardKey(shardKeyData)); mockShardingError = false; - expect(store.getState().status).to.equal('SUBMITTING_FOR_SHARDING_ERROR'); + expect(store.getState().userActionInProgress).to.equal( + 'submitForSharding' + ); await promise; expect(store.getState().status).to.equal('SHARDING'); @@ -716,6 +801,7 @@ describe('GlobalWritesStore Store', function () { clock.tick(POLLING_INTERVAL); await waitFor(() => { expect(store.getState().status).to.equal('SHARD_KEY_CORRECT'); + expect(store.getState().userActionInProgress).to.be.undefined; }); }); diff --git a/packages/compass-global-writes/src/store/index.ts b/packages/compass-global-writes/src/store/index.ts index b00fad27e27..c37217bc185 100644 --- a/packages/compass-global-writes/src/store/index.ts +++ b/packages/compass-global-writes/src/store/index.ts @@ -20,6 +20,9 @@ type GlobalWritesExtraArgs = { track: TrackFunction; connectionInfoRef: ConnectionInfoRef; atlasGlobalWritesService: AtlasGlobalWritesService; + pollingTimeoutRef: { + current: ReturnType | null; + }; }; export type GlobalWritesThunkAction = ThunkAction< @@ -60,6 +63,9 @@ export function activateGlobalWritesPlugin( atlasService, connectionInfoRef ); + const pollingTimeoutRef = { + current: null, + }; const store: GlobalWritesStore = createStore( reducer, { @@ -73,6 +79,7 @@ export function activateGlobalWritesPlugin( track, connectionInfoRef, atlasGlobalWritesService, + pollingTimeoutRef, }) ) ); diff --git a/packages/compass-global-writes/src/store/reducer.ts b/packages/compass-global-writes/src/store/reducer.ts index aa6904b0eee..8cdbece05b3 100644 --- a/packages/compass-global-writes/src/store/reducer.ts +++ b/packages/compass-global-writes/src/store/reducer.ts @@ -40,9 +40,6 @@ enum GlobalWritesActionTypes { CancellingShardingFinished = 'global-writes/CancellingShardingFinished', CancellingShardingErrored = 'global-writes/CancellingShardingErrored', - NextPollingTimeoutSet = 'global-writes/NextPollingTimeoutSet', - NextPollingTimeoutCleared = 'global-writes/NextPollingTimeoutCleared', - UnmanagingNamespaceStarted = 'global-writes/UnmanagingNamespaceStarted', UnmanagingNamespaceFinished = 'global-writes/UnmanagingNamespaceFinished', UnmanagingNamespaceErrored = 'global-writes/UnmanagingNamespaceErrored', @@ -105,15 +102,6 @@ type CancellingShardingErroredAction = { type: GlobalWritesActionTypes.CancellingShardingErrored; }; -type NextPollingTimeoutSetAction = { - type: GlobalWritesActionTypes.NextPollingTimeoutSet; - timeout: NodeJS.Timeout; -}; - -type NextPollingTimeoutClearedAction = { - type: GlobalWritesActionTypes.NextPollingTimeoutCleared; -}; - type UnmanagingNamespaceStartedAction = { type: GlobalWritesActionTypes.UnmanagingNamespaceStarted; }; @@ -149,26 +137,11 @@ export enum ShardingStatuses { */ INCOMPLETE_SHARDING_SETUP = 'INCOMPLETE_SHARDING_SETUP', - /** - * State when user submits namespace to be sharded and - * we are waiting for server to accept the request. - */ - SUBMITTING_FOR_SHARDING = 'SUBMITTING_FOR_SHARDING', - SUBMITTING_FOR_SHARDING_ERROR = 'SUBMITTING_FOR_SHARDING_ERROR', - SUBMITTING_FOR_SHARDING_INCOMPLETE = 'SUBMITTING_FOR_SHARDING_INCOMPLETE', - /** * Namespace is being sharded. */ SHARDING = 'SHARDING', - /** - * State when user cancels the sharding and - * we are waiting for server to accept the request. - */ - CANCELLING_SHARDING = 'CANCELLING_SHARDING', - CANCELLING_SHARDING_ERROR = 'CANCELLING_SHARDING_ERROR', - /** * Sharding failed. */ @@ -191,12 +164,6 @@ export enum ShardingStatuses { * location key and second key is valid custom key. */ SHARD_KEY_CORRECT = 'SHARD_KEY_CORRECT', - - /** - * Namespace is being unmanaged. - */ - UNMANAGING_NAMESPACE = 'UNMANAGING_NAMESPACE', - UNMANAGING_NAMESPACE_MISMATCH = 'UNMANAGING_NAMESPACE_MISMATCH', } export type ShardingStatus = keyof typeof ShardingStatuses; @@ -224,62 +191,71 @@ export type RootState = { | { status: ShardingStatuses.LOADING_ERROR; shardKey?: ShardKey; - shardingError?: never; - pollingTimeout?: never; loadingError: string; + ////////////// + userActionInProgress?: never; + shardingError?: never; } | { status: ShardingStatuses.NOT_READY; + ////////////// + userActionInProgress?: never; shardKey?: never; shardingError?: never; - pollingTimeout?: never; loadingError?: never; } | { - status: - | ShardingStatuses.UNSHARDED - | ShardingStatuses.SUBMITTING_FOR_SHARDING - | ShardingStatuses.CANCELLING_SHARDING; - shardKey?: ShardKey; - // shardKey might exist if the collection was sharded before - // and then unmanaged + status: ShardingStatuses.UNSHARDED; + userActionInProgress?: 'submitForSharding'; + ////////////// + shardKey?: never; shardingError?: never; - pollingTimeout?: never; loadingError?: never; } | { status: ShardingStatuses.SHARDING; + userActionInProgress?: 'cancelSharding'; /** * note: shardKey might exist * if the collection was sharded previously and then unmanaged */ shardKey?: ShardKey; + ////////////// shardingError?: never; - pollingTimeout?: NodeJS.Timeout; loadingError?: never; } | { - status: - | ShardingStatuses.SHARDING_ERROR - | ShardingStatuses.CANCELLING_SHARDING_ERROR - | ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR; - shardKey?: never; + status: ShardingStatuses.SHARDING_ERROR; + userActionInProgress?: 'cancelSharding' | 'submitForSharding'; shardingError: string; - pollingTimeout?: never; + ////////////// + shardKey?: never; loadingError?: never; } | { status: | ShardingStatuses.SHARD_KEY_CORRECT - | ShardingStatuses.SHARD_KEY_INVALID - | ShardingStatuses.SHARD_KEY_MISMATCH - | ShardingStatuses.UNMANAGING_NAMESPACE - | ShardingStatuses.UNMANAGING_NAMESPACE_MISMATCH - | ShardingStatuses.INCOMPLETE_SHARDING_SETUP - | ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE; + | ShardingStatuses.SHARD_KEY_MISMATCH; + userActionInProgress?: 'unmanageNamespace'; shardKey: ShardKey; + ////////////// + shardingError?: never; + loadingError?: never; + } + | { + status: ShardingStatuses.SHARD_KEY_INVALID; + shardKey: ShardKey; + ////////////// + userActionInProgress?: never; + shardingError?: never; + loadingError?: never; + } + | { + status: ShardingStatuses.INCOMPLETE_SHARDING_SETUP; + userActionInProgress?: 'cancelSharding' | 'submitForSharding'; + shardKey: ShardKey; + ////////////// shardingError?: never; - pollingTimeout?: never; loadingError?: never; } ); @@ -312,15 +288,11 @@ const reducer: Reducer = (state = initialState, action) => { (state.status === ShardingStatuses.NOT_READY || state.status === ShardingStatuses.SHARDING) ) { - if (state.pollingTimeout) { - throw new Error('Polling was not stopped'); - } return { ...state, status: ShardingStatuses.SHARDING_ERROR, shardKey: undefined, shardingError: action.error, - pollingTimeout: state.pollingTimeout, }; } @@ -333,18 +305,15 @@ const reducer: Reducer = (state = initialState, action) => { state.status === ShardingStatuses.SHARDING) && action.shardKey ) { - if (state.pollingTimeout) { - throw new Error('Polling was not stopped'); - } return { ...state, status: getStatusFromShardKeyAndManaged( action.shardKey, state.managedNamespace ), + userActionInProgress: undefined, shardKey: action.shardKey, shardingError: undefined, - pollingTimeout: state.pollingTimeout, }; } @@ -357,13 +326,9 @@ const reducer: Reducer = (state = initialState, action) => { !action.shardKey && !state.managedNamespace ) { - if (state.pollingTimeout) { - throw new Error('Polling was not stopped'); - } return { ...state, status: ShardingStatuses.UNSHARDED, - pollingTimeout: state.pollingTimeout, }; } @@ -392,28 +357,22 @@ const reducer: Reducer = (state = initialState, action) => { } if ( - isAction( + isAction( action, - GlobalWritesActionTypes.SubmittingForShardingStarted - ) && - state.status === ShardingStatuses.UNSHARDED - ) { - return { - ...state, - status: ShardingStatuses.SUBMITTING_FOR_SHARDING, - }; - } - - if ( - isAction( + GlobalWritesActionTypes.CancellingShardingErrored + ) || + isAction( action, - GlobalWritesActionTypes.SubmittingForShardingStarted - ) && - state.status === ShardingStatuses.SHARDING_ERROR + GlobalWritesActionTypes.UnmanagingNamespaceErrored + ) || + isAction( + action, + GlobalWritesActionTypes.SubmittingForShardingErrored + ) ) { return { ...state, - status: ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR, + userActionInProgress: undefined, }; } @@ -422,11 +381,13 @@ const reducer: Reducer = (state = initialState, action) => { action, GlobalWritesActionTypes.SubmittingForShardingStarted ) && - state.status === ShardingStatuses.INCOMPLETE_SHARDING_SETUP + (state.status === ShardingStatuses.UNSHARDED || + state.status === ShardingStatuses.SHARDING_ERROR || + state.status === ShardingStatuses.INCOMPLETE_SHARDING_SETUP) ) { return { ...state, - status: ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE, + userActionInProgress: 'submitForSharding', }; } @@ -435,87 +396,32 @@ const reducer: Reducer = (state = initialState, action) => { action, GlobalWritesActionTypes.SubmittingForShardingFinished ) && - (state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING || - state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR || - state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE || + (state.status === ShardingStatuses.UNSHARDED || + state.status === ShardingStatuses.SHARDING_ERROR || + state.status === ShardingStatuses.INCOMPLETE_SHARDING_SETUP || state.status === ShardingStatuses.NOT_READY) ) { return { ...state, + userActionInProgress: undefined, shardingError: undefined, managedNamespace: action.managedNamespace || state.managedNamespace, status: ShardingStatuses.SHARDING, }; } - if ( - isAction( - action, - GlobalWritesActionTypes.NextPollingTimeoutSet - ) && - state.status === ShardingStatuses.SHARDING - ) { - return { - ...state, - pollingTimeout: action.timeout, - }; - } - - if ( - isAction( - action, - GlobalWritesActionTypes.NextPollingTimeoutCleared - ) && - state.status === ShardingStatuses.SHARDING - ) { - return { - ...state, - pollingTimeout: undefined, - }; - } - - if ( - isAction( - action, - GlobalWritesActionTypes.CancellingShardingStarted - ) && - state.status === ShardingStatuses.SHARDING - ) { - if (state.pollingTimeout) { - throw new Error('Polling was not stopped'); - } - return { - ...state, - status: ShardingStatuses.CANCELLING_SHARDING, - pollingTimeout: state.pollingTimeout, - }; - } - if ( isAction( action, GlobalWritesActionTypes.CancellingShardingStarted ) && - state.status === ShardingStatuses.SHARDING_ERROR - ) { - return { - ...state, - status: ShardingStatuses.CANCELLING_SHARDING_ERROR, - }; - } - - if ( - isAction( - action, - GlobalWritesActionTypes.CancellingShardingErrored - ) && - (state.status === ShardingStatuses.CANCELLING_SHARDING || - state.status === ShardingStatuses.CANCELLING_SHARDING_ERROR) + (state.status === ShardingStatuses.SHARDING || + state.status === ShardingStatuses.SHARDING_ERROR || + state.status === ShardingStatuses.INCOMPLETE_SHARDING_SETUP) ) { return { ...state, - shardingError: undefined, - status: ShardingStatuses.SHARDING, + userActionInProgress: 'cancelSharding', }; } @@ -524,16 +430,17 @@ const reducer: Reducer = (state = initialState, action) => { action, GlobalWritesActionTypes.CancellingShardingFinished ) && - (state.status === ShardingStatuses.CANCELLING_SHARDING || - state.status === ShardingStatuses.SHARDING_ERROR || - state.status === ShardingStatuses.CANCELLING_SHARDING_ERROR) && - // the error might come before the cancel request was processed + (state.status === ShardingStatuses.SHARDING || + state.status === ShardingStatuses.SHARDING_ERROR) && !state.shardKey ) { return { ...state, - status: ShardingStatuses.UNSHARDED, + userActionInProgress: undefined, + managedNamespace: undefined, + shardKey: state.shardKey, shardingError: undefined, + status: ShardingStatuses.UNSHARDED, }; } @@ -542,55 +449,15 @@ const reducer: Reducer = (state = initialState, action) => { action, GlobalWritesActionTypes.CancellingShardingFinished ) && - state.status === ShardingStatuses.CANCELLING_SHARDING && + state.status === ShardingStatuses.SHARDING && state.shardKey ) { return { ...state, + userActionInProgress: undefined, + managedNamespace: undefined, shardKey: state.shardKey, - status: ShardingStatuses.INCOMPLETE_SHARDING_SETUP, shardingError: undefined, - }; - } - - if ( - isAction( - action, - GlobalWritesActionTypes.SubmittingForShardingErrored - ) && - state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING - ) { - return { - ...state, - managedNamespace: undefined, - status: ShardingStatuses.UNSHARDED, - }; - } - - if ( - isAction( - action, - GlobalWritesActionTypes.SubmittingForShardingErrored - ) && - state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR - ) { - return { - ...state, - managedNamespace: undefined, - status: ShardingStatuses.SUBMITTING_FOR_SHARDING_ERROR, - }; - } - - if ( - isAction( - action, - GlobalWritesActionTypes.SubmittingForShardingErrored - ) && - state.status === ShardingStatuses.SUBMITTING_FOR_SHARDING_INCOMPLETE - ) { - return { - ...state, - managedNamespace: undefined, status: ShardingStatuses.INCOMPLETE_SHARDING_SETUP, }; } @@ -605,10 +472,7 @@ const reducer: Reducer = (state = initialState, action) => { ) { return { ...state, - status: - state.status === ShardingStatuses.SHARD_KEY_CORRECT - ? ShardingStatuses.UNMANAGING_NAMESPACE - : ShardingStatuses.UNMANAGING_NAMESPACE_MISMATCH, + userActionInProgress: 'unmanageNamespace', }; } @@ -617,29 +481,17 @@ const reducer: Reducer = (state = initialState, action) => { action, GlobalWritesActionTypes.UnmanagingNamespaceFinished ) && - (state.status === ShardingStatuses.UNMANAGING_NAMESPACE || - state.status === ShardingStatuses.UNMANAGING_NAMESPACE_MISMATCH) + (state.status === ShardingStatuses.SHARD_KEY_CORRECT || + state.status === ShardingStatuses.SHARD_KEY_MISMATCH) ) { return { ...state, + userActionInProgress: undefined, managedNamespace: undefined, status: ShardingStatuses.INCOMPLETE_SHARDING_SETUP, }; } - if ( - isAction( - action, - GlobalWritesActionTypes.UnmanagingNamespaceErrored - ) && - state.status === ShardingStatuses.UNMANAGING_NAMESPACE - ) { - return { - ...state, - status: ShardingStatuses.SHARD_KEY_CORRECT, - }; - } - if ( isAction( action, @@ -648,14 +500,11 @@ const reducer: Reducer = (state = initialState, action) => { (state.status === ShardingStatuses.NOT_READY || state.status === ShardingStatuses.SHARDING) ) { - if (state.pollingTimeout) { - throw new Error('Polling was not stopped'); - } return { ...state, + userActionInProgress: undefined, status: ShardingStatuses.LOADING_ERROR, loadingError: action.error, - pollingTimeout: state.pollingTimeout, }; } @@ -727,7 +576,17 @@ export const createShardKey = ( getState, { atlasGlobalWritesService, logger, connectionInfoRef } ) => { - const { namespace } = getState(); + const { namespace, userActionInProgress } = getState(); + + if (userActionInProgress) { + logger.log.warn( + logger.mongoLogId(1_001_000_337), + 'Global writes duplicate action', + `SubmittingForSharding triggered while another action is in progress - ${userActionInProgress}` + ); + return; + } + dispatch({ type: GlobalWritesActionTypes.SubmittingForShardingStarted, }); @@ -765,7 +624,7 @@ export const createShardKey = ( }; // Exporting this for test only to stub it and set -// its value. This enables to test cancelSharding action. +// its value. This enables to test cancelShardingaction. export const showConfirmation = showConfirmationModal; export const cancelSharding = (): GlobalWritesThunkAction< @@ -774,7 +633,11 @@ export const cancelSharding = (): GlobalWritesThunkAction< | CancellingShardingFinishedAction | CancellingShardingErroredAction > => { - return async (dispatch, getState, { atlasGlobalWritesService, logger }) => { + return async ( + dispatch, + getState, + { atlasGlobalWritesService, logger, pollingTimeoutRef } + ) => { const confirmed = await showConfirmation({ title: 'Confirmation', description: 'Are you sure you want to cancel the sharding request?', @@ -784,10 +647,19 @@ export const cancelSharding = (): GlobalWritesThunkAction< return; } - const { namespace, status } = getState(); + const { namespace, status, userActionInProgress } = getState(); + + if (userActionInProgress) { + logger.log.warn( + logger.mongoLogId(1_001_000_335), + 'Global writes duplicate action', + `CancelSharding triggered while another action is in progress - ${userActionInProgress}` + ); + return; + } if (status === ShardingStatuses.SHARDING) { - dispatch(stopPollingForShardKey()); + stopPollingForShardKey(pollingTimeoutRef); } dispatch({ type: GlobalWritesActionTypes.CancellingShardingStarted, @@ -836,36 +708,25 @@ const setNamespaceBeingSharded = ( const pollForShardKey = (): GlobalWritesThunkAction< void, - NextPollingTimeoutSetAction + FetchNamespaceShardKeyActions > => { - return (dispatch, getState) => { - const { pollingTimeout } = getState(); + return (dispatch, getState, { pollingTimeoutRef }) => { if ( - pollingTimeout // prevent double polling + pollingTimeoutRef.current // prevent double polling ) { return; } - const timeout = setTimeout(() => { + pollingTimeoutRef.current = setTimeout(() => { void dispatch(fetchNamespaceShardKey()); }, POLLING_INTERVAL); - - dispatch({ - type: GlobalWritesActionTypes.NextPollingTimeoutSet, - timeout, - }); }; }; -const stopPollingForShardKey = (): GlobalWritesThunkAction< - void, - NextPollingTimeoutClearedAction -> => { - return (dispatch, getState) => { - const { pollingTimeout } = getState(); - if (!pollingTimeout) return; - clearTimeout(pollingTimeout); - dispatch({ type: GlobalWritesActionTypes.NextPollingTimeoutCleared }); - }; +const stopPollingForShardKey = (pollingTimeoutRef: { + current: ReturnType | null; +}) => { + if (!pollingTimeoutRef.current) return; + clearTimeout(pollingTimeoutRef.current); }; const handleLoadingError = ({ @@ -898,19 +759,21 @@ const handleLoadingError = ({ }; }; +type FetchNamespaceShardKeyActions = + | NamespaceShardingErrorFetchedAction + | NamespaceShardKeyFetchedAction; + export const fetchNamespaceShardKey = (): GlobalWritesThunkAction< Promise, - | NamespaceShardingErrorFetchedAction - | NamespaceShardKeyFetchedAction - | NextPollingTimeoutClearedAction + FetchNamespaceShardKeyActions > => { return async ( dispatch, getState, - { atlasGlobalWritesService, logger, connectionInfoRef } + { atlasGlobalWritesService, logger, connectionInfoRef, pollingTimeoutRef } ) => { - dispatch({ type: GlobalWritesActionTypes.NextPollingTimeoutCleared }); - const { namespace, status, managedNamespace } = getState(); + pollingTimeoutRef.current = null; + const { namespace, managedNamespace } = getState(); try { const [shardingError, shardKey] = await Promise.all([ @@ -918,21 +781,16 @@ export const fetchNamespaceShardKey = (): GlobalWritesThunkAction< atlasGlobalWritesService.getShardingKeys(namespace), ]); - if (status === ShardingStatuses.SHARDING && (shardKey || shardingError)) { - dispatch(stopPollingForShardKey()); - } - if (managedNamespace && !shardKey) { if (!shardingError) { + // Since the namespace is managed, Atlas has been instructed to shard this collection, + // and since there is no shard key and no sharding error, the shard must still be in progress dispatch(setNamespaceBeingSharded()); return; } // if there is an existing shard key and an error both, // means we have a key mismatch // this will be handled in NamespaceShardKeyFetched - if (status === ShardingStatuses.SHARDING) { - dispatch(stopPollingForShardKey()); - } dispatch({ type: GlobalWritesActionTypes.NamespaceShardingErrorFetched, error: shardingError, @@ -1010,9 +868,18 @@ export const unmanageNamespace = (): GlobalWritesThunkAction< return async ( dispatch, getState, - { atlasGlobalWritesService, connectionInfoRef } + { atlasGlobalWritesService, connectionInfoRef, logger } ) => { - const { namespace } = getState(); + const { namespace, userActionInProgress } = getState(); + + if (userActionInProgress) { + logger.log.warn( + logger.mongoLogId(1_001_000_336), + 'Global writes duplicate action', + `UnmanageNamespace triggered while another action is in progress - ${userActionInProgress}` + ); + return; + } dispatch({ type: GlobalWritesActionTypes.UnmanagingNamespaceStarted, From 07fe9f06a943483aff1a768cc3104dbce99dff52 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:44:45 +0000 Subject: [PATCH 72/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6501) Update report Co-authored-by: paula-stacho <5196720+paula-stacho@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 0cfe17e9c89..1de06a8d75b 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Thu Nov 14 2024. +This document was automatically generated on Fri Nov 15 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 8be2b925979..c04782a013c 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Thu, Nov 14, 2024 at 04:23 PM +Generated on Fri, Nov 15, 2024 at 03:44 PM ## Table of Contents From 7619afd295791743d450d4ebb50950aaadf10edf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=A6n=20Hansen?= Date: Fri, 15 Nov 2024 23:21:12 +0100 Subject: [PATCH 73/81] chore: update comment in connections-filter-popover.tsx (#6502) --- .../src/components/connections-filter-popover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compass-sidebar/src/components/connections-filter-popover.tsx b/packages/compass-sidebar/src/components/connections-filter-popover.tsx index 4cf936dadf3..9152c36c061 100644 --- a/packages/compass-sidebar/src/components/connections-filter-popover.tsx +++ b/packages/compass-sidebar/src/components/connections-filter-popover.tsx @@ -69,7 +69,7 @@ export default function ConnectionsFilterPopover({ // Manually handling the tooltip state instead of supplying a trigger // we do this to avoid the tooltip from rendering when the popover is open - // and when the IconButton regains focus as the + // and when the IconButton regains focus as the popover is closed. const [isTooltipOpen, setTooltipOpen] = useState(false); const handleButtonMouseEnter = useCallback( () => setTooltipOpen(true), From 45399582b7de9f3675b3779e5501452fa149083a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 15 Nov 2024 22:27:35 +0000 Subject: [PATCH 74/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6503) Update report Co-authored-by: Anemy <1791149+Anemy@users.noreply.github.com> --- docs/tracking-plan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index c04782a013c..1fa6cd1f676 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Nov 15, 2024 at 03:44 PM +Generated on Fri, Nov 15, 2024 at 10:27 PM ## Table of Contents From 2c3f6d068c83866c3bc16c0abd092acdbadd23a6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 17 Nov 2024 03:21:16 +0000 Subject: [PATCH 75/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6504) Update report Co-authored-by: mcasimir <334881+mcasimir@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 1de06a8d75b..663c07bc2e9 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Fri Nov 15 2024. +This document was automatically generated on Sun Nov 17 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 1fa6cd1f676..4638225c405 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Fri, Nov 15, 2024 at 10:27 PM +Generated on Sun, Nov 17, 2024 at 03:21 AM ## Table of Contents From ddcf2408bafc8bbef904c18b1cf155ccb59a6aff Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 05:05:00 +0000 Subject: [PATCH 76/81] v1.44.7-beta.2 --- package-lock.json | 2 +- packages/compass/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 64f0691cd17..50aeced3217 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43140,7 +43140,7 @@ }, "packages/compass": { "name": "mongodb-compass", - "version": "1.44.7-beta.1", + "version": "1.44.7-beta.2", "hasInstallScript": true, "license": "SSPL", "dependencies": { diff --git a/packages/compass/package.json b/packages/compass/package.json index 46d5914c21b..99df976b908 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -4,7 +4,7 @@ "productName": "MongoDB Compass", "description": "The MongoDB GUI", "homepage": "https://www.mongodb.com/products/compass", - "version": "1.44.7-beta.1", + "version": "1.44.7-beta.2", "apiVersion": "3.0.0", "main": "build/main.js", "author": { From 72d1802cbdb04947f426bb0b98296195cc401ab4 Mon Sep 17 00:00:00 2001 From: Basit <1305718+mabaasit@users.noreply.github.com> Date: Mon, 18 Nov 2024 09:22:21 +0100 Subject: [PATCH 77/81] fix(menu): remove accelerators for linux COMPASS-8494 (#6485) * remove accelerators for linux menu * fix tests * add todo ticket * add test * filter more accelerators for linux * compass menu accelerator assertions * skip tests on linux * use actual menu for tests --- packages/compass/src/main/menu.spec.ts | 106 ++++++++++++++++++++++++- packages/compass/src/main/menu.ts | 60 ++++++++++---- 2 files changed, 147 insertions(+), 19 deletions(-) diff --git a/packages/compass/src/main/menu.spec.ts b/packages/compass/src/main/menu.spec.ts index 28b9555ed8c..fc374b5f8e3 100644 --- a/packages/compass/src/main/menu.spec.ts +++ b/packages/compass/src/main/menu.spec.ts @@ -3,6 +3,7 @@ import type { MenuItemConstructorOptions } from 'electron'; import { BrowserWindow, ipcMain, Menu, app, dialog } from 'electron'; import { expect } from 'chai'; import sinon from 'sinon'; +import os from 'os'; import { createSandboxFromDefaultPreferences } from 'compass-preferences-model'; import type { CompassApplication } from './application'; @@ -457,7 +458,8 @@ describe('CompassMenu', function () { ]); }); - ['linux', 'win32'].forEach((platform) => { + // TODO(COMPASS-8505): Add `linux` back to this list + ['win32'].forEach((platform) => { // TODO(COMPASS-7906): remove it.skip(`[single-connection] should generate a menu template for ${platform}`, function () { sinon.stub(process, 'platform').value(platform); @@ -588,6 +590,87 @@ describe('CompassMenu', function () { }); }); + // TODO(COMPASS-8505): Remove this test + it('should generate a menu template for linux', async function () { + await App.preferences.savePreferences({ + enableMultipleConnectionSystem: true, + }); + sinon.stub(process, 'platform').value('linux'); + + expect(serializable(CompassMenu.getTemplate(0))).to.deep.equal([ + { + label: '&Connections', + submenu: [ + { label: '&Import Saved Connections' }, + { label: '&Export Saved Connections' }, + { type: 'separator' }, + { label: 'E&xit' }, + ], + }, + { + label: 'Edit', + submenu: [ + { label: 'Undo', role: 'undo' }, + { label: 'Redo', role: 'redo' }, + { type: 'separator' }, + { label: 'Cut', role: 'cut' }, + { label: 'Copy', role: 'copy' }, + { label: 'Paste', role: 'paste' }, + { + label: 'Select All', + role: 'selectAll', + }, + { type: 'separator' }, + { label: 'Find' }, + { type: 'separator' }, + { label: '&Settings' }, + ], + }, + { + label: '&View', + submenu: [ + { label: '&Reload' }, + { label: '&Reload Data' }, + { type: 'separator' }, + { label: 'Actual Size' }, + { label: 'Zoom In' }, + { label: 'Zoom Out' }, + ], + }, + { + label: '&Help', + submenu: [ + { label: `&Online ${app.getName()} Help` }, + { label: '&License' }, + { label: `&View Source Code on GitHub` }, + { label: `&Suggest a Feature` }, + { label: `&Report a Bug` }, + { label: '&Open Log File' }, + { type: 'separator' }, + { label: `&About ${app.getName()}` }, + { label: 'Check for updates…' }, + ], + }, + ]); + }); + + it('does not crash when rendering menu item with an accelerator', () => { + const window = new BrowserWindow({ show: false }); + const template = CompassMenu.getTemplate(window.id); + + // As the root menu items do not have accelerators, we test + // against each item's submenu. + for (const item of template) { + // for TS. compass menu has submenus + if (!Array.isArray(item.submenu)) { + continue; + } + const menu = Menu.buildFromTemplate(item.submenu); + menu.popup({ window }); + menu.closePopup(); + } + }); + it('should generate a menu template without collection submenu if `showCollection` is `false`', function () { expect( CompassMenu.getTemplate(0).find((item) => item.label === '&Collection') @@ -612,7 +695,12 @@ describe('CompassMenu', function () { label: '&Collection', submenu: [ { - accelerator: 'Alt+CmdOrCtrl+S', + // TODO(COMPASS-8505): Add `accelerator` back to this + ...(os.platform() === 'linux' + ? {} + : { + accelerator: 'Alt+CmdOrCtrl+S', + }), label: '&Share Schema as JSON', }, { @@ -646,7 +734,12 @@ describe('CompassMenu', function () { label: '&Collection', submenu: [ { - accelerator: 'Alt+CmdOrCtrl+S', + // TODO(COMPASS-8505): Add `accelerator` back to this + ...(os.platform() === 'linux' + ? {} + : { + accelerator: 'Alt+CmdOrCtrl+S', + }), label: '&Share Schema as JSON', }, { @@ -670,7 +763,12 @@ describe('CompassMenu', function () { expect( menu.find((item: any) => item.label === '&Toggle DevTools') ).to.deep.eq({ - accelerator: 'Alt+CmdOrCtrl+I', + // TODO(COMPASS-8505): Add `accelerator` back to this + ...(os.platform() === 'linux' + ? {} + : { + accelerator: 'Alt+CmdOrCtrl+I', + }), label: '&Toggle DevTools', }); }); diff --git a/packages/compass/src/main/menu.ts b/packages/compass/src/main/menu.ts index d960af8b94e..5c4b4ebd5f1 100644 --- a/packages/compass/src/main/menu.ts +++ b/packages/compass/src/main/menu.ts @@ -1,7 +1,14 @@ import type { MenuItemConstructorOptions } from 'electron'; -import { BrowserWindow, Menu, app, dialog, shell } from 'electron'; +import { + BrowserWindow, + Menu, + app as electronApp, + dialog, + shell, +} from 'electron'; import { ipcMain } from 'hadron-ipc'; import fs from 'fs'; +import os from 'os'; import path from 'path'; import createDebug from 'debug'; import type { THEMES } from 'compass-preferences-model'; @@ -34,11 +41,11 @@ function quitItem( accelerator: 'CmdOrCtrl+Q', click() { !compassApp.preferences.getPreferences().enableShowDialogOnQuit - ? app.quit() + ? electronApp.quit() : void dialog .showMessageBox({ type: 'warning', - title: `Quit ${app.getName()}`, + title: `Quit ${electronApp.getName()}`, icon: COMPASS_ICON, message: 'Are you sure you want to quit?', buttons: ['Quit', 'Cancel'], @@ -50,7 +57,7 @@ function quitItem( void compassApp.preferences.savePreferences({ enableShowDialogOnQuit: false, }); - app.quit(); + electronApp.quit(); } }); }, @@ -96,10 +103,10 @@ function darwinCompassSubMenu( compassApp: typeof CompassApplication ): MenuItemConstructorOptions { return { - label: app.getName(), + label: electronApp.getName(), submenu: [ { - label: `About ${app.getName()}`, + label: `About ${electronApp.getName()}`, role: 'about', }, updateSubmenu(windowState, compassApp), @@ -239,14 +246,14 @@ function editSubMenu(): MenuItemConstructorOptions { function nonDarwinAboutItem(): MenuItemConstructorOptions { return { - label: `&About ${app.getName()}`, + label: `&About ${electronApp.getName()}`, click() { void dialog.showMessageBox({ type: 'info', - title: 'About ' + app.getName(), + title: 'About ' + electronApp.getName(), icon: COMPASS_ICON, - message: app.getName(), - detail: 'Version ' + app.getVersion(), + message: electronApp.getName(), + detail: 'Version ' + electronApp.getVersion(), buttons: ['OK'], }); }, @@ -255,7 +262,7 @@ function nonDarwinAboutItem(): MenuItemConstructorOptions { function helpWindowItem(): MenuItemConstructorOptions { return { - label: `&Online ${app.getName()} Help`, + label: `&Online ${electronApp.getName()} Help`, accelerator: 'F1', click() { void shell.openExternal(COMPASS_HELP); @@ -299,7 +306,7 @@ function license(): MenuItemConstructorOptions { label: '&License', click() { void import('../../LICENSE').then(({ default: LICENSE }) => { - const licenseTemp = path.join(app.getPath('temp'), 'License'); + const licenseTemp = path.join(electronApp.getPath('temp'), 'License'); fs.writeFile(licenseTemp, LICENSE, (err) => { if (!err) { void shell.openPath(licenseTemp); @@ -513,6 +520,24 @@ class WindowMenuState { updateManagerState: UpdateManagerState = 'idle'; } +function removeAcceleratorFromMenu( + menu?: MenuItemConstructorOptions[] +): MenuItemConstructorOptions[] { + if (!Array.isArray(menu)) { + return []; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + return menu.map(({ accelerator, ...item }) => { + if (!item.submenu || !Array.isArray(item.submenu)) { + return item; + } + return { + ...item, + submenu: removeAcceleratorFromMenu(item.submenu), + }; + }); +} + class CompassMenu { private constructor() { // marking constructor as private to disallow usage @@ -618,9 +643,9 @@ class CompassMenu { } private static async setupDockMenu() { - await app.whenReady(); + await electronApp.whenReady(); if (process.platform === 'darwin') { - app.dock.setMenu( + electronApp.dock.setMenu( Menu.buildFromTemplate([ { label: 'New Window', @@ -686,7 +711,12 @@ class CompassMenu { if (process.platform === 'darwin') { return darwinMenu(menuState, this.app); } - return nonDarwinMenu(menuState, this.app); + const menu = nonDarwinMenu(menuState, this.app); + // TODO(COMPASS-8505): Remove this check once accelerator issue is resolve for linux. + if (os.platform() === 'linux') { + return removeAcceleratorFromMenu(menu); + } + return menu; } private static refreshMenu = () => { From 0e6c35a1f8a4ae9469fac7e5b4d2df0519d4c241 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 08:34:10 +0000 Subject: [PATCH 78/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6506) Update report Co-authored-by: mabaasit <1305718+mabaasit@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 2 +- docs/tracking-plan.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 663c07bc2e9..9a19c08969a 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -1,5 +1,5 @@ The following third-party software is used by and included in **Mongodb Compass**. -This document was automatically generated on Sun Nov 17 2024. +This document was automatically generated on Mon Nov 18 2024. ## List of dependencies diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 4638225c405..69916e599dc 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Sun, Nov 17, 2024 at 03:21 AM +Generated on Mon, Nov 18, 2024 at 08:34 AM ## Table of Contents From 6f6ac462d61b7db3238f072717fe9989efdcca41 Mon Sep 17 00:00:00 2001 From: Basit <1305718+mabaasit@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:21:12 +0100 Subject: [PATCH 79/81] chore(deps): update electron COMPASS-8505 (#6505) * chore(deps): update electron * add accelerators back for linux * remove unused vars --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- configs/webpack-config-compass/package.json | 2 +- package-lock.json | 136 ++++++++---------- packages/atlas-service/package.json | 2 +- packages/compass-crud/package.json | 2 +- packages/compass-e2e-tests/package.json | 6 +- packages/compass-explain-plan/package.json | 2 +- packages/compass-find-in-page/package.json | 2 +- packages/compass-import-export/package.json | 2 +- packages/compass-indexes/package.json | 2 +- packages/compass-query-bar/package.json | 2 +- .../compass-schema-validation/package.json | 2 +- packages/compass-shell/package.json | 2 +- packages/compass-utils/package.json | 2 +- packages/compass-web/package.json | 2 +- packages/compass/package.json | 4 +- packages/compass/src/main/menu.spec.ts | 89 +----------- packages/compass/src/main/menu.ts | 26 +--- packages/connection-storage/package.json | 2 +- packages/hadron-build/package.json | 4 +- packages/hadron-ipc/package.json | 2 +- scripts/package.json | 2 +- 21 files changed, 89 insertions(+), 206 deletions(-) diff --git a/configs/webpack-config-compass/package.json b/configs/webpack-config-compass/package.json index f1e4f48c453..3154716299e 100644 --- a/configs/webpack-config-compass/package.json +++ b/configs/webpack-config-compass/package.json @@ -73,7 +73,7 @@ "cli-progress": "^3.9.1", "core-js": "^3.17.3", "css-loader": "^4.3.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "html-webpack-plugin": "^5.6.0", "less": "^3.13.1", "less-loader": "^10.0.1", diff --git a/package-lock.json b/package-lock.json index 704f058a479..108a137a89c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -516,7 +516,7 @@ "cli-progress": "^3.9.1", "core-js": "^3.17.3", "css-loader": "^4.3.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "html-webpack-plugin": "^5.6.0", "less": "^3.13.1", "less-loader": "^10.0.1", @@ -4324,9 +4324,9 @@ } }, "node_modules/@electron/rebuild": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz", - "integrity": "sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.1.tgz", + "integrity": "sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==", "dependencies": { "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", "@malept/cross-spawn-promise": "^2.0.0", @@ -4364,7 +4364,6 @@ "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" } ], - "license": "Apache-2.0", "dependencies": { "cross-spawn": "^7.0.1" }, @@ -4376,7 +4375,6 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -4388,7 +4386,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4397,7 +4394,6 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "license": "MIT", "engines": { "node": ">=10.6.0" } @@ -4406,7 +4402,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -4420,7 +4415,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -4435,7 +4429,6 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -4449,7 +4442,6 @@ "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -4474,7 +4466,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -4486,7 +4477,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4498,7 +4488,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4516,7 +4505,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", "engines": { "node": ">=12" } @@ -20163,9 +20151,9 @@ } }, "node_modules/electron": { - "version": "32.2.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-32.2.3.tgz", - "integrity": "sha512-ClTJrFuwBdZpDNEnVZSV1gTIYSq7c/TYoUv9AmOypL43/xtbfxXkz2vE67ehVoamFobWsIU2by087R5Av8cxJg==", + "version": "32.2.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-32.2.5.tgz", + "integrity": "sha512-8t5IGOvms/JTcLNnlOH7rFCAJIZJAazwYrF7kQsKQSLzDHh4z8mGFrU11NN3W4bIT6Yg5DJNniSWz3O5wJLmCw==", "hasInstallScript": true, "dependencies": { "@electron/get": "^2.0.0", @@ -20520,9 +20508,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.55", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz", - "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==" + "version": "1.5.62", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.62.tgz", + "integrity": "sha512-t8c+zLmJHa9dJy96yBZRXGQYoiCEnHYgFwn1asvSPZSUdVxnB62A4RASd7k41ytG3ErFBA0TpHlKg9D9SQBmLg==" }, "node_modules/electron-window": { "version": "0.8.1", @@ -43028,7 +43016,7 @@ "@mongodb-js/devtools-proxy-support": "^0.4.1", "@mongodb-js/oidc-plugin": "^1.1.1", "compass-preferences-model": "^2.30.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", @@ -43153,7 +43141,7 @@ "system-ca": "^2.0.0" }, "devDependencies": { - "@electron/rebuild": "^3.7.0", + "@electron/rebuild": "^3.7.1", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.32.0", "@mongodb-js/compass-aggregations": "^9.49.0", @@ -43208,7 +43196,7 @@ "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-devtools-installer": "^3.2.0", "electron-dl": "^3.5.0", "electron-mocha": "^12.2.0", @@ -43947,7 +43935,7 @@ "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -44006,7 +43994,7 @@ "packages/compass-e2e-tests": { "version": "1.27.6", "devDependencies": { - "@electron/rebuild": "^3.7.0", + "@electron/rebuild": "^3.7.1", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -44026,8 +44014,8 @@ "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", - "electron-to-chromium": "^1.5.55", + "electron": "^32.2.5", + "electron-to-chromium": "^1.5.62", "eslint": "^7.25.0", "glob": "^10.2.5", "hadron-build": "^25.5.14", @@ -44509,7 +44497,7 @@ "@types/d3-hierarchy": "^3.1.2", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -44706,7 +44694,7 @@ "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -45062,7 +45050,7 @@ "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", "debug": "^4.3.4", - "electron": "^32.2.3", + "electron": "^32.2.5", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-ipc": "^3.2.25", @@ -45182,7 +45170,7 @@ "@types/numeral": "^2.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -45594,7 +45582,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", @@ -45803,7 +45791,7 @@ "@types/enzyme": "^3.10.14", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -45993,7 +45981,7 @@ "@types/enzyme": "^3.10.14", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -46358,7 +46346,7 @@ "license": "SSPL", "dependencies": { "@electron/remote": "^2.1.2", - "electron": "^32.2.3" + "electron": "^32.2.5" }, "devDependencies": { "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -46457,7 +46445,7 @@ "debug": "^4.3.4", "depcheck": "^1.4.1", "dns-query": "^0.11.2", - "electron": "^32.2.3", + "electron": "^32.2.5", "eslint": "^7.25.0", "events": "^3.3.0", "express": "^4.21.1", @@ -47122,7 +47110,7 @@ "@mongodb-js/connection-info": "^0.9.3", "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", "keytar": "^7.9.0", @@ -47732,7 +47720,7 @@ "hasInstallScript": true, "license": "SSPL", "dependencies": { - "@electron/rebuild": "^3.7.0", + "@electron/rebuild": "^3.7.1", "@mongodb-js/devtools-github-repo": "^1.4.1", "@mongodb-js/dl-center": "^1.0.1", "@mongodb-js/electron-wix-msi": "^3.0.0", @@ -47745,7 +47733,7 @@ "debug": "^4.3.4", "del": "^2.0.2", "download": "^8.0.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-packager": "^15.5.1", "electron-packager-plugin-non-proprietary-codecs-ffmpeg": "^1.0.2", "flatnest": "^1.0.0", @@ -48609,7 +48597,7 @@ "license": "SSPL", "dependencies": { "debug": "^4.3.4", - "electron": "^32.2.3", + "electron": "^32.2.5", "is-electron-renderer": "^2.0.1" }, "devDependencies": { @@ -49575,7 +49563,7 @@ "@babel/core": "^7.24.3", "@mongodb-js/monorepo-tools": "^1.1.1", "commander": "^11.0.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "jsdom": "^24.1.3", "make-fetch-happen": "^10.2.1", "pacote": "^11.3.5", @@ -52331,9 +52319,9 @@ } }, "@electron/rebuild": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz", - "integrity": "sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.1.tgz", + "integrity": "sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==", "requires": { "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", "@malept/cross-spawn-promise": "^2.0.0", @@ -54887,7 +54875,7 @@ "chai": "^4.3.6", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", @@ -55542,7 +55530,7 @@ "chai-as-promised": "^7.1.1", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -55722,7 +55710,7 @@ "d3-flextree": "^2.1.2", "d3-hierarchy": "^3.1.2", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -55895,7 +55883,7 @@ "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -56173,7 +56161,7 @@ "compass-preferences-model": "^2.30.0", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -56250,7 +56238,7 @@ "chai": "^4.2.0", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -56528,7 +56516,7 @@ "chai": "^4.2.0", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", @@ -56740,7 +56728,7 @@ "chai": "^4.2.0", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -56774,7 +56762,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "commander": "^11.0.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "eslint": "^7.25.0", "jsdom": "^24.1.3", "make-fetch-happen": "^10.2.1", @@ -57059,7 +57047,7 @@ "chai": "^4.2.0", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", @@ -57393,7 +57381,7 @@ "@types/sinon-chai": "^3.2.5", "chai": "^4.3.6", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "eslint": "^7.25.0", "gen-esm-wrapper": "^1.1.0", "mocha": "^10.2.0", @@ -57476,7 +57464,7 @@ "debug": "^4.3.4", "depcheck": "^1.4.1", "dns-query": "^0.11.2", - "electron": "^32.2.3", + "electron": "^32.2.5", "eslint": "^7.25.0", "events": "^3.3.0", "express": "^4.21.1", @@ -58066,7 +58054,7 @@ "chai": "^4.3.6", "compass-preferences-model": "^2.30.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "eslint": "^7.25.0", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", @@ -59261,7 +59249,7 @@ "core-js": "^3.17.3", "css-loader": "^4.3.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "eslint": "^7.25.0", "html-webpack-plugin": "^5.6.0", "less": "^3.13.1", @@ -66638,7 +66626,7 @@ "compass-e2e-tests": { "version": "file:packages/compass-e2e-tests", "requires": { - "@electron/rebuild": "^3.7.0", + "@electron/rebuild": "^3.7.1", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -66658,8 +66646,8 @@ "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", - "electron-to-chromium": "^1.5.55", + "electron": "^32.2.5", + "electron-to-chromium": "^1.5.62", "eslint": "^7.25.0", "glob": "^10.2.5", "hadron-build": "^25.5.14", @@ -69070,9 +69058,9 @@ } }, "electron": { - "version": "32.2.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-32.2.3.tgz", - "integrity": "sha512-ClTJrFuwBdZpDNEnVZSV1gTIYSq7c/TYoUv9AmOypL43/xtbfxXkz2vE67ehVoamFobWsIU2by087R5Av8cxJg==", + "version": "32.2.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-32.2.5.tgz", + "integrity": "sha512-8t5IGOvms/JTcLNnlOH7rFCAJIZJAazwYrF7kQsKQSLzDHh4z8mGFrU11NN3W4bIT6Yg5DJNniSWz3O5wJLmCw==", "requires": { "@electron/get": "^2.0.0", "@types/node": "^20.9.0", @@ -69436,9 +69424,9 @@ } }, "electron-to-chromium": { - "version": "1.5.55", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz", - "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==" + "version": "1.5.62", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.62.tgz", + "integrity": "sha512-t8c+zLmJHa9dJy96yBZRXGQYoiCEnHYgFwn1asvSPZSUdVxnB62A4RASd7k41ytG3ErFBA0TpHlKg9D9SQBmLg==" }, "electron-window": { "version": "0.8.1", @@ -72680,7 +72668,7 @@ "hadron-build": { "version": "file:packages/hadron-build", "requires": { - "@electron/rebuild": "^3.7.0", + "@electron/rebuild": "^3.7.1", "@mongodb-js/devtools-github-repo": "^1.4.1", "@mongodb-js/dl-center": "^1.0.1", "@mongodb-js/electron-wix-msi": "^3.0.0", @@ -72696,7 +72684,7 @@ "del": "^2.0.2", "depcheck": "^1.4.1", "download": "^8.0.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-installer-debian": "^3.2.0", "electron-installer-dmg": "^5.0.1", "electron-installer-redhat": "^2.0.0", @@ -73420,7 +73408,7 @@ "chai": "^4.3.6", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "eslint": "^7.25.0", "is-electron-renderer": "^2.0.1", "mocha": "^10.2.0", @@ -78470,7 +78458,7 @@ "mongodb-compass": { "version": "file:packages/compass", "requires": { - "@electron/rebuild": "^3.7.0", + "@electron/rebuild": "^3.7.1", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.32.0", "@mongodb-js/compass-aggregations": "^9.49.0", @@ -78527,7 +78515,7 @@ "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-devtools-installer": "^3.2.0", "electron-dl": "^3.5.0", "electron-mocha": "^12.2.0", diff --git a/packages/atlas-service/package.json b/packages/atlas-service/package.json index 32af413eee3..1ab5b89d5dd 100644 --- a/packages/atlas-service/package.json +++ b/packages/atlas-service/package.json @@ -84,7 +84,7 @@ "@mongodb-js/oidc-plugin": "^1.1.1", "hadron-app-registry": "^9.2.7", "compass-preferences-model": "^2.30.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "hadron-ipc": "^3.2.25", "lodash": "^4.17.21", "react": "^17.0.2", diff --git a/packages/compass-crud/package.json b/packages/compass-crud/package.json index 55fef26703d..6d0f47b98bc 100644 --- a/packages/compass-crud/package.json +++ b/packages/compass-crud/package.json @@ -59,7 +59,7 @@ "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", diff --git a/packages/compass-e2e-tests/package.json b/packages/compass-e2e-tests/package.json index eb5df3360dd..9af133a8c61 100644 --- a/packages/compass-e2e-tests/package.json +++ b/packages/compass-e2e-tests/package.json @@ -31,7 +31,7 @@ "coverage-report": "npm run coverage-merge && nyc report" }, "devDependencies": { - "@electron/rebuild": "^3.7.0", + "@electron/rebuild": "^3.7.1", "@mongodb-js/compass-test-server": "^0.1.22", "@mongodb-js/connection-info": "^0.9.3", "@mongodb-js/eslint-config-compass": "^1.1.7", @@ -51,8 +51,8 @@ "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", - "electron-to-chromium": "^1.5.55", + "electron": "^32.2.5", + "electron-to-chromium": "^1.5.62", "eslint": "^7.25.0", "glob": "^10.2.5", "hadron-build": "^25.5.14", diff --git a/packages/compass-explain-plan/package.json b/packages/compass-explain-plan/package.json index ace88c11206..d1eb7e1e5dd 100644 --- a/packages/compass-explain-plan/package.json +++ b/packages/compass-explain-plan/package.json @@ -58,7 +58,7 @@ "@types/d3-hierarchy": "^3.1.2", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", diff --git a/packages/compass-find-in-page/package.json b/packages/compass-find-in-page/package.json index 1115cff885e..612d6b013dc 100644 --- a/packages/compass-find-in-page/package.json +++ b/packages/compass-find-in-page/package.json @@ -61,7 +61,7 @@ "@types/sinon-chai": "^3.2.5", "chai": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", diff --git a/packages/compass-import-export/package.json b/packages/compass-import-export/package.json index 0822ea55471..80a67896160 100644 --- a/packages/compass-import-export/package.json +++ b/packages/compass-import-export/package.json @@ -59,7 +59,7 @@ "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", "debug": "^4.3.4", - "electron": "^32.2.3", + "electron": "^32.2.5", "hadron-app-registry": "^9.2.7", "hadron-document": "^8.6.5", "hadron-ipc": "^3.2.25", diff --git a/packages/compass-indexes/package.json b/packages/compass-indexes/package.json index 06469147f26..1486addde2b 100644 --- a/packages/compass-indexes/package.json +++ b/packages/compass-indexes/package.json @@ -56,7 +56,7 @@ "@types/numeral": "^2.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", diff --git a/packages/compass-query-bar/package.json b/packages/compass-query-bar/package.json index 6577ed48771..df01683c17d 100644 --- a/packages/compass-query-bar/package.json +++ b/packages/compass-query-bar/package.json @@ -55,7 +55,7 @@ "@mongodb-js/tsconfig-compass": "^1.0.5", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "eslint": "^7.25.0", "mocha": "^10.2.0", diff --git a/packages/compass-schema-validation/package.json b/packages/compass-schema-validation/package.json index fb048af6fb8..6a826d4ba2a 100644 --- a/packages/compass-schema-validation/package.json +++ b/packages/compass-schema-validation/package.json @@ -56,7 +56,7 @@ "@types/enzyme": "^3.10.14", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index 0470f9a48d4..b4e4023312b 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -76,7 +76,7 @@ "@types/enzyme": "^3.10.14", "chai": "^4.2.0", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-mocha": "^12.2.0", "enzyme": "^3.11.0", "eslint": "^7.25.0", diff --git a/packages/compass-utils/package.json b/packages/compass-utils/package.json index 56ef39e3b43..6cd839d5946 100644 --- a/packages/compass-utils/package.json +++ b/packages/compass-utils/package.json @@ -69,6 +69,6 @@ }, "dependencies": { "@electron/remote": "^2.1.2", - "electron": "^32.2.3" + "electron": "^32.2.5" } } diff --git a/packages/compass-web/package.json b/packages/compass-web/package.json index a9fa0e52264..5cd36a4c80e 100644 --- a/packages/compass-web/package.json +++ b/packages/compass-web/package.json @@ -109,7 +109,7 @@ "debug": "^4.3.4", "depcheck": "^1.4.1", "dns-query": "^0.11.2", - "electron": "^32.2.3", + "electron": "^32.2.5", "eslint": "^7.25.0", "events": "^3.3.0", "express": "^4.21.1", diff --git a/packages/compass/package.json b/packages/compass/package.json index a55e319c525..9e2862208a0 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -188,7 +188,7 @@ "system-ca": "^2.0.0" }, "devDependencies": { - "@electron/rebuild": "^3.7.0", + "@electron/rebuild": "^3.7.1", "@electron/remote": "^2.1.2", "@mongodb-js/atlas-service": "^0.32.0", "@mongodb-js/compass-aggregations": "^9.49.0", @@ -243,7 +243,7 @@ "cross-spawn": "^7.0.5", "debug": "^4.3.4", "depcheck": "^1.4.1", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-devtools-installer": "^3.2.0", "electron-dl": "^3.5.0", "electron-mocha": "^12.2.0", diff --git a/packages/compass/src/main/menu.spec.ts b/packages/compass/src/main/menu.spec.ts index fc374b5f8e3..0dd004ba711 100644 --- a/packages/compass/src/main/menu.spec.ts +++ b/packages/compass/src/main/menu.spec.ts @@ -3,7 +3,6 @@ import type { MenuItemConstructorOptions } from 'electron'; import { BrowserWindow, ipcMain, Menu, app, dialog } from 'electron'; import { expect } from 'chai'; import sinon from 'sinon'; -import os from 'os'; import { createSandboxFromDefaultPreferences } from 'compass-preferences-model'; import type { CompassApplication } from './application'; @@ -458,8 +457,7 @@ describe('CompassMenu', function () { ]); }); - // TODO(COMPASS-8505): Add `linux` back to this list - ['win32'].forEach((platform) => { + ['win32', 'linux'].forEach((platform) => { // TODO(COMPASS-7906): remove it.skip(`[single-connection] should generate a menu template for ${platform}`, function () { sinon.stub(process, 'platform').value(platform); @@ -590,70 +588,6 @@ describe('CompassMenu', function () { }); }); - // TODO(COMPASS-8505): Remove this test - it('should generate a menu template for linux', async function () { - await App.preferences.savePreferences({ - enableMultipleConnectionSystem: true, - }); - sinon.stub(process, 'platform').value('linux'); - - expect(serializable(CompassMenu.getTemplate(0))).to.deep.equal([ - { - label: '&Connections', - submenu: [ - { label: '&Import Saved Connections' }, - { label: '&Export Saved Connections' }, - { type: 'separator' }, - { label: 'E&xit' }, - ], - }, - { - label: 'Edit', - submenu: [ - { label: 'Undo', role: 'undo' }, - { label: 'Redo', role: 'redo' }, - { type: 'separator' }, - { label: 'Cut', role: 'cut' }, - { label: 'Copy', role: 'copy' }, - { label: 'Paste', role: 'paste' }, - { - label: 'Select All', - role: 'selectAll', - }, - { type: 'separator' }, - { label: 'Find' }, - { type: 'separator' }, - { label: '&Settings' }, - ], - }, - { - label: '&View', - submenu: [ - { label: '&Reload' }, - { label: '&Reload Data' }, - { type: 'separator' }, - { label: 'Actual Size' }, - { label: 'Zoom In' }, - { label: 'Zoom Out' }, - ], - }, - { - label: '&Help', - submenu: [ - { label: `&Online ${app.getName()} Help` }, - { label: '&License' }, - { label: `&View Source Code on GitHub` }, - { label: `&Suggest a Feature` }, - { label: `&Report a Bug` }, - { label: '&Open Log File' }, - { type: 'separator' }, - { label: `&About ${app.getName()}` }, - { label: 'Check for updates…' }, - ], - }, - ]); - }); - it('does not crash when rendering menu item with an accelerator', () => { const window = new BrowserWindow({ show: false }); const template = CompassMenu.getTemplate(window.id); @@ -695,12 +629,7 @@ describe('CompassMenu', function () { label: '&Collection', submenu: [ { - // TODO(COMPASS-8505): Add `accelerator` back to this - ...(os.platform() === 'linux' - ? {} - : { - accelerator: 'Alt+CmdOrCtrl+S', - }), + accelerator: 'Alt+CmdOrCtrl+S', label: '&Share Schema as JSON', }, { @@ -734,12 +663,7 @@ describe('CompassMenu', function () { label: '&Collection', submenu: [ { - // TODO(COMPASS-8505): Add `accelerator` back to this - ...(os.platform() === 'linux' - ? {} - : { - accelerator: 'Alt+CmdOrCtrl+S', - }), + accelerator: 'Alt+CmdOrCtrl+S', label: '&Share Schema as JSON', }, { @@ -763,12 +687,7 @@ describe('CompassMenu', function () { expect( menu.find((item: any) => item.label === '&Toggle DevTools') ).to.deep.eq({ - // TODO(COMPASS-8505): Add `accelerator` back to this - ...(os.platform() === 'linux' - ? {} - : { - accelerator: 'Alt+CmdOrCtrl+I', - }), + accelerator: 'Alt+CmdOrCtrl+I', label: '&Toggle DevTools', }); }); diff --git a/packages/compass/src/main/menu.ts b/packages/compass/src/main/menu.ts index 5c4b4ebd5f1..809a0ea12df 100644 --- a/packages/compass/src/main/menu.ts +++ b/packages/compass/src/main/menu.ts @@ -8,7 +8,6 @@ import { } from 'electron'; import { ipcMain } from 'hadron-ipc'; import fs from 'fs'; -import os from 'os'; import path from 'path'; import createDebug from 'debug'; import type { THEMES } from 'compass-preferences-model'; @@ -520,24 +519,6 @@ class WindowMenuState { updateManagerState: UpdateManagerState = 'idle'; } -function removeAcceleratorFromMenu( - menu?: MenuItemConstructorOptions[] -): MenuItemConstructorOptions[] { - if (!Array.isArray(menu)) { - return []; - } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - return menu.map(({ accelerator, ...item }) => { - if (!item.submenu || !Array.isArray(item.submenu)) { - return item; - } - return { - ...item, - submenu: removeAcceleratorFromMenu(item.submenu), - }; - }); -} - class CompassMenu { private constructor() { // marking constructor as private to disallow usage @@ -711,12 +692,7 @@ class CompassMenu { if (process.platform === 'darwin') { return darwinMenu(menuState, this.app); } - const menu = nonDarwinMenu(menuState, this.app); - // TODO(COMPASS-8505): Remove this check once accelerator issue is resolve for linux. - if (os.platform() === 'linux') { - return removeAcceleratorFromMenu(menu); - } - return menu; + return nonDarwinMenu(menuState, this.app); } private static refreshMenu = () => { diff --git a/packages/connection-storage/package.json b/packages/connection-storage/package.json index fc26258d2f6..dd01b5431e7 100644 --- a/packages/connection-storage/package.json +++ b/packages/connection-storage/package.json @@ -63,7 +63,7 @@ "@mongodb-js/connection-info": "^0.9.3", "bson": "^6.8.0", "compass-preferences-model": "^2.30.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "hadron-app-registry": "^9.2.7", "hadron-ipc": "^3.2.25", "keytar": "^7.9.0", diff --git a/packages/hadron-build/package.json b/packages/hadron-build/package.json index 9ad3d93ecd0..d3cc6ae76ef 100644 --- a/packages/hadron-build/package.json +++ b/packages/hadron-build/package.json @@ -19,7 +19,7 @@ "url": "https://github.com/mongodb-js/compass.git" }, "dependencies": { - "@electron/rebuild": "^3.7.0", + "@electron/rebuild": "^3.7.1", "@mongodb-js/devtools-github-repo": "^1.4.1", "@mongodb-js/dl-center": "^1.0.1", "@mongodb-js/electron-wix-msi": "^3.0.0", @@ -32,7 +32,7 @@ "debug": "^4.3.4", "del": "^2.0.2", "download": "^8.0.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "electron-packager": "^15.5.1", "electron-packager-plugin-non-proprietary-codecs-ffmpeg": "^1.0.2", "flatnest": "^1.0.0", diff --git a/packages/hadron-ipc/package.json b/packages/hadron-ipc/package.json index 4c7f658ded0..9d6b1dc7c05 100644 --- a/packages/hadron-ipc/package.json +++ b/packages/hadron-ipc/package.json @@ -69,7 +69,7 @@ }, "dependencies": { "debug": "^4.3.4", - "electron": "^32.2.3", + "electron": "^32.2.5", "is-electron-renderer": "^2.0.1" } } diff --git a/scripts/package.json b/scripts/package.json index 5e9b0aead89..56555a18583 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -41,7 +41,7 @@ "@babel/core": "^7.24.3", "@mongodb-js/monorepo-tools": "^1.1.1", "commander": "^11.0.0", - "electron": "^32.2.3", + "electron": "^32.2.5", "jsdom": "^24.1.3", "make-fetch-happen": "^10.2.1", "pacote": "^11.3.5", From 206341cf72ac9e81670400fd41235577e67c833d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 16:28:23 +0000 Subject: [PATCH 80/81] chore: update AUTHORS, THIRD-PARTY-NOTICES, Security Test Summary (#6510) Update report Co-authored-by: mabaasit <1305718+mabaasit@users.noreply.github.com> --- THIRD-PARTY-NOTICES.md | 6 +++--- docs/tracking-plan.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/THIRD-PARTY-NOTICES.md b/THIRD-PARTY-NOTICES.md index 9a19c08969a..d806e59ec5c 100644 --- a/THIRD-PARTY-NOTICES.md +++ b/THIRD-PARTY-NOTICES.md @@ -238,7 +238,7 @@ Package|Version|License **[ee-first](#e2746902c758ae8a6f91ffb9618cd53717f936cb33c6323e65b6b7b24f7ebefe)**|1.1.1|MIT **[electron-dl](#e97e034c7b93c63e7a433d75f6f1de3e0668764225ebbd61dbde8d1b55d6f3b7)**|3.5.0|MIT **[electron-squirrel-startup](#09fb8168e8fda2e174f8d1a1c392ffd8f762c5637c788edd00d1e2486d060349)**|1.0.1|Apache-2.0 -**[electron](#45d9d716eba09c27895fc97918c48d7e8fd605bb2c2a291edd07aa512ebee800)**|32.2.3|MIT +**[electron](#95b070aa09c824727d991b85b6b410b671792a0eb89ed3001cda13e3146f266f)**|32.2.5|MIT **[encodeurl](#b89152db475e86531e570f87b45d8a51aa5e5d87d4cc3b960cee7b8febf1d26a)**|1.0.2|MIT **[encodeurl](#177948a319ae0aeebbd65742c53c62b37c75ec1d021afa5a188d10a7ceae6623)**|2.0.0|MIT **[end-of-stream](#fadc10994f5fa767d06fb25cfff35fb17a895daf3bc3477c782907668ed16563)**|1.4.4|MIT @@ -18732,8 +18732,8 @@ License files: - -### [electron](https://www.npmjs.com/package/electron) (version 32.2.3) + +### [electron](https://www.npmjs.com/package/electron) (version 32.2.5) License tags: MIT License files: diff --git a/docs/tracking-plan.md b/docs/tracking-plan.md index 69916e599dc..6eef4380f1d 100644 --- a/docs/tracking-plan.md +++ b/docs/tracking-plan.md @@ -1,7 +1,7 @@ # Compass Tracking Plan -Generated on Mon, Nov 18, 2024 at 08:34 AM +Generated on Mon, Nov 18, 2024 at 04:28 PM ## Table of Contents From b4b58642242334caf9e61e7ff07294c15aa7802b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 21:31:28 +0000 Subject: [PATCH 81/81] v1.44.7-beta.3 --- package-lock.json | 2 +- packages/compass/package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5cf0d29079e..3f77c8f8b12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43128,7 +43128,7 @@ }, "packages/compass": { "name": "mongodb-compass", - "version": "1.44.7-beta.2", + "version": "1.44.7-beta.3", "hasInstallScript": true, "license": "SSPL", "dependencies": { diff --git a/packages/compass/package.json b/packages/compass/package.json index 10955177dac..a371bf1c1d3 100644 --- a/packages/compass/package.json +++ b/packages/compass/package.json @@ -4,7 +4,7 @@ "productName": "MongoDB Compass", "description": "The MongoDB GUI", "homepage": "https://www.mongodb.com/products/compass", - "version": "1.44.7-beta.2", + "version": "1.44.7-beta.3", "apiVersion": "3.0.0", "main": "build/main.js", "author": { @@ -278,5 +278,5 @@ "macos-export-certificate-and-key": "^1.1.2", "win-export-certificate-and-key": "^2.0.1" }, - "releasePublisher": "Maurizio Casimirri " + "releasePublisher": "Basit Chonka " }