This commit is contained in:
Jan Prochazka
2021-01-23 07:20:44 +01:00
parent 7f5143aac2
commit 37cc86f8d2
19 changed files with 48 additions and 53 deletions

View File

@@ -18,8 +18,8 @@ module.exports = {
type: 'jsonl',
},
...folders
.filter((x) => x != 'default')
.map((name) => ({
.filter(x => x != 'default')
.map(name => ({
name,
type: 'jsonl',
})),
@@ -39,8 +39,8 @@ module.exports = {
if (!(await fs.exists(dir))) return [];
const files = await fs.readdir(dir);
return files
.filter((name) => name.endsWith('.jsonl'))
.map((name) => ({
.filter(name => name.endsWith('.jsonl'))
.map(name => ({
name: name.slice(0, -'.jsonl'.length),
type: 'jsonl',
}));
@@ -84,7 +84,7 @@ module.exports = {
});
let structure = null;
const rows = [];
liner.on('line', (line) => {
liner.on('line', line => {
const data = JSON.parse(line);
if (structure) rows.push(data);
else structure = data;

View File

@@ -9,7 +9,7 @@ const { encryptConnection } = require('../utility/crypting');
function getPortalCollections() {
if (process.env.CONNECTIONS) {
return _.compact(process.env.CONNECTIONS.split(',')).map((id) => ({
return _.compact(process.env.CONNECTIONS.split(',')).map(id => ({
_id: id,
engine: process.env[`ENGINE_${id}`],
server: process.env[`SERVER_${id}`],
@@ -46,7 +46,7 @@ module.exports = {
},
test(req, res) {
const subprocess = fork(process.argv[1], ['connectProcess', ...process.argv.slice(3)]);
subprocess.on('message', (resp) => {
subprocess.on('message', resp => {
// @ts-ignore
const { msgtype } = resp;
if (msgtype == 'connected' || msgtype == 'error') {
@@ -80,7 +80,7 @@ module.exports = {
get_meta: 'get',
async get({ conid }) {
if (portalConnections) return portalConnections.find((x) => x._id == conid);
if (portalConnections) return portalConnections.find(x => x._id == conid);
const res = await this.datastore.find({ _id: conid });
return res[0];
},

View File

@@ -23,7 +23,7 @@ module.exports = {
if (!hasPermission(`files/${folder}/read`)) return [];
const dir = path.join(filesdir(), folder);
if (!(await fs.exists(dir))) return [];
const files = (await fs.readdir(dir)).map((file) => ({ folder, file }));
const files = (await fs.readdir(dir)).map(file => ({ folder, file }));
return files;
},
@@ -34,7 +34,7 @@ module.exports = {
for (const folder of folders) {
if (!hasPermission(`files/${folder}/read`)) continue;
const dir = path.join(filesdir(), folder);
const files = (await fs.readdir(dir)).map((file) => ({ folder, file }));
const files = (await fs.readdir(dir)).map(file => ({ folder, file }));
res.push(...files);
}
return res;

View File

@@ -3,7 +3,7 @@ const fp = require('lodash/fp');
const databaseConnections = require('./databaseConnections');
function pickObjectNames(array) {
return _.sortBy(array, (x) => `${x.schemaName}.${x.pureName}`).map(fp.pick(['pureName', 'schemaName']));
return _.sortBy(array, x => `${x.schemaName}.${x.pureName}`).map(fp.pick(['pureName', 'schemaName']));
}
module.exports = {
@@ -30,18 +30,18 @@ module.exports = {
tableInfo_meta: 'get',
async tableInfo({ conid, database, schemaName, pureName }) {
const opened = await databaseConnections.ensureOpened(conid, database);
const table = opened.structure.tables.find((x) => x.pureName == pureName && x.schemaName == schemaName);
const allForeignKeys = _.flatten(opened.structure.tables.map((x) => x.foreignKeys));
const table = opened.structure.tables.find(x => x.pureName == pureName && x.schemaName == schemaName);
const allForeignKeys = _.flatten(opened.structure.tables.map(x => x.foreignKeys));
return {
...table,
dependencies: allForeignKeys.filter((x) => x.refSchemaName == schemaName && x.refTableName == pureName),
dependencies: allForeignKeys.filter(x => x.refSchemaName == schemaName && x.refTableName == pureName),
};
},
sqlObjectInfo_meta: 'get',
async sqlObjectInfo({ objectTypeField, conid, database, schemaName, pureName }) {
const opened = await databaseConnections.ensureOpened(conid, database);
const res = opened.structure[objectTypeField].find((x) => x.pureName == pureName && x.schemaName == schemaName);
const res = opened.structure[objectTypeField].find(x => x.pureName == pureName && x.schemaName == schemaName);
return res;
},
};

View File

@@ -52,7 +52,7 @@ module.exports = {
`http://registry.npmjs.com/-/v1/search?text=${encodeURIComponent(filter)}+keywords:dbgateplugin&size=25&from=0`
);
const { objects } = resp.data || {};
return (objects || []).map((x) => x.package);
return (objects || []).map(x => x.package);
},
info_meta: 'get',
@@ -90,9 +90,7 @@ module.exports = {
const files = await fs.readdir(pluginsdir());
const res = [];
for (const packageName of files) {
const manifest = await fs
.readFile(path.join(pluginsdir(), packageName, 'package.json'))
.then((x) => JSON.parse(x));
const manifest = await fs.readFile(path.join(pluginsdir(), packageName, 'package.json')).then(x => JSON.parse(x));
const readmeFile = path.join(pluginsdir(), packageName, 'README.md');
if (await fs.exists(readmeFile)) {
manifest.readme = await fs.readFile(readmeFile, { encoding: 'utf-8' });
@@ -119,7 +117,7 @@ module.exports = {
await downloadPackage(packageName, dir);
}
socket.emitChanged(`installed-plugins-changed`);
this.removedPlugins = this.removedPlugins.filter((x) => x != packageName);
this.removedPlugins = this.removedPlugins.filter(x => x != packageName);
await this.saveRemovePlugins();
},
@@ -170,7 +168,7 @@ module.exports = {
}
for (const packageName of Object.keys(preinstallPluginMinimalVersions)) {
const installedVersion = installed.find((x) => x.name == packageName);
const installedVersion = installed.find(x => x.name == packageName);
if (installedVersion) {
// plugin installed, test, whether upgrade
const requiredVersion = preinstallPluginMinimalVersions[packageName];

View File

@@ -11,17 +11,17 @@ const { extractShellApiPlugins, extractShellApiFunctionName } = require('dbgate-
function extractPlugins(script) {
const requireRegex = /\s*\/\/\s*@require\s+([^\s]+)\s*\n/g;
const matches = [...script.matchAll(requireRegex)];
return matches.map((x) => x[1]);
return matches.map(x => x[1]);
}
const requirePluginsTemplate = (plugins) =>
const requirePluginsTemplate = plugins =>
plugins
.map(
(packageName) => `const ${_.camelCase(packageName)} = require(process.env.PLUGIN_${_.camelCase(packageName)});\n`
packageName => `const ${_.camelCase(packageName)} = require(process.env.PLUGIN_${_.camelCase(packageName)});\n`
)
.join('') + `dbgateApi.registerPlugins(${plugins.map((x) => _.camelCase(x)).join(',')});\n`;
.join('') + `dbgateApi.registerPlugins(${plugins.map(x => _.camelCase(x)).join(',')});\n`;
const scriptTemplate = (script) => `
const scriptTemplate = script => `
const dbgateApi = require(process.env.DBGATE_API);
${requirePluginsTemplate(extractPlugins(script))}
require=null;
@@ -97,20 +97,20 @@ module.exports = {
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
env: {
DBGATE_API: process.argv[1],
..._.fromPairs(pluginNames.map((name) => [`PLUGIN_${_.camelCase(name)}`, path.join(pluginsdir(), name)])),
..._.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() });
byline(subprocess.stdout).on('data', pipeDispatcher('info'));
byline(subprocess.stderr).on('data', pipeDispatcher('error'));
subprocess.on('exit', (code) => {
subprocess.on('exit', code => {
this.rejectRequest(runid, { message: 'No data retured, maybe input data source is too big' });
console.log('... EXIT process', code);
socket.emit(`runner-done-${runid}`, code);
});
subprocess.on('error', (error) => {
subprocess.on('error', error => {
this.rejectRequest(runid, { message: error && (error.message || error.toString()) });
console.error('... ERROR subprocess', error);
this.dispatchMessage({
@@ -138,7 +138,7 @@ module.exports = {
cancel_meta: 'post',
async cancel({ runid }) {
const runner = this.opened.find((x) => x.runid == runid);
const runner = this.opened.find(x => x.runid == runid);
if (!runner) {
throw new Error('Invalid runner');
}

View File

@@ -11,7 +11,7 @@ module.exports = {
tasks: [],
async unload() {
this.tasks.forEach((x) => x.destroy());
this.tasks.forEach(x => x.destroy());
this.tasks = [];
},

View File

@@ -8,13 +8,13 @@ module.exports = {
closed: {},
handle_databases(conid, { databases }) {
const existing = this.opened.find((x) => x.conid == conid);
const existing = this.opened.find(x => x.conid == conid);
if (!existing) return;
existing.databases = databases;
socket.emitChanged(`database-list-changed-${conid}`);
},
handle_status(conid, { status }) {
const existing = this.opened.find((x) => x.conid == conid);
const existing = this.opened.find(x => x.conid == conid);
if (!existing) return;
existing.status = status;
socket.emitChanged(`server-status-changed`);
@@ -22,7 +22,7 @@ module.exports = {
handle_ping() {},
async ensureOpened(conid) {
const existing = this.opened.find((x) => x.conid == conid);
const existing = this.opened.find(x => x.conid == conid);
if (existing) return existing;
const connection = await connections.get({ conid });
const subprocess = fork(process.argv[1], ['serverConnectionProcess', ...process.argv.slice(3)]);
@@ -53,11 +53,11 @@ module.exports = {
},
close(conid, kill = true) {
const existing = this.opened.find((x) => x.conid == conid);
const existing = this.opened.find(x => x.conid == conid);
if (existing) {
existing.disconnected = true;
if (kill) existing.subprocess.kill();
this.opened = this.opened.filter((x) => x.conid != conid);
this.opened = this.opened.filter(x => x.conid != conid);
this.closed[conid] = {
...existing.status,
name: 'error',

View File

@@ -83,7 +83,7 @@ module.exports = {
executeQuery_meta: 'post',
async executeQuery({ sesid, sql }) {
const session = this.opened.find((x) => x.sesid == sesid);
const session = this.opened.find(x => x.sesid == sesid);
if (!session) {
throw new Error('Invalid session');
}
@@ -107,7 +107,7 @@ module.exports = {
kill_meta: 'post',
async kill({ sesid }) {
const session = this.opened.find((x) => x.sesid == sesid);
const session = this.opened.find(x => x.sesid == sesid);
if (!session) {
throw new Error('Invalid session');
}