API/api.medcify.app/node_modules/pm2/lib/Configuration.js
2022-09-26 11:41:44 +05:30

305 lines
6.4 KiB
JavaScript

/**
* Copyright 2013-2022 the PM2 project authors. All rights reserved.
* Use of this source code is governed by a license that
* can be found in the LICENSE file.
*/
var Configuration = module.exports = {};
var fs = require('fs');
var Common = require('./Common');
var eachSeries = require('async/eachSeries');
var cst = require('../constants.js');
function splitKey(key) {
var values = [key];
if (key.indexOf('.') > -1)
values = key.match(/(?:[^."]+|"[^"]*")+/g).map(function(dt) { return dt.replace(/"/g, '') });
else if (key.indexOf(':') > -1)
values = key.match(/(?:[^:"]+|"[^"]*")+/g).map(function(dt) { return dt.replace(/"/g, '') });
return values;
}
function serializeConfiguration(json_conf) {
return JSON.stringify(json_conf, null, 4)
}
Configuration.set = function(key, value, cb) {
fs.readFile(cst.PM2_MODULE_CONF_FILE, function(err, data) {
if (err) return cb(err);
var json_conf = JSON.parse(data);
var values = splitKey(key);
if (values.length > 0) {
var levels = values;
var tmp = json_conf;
levels.forEach(function(key, index) {
if (index == levels.length -1)
tmp[key] = value;
else if (!tmp[key]) {
tmp[key] = {};
tmp = tmp[key];
}
else {
if (typeof(tmp[key]) != 'object')
tmp[key] = {};
tmp = tmp[key];
}
});
}
else {
if (json_conf[key] && typeof(json_conf[key]) === 'string')
Common.printOut(cst.PREFIX_MSG + 'Replacing current value key %s by %s', key, value);
json_conf[key] = value;
}
fs.writeFile(cst.PM2_MODULE_CONF_FILE, serializeConfiguration(json_conf), function(err, data) {
if (err) return cb(err);
return cb(null, json_conf);
});
return false;
});
};
Configuration.unset = function(key, cb) {
fs.readFile(cst.PM2_MODULE_CONF_FILE, function(err, data) {
if (err) return cb(err);
var json_conf = JSON.parse(data);
var values = splitKey(key);
if (values.length > 0) {
var levels = values;
var tmp = json_conf;
levels.forEach(function(key, index) {
if (index == levels.length -1)
delete tmp[key];
else if (!tmp[key]) {
tmp[key] = {};
tmp = tmp[key];
}
else {
if (typeof(tmp[key]) != 'object')
tmp[key] = {};
tmp = tmp[key];
}
});
}
else
delete json_conf[key];
if (err) return cb(err);
if (key === 'all')
json_conf = {};
fs.writeFile(cst.PM2_MODULE_CONF_FILE, serializeConfiguration(json_conf), function(err, data) {
if (err) return cb(err);
return cb(null, json_conf);
});
return false;
});
}
Configuration.setSyncIfNotExist = function(key, value) {
try {
var conf = JSON.parse(fs.readFileSync(cst.PM2_MODULE_CONF_FILE));
} catch(e) {
return null;
}
var values = splitKey(key);
var exists = false;
if (values.length > 1 && conf && conf[values[0]]) {
exists = Object.keys(conf[values[0]]).some(function(key) {
if (key == values[1])
return true;
return false;
});
}
if (exists === false)
return Configuration.setSync(key, value);
return null;
};
Configuration.setSync = function(key, value) {
try {
var data = fs.readFileSync(cst.PM2_MODULE_CONF_FILE);
} catch(e) {
return null;
}
var json_conf = JSON.parse(data);
var values = splitKey(key);
if (values.length > 0) {
var levels = values;
var tmp = json_conf;
levels.forEach(function(key, index) {
if (index == levels.length -1)
tmp[key] = value;
else if (!tmp[key]) {
tmp[key] = {};
tmp = tmp[key];
}
else {
if (typeof(tmp[key]) != 'object')
tmp[key] = {};
tmp = tmp[key];
}
});
}
else {
if (json_conf[key] && typeof(json_conf[key]) === 'string')
Common.printOut(cst.PREFIX_MSG + 'Replacing current value key %s by %s', key, value);
json_conf[key] = value;
}
if (key === 'all')
json_conf = {};
try {
fs.writeFileSync(cst.PM2_MODULE_CONF_FILE, serializeConfiguration(json_conf));
return json_conf;
} catch(e) {
console.error(e.message);
return null;
}
};
Configuration.unsetSync = function(key) {
try {
var data = fs.readFileSync(cst.PM2_MODULE_CONF_FILE);
} catch(e) {
return null;
}
var json_conf = JSON.parse(data);
var values = splitKey(key);
if (values.length > 0) {
var levels = values;
var tmp = json_conf;
levels.forEach(function(key, index) {
if (index == levels.length -1)
delete tmp[key];
else if (!tmp[key]) {
tmp[key] = {};
tmp = tmp[key];
}
else {
if (typeof(tmp[key]) != 'object')
tmp[key] = {};
tmp = tmp[key];
}
});
}
else
delete json_conf[key];
if (key === 'all')
json_conf = {};
try {
fs.writeFileSync(cst.PM2_MODULE_CONF_FILE, serializeConfiguration(json_conf));
} catch(e) {
console.error(e.message);
return null;
}
};
Configuration.multiset = function(serial, cb) {
var arrays = [];
serial = serial.match(/(?:[^ "]+|"[^"]*")+/g);
while (serial.length > 0)
arrays.push(serial.splice(0, 2));
eachSeries(arrays, function(el, next) {
Configuration.set(el[0], el[1], next);
}, cb);
};
Configuration.get = function(key, cb) {
Configuration.getAll(function(err, data) {
var climb = splitKey(key);
climb.some(function(val) {
if (!data[val]) {
data = null;
return true;
}
data = data[val];
return false;
});
if (!data) return cb({err : 'Unknown key'}, null);
return cb(null, data);
});
};
Configuration.getSync = function(key) {
try {
var data = Configuration.getAllSync();
} catch(e) {
return null;
}
var climb = splitKey(key);
climb.some(function(val) {
if (!data[val]) {
data = null;
return true;
}
data = data[val];
return false;
});
if (!data) return null;
return data;
};
Configuration.getAll = function(cb) {
fs.readFile(cst.PM2_MODULE_CONF_FILE, function(err, data) {
if (err) return cb(err);
return cb(null, JSON.parse(data));
});
};
Configuration.getAllSync = function() {
try {
return JSON.parse(fs.readFileSync(cst.PM2_MODULE_CONF_FILE));
} catch(e) {
console.error(e.stack || e);
return {};
}
};