diff --git a/.evergreen.yml b/.evergreen.yml index 159d59360d..ef0f7b0771 100644 --- a/.evergreen.yml +++ b/.evergreen.yml @@ -163,6 +163,7 @@ functions: DISTRO_ID: ${distro_id} MONOGDB_DRIVER_VERSION_OVERRIDE: ${mongodb_driver_version_override} PUPPETEER_SKIP_DOWNLOAD: ${puppeteer_skip_download|true} + MONGOSH_INSTALL_WORKSPACE: ${mongosh_install_workspace|} script: | set -e set -x @@ -6206,6 +6207,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/arg-parser" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6225,6 +6227,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/async-rewriter2" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6244,6 +6247,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/autocomplete" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6263,6 +6267,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "false" + mongosh_install_workspace: "@mongosh/browser-repl" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6282,6 +6287,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/browser-runtime-core" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6301,6 +6307,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/browser-runtime-electron" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6320,6 +6327,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/build" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6339,6 +6347,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/cli-repl" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6358,6 +6367,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/connectivity-tests" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6377,6 +6387,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/e2e-tests" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6396,6 +6407,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/editor" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6415,6 +6427,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/errors" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6434,6 +6447,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/history" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6453,6 +6467,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/i18n" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6472,6 +6487,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/java-shell" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6491,6 +6507,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/js-multiline-to-singleline" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6510,6 +6527,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/logging" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6529,6 +6547,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/mongosh" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6548,6 +6567,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/node-runtime-worker-thread" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6567,6 +6587,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/service-provider-core" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6586,6 +6607,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/service-provider-node-driver" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6605,6 +6627,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/shell-api" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6624,6 +6647,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/shell-bson" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6643,6 +6667,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/shell-evaluator" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6662,6 +6687,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/snippet-manager" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6681,6 +6707,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/testing" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} @@ -6700,6 +6727,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "true" + mongosh_install_workspace: "@mongosh/types" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} diff --git a/.evergreen/evergreen.yml.in b/.evergreen/evergreen.yml.in index 37aa6caa74..134ef65111 100644 --- a/.evergreen/evergreen.yml.in +++ b/.evergreen/evergreen.yml.in @@ -172,6 +172,7 @@ functions: DISTRO_ID: ${distro_id} MONOGDB_DRIVER_VERSION_OVERRIDE: ${mongodb_driver_version_override} PUPPETEER_SKIP_DOWNLOAD: ${puppeteer_skip_download|true} + MONGOSH_INSTALL_WORKSPACE: ${mongosh_install_workspace|} script: | set -e set -x @@ -1167,6 +1168,7 @@ tasks: vars: node_js_version: ${node_js_version} puppeteer_skip_download: "<% out(usePuppeteer ? "false" : "true") %>" + mongosh_install_workspace: "@mongosh/<% out(packageName) %>" - func: test vars: mongosh_server_test_version: ${mongosh_server_test_version} diff --git a/.evergreen/install-npm-deps.sh b/.evergreen/install-npm-deps.sh index 1752a52b4f..928edc84b7 100755 --- a/.evergreen/install-npm-deps.sh +++ b/.evergreen/install-npm-deps.sh @@ -5,7 +5,13 @@ export BASEDIR="$PWD/.evergreen" . "$BASEDIR/setup-env.sh" -npm ci --verbose +# If MONGOSH_INSTALL_WORKSPACE is set, install only that workspace +if [[ -n "$MONGOSH_INSTALL_WORKSPACE" ]]; then + echo "Installing workspace: $MONGOSH_INSTALL_WORKSPACE" + npm ci -w "$MONGOSH_INSTALL_WORKSPACE" --include-workspace-root --verbose +else + npm ci --verbose +fi echo "MONOGDB_DRIVER_VERSION_OVERRIDE:$MONOGDB_DRIVER_VERSION_OVERRIDE" # if MONOGDB_DRIVER_VERSION_OVERRIDE is set, then we want to replace the package version @@ -28,7 +34,17 @@ npm run mark-ci-required-optional-dependencies # mongodb-client-encryption failed to install (it can't install on some # platforms), then install again ignoring scripts so that the package installs # along with its types, but npm wouldn't try and compile the addon -(npm ci && test -e node_modules/mongodb-client-encryption) || npm ci --ignore-scripts +if [[ -n "$MONGOSH_INSTALL_WORKSPACE" ]]; then + # Check if the workspace or root actually depends on mongodb-client-encryption + if npm ls --workspace "$MONGOSH_INSTALL_WORKSPACE" --depth=1 mongodb-client-encryption > /dev/null 2>&1; then + echo "Workspace or root depends on mongodb-client-encryption, retrying install with optional deps..." + (npm ci -w "$MONGOSH_INSTALL_WORKSPACE" --include-workspace-root && test -e node_modules/mongodb-client-encryption) || npm ci -w "$MONGOSH_INSTALL_WORKSPACE" --include-workspace-root --ignore-scripts + else + echo "Workspace does not depend on mongodb-client-encryption, skipping optional deps reinstall" + fi +else + (npm ci && test -e node_modules/mongodb-client-encryption) || npm ci --ignore-scripts +fi echo "npm packages after installation" npm ls || true diff --git a/package-lock.json b/package-lock.json index 14ad2515e5..d57e2d55b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12719,9 +12719,9 @@ "license": "MIT" }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "license": "MIT", "dependencies": { @@ -37136,7 +37136,7 @@ "@mongodb-js/eslint-config-mongosh": "^1.0.0", "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", - "@types/babel__core": "^7.20.1", + "@types/babel__core": "^7.20.5", "eslint": "^7.25.0", "prettier": "^2.8.8" }, @@ -38639,7 +38639,7 @@ "@mongodb-js/eslint-config-mongosh": "^1.0.0", "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", - "@types/babel__core": "^7.1.18", + "@types/babel__core": "^7.20.5", "eslint": "^7.25.0", "prettier": "^2.8.8" }, @@ -38715,6 +38715,11 @@ }, "engines": { "node": ">=14.15.1" + }, + "optionalDependencies": { + "glibc-version": "^1.0.0", + "macos-export-certificate-and-key": "^1.2.4", + "win-export-certificate-and-key": "^2.1.0" } }, "packages/service-provider-core": { @@ -38796,6 +38801,7 @@ "@mongodb-js/tsconfig-mongosh": "^1.0.0", "@mongosh/testing": "0.0.0-dev.0", "@mongosh/types": "^3.14.1", + "@types/babel__core": "^7.20.5", "bson": "^6.10.4", "eslint": "^7.25.0", "mongodb": "^6.19.0", diff --git a/packages/async-rewriter2/package.json b/packages/async-rewriter2/package.json index 7c99bc8c5c..e766810ac4 100644 --- a/packages/async-rewriter2/package.json +++ b/packages/async-rewriter2/package.json @@ -49,7 +49,7 @@ "@mongodb-js/eslint-config-mongosh": "^1.0.0", "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", - "@types/babel__core": "^7.20.1", + "@types/babel__core": "^7.20.5", "eslint": "^7.25.0", "prettier": "^2.8.8" } diff --git a/packages/i18n/package.json b/packages/i18n/package.json index b5c3fc68c1..d32a98ca3f 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -4,6 +4,16 @@ "description": "MongoDB Shell i18n Project", "main": "lib/index.js", "types": "lib/index.d.ts", + "exports": { + ".": { + "default": "./lib/index.js", + "types": "./lib/index.d.ts" + }, + "./locales": { + "default": "./src/locales/index.ts", + "types": "./src/locales/index.d.ts" + } + }, "repository": { "type": "git", "url": "git://github.com/mongodb-js/mongosh.git" diff --git a/packages/i18n/src/catalog.ts b/packages/i18n/src/catalog.ts index 657d87cc4c..170539b9c7 100644 --- a/packages/i18n/src/catalog.ts +++ b/packages/i18n/src/catalog.ts @@ -15,10 +15,10 @@ type NestedRecord = [key: string]: NestedRecord; }; -export default interface Catalog { +export type Catalog = { [packageName: string]: | { classes: Record; } | NestedRecord; -} +}; diff --git a/packages/i18n/src/locales/de_DE.ts b/packages/i18n/src/locales/de_DE.ts index b78792bb54..2e288d1813 100644 --- a/packages/i18n/src/locales/de_DE.ts +++ b/packages/i18n/src/locales/de_DE.ts @@ -1,4 +1,5 @@ -import type Catalog from '../catalog'; +// eslint-disable-next-line filename-rules/match +import type { Catalog } from '../catalog'; import enUs from './en_US'; /** diff --git a/packages/i18n/src/locales/en_US.ts b/packages/i18n/src/locales/en_US.ts index 50100f189a..5a1a932dc9 100644 --- a/packages/i18n/src/locales/en_US.ts +++ b/packages/i18n/src/locales/en_US.ts @@ -1,5 +1,5 @@ /* eslint-disable filename-rules/match */ -import type Catalog from '../catalog'; +import type { Catalog } from '../catalog'; /** * US english translations. diff --git a/packages/i18n/src/locales/index.ts b/packages/i18n/src/locales/index.ts new file mode 100644 index 0000000000..88dfca6204 --- /dev/null +++ b/packages/i18n/src/locales/index.ts @@ -0,0 +1,5 @@ +import en_US from './en_US'; +import de_DE from './de_DE'; + +export { type Catalog } from '../catalog'; +export { en_US, de_DE }; diff --git a/packages/i18n/src/translator.ts b/packages/i18n/src/translator.ts index 1f61cd6051..f44865dadf 100644 --- a/packages/i18n/src/translator.ts +++ b/packages/i18n/src/translator.ts @@ -1,5 +1,5 @@ import { MongoshInternalError } from '@mongosh/errors'; -import type Catalog from './catalog'; +import type { Catalog } from './catalog'; import de_DE from './locales/de_DE'; import en_US from './locales/en_US'; diff --git a/packages/js-multiline-to-singleline/package.json b/packages/js-multiline-to-singleline/package.json index a184318063..287fb86c0d 100644 --- a/packages/js-multiline-to-singleline/package.json +++ b/packages/js-multiline-to-singleline/package.json @@ -41,7 +41,7 @@ "@mongodb-js/eslint-config-mongosh": "^1.0.0", "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", - "@types/babel__core": "^7.1.18", + "@types/babel__core": "^7.20.5", "eslint": "^7.25.0", "prettier": "^2.8.8" } diff --git a/packages/node-runtime-worker-thread/package.json b/packages/node-runtime-worker-thread/package.json index 1385da8d26..c16b5b1b4d 100644 --- a/packages/node-runtime-worker-thread/package.json +++ b/packages/node-runtime-worker-thread/package.json @@ -56,5 +56,23 @@ "dependencies": { "interruptor": "^1.0.1", "system-ca": "^2.0.1" + }, + "optionalDependencies": { + "glibc-version": "^1.0.0", + "macos-export-certificate-and-key": "^1.2.4", + "win-export-certificate-and-key": "^2.1.0" + }, + "mongosh": { + "ciRequiredOptionalDependencies": { + "macos-export-certificate-and-key": [ + "darwin" + ], + "win-export-certificate-and-key": [ + "win32" + ], + "glibc-version": [ + "linux" + ] + } } } diff --git a/packages/shell-api/package.json b/packages/shell-api/package.json index a0e3025eba..12c40fc664 100644 --- a/packages/shell-api/package.json +++ b/packages/shell-api/package.json @@ -72,6 +72,7 @@ "prettier": "^2.8.8", "semver": "^7.5.3", "@babel/core": "^7.26.10", - "@babel/types": "^7.26.10" + "@babel/types": "^7.26.10", + "@types/babel__core": "^7.20.5" } } diff --git a/packages/shell-api/src/deep-inspect/custom-inspect.ts b/packages/shell-api/src/deep-inspect/custom-inspect.ts index 4282e946d0..467809db5c 100644 --- a/packages/shell-api/src/deep-inspect/custom-inspect.ts +++ b/packages/shell-api/src/deep-inspect/custom-inspect.ts @@ -1,4 +1,5 @@ import type { InspectOptions, inspect as _inspect } from 'util'; +import type { Document } from '@mongosh/service-provider-core'; const customInspectSymbol = Symbol.for('nodejs.util.inspect.custom'); diff --git a/packages/i18n/src/missing-help.spec.ts b/packages/shell-api/src/missing-help.spec.ts similarity index 66% rename from packages/i18n/src/missing-help.spec.ts rename to packages/shell-api/src/missing-help.spec.ts index 7606a18727..d525f56b35 100644 --- a/packages/i18n/src/missing-help.spec.ts +++ b/packages/shell-api/src/missing-help.spec.ts @@ -1,6 +1,5 @@ -import fs from 'fs'; -import path from 'path'; -import { signatures } from '../../shell-api/src/index'; +import { signatures } from './index'; +import { en_US, type Catalog } from '@mongosh/i18n/locales'; const IGNORED_TYPES = [ 'unknown', @@ -19,29 +18,18 @@ const IGNORED_ATTRIBUTES = [ 'ChangeStreamCursor.pretty', ]; -const localesDir = path.resolve(__dirname, 'locales'); - -const localeFiles = fs - .readdirSync(localesDir) - .filter((filename) => { - return /^[a-z]{2,3}_[A-Z]{2,3}\.ts$/.exec(filename); - }) - .filter((filename) => { - // skip german for now - return filename.includes('en'); - }); - const typeNames = Object.keys(signatures).filter( (typeName) => !IGNORED_TYPES.includes(typeName) ); -localeFiles.forEach((localeFile) => { - const locale = require(path.join(localesDir, localeFile)).default; - const localeName = localeFile.replace('.ts', ''); - - describe(`${localeName}`, function () { - typeNames.forEach((typeName) => { - const typeHelp = locale['shell-api'].classes[typeName]; +for (const [localeName, locale] of [ + ['en_US', en_US], + // Skip German for now + // ['de_DE', de_DE], +] as [string, Catalog][]) { + describe(`i18n with ${localeName} locale`, function () { + for (const typeName of typeNames) { + const typeHelp = (locale['shell-api'] as any).classes[typeName]; it(`has translations for ${typeName} type`, function () { if (!typeHelp) { @@ -60,7 +48,7 @@ localeFiles.forEach((localeFile) => { !IGNORED_ATTRIBUTES.includes(`${typeName}.${attributeName}`) ); - attributeNames.forEach((attributeName) => { + for (const attributeName of attributeNames) { it(`has translations for ${typeName}.${attributeName} attribute`, function () { const attributeHelp = typeHelp.help.attributes && typeHelp.help.attributes[attributeName]; @@ -74,7 +62,7 @@ localeFiles.forEach((localeFile) => { ); } }); - }); - }); + } + } }); -}); +} diff --git a/packages/shell-api/src/shell-instance-state.ts b/packages/shell-api/src/shell-instance-state.ts index 4aae05f865..d20dbfb8e2 100644 --- a/packages/shell-api/src/shell-instance-state.ts +++ b/packages/shell-api/src/shell-instance-state.ts @@ -3,6 +3,7 @@ import type { AutoEncryptionOptions, ConnectionExtraInfo, ConnectionInfo, + Document, ServerApi, ServiceProvider, ServiceProviderBaseCursor,