catproxy
Version:
a node proxy or host change tools
209 lines (190 loc) • 5.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.save = exports.setSaveProp = exports.del = exports.set = exports.get = exports.getPath = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
exports.default = function () {
_log2.default.info('配置文件加载中');
data = loadingData();
_log2.default.info('配置文件加载成功');
};
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _log = require('../log');
var _log2 = _interopRequireDefault(_log);
var _merge = require('merge');
var _merge2 = _interopRequireDefault(_merge);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// 数据对象直接require后直接返回一个对象,init方法只能调用一次,一个进程公用一个config
var data = {};
var saveProps = null;
// 获取配置路径
var getPath = exports.getPath = function getPath() {
var dirPath = void 0,
filePath = void 0;
// The expected result is:
// OS X - '/Users/user/Library/Preferences'
// Windows 8 - 'C:\Users\User\AppData\Roaming'
// Windows XP - 'C:\Documents and Settings\User\Application Data'
// Linux - '/var/local'
// 获取系统临时目录
var tmpPath = process.env.APPDATA;
if (!tmpPath || tmpPath === 'undefined') {
tmpPath = process.platform === 'darwin' ? _path2.default.join(process.env.HOME, 'Library/Preferences') : '/var/local';
}
dirPath = _path2.default.resolve(tmpPath, 'catproxy');
var exits = _fs2.default.existsSync(dirPath);
// 目录不存在
if (!exits) {
_fs2.default.mkdir(dirPath);
}
// 临时文件存放位置
filePath = _path2.default.resolve(dirPath, 'rule.json');
return filePath;
};
var loadingData = function loadingData() {
var filePath = getPath();
var currentData = {};
// 判断是否存在临时文件
var exits = _fs2.default.existsSync(filePath);
if (exits) {
var bufData = _fs2.default.readFileSync(filePath, 'utf-8');
try {
currentData = JSON.parse(bufData);
} catch (e) {
_log2.default.error(e);
currentData = {};
}
}
return currentData;
};
// 获取一个值
var get = exports.get = function get(key) {
var tmp = data;
if (!key) {
return data;
} else {
key = key.split(':');
for (var i = 0; i < key.length; i++) {
if (tmp[key[i]] !== undefined) {
tmp = tmp[key[i]];
} else {
return null;
}
}
return tmp;
}
};
// 设置一个直接
var set = exports.set = function set(key, val) {
if (!key) {
return false;
}
if ((typeof key === 'undefined' ? 'undefined' : _typeof(key)) === 'object') {
data = (0, _merge2.default)(data, key);
return true;
}
var tmp = data,
keys;
keys = key.split(':');
key = keys[keys.length - 1];
if (keys.length > 1) {
for (var i = 0; i < keys.length - 1; i++) {
if ((typeof tmp === 'undefined' ? 'undefined' : _typeof(tmp)) === 'object') {
if (tmp[keys[i]]) {
tmp = tmp[keys[i]];
} else {
tmp = null;
return false;
}
} else {
tmp = null;
return false;
}
}
}
if (tmp) {
tmp[key] = val;
return true;
}
};
var del = exports.del = function del(key) {
// 不传递key删除所有
if (!key) {
data = {};
}
// key 必须是字符串
if (typeof key !== 'string') {
return;
}
var tmp = data,
keys;
keys = key.split(':');
key = keys[keys.length - 1];
if (keys.length > 1) {
for (var i = 0; i < keys.length - 1; i++) {
if ((typeof tmp === 'undefined' ? 'undefined' : _typeof(tmp)) === 'object') {
if (tmp[keys[i]]) {
tmp = tmp[keys[i]];
} else {
tmp = null;
return false;
}
} else {
tmp = null;
return false;
}
}
}
if (tmp) {
delete tmp[key];
return true;
}
};
var setSaveProp = exports.setSaveProp = function setSaveProp() {
for (var _len = arguments.length, keys = Array(_len), _key = 0; _key < _len; _key++) {
keys[_key] = arguments[_key];
}
saveProps = keys;
};
// 保存到文件
/**
* key 如果传递,则只更新对应key的数据到文件中,否则全部更新
* key 可以是数组或者字符串只可以更新顶级的字段,字段下面的字段不行
*/
var save = exports.save = function save(key) {
key = key || saveProps;
var oldData = loadingData();
var saveData;
if (!key) {
// 全部覆盖
saveData = data;
} else {
saveData = oldData;
if (typeof key === 'string') {
key = [key];
}
// 全部转换成数组处理
if (Object.prototype.toString.call(key) === '[object Array]') {
key.forEach(function (cur) {
if (data[cur] !== undefined) {
saveData[cur] = data[cur];
}
});
}
}
var myData = JSON.stringify(saveData);
var filePath = getPath();
_log2.default.info('规则文件路径:' + filePath);
try {
var fd = _fs2.default.openSync(filePath, 'w+', '777');
_fs2.default.writeSync(fd, myData, null, 'utf-8');
_fs2.default.closeSync(fd);
} catch (e) {
throw e;
}
};
;