Files
dbgate/packages/api/src/utility/directories.js
Jan Prochazka 516d007c22 fix
2021-04-17 17:31:32 +02:00

87 lines
2.2 KiB
JavaScript

const os = require('os');
const path = require('path');
const fs = require('fs');
const cleanDirectory = require('./cleanDirectory');
const platformInfo = require('./platformInfo');
const createDirectories = {};
const ensureDirectory = (dir, clean) => {
if (!createDirectories[dir]) {
if (clean && fs.existsSync(dir)) {
console.log(`Cleaning directory ${dir}`);
cleanDirectory(dir);
}
if (!fs.existsSync(dir)) {
console.log(`Creating directory ${dir}`);
fs.mkdirSync(dir);
}
createDirectories[dir] = true;
}
};
function datadir() {
const dir = path.join(os.homedir(), 'dbgate-data');
ensureDirectory(dir);
return dir;
}
const dirFunc = (dirname, clean = false) => () => {
const dir = path.join(datadir(), dirname);
ensureDirectory(dir, clean);
return dir;
};
const jsldir = dirFunc('jsl', true);
const rundir = dirFunc('run', true);
const uploadsdir = dirFunc('uploads', true);
const pluginsdir = dirFunc('plugins');
const archivedir = dirFunc('archive');
const filesdir = dirFunc('files');
function packagedPluginsDir() {
if (platformInfo.isDevMode) {
return path.resolve(__dirname, '../../../../plugins');
}
if (platformInfo.isDocker) {
return '/home/dbgate-docker/plugins';
}
if (platformInfo.isNpmDist) {
// node_modules
return global['dbgateApiPackagedPluginsPath'];
}
if (platformInfo.isElectronBundle) {
return path.resolve(__dirname, '../../plugins');
}
return null;
}
const packagedPluginList =
packagedPluginsDir() != null ? fs.readdirSync(packagedPluginsDir()).filter(x => x.startsWith('dbgate-plugin-')) : [];
function getPluginBackendPath(packageName) {
if (packagedPluginList.includes(packageName)) {
if (platformInfo.isDevMode) {
return path.join(packagedPluginsDir(), packageName, 'src', 'backend', 'index.js');
}
return path.join(packagedPluginsDir(), packageName, 'dist', 'backend.js');
}
return path.join(pluginsdir(), packageName, 'dist', 'backend.js');
}
module.exports = {
datadir,
jsldir,
rundir,
uploadsdir,
archivedir,
ensureDirectory,
pluginsdir,
filesdir,
packagedPluginsDir,
packagedPluginList,
getPluginBackendPath,
};