From 67b444ac9058c3463a9d1c891098efaa9cf4165b Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 26 Jan 2021 12:14:10 +0100 Subject: [PATCH 1/6] fix(node-runtime-worker-thread): Do not polyfill node built-ins; Externalize optional mongodb deps --- packages/node-runtime-worker-thread/webpack.config.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/node-runtime-worker-thread/webpack.config.js b/packages/node-runtime-worker-thread/webpack.config.js index 9def61266f..22de7506f8 100644 --- a/packages/node-runtime-worker-thread/webpack.config.js +++ b/packages/node-runtime-worker-thread/webpack.config.js @@ -5,8 +5,6 @@ const TerserPlugin = require('terser-webpack-plugin'); const config = { target: 'node', - devtool: false, - output: { path: path.resolve(__dirname, 'dist'), filename: '[name].js', @@ -40,6 +38,14 @@ const config = { } }) ] + }, + + node: false, + + externals: { + 'mongodb-client-encryption': 'commonjs2 mongodb-client-encryption', + kerberos: 'commonjs2 kerberos', + snappy: 'commonjs2 snappy' } }; From c095ff4ec566cd9722dd69e67eb3a036b4e7c8d8 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 26 Jan 2021 14:19:40 +0100 Subject: [PATCH 2/6] fix(node-runtime-worker-thread): Do not inline worker and child process proxy during the build --- .../src/child-process-proxy.ts | 16 +++++++++------ .../node-runtime-worker-thread/src/index.ts | 20 +++++++++++++++---- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/packages/node-runtime-worker-thread/src/child-process-proxy.ts b/packages/node-runtime-worker-thread/src/child-process-proxy.ts index a192c85831..7ef4e4d9fc 100644 --- a/packages/node-runtime-worker-thread/src/child-process-proxy.ts +++ b/packages/node-runtime-worker-thread/src/child-process-proxy.ts @@ -13,16 +13,20 @@ * * @see {@link https://github.com/nodejs/node/pull/36344} */ - import { once } from 'events'; import { SHARE_ENV, Worker } from 'worker_threads'; +import fs from 'fs'; +import path from 'path'; import { exposeAll, createCaller } from './rpc'; -/** - * The source has to be inlined to allow the runtime to be bundled in a single - * file when used by compass shell - */ -import workerRuntimeSrc from 'inline-entry-loader!./worker-runtime'; +// eslint-disable-next-line no-sync +const workerRuntimeSrc = fs.readFileSync( + path.resolve( + process.env.NODE_RUNTIME_WORKER_THREAD_PARENT_DIRNAME || __dirname, + 'worker-runtime.js' + ), + 'utf-8' +); const workerProcess = new Worker(workerRuntimeSrc, { eval: true, diff --git a/packages/node-runtime-worker-thread/src/index.ts b/packages/node-runtime-worker-thread/src/index.ts index 0216f47174..9dd94593ec 100644 --- a/packages/node-runtime-worker-thread/src/index.ts +++ b/packages/node-runtime-worker-thread/src/index.ts @@ -4,11 +4,12 @@ import { ChildProcess, SpawnOptionsWithoutStdio } from 'child_process'; import { MongoClientOptions } from '@mongosh/service-provider-core'; import { Runtime, RuntimeEvaluationListener, RuntimeEvaluationResult } from '@mongosh/browser-runtime-core'; +import { promises as fs } from 'fs'; +import path from 'path'; import spawnChildFromSource, { kill } from './spawn-child-from-source'; import { Caller, createCaller } from './rpc'; import { ChildProcessEvaluationListener } from './child-process-evaluation-listener'; import type { WorkerRuntime as WorkerThreadWorkerRuntime } from './worker-runtime'; -import childProcessProxySrc from 'inline-entry-loader!./child-process-proxy'; import { deserializeEvaluationResult } from './serializer'; type ChildProcessRuntime = Caller; @@ -43,11 +44,22 @@ class WorkerRuntime implements Runtime { private async initWorker() { const { uri, driverOptions, cliOptions, spawnOptions } = this.initOptions; - this.childProcess = await spawnChildFromSource( - childProcessProxySrc, - spawnOptions + const childProcessProxySrc = await fs.readFile( + path.resolve(__dirname, 'child-process-proxy.js'), + 'utf-8' ); + this.childProcess = await spawnChildFromSource(childProcessProxySrc, { + ...spawnOptions, + env: { + // Proxy child process and worker_threads worker are inlined and as such + // they are not aware of the dirname (which child process will need to + // read worker source) + NODE_RUNTIME_WORKER_THREAD_PARENT_DIRNAME: __dirname, + ...spawnOptions.env + } + }); + this.childProcessRuntime = createCaller( ['init', 'evaluate', 'getCompletions', 'setEvaluationListener'], this.childProcess From 675071fd74be7209608532857118164159248483 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 26 Jan 2021 15:58:40 +0100 Subject: [PATCH 3/6] build(compass-shell): Make node-runtime-worker-thread a peer dependency This allows us to avoid inlining source of node-runtime-worker-thread when used in compass, but has a small downside of manually installing runtime in compass main repo --- .../config/webpack.dev.config.js | 20 ++++++ packages/compass-shell/package-lock.json | 63 +++++++++++++++++++ packages/compass-shell/package.json | 4 +- 3 files changed, 86 insertions(+), 1 deletion(-) diff --git a/packages/compass-shell/config/webpack.dev.config.js b/packages/compass-shell/config/webpack.dev.config.js index 32df13db56..7580543e2e 100644 --- a/packages/compass-shell/config/webpack.dev.config.js +++ b/packages/compass-shell/config/webpack.dev.config.js @@ -7,6 +7,7 @@ const { spawn } = require('child_process'); const baseWebpackConfig = require('./webpack.base.config'); const project = require('./project'); +/** @type import('webpack').Configuration */ const config = { mode: 'development', target: 'electron-renderer', @@ -76,6 +77,25 @@ const config = { .on('close', () => process.exit(0)) .on('error', spawnError => console.error(spawnError)); // eslint-disable-line no-console } + }, + resolve: { + // Without this alias, in dev mode symlinked browser-repl breaks the code + // by having two reacts loadeded on the page + alias: { + 'react': require.resolve('react'), + 'react-dom': require.resolve('@hot-loader/react-dom'), + } + }, + externals: { + // Runtime implementation depends on worker file existing near the library + // main import and for that reason it needs to be external (it's done with + // a plugin in production build) + '@mongosh/node-runtime-worker-thread': 'commonjs2 @mongosh/node-runtime-worker-thread', + // Optional mongodb dependencies that are not really needed for local dev + // (for now) + 'mongodb-client-encryption': 'commonjs2 mongodb-client-encryption', + kerberos: 'commonjs2 kerberos', + snappy: 'commonjs2 snappy' } }; diff --git a/packages/compass-shell/package-lock.json b/packages/compass-shell/package-lock.json index 96e433a3f8..bfa76ae7ae 100644 --- a/packages/compass-shell/package-lock.json +++ b/packages/compass-shell/package-lock.json @@ -5196,6 +5196,25 @@ "node-releases": "^1.1.61" } }, + "bson": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.2.2.tgz", + "integrity": "sha512-9fX257PVHAUpiRGmY3356RVWKQxLA73BgjA/x5MGuJkTEMeG7yzjuBrsiFB67EXRJnFVKrbJY9t/M+oElKYktQ==", + "dev": true, + "requires": { + "buffer": "^5.6.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", @@ -6912,6 +6931,12 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, + "denque": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==", + "dev": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -12727,6 +12752,13 @@ } } }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "dev": true, + "optional": true + }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -13426,6 +13458,17 @@ "node-source-walk": "^4.0.0" } }, + "mongodb": { + "version": "4.0.0-beta.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.0.0-beta.0.tgz", + "integrity": "sha512-K3Lmk99KY8ZgAzDZUE4duGk3xuV8NJU46cExBzm0lJdr+eDJaZTG9W9ngbGb/xr/8h/3yH0ASb7cWxZdlT3DBw==", + "dev": true, + "requires": { + "bson": "^4.2.2", + "denque": "^1.4.1", + "saslprep": "^1.0.0" + } + }, "mongodb-js-fmt": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mongodb-js-fmt/-/mongodb-js-fmt-1.0.0.tgz", @@ -19561,6 +19604,16 @@ "truncate-utf8-bytes": "^1.0.0" } }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "dev": true, + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -20276,6 +20329,16 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "dev": true, + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "spawn-rx": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-3.0.0.tgz", diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index 86e6568284..827efef3b8 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -56,12 +56,12 @@ "@leafygreen-ui/icon-button": "^5.0.2", "@mongosh/browser-repl": "0.0.0-dev.0", "@mongosh/browser-runtime-electron": "0.0.0-dev.0", - "@mongosh/node-runtime-worker-thread": "0.0.0-dev.0", "@mongosh/service-provider-server": "0.0.0-dev.0", "hadron-react-buttons": "^4.0.4", "mongodb-redux-common": "0.0.2" }, "peerDependencies": { + "@mongosh/node-runtime-worker-thread": "0.0.0-dev.0", "hadron-ipc": "^1.1.0", "hadron-react-components": "^3.2.1", "prop-types": "^15.7.2", @@ -83,6 +83,7 @@ "@babel/register": "^7.0.0", "@hot-loader/react-dom": "^16.8.2", "@storybook/react": "^3.2.0", + "@mongosh/node-runtime-worker-thread": "0.0.0-dev.0", "autoprefixer": "^9.4.6", "babel-loader": "8.0.6", "babel-minify": "^0.3.0", @@ -122,6 +123,7 @@ "less-loader": "^4.0.5", "mini-css-extract-plugin": "^0.8.0", "mocha-webpack": "^2.0.0-beta.0", + "mongodb": "4.0.0-beta.0", "mongodb-js-fmt": "^1.0.0", "mongodb-js-precommit": "^2.0.0", "mongodb-reflux-store": "0.0.1", From df03d869b48e9392df104cb9112178b87d524f9b Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 26 Jan 2021 16:00:33 +0100 Subject: [PATCH 4/6] chore(node-runtime-worker-thread): Remove unused loader --- .../loaders/inline-entry-loader.js | 119 ------------------ .../webpack.config.js | 4 - 2 files changed, 123 deletions(-) delete mode 100644 packages/node-runtime-worker-thread/loaders/inline-entry-loader.js diff --git a/packages/node-runtime-worker-thread/loaders/inline-entry-loader.js b/packages/node-runtime-worker-thread/loaders/inline-entry-loader.js deleted file mode 100644 index 4d0bb91adf..0000000000 --- a/packages/node-runtime-worker-thread/loaders/inline-entry-loader.js +++ /dev/null @@ -1,119 +0,0 @@ -const path = require('path'); -const { getOptions } = require('loader-utils'); -const NodeTargetPlugin = require('webpack/lib/node/NodeTargetPlugin'); -const SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin'); - -function inlineEntryLoader() { - /** - * Main loader lifecycle does nothing, everything happens in `pitch` step - * @see {@link https://webpack.js.org/api/loaders/#pitching-loader} - */ -} - -/** - * Pitch step will split an import into its own entry, compile it into a single - * bundle and returns the stringified source - * - * @param {string} request - */ -inlineEntryLoader.pitch = function pitch(request) { - const loaderName = `inline-entry-loader ${request}`; - - /** @type {import('webpack').loader.LoaderContext} */ - const that = this; - /** @type {import('webpack').compilation.Compilation} */ - const parentCompilation = that._compilation; - - that.cacheable(false); - - const { esModule = true, emit = false, ...outputOptions } = getOptions(that); - - const cb = that.async(); - - const inlineEntryOutputOptions = { - ...outputOptions, - filename: '[contenthash].inline-entry-loader.js' - }; - - /** - * @type {import('webpack').Compiler} - * @see {@link https://webpack.js.org/api/compilation-object/#createchildcompiler} - */ - const inlineEntryCompiler = parentCompilation.createChildCompiler( - loaderName, - inlineEntryOutputOptions - ); - - inlineEntryCompiler.options.optimization = { - ...inlineEntryCompiler.options.optimization, - ...parentCompilation.compiler.options.optimization - }; - - if ( - inlineEntryCompiler.options && - inlineEntryCompiler.options.optimization && - inlineEntryCompiler.options.optimization.splitChunks - ) { - inlineEntryCompiler.options.optimization.splitChunks = false; - } - - if (this.target !== 'webworker' && this.target !== 'web') { - new NodeTargetPlugin().apply(inlineEntryCompiler); - } - - const resourceName = path.parse(that.resourcePath).name; - - new SingleEntryPlugin(that.context, `!!${request}`, resourceName).apply( - inlineEntryCompiler - ); - - let outputFilename; - - parentCompilation.compiler.hooks.emit.tapAsync( - loaderName, - (compilation, callback) => { - if (!emit) { - delete compilation.assets[outputFilename]; - } - callback(); - } - ); - - /** - * - * @param {Error} err - * @param {import('webpack').compilation.Chunk} entries - * @param {import('webpack').compilation.Compilation} compilation - */ - const handleChildCompilation = (err, entries, compilation) => { - if (err) { - return cb(err); - } - - /** @type {import('webpack').compilation.Chunk} */ - const chunk = entries[0]; - - if (chunk) { - outputFilename = chunk.files[0]; - - /** @type {import('webpack-sources').RawSource} */ - const src = compilation.assets[outputFilename]; - const contents = JSON.stringify(src.source()); - - return cb( - null, - `${esModule ? 'export default' : 'module.exports ='} ${contents}` - ); - } - - return cb( - new Error( - 'Something went wrong when trying to inline chunk: no entries returned by child compilation' - ) - ); - }; - - inlineEntryCompiler.runAsChild(handleChildCompilation); -}; - -module.exports = inlineEntryLoader; diff --git a/packages/node-runtime-worker-thread/webpack.config.js b/packages/node-runtime-worker-thread/webpack.config.js index 22de7506f8..6bd0e38da0 100644 --- a/packages/node-runtime-worker-thread/webpack.config.js +++ b/packages/node-runtime-worker-thread/webpack.config.js @@ -25,10 +25,6 @@ const config = { extensions: ['.ts', '.js'] }, - resolveLoader: { - modules: ['node_modules', path.resolve(__dirname, 'loaders')] - }, - optimization: { minimizer: [ new TerserPlugin({ From ba2eef31a281dbee2779a827eee0a81dc016adbb Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Thu, 28 Jan 2021 14:20:19 +0100 Subject: [PATCH 5/6] chore(compas-shell): Clean-up unused leftovers in deps --- .../config/webpack.dev.config.js | 4 +- packages/compass-shell/package-lock.json | 63 ------------------- packages/compass-shell/package.json | 1 - 3 files changed, 2 insertions(+), 66 deletions(-) diff --git a/packages/compass-shell/config/webpack.dev.config.js b/packages/compass-shell/config/webpack.dev.config.js index 7580543e2e..0b3d2a307a 100644 --- a/packages/compass-shell/config/webpack.dev.config.js +++ b/packages/compass-shell/config/webpack.dev.config.js @@ -91,8 +91,8 @@ const config = { // main import and for that reason it needs to be external (it's done with // a plugin in production build) '@mongosh/node-runtime-worker-thread': 'commonjs2 @mongosh/node-runtime-worker-thread', - // Optional mongodb dependencies that are not really needed for local dev - // (for now) + // "Optional" mongodb dependencies that should stay out of the build at + // least in dev mode 'mongodb-client-encryption': 'commonjs2 mongodb-client-encryption', kerberos: 'commonjs2 kerberos', snappy: 'commonjs2 snappy' diff --git a/packages/compass-shell/package-lock.json b/packages/compass-shell/package-lock.json index bfa76ae7ae..96e433a3f8 100644 --- a/packages/compass-shell/package-lock.json +++ b/packages/compass-shell/package-lock.json @@ -5196,25 +5196,6 @@ "node-releases": "^1.1.61" } }, - "bson": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.2.2.tgz", - "integrity": "sha512-9fX257PVHAUpiRGmY3356RVWKQxLA73BgjA/x5MGuJkTEMeG7yzjuBrsiFB67EXRJnFVKrbJY9t/M+oElKYktQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", @@ -6931,12 +6912,6 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, - "denque": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", - "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==", - "dev": true - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -12752,13 +12727,6 @@ } } }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "dev": true, - "optional": true - }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -13458,17 +13426,6 @@ "node-source-walk": "^4.0.0" } }, - "mongodb": { - "version": "4.0.0-beta.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.0.0-beta.0.tgz", - "integrity": "sha512-K3Lmk99KY8ZgAzDZUE4duGk3xuV8NJU46cExBzm0lJdr+eDJaZTG9W9ngbGb/xr/8h/3yH0ASb7cWxZdlT3DBw==", - "dev": true, - "requires": { - "bson": "^4.2.2", - "denque": "^1.4.1", - "saslprep": "^1.0.0" - } - }, "mongodb-js-fmt": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mongodb-js-fmt/-/mongodb-js-fmt-1.0.0.tgz", @@ -19604,16 +19561,6 @@ "truncate-utf8-bytes": "^1.0.0" } }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "dev": true, - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -20329,16 +20276,6 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "dev": true, - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, "spawn-rx": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-3.0.0.tgz", diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index 827efef3b8..e489cfa5dc 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -123,7 +123,6 @@ "less-loader": "^4.0.5", "mini-css-extract-plugin": "^0.8.0", "mocha-webpack": "^2.0.0-beta.0", - "mongodb": "4.0.0-beta.0", "mongodb-js-fmt": "^1.0.0", "mongodb-js-precommit": "^2.0.0", "mongodb-reflux-store": "0.0.1", From 28fe231fc52a5fe0589eec7d049f0c99eb584766 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Mon, 1 Feb 2021 10:34:48 +0100 Subject: [PATCH 6/6] build(compass-shell): Move node-runtime back to direct dependencies and explicitly exclude it for all builds --- packages/compass-shell/config/webpack.base.config.js | 6 ++++++ packages/compass-shell/config/webpack.dev.config.js | 8 ++------ packages/compass-shell/package.json | 3 +-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/compass-shell/config/webpack.base.config.js b/packages/compass-shell/config/webpack.base.config.js index e634f53b04..fb6484f8c5 100644 --- a/packages/compass-shell/config/webpack.base.config.js +++ b/packages/compass-shell/config/webpack.base.config.js @@ -128,5 +128,11 @@ module.exports = { exclude: /(node_modules)/ } ] + }, + externals: { + // Runtime implementation depends on worker file existing near the library + // main import and for that reason it needs to stay external to the + // compass-shell + '@mongosh/node-runtime-worker-thread': 'commonjs2 @mongosh/node-runtime-worker-thread', } }; diff --git a/packages/compass-shell/config/webpack.dev.config.js b/packages/compass-shell/config/webpack.dev.config.js index 0b3d2a307a..7051ce93bc 100644 --- a/packages/compass-shell/config/webpack.dev.config.js +++ b/packages/compass-shell/config/webpack.dev.config.js @@ -87,12 +87,8 @@ const config = { } }, externals: { - // Runtime implementation depends on worker file existing near the library - // main import and for that reason it needs to be external (it's done with - // a plugin in production build) - '@mongosh/node-runtime-worker-thread': 'commonjs2 @mongosh/node-runtime-worker-thread', - // "Optional" mongodb dependencies that should stay out of the build at - // least in dev mode + // "Optional" mongodb dependencies that should stay out of the build in dev + // mode 'mongodb-client-encryption': 'commonjs2 mongodb-client-encryption', kerberos: 'commonjs2 kerberos', snappy: 'commonjs2 snappy' diff --git a/packages/compass-shell/package.json b/packages/compass-shell/package.json index e489cfa5dc..86e6568284 100644 --- a/packages/compass-shell/package.json +++ b/packages/compass-shell/package.json @@ -56,12 +56,12 @@ "@leafygreen-ui/icon-button": "^5.0.2", "@mongosh/browser-repl": "0.0.0-dev.0", "@mongosh/browser-runtime-electron": "0.0.0-dev.0", + "@mongosh/node-runtime-worker-thread": "0.0.0-dev.0", "@mongosh/service-provider-server": "0.0.0-dev.0", "hadron-react-buttons": "^4.0.4", "mongodb-redux-common": "0.0.2" }, "peerDependencies": { - "@mongosh/node-runtime-worker-thread": "0.0.0-dev.0", "hadron-ipc": "^1.1.0", "hadron-react-components": "^3.2.1", "prop-types": "^15.7.2", @@ -83,7 +83,6 @@ "@babel/register": "^7.0.0", "@hot-loader/react-dom": "^16.8.2", "@storybook/react": "^3.2.0", - "@mongosh/node-runtime-worker-thread": "0.0.0-dev.0", "autoprefixer": "^9.4.6", "babel-loader": "8.0.6", "babel-minify": "^0.3.0",