mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-02 03:13:58 +00:00
#63 - clean solution - added ...process.env to fork(env)
This commit is contained in:
@@ -8,7 +8,6 @@ const { fork } = require('child_process');
|
|||||||
const { rundir, uploadsdir, pluginsdir } = require('../utility/directories');
|
const { rundir, uploadsdir, pluginsdir } = require('../utility/directories');
|
||||||
const { extractShellApiPlugins, extractShellApiFunctionName } = require('dbgate-tools');
|
const { extractShellApiPlugins, extractShellApiFunctionName } = require('dbgate-tools');
|
||||||
const { handleProcessCommunication } = require('../utility/processComm');
|
const { handleProcessCommunication } = require('../utility/processComm');
|
||||||
const platformInfo = require('../utility/platformInfo');
|
|
||||||
|
|
||||||
function extractPlugins(script) {
|
function extractPlugins(script) {
|
||||||
const requireRegex = /\s*\/\/\s*@require\s+([^\s]+)\s*\n/g;
|
const requireRegex = /\s*\/\/\s*@require\s+([^\s]+)\s*\n/g;
|
||||||
@@ -23,20 +22,7 @@ const requirePluginsTemplate = plugins =>
|
|||||||
)
|
)
|
||||||
.join('') + `dbgateApi.registerPlugins(${plugins.map(x => _.camelCase(x)).join(',')});\n`;
|
.join('') + `dbgateApi.registerPlugins(${plugins.map(x => _.camelCase(x)).join(',')});\n`;
|
||||||
|
|
||||||
// workaround - not working env in SNAP
|
|
||||||
const expandEnvParamsScript = platformInfo.isSnap
|
|
||||||
? `
|
|
||||||
for(let i=0;i<process.argv.length;i+=1) {
|
|
||||||
const arg=process.argv[i];
|
|
||||||
if (arg.startsWith('--env.')) {
|
|
||||||
process.env[arg.substring(6)] = process.argv[i+1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
: '';
|
|
||||||
|
|
||||||
const scriptTemplate = script => `
|
const scriptTemplate = script => `
|
||||||
${expandEnvParamsScript};
|
|
||||||
const dbgateApi = require(process.env.DBGATE_API);
|
const dbgateApi = require(process.env.DBGATE_API);
|
||||||
dbgateApi.initializeApiEnvironment();
|
dbgateApi.initializeApiEnvironment();
|
||||||
${requirePluginsTemplate(extractPlugins(script))}
|
${requirePluginsTemplate(extractPlugins(script))}
|
||||||
@@ -50,7 +36,6 @@ dbgateApi.runScript(run);
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
const loaderScriptTemplate = (functionName, props, runid) => `
|
const loaderScriptTemplate = (functionName, props, runid) => `
|
||||||
${expandEnvParamsScript};
|
|
||||||
const dbgateApi = require(process.env.DBGATE_API);
|
const dbgateApi = require(process.env.DBGATE_API);
|
||||||
dbgateApi.initializeApiEnvironment();
|
dbgateApi.initializeApiEnvironment();
|
||||||
${requirePluginsTemplate(extractShellApiPlugins(functionName, props))}
|
${requirePluginsTemplate(extractShellApiPlugins(functionName, props))}
|
||||||
@@ -63,10 +48,6 @@ await dbgateApi.copyStream(reader, writer);
|
|||||||
dbgateApi.runScript(run);
|
dbgateApi.runScript(run);
|
||||||
`;
|
`;
|
||||||
|
|
||||||
function envToParams(env) {
|
|
||||||
return _.flatten(_.keys(env).map(key => [`--env.${key}`, env[key]]));
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
/** @type {import('dbgate-types').OpenedRunner[]} */
|
/** @type {import('dbgate-types').OpenedRunner[]} */
|
||||||
opened: [],
|
opened: [],
|
||||||
@@ -114,19 +95,15 @@ module.exports = {
|
|||||||
const pluginNames = fs.readdirSync(pluginsdir());
|
const pluginNames = fs.readdirSync(pluginsdir());
|
||||||
console.log(`RUNNING SCRIPT ${scriptFile}`);
|
console.log(`RUNNING SCRIPT ${scriptFile}`);
|
||||||
// const subprocess = fork(scriptFile, ['--checkParent', '--max-old-space-size=8192'], {
|
// const subprocess = fork(scriptFile, ['--checkParent', '--max-old-space-size=8192'], {
|
||||||
const env = {
|
const subprocess = fork(scriptFile, ['--checkParent', ...process.argv.slice(3)], {
|
||||||
DBGATE_API: global['dbgateApiModulePath'] || process.argv[1],
|
|
||||||
..._.fromPairs(pluginNames.map(name => [`PLUGIN_${_.camelCase(name)}`, path.join(pluginsdir(), name)])),
|
|
||||||
};
|
|
||||||
const subprocess = fork(
|
|
||||||
scriptFile,
|
|
||||||
['--checkParent', ...process.argv.slice(3), ...(platformInfo.isSnap ? envToParams(env) : [])],
|
|
||||||
{
|
|
||||||
cwd: directory,
|
cwd: directory,
|
||||||
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
||||||
env: platformInfo.isSnap ? undefined : env,
|
env: {
|
||||||
}
|
...process.env,
|
||||||
);
|
DBGATE_API: global['dbgateApiModulePath'] || process.argv[1],
|
||||||
|
..._.fromPairs(pluginNames.map(name => [`PLUGIN_${_.camelCase(name)}`, path.join(pluginsdir(), name)])),
|
||||||
|
},
|
||||||
|
});
|
||||||
const pipeDispatcher = severity => data =>
|
const pipeDispatcher = severity => data =>
|
||||||
this.dispatchMessage(runid, { severity, message: data.toString().trim() });
|
this.dispatchMessage(runid, { severity, message: data.toString().trim() });
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user