obcon-scada / app /include /UtilityPrev.js
chanmin0723's picture
Initial obcon SCADA deploy
e4bf523
Raw
History Blame Contribute Delete
1.97 kB
"use strict";
const fs = require("fs");
const path = require("path");
function _root() {
if (global.config && global.config.folder_root) return global.config.folder_root;
if (global.appl && global.appl.root) return global.appl.root;
return process.cwd();
}
function _safeRequire(filePath) {
try {
return require(filePath);
} catch (e) {
throw new Error(
`[UtilityPrev.getModule] require failed: ${filePath}\n` +
`- ${e && e.message ? e.message : e}`
);
}
}
class UtilityPrev {
getPath(...parts) {
return path.resolve(_root(), path.join(...parts));
}
getCustomPath(...parts) {
const rel = path.join(...parts);
const serviceName = global.config && global.config.service ? global.config.service.name : "";
const candidates = [
this.getPath("custom", serviceName, rel),
this.getPath("custom", rel),
this.getPath(rel)
];
for (const file of candidates) {
if (fs.existsSync(file)) return path.resolve(file);
}
return path.resolve(this.getPath(rel));
}
existFile(...parts) {
const rel = path.join(...parts);
const serviceName = global.config && global.config.service ? global.config.service.name : "";
const candidates = [
this.getPath("custom", serviceName, rel),
this.getPath("custom", rel),
this.getPath(rel)
];
return candidates.some((f) => fs.existsSync(f));
}
getClass(...parts) {
const filePath = this.getCustomPath(...parts);
if (!fs.existsSync(filePath)) return null;
return _safeRequire(filePath);
}
getModule(...parts) {
if (!parts || parts.length === 0) {
throw new Error("[UtilityPrev.getModule] empty arguments");
}
const klass = this.getClass(...parts);
if (klass == null) return null;
if (typeof klass === "function") {
try {
return new klass();
} catch (_e) {
return klass;
}
}
return klass;
}
}
module.exports = UtilityPrev;