vitis-engine-lib
Version:
Lib used on Vitis engines
179 lines • 6.39 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
/**
* Récupère les properties de conf/properties.json
*/
function getProperties() {
return new Promise((resolve, reject) => {
let oProperties = {};
readProperties('conf/properties.json').then((oEngineProperties) => {
// Remplace les balises @prop()
oEngineProperties = replacePropertiesProps(oEngineProperties);
// Merge properties du moteur (qui contiennent les chemins vers les autres properties)
oProperties = { ...oProperties, ...oEngineProperties };
if (oEngineProperties &&
oEngineProperties.vas_dir &&
oEngineProperties.vitis_properties_path) {
// Ajoute les properties de vitis
readProperties(oEngineProperties.vitis_properties_path).then((oVitisProperties) => {
// Merge properties vitis
oProperties = { ...oVitisProperties, ...oProperties };
// Remplace les balises @prop()
oProperties = replacePropertiesProps(oProperties);
// Properties GTF
if (oEngineProperties.gtf_properties_path) {
// Ajoute les properties de gtf
readProperties(oEngineProperties.gtf_properties_path).then((oGTFProperties) => {
// Merge properties gtf
oProperties = { ...oGTFProperties, ...oProperties };
// Remplace les balises @prop()
oProperties = replacePropertiesProps(oProperties);
// Retour
resolve(oProperties);
});
}
else {
// Retour
resolve(oProperties);
}
});
}
else {
console.error('Engine properties not valid');
reject();
}
});
});
}
function getAllPropertiesSync() {
let oEngineProperties = readPropertiesSync('conf/properties.json');
oEngineProperties = replacePropertiesProps(oEngineProperties);
let oProperties = { ...oEngineProperties };
if (oEngineProperties && oEngineProperties.vas_dir) {
const sPath = oEngineProperties.vas_dir + '/src/Module';
const aModules = fs_1.default.readdirSync(sPath);
for (const sModule of aModules) {
const sConfPath = sPath + '/' + sModule + '/conf/properties.json';
if (!fs_1.default.existsSync(sConfPath)) {
continue;
}
let oModuleProperties = readPropertiesSync(sConfPath);
// on fait une save de server_domain dans une autre properties pour remplacer si besoin
if (oModuleProperties._server_domain) {
oModuleProperties._hostname = oModuleProperties._server_domain;
}
oProperties = {
...oModuleProperties,
...oProperties,
};
}
}
return replacePropertiesProps(oProperties);
}
/**
* Effectue les remplacements pour les balises @prop()
* @param oProperties
*/
function replacePropertiesProps(oProperties) {
for (const key1 in oProperties) {
if (oProperties.hasOwnProperty(key1)) {
if (typeof oProperties[key1] == 'string') {
oProperties[key1] = replacePropertiesInString(oProperties[key1], oProperties);
}
}
}
return oProperties;
}
/**
*
* @param sEval
* @param oProperties
* @returns
*/
function replacePropertiesInString(sEval, oProperties, aProcessedKeys = []) {
const regex = /@prop\(([a-zA-Z0-9_-]+)\)/gm;
const result = Array.from(sEval.matchAll(regex));
let sResult = sEval;
// sinon on remplace
for (const aMatch of result) {
const sKey = aMatch[1];
// si on est en train de tourner en boucle on retourne dans l'état on verra plus tard
if (aProcessedKeys.indexOf(sKey) > -1) {
return sResult;
}
aProcessedKeys.push(sKey);
if (oProperties[sKey]) {
const tmpreg = new RegExp('@prop\\(' + sKey + '\\)', 'g');
sResult = sResult.replace(tmpreg, oProperties[sKey]);
}
}
if (regex.test(sResult)) {
// s'il y a encore des remplacement à faire on relance avec une liste de controle pour les boucles infinies
return replacePropertiesInString(sResult, oProperties, aProcessedKeys);
}
return sResult;
}
/**
* Récupère le contenu d'un fichier de properties
* @param sPath
*/
function readProperties(sPath) {
return new Promise((resolve, reject) => {
fs_1.default.readFile(sPath, 'utf8', (err, data) => {
if (err) {
throw err;
}
let properties;
try {
properties = JSON.parse(data);
}
catch (error) { }
if (properties) {
resolve(properties);
}
else {
console.log('cannot get engine properties');
}
});
});
}
function readPropertiesSync(sPath) {
const data = fs_1.default.readFileSync(sPath, 'utf8');
try {
return JSON.parse(data);
}
catch (err) {
console.log('cannot get engine properties');
return {};
}
}
/**
* Retourne la valeur de la vairable d'environnement HOME pour un utilisateur
* @param sUserName username à utiliser pour calculer le dossier home
*/
function processHomeEnvForUser(sUserName) {
if (process.platform !== "win32") {
switch (sUserName) {
case 'root':
return '/root';
case 'www-data':
return '/var/www';
default:
return '/home/' + sUserName;
}
}
else {
return null;
}
}
exports.default = {
getProperties,
getAllPropertiesSync,
processHomeEnvForUser,
replacePropertiesInString
};
//# sourceMappingURL=properties.js.map