diff --git a/app/src/electron.js b/app/src/electron.js index 400e556f7..c9563cc6a 100644 --- a/app/src/electron.js +++ b/app/src/electron.js @@ -225,6 +225,7 @@ function createWindow() { ); global.API_PACKAGE = apiPackage; + global.NATIVE_MODULES = path.join(__dirname, 'nativeModules'); // console.log('global.API_PACKAGE', global.API_PACKAGE); const api = require(apiPackage); diff --git a/packages/api/src/controllers/connections.js b/packages/api/src/controllers/connections.js index 6e308bd7a..33456297c 100644 --- a/packages/api/src/controllers/connections.js +++ b/packages/api/src/controllers/connections.js @@ -9,6 +9,8 @@ const socket = require('../utility/socket'); const { encryptConnection } = require('../utility/crypting'); const { handleProcessCommunication } = require('../utility/processComm'); +const processArgs = require('../utility/processArgs'); + function getNamedArgs() { const res = {}; for (let i = 0; i < process.argv.length; i++) { @@ -140,7 +142,8 @@ module.exports = { '--is-forked-api', '--start-process', 'connectProcess', - ...process.argv.slice(3), + ...processArgs.getPassArgs(), + // ...process.argv.slice(3), ]); subprocess.on('message', resp => { if (handleProcessCommunication(resp, subprocess)) return; diff --git a/packages/api/src/controllers/databaseConnections.js b/packages/api/src/controllers/databaseConnections.js index bc9c486a7..9fb8b8ece 100644 --- a/packages/api/src/controllers/databaseConnections.js +++ b/packages/api/src/controllers/databaseConnections.js @@ -25,6 +25,7 @@ const requireEngineDriver = require('../utility/requireEngineDriver'); const generateDeploySql = require('../shell/generateDeploySql'); const { createTwoFilesPatch } = require('diff'); const diff2htmlPage = require('../utility/diff2htmlPage'); +const processArgs = require('../utility/processArgs'); module.exports = { /** @type {import('dbgate-types').OpenedDatabaseConnection[]} */ @@ -78,7 +79,8 @@ module.exports = { '--is-forked-api', '--start-process', 'databaseConnectionProcess', - ...process.argv.slice(3), + ...processArgs.getPassArgs(), + // ...process.argv.slice(3), ]); const lastClosed = this.closed[`${conid}/${database}`]; const newOpened = { diff --git a/packages/api/src/controllers/runners.js b/packages/api/src/controllers/runners.js index f1de4247d..a14bf9f39 100644 --- a/packages/api/src/controllers/runners.js +++ b/packages/api/src/controllers/runners.js @@ -8,6 +8,7 @@ const { fork } = require('child_process'); const { rundir, uploadsdir, pluginsdir, getPluginBackendPath, packagedPluginList } = require('../utility/directories'); const { extractShellApiPlugins, extractShellApiFunctionName } = require('dbgate-tools'); const { handleProcessCommunication } = require('../utility/processComm'); +const processArgs = require('../utility/processArgs'); function extractPlugins(script) { const requireRegex = /\s*\/\/\s*@require\s+([^\s]+)\s*\n/g; @@ -98,15 +99,22 @@ module.exports = { const pluginNames = _.union(fs.readdirSync(pluginsdir()), packagedPluginList); console.log(`RUNNING SCRIPT ${scriptFile}`); // const subprocess = fork(scriptFile, ['--checkParent', '--max-old-space-size=8192'], { - const subprocess = fork(scriptFile, ['--checkParent', ...process.argv.slice(3)], { - cwd: directory, - stdio: ['ignore', 'pipe', 'pipe', 'ipc'], - env: { - ...process.env, - DBGATE_API: global['API_PACKAGE'] || global['dbgateApiModulePath'] || process.argv[1], - ..._.fromPairs(pluginNames.map(name => [`PLUGIN_${_.camelCase(name)}`, getPluginBackendPath(name)])), - }, - }); + const subprocess = fork( + scriptFile, + [ + '--checkParent', // ...process.argv.slice(3) + ...processArgs.getPassArgs(), + ], + { + cwd: directory, + stdio: ['ignore', 'pipe', 'pipe', 'ipc'], + env: { + ...process.env, + DBGATE_API: global['API_PACKAGE'] || global['dbgateApiModulePath'] || process.argv[1], + ..._.fromPairs(pluginNames.map(name => [`PLUGIN_${_.camelCase(name)}`, getPluginBackendPath(name)])), + }, + } + ); const pipeDispatcher = severity => data => this.dispatchMessage(runid, { severity, message: data.toString().trim() }); diff --git a/packages/api/src/controllers/serverConnections.js b/packages/api/src/controllers/serverConnections.js index 65a2f4f3c..47f7de291 100644 --- a/packages/api/src/controllers/serverConnections.js +++ b/packages/api/src/controllers/serverConnections.js @@ -6,6 +6,7 @@ const AsyncLock = require('async-lock'); const { handleProcessCommunication } = require('../utility/processComm'); const lock = new AsyncLock(); const config = require('./config'); +const processArgs = require('../utility/processArgs'); module.exports = { opened: [], @@ -41,7 +42,8 @@ module.exports = { '--is-forked-api', '--start-process', 'serverConnectionProcess', - ...process.argv.slice(3), + ...processArgs.getPassArgs(), + // ...process.argv.slice(3), ]); const newOpened = { conid, diff --git a/packages/api/src/controllers/sessions.js b/packages/api/src/controllers/sessions.js index a866abcba..b651c37c9 100644 --- a/packages/api/src/controllers/sessions.js +++ b/packages/api/src/controllers/sessions.js @@ -5,6 +5,7 @@ const socket = require('../utility/socket'); const { fork } = require('child_process'); const jsldata = require('./jsldata'); const { handleProcessCommunication } = require('../utility/processComm'); +const processArgs = require('../utility/processArgs'); module.exports = { /** @type {import('dbgate-types').OpenedSession[]} */ @@ -69,7 +70,8 @@ module.exports = { '--is-forked-api', '--start-process', 'sessionProcess', - ...process.argv.slice(3), + ...processArgs.getPassArgs(), + // ...process.argv.slice(3), ]); const newOpened = { conid, diff --git a/packages/api/src/nativeModules.js b/packages/api/src/nativeModules.js index 649079303..02d2ddeec 100644 --- a/packages/api/src/nativeModules.js +++ b/packages/api/src/nativeModules.js @@ -1,5 +1,13 @@ const argIndex = process.argv.indexOf('--native-modules'); const redirectFile = argIndex > 0 ? process.argv[argIndex + 1] : null; -// @ts-ignore -module.exports = redirectFile ? __non_webpack_require__(redirectFile) : require('./nativeModulesContent'); +function requireDynamic(file) { + try { + // @ts-ignore + return __non_webpack_require__(redirectFile); + } catch (err) { + return require(redirectFile); + } +} + +module.exports = redirectFile ? requireDynamic(redirectFile) : require('./nativeModulesContent'); diff --git a/packages/api/src/utility/DatastoreProxy.js b/packages/api/src/utility/DatastoreProxy.js index 0967c829e..0da243170 100644 --- a/packages/api/src/utility/DatastoreProxy.js +++ b/packages/api/src/utility/DatastoreProxy.js @@ -1,6 +1,7 @@ const { fork } = require('child_process'); const uuidv1 = require('uuid/v1'); const { handleProcessCommunication } = require('./processComm'); +const processArgs = require('../utility/processArgs'); class DatastoreProxy { constructor(file) { @@ -33,7 +34,8 @@ class DatastoreProxy { '--is-forked-api', '--start-process', 'jslDatastoreProcess', - ...process.argv.slice(3), + ...processArgs.getPassArgs(), + // ...process.argv.slice(3), ]); this.subprocess.on('message', message => { diff --git a/packages/api/src/utility/processArgs.js b/packages/api/src/utility/processArgs.js index 3b1bfd92d..a98992f90 100644 --- a/packages/api/src/utility/processArgs.js +++ b/packages/api/src/utility/processArgs.js @@ -7,13 +7,17 @@ function getNamedArg(name) { } const checkParent = process.argv.includes('--checkParent'); -const nativeModules = getNamedArg('--native-modules'); const startProcess = getNamedArg('--start-process'); const isForkedApi = process.argv.includes('--is-forked-api'); +function getPassArgs() { + if (global['NATIVE_MODULES']) return ['--native-modules', global['NATIVE_MODULES']]; + return []; +} + module.exports = { checkParent, - nativeModules, startProcess, isForkedApi, + getPassArgs, };