mirror of
https://github.com/tiennm99/fbird.git
synced 2026-06-14 16:11:59 +00:00
246 lines
7.4 KiB
JavaScript
Vendored
246 lines
7.4 KiB
JavaScript
Vendored
var fs = require("fs");
|
|
var path = require("path");
|
|
var exec = require('child_process').exec;
|
|
var spawn = require('child_process').spawn;
|
|
var url = require('url');
|
|
|
|
var core4cc = {};
|
|
module.exports = core4cc;
|
|
|
|
/**
|
|
* Desc:merge js code from client to server.
|
|
* @param src src path
|
|
* @param targetDir target path
|
|
* @param requireArr dependencies
|
|
* @param name
|
|
*/
|
|
core4cc.trans2Module = function(src, targetDir, requireArr, name){
|
|
if(!fs.existsSync(targetDir)) fs.mkdirSync(targetDir);
|
|
var srcBaseName = path.basename(src);
|
|
name = name || path.basename(src, ".js");
|
|
var content = fs.readFileSync(src).toString();
|
|
var requireStr = "";
|
|
for(var i = 0, li = requireArr.length; i < li; ++i){
|
|
var strs = requireArr[i].split("->");
|
|
requireStr = requireStr + "var " + strs[0] + " = require('" + strs[1] + "');\r\n";
|
|
}
|
|
fs.writeFileSync(targetDir + srcBaseName, requireStr + content + "\r\nmodule.exports = " + name + ";");
|
|
};
|
|
|
|
/**
|
|
* Desc:merge js arr to one
|
|
* @param srcs
|
|
* @param target
|
|
* @param requireArr
|
|
* @param name
|
|
*/
|
|
core4cc.merge2Module = function(srcs, target, requireArr, name){
|
|
var targetDir = path.dirname(target);
|
|
if(!fs.existsSync(targetDir)) fs.mkdirSync(targetDir);
|
|
var content = "";
|
|
for(var i = 0, li = srcs.length; i < li; ++i){
|
|
content += fs.readFileSync(srcs[i]).toString() + "\r\n";
|
|
}
|
|
var requireStr = "";
|
|
for(var i = 0, li = requireArr.length; i < li; ++i){
|
|
var strs = requireArr[i].split("->");
|
|
requireStr = requireStr + "var " + strs[0] + " = require('" + strs[1] + "');\r\n";
|
|
}
|
|
fs.writeFileSync(target, requireStr + content + "\r\nmodule.exports = " + name + ";");
|
|
};
|
|
|
|
/**
|
|
* dESC: Get key name by the file name.
|
|
* @param name
|
|
* @returns {String}
|
|
*/
|
|
core4cc.getKeyName = function(name){
|
|
var key = name.replace(/[.]/g, "_");
|
|
key = key.replace(/[\-\(\)]/g, "_");
|
|
var r = key.match(/^[0-9]/);
|
|
if(r != null) key = "_" + key;
|
|
return key.replace(/\s/g, "");
|
|
};
|
|
/**
|
|
* Desc: Returns array for dependencies.
|
|
* @param temp
|
|
* @returns {Array}
|
|
* @private
|
|
*/
|
|
core4cc.getDependencies = function(temp){
|
|
var dependencies = [];
|
|
for(var key in temp){
|
|
dependencies.push(key);
|
|
};
|
|
return dependencies;
|
|
};
|
|
|
|
/**
|
|
* Desc: unzip
|
|
* @param srcZip
|
|
* @param targetDir
|
|
* @param cb
|
|
*/
|
|
core4cc.unzip = function(srcZip, targetDir, cb){
|
|
var execCode = "unzip " + srcZip + " -d " + targetDir;
|
|
exec(execCode, function(err, data, info){
|
|
if(err) return cb(err);
|
|
else cb(null);
|
|
});
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
* Desc: Download resources.
|
|
* @param downLoadDir
|
|
* @param fileUrl
|
|
* @param cb
|
|
*/
|
|
core4cc.download = function(downLoadDir, fileUrl, cb) {
|
|
// extract the file name
|
|
var fileName = url.parse(fileUrl).pathname.split('/').pop();
|
|
// create an instance of writable stream
|
|
var file = fs.createWriteStream(path.join(downLoadDir, fileName));
|
|
// execute curl using child_process' spawn function
|
|
var curl = spawn('curl', [fileUrl]);
|
|
// add a 'data' event listener for the spawn instance
|
|
curl.stdout.on('data', function(data) { file.write(data); });
|
|
// add an 'end' event listener to close the writeable stream
|
|
curl.stdout.on('end', function(data) {
|
|
file.end();
|
|
console.log(fileName + ' downloaded to ' + downLoadDir);
|
|
cb(null);
|
|
});
|
|
// when the spawn child process exits, check if there were any errors and close the writeable stream
|
|
curl.on('exit', function(code) {
|
|
if (code != 0) {
|
|
console.error('Failed: ' + code);
|
|
cb("error")
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Desc: Remove dir recursively.
|
|
* @param filePath
|
|
* @param ignores
|
|
*/
|
|
core4cc.rmdirSyncRecursive = function(filePath, ignores) {
|
|
var files = [];
|
|
if( fs.existsSync(filePath) ) {
|
|
if(ignores && ignores.length > 0 && ignores.indexOf(filePath) >= 0) return;
|
|
if(!fs.statSync(filePath).isDirectory()) return fs.unlinkSync(filePath);
|
|
files = fs.readdirSync(filePath);
|
|
for(var i = 0, li = files.length; i < li; i++){
|
|
var curPath = path.join(filePath, files[i]);
|
|
core4cc.rmdirSyncRecursive(curPath, ignores); // recurse
|
|
}
|
|
files = fs.readdirSync(filePath);//read again
|
|
if(files.length == 0) fs.rmdirSync(filePath);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Desc: Create dir recursively.
|
|
* @param arr
|
|
* @param index
|
|
* @param cb
|
|
* @returns {*}
|
|
*/
|
|
core4cc.mkdirRecursive = function(arr, index, cb){
|
|
if(index >= arr.length) cb();
|
|
var dir = path.join(process.cwd(), arr.slice(0, index +1).join(path.sep));
|
|
if(fs.existsSync(dir)) return core4cc.mkdirRecursive(arr, index+1, cb);
|
|
fs.mkdir(dir, function(){
|
|
core4cc.mkdirRecursive(arr, index+1, cb);
|
|
});
|
|
}
|
|
/**
|
|
* Desc: create dir sync recursively.
|
|
* @param targetPath
|
|
*/
|
|
core4cc.mkdirSyncRecursive = function(targetPath){
|
|
if(targetPath == null || targetPath == "") return;
|
|
targetPath = core4cc.isAbsolute(targetPath) ? path.normalize(targetPath) : path.join(process.cwd(), targetPath);
|
|
if(fs.existsSync(targetPath)) return;
|
|
|
|
var arr = targetPath.split(path.sep);
|
|
var index = arr.length - 1;
|
|
var tempStr = arr[index];
|
|
while(tempStr == "" && arr.length > 0){
|
|
index--;
|
|
tempStr = arr[index];
|
|
}
|
|
if(tempStr == "") return;
|
|
var newPath = targetPath.substring(0, targetPath.length - tempStr.length - 1);
|
|
if(!fs.existsSync(newPath)) core4cc.mkdirSyncRecursive(newPath);
|
|
fs.mkdirSync(targetPath);
|
|
}
|
|
/**
|
|
* Desc: Returns true if the filePath is absolute.
|
|
* @param filePath
|
|
* @returns {boolean}
|
|
*/
|
|
core4cc.isAbsolute = function(filePath){
|
|
filePath = path.normalize(filePath);
|
|
if(filePath.substring(0, 1) == "/") return true;
|
|
if(filePath.search(/[\w]+:/) == 0) return true;
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Desc: Copy files in srcPath to targetPath, then replace info by config.
|
|
* @param srcPath
|
|
* @param targetPath
|
|
* @param handler
|
|
* @private
|
|
*/
|
|
core4cc.copyFiles = function(srcPath, targetPath, handler){
|
|
if(!fs.statSync(srcPath).isDirectory()) return fs.writeFileSync(targetPath, fs.readFileSync(srcPath));//copy if it`s a file
|
|
|
|
if(!fs.existsSync(targetPath)) fs.mkdirSync(targetPath);
|
|
var files = fs.readdirSync(srcPath);
|
|
for(var i = 0, li = files.length; i < li; i++){
|
|
var file = files[i];
|
|
if(fs.statSync(path.join(srcPath, file)).isDirectory()){//make dir if it`s a dir
|
|
var dir = path.join(targetPath, file, "./");
|
|
if(!fs.existsSync(dir)) fs.mkdirSync(dir);
|
|
core4cc.copyFiles(path.join(srcPath, file + "/"), dir, handler);//goes on
|
|
}else{
|
|
var filePath = path.join(targetPath, file);
|
|
fs.writeFileSync(filePath, fs.readFileSync(path.join(srcPath, file)));//copy if it`s a file
|
|
if(handler) {
|
|
handler.fmt(filePath);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Desc: Get string for command.
|
|
* e.g. aaaa ---> aaaa
|
|
* "a a" ---> a a
|
|
* @param str
|
|
* @returns {*}
|
|
*/
|
|
core4cc.getStr4Cmd = function(str){
|
|
if(!str) return null;
|
|
if(str.length < 2) return str;
|
|
return str.substring(0, 1) == '"' && str.substring(str.length - 1) == '"' ? str.substring(1, str.length - 1) : str;
|
|
}
|
|
/**
|
|
* Desc: Merge data by default value
|
|
* @param data
|
|
* @param defData default value
|
|
* @returns {{}|*}
|
|
*/
|
|
core4cc.mergeData = function(data, defData){
|
|
data = data || {};
|
|
if(defData == null) return data;;
|
|
for (var key in defData) {
|
|
if(data[key] == null && defData[key] != null) data[key] = defData[key];
|
|
}
|
|
return data;
|
|
}
|