mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 10:45:47 +00:00
358 lines
9.9 KiB
JavaScript
358 lines
9.9 KiB
JavaScript
(function(scope) {
|
|
'use strict';
|
|
|
|
var exec,
|
|
rendy,
|
|
Scope = scope.window ? window : global;
|
|
|
|
if (typeof module === 'object' && module.exports) {
|
|
exec = require('execon');
|
|
rendy = require('rendy');
|
|
module.exports = new UtilProto(exec);
|
|
} else if (!Scope.Util) {
|
|
exec = window.exec;
|
|
rendy = window.rendy;
|
|
Scope.Util = new UtilProto(exec);
|
|
}
|
|
|
|
function UtilProto(exec) {
|
|
var Util = this;
|
|
|
|
this.check = new checkProto();
|
|
|
|
function checkProto() {
|
|
/**
|
|
* Check is all arguments with names present
|
|
*
|
|
* @param name
|
|
* @param arg
|
|
* @param type
|
|
*/
|
|
var check = function check(args, names) {
|
|
var msg = '',
|
|
name = '',
|
|
template = '{{ name }} coud not be empty!',
|
|
|
|
indexOf = Array.prototype.indexOf,
|
|
|
|
lenNames = names.length,
|
|
lenArgs = args.length,
|
|
lessArgs = lenArgs < lenNames,
|
|
emptyIndex = indexOf.call(args),
|
|
isEmpty = ~emptyIndex && emptyIndex <= lenNames - 1;
|
|
|
|
if (lessArgs || isEmpty) {
|
|
if (lessArgs)
|
|
name = names[lenNames - 1];
|
|
else
|
|
name = names[emptyIndex];
|
|
|
|
msg = rendy(template, {
|
|
name: name
|
|
});
|
|
|
|
throw(Error(msg));
|
|
}
|
|
|
|
return check;
|
|
};
|
|
|
|
check.check = check;
|
|
|
|
/**
|
|
* Check is type of arg with name is equal to type
|
|
*
|
|
* @param name
|
|
* @param arg
|
|
* @param type
|
|
*/
|
|
check.type = function(name, arg, type) {
|
|
var is = Util.type(arg) === type;
|
|
|
|
if (!is)
|
|
throw(Error(name + ' should be ' + type));
|
|
|
|
return check;
|
|
};
|
|
|
|
return check;
|
|
}
|
|
|
|
/**
|
|
* Copy properties from from to to
|
|
*
|
|
* @param from
|
|
* @param to
|
|
*/
|
|
this.copyObj = function(to, from) {
|
|
if (!from) {
|
|
from = to;
|
|
to = {};
|
|
}
|
|
|
|
if (to)
|
|
Object.keys(from).forEach(function(name) {
|
|
to[name] = from[name];
|
|
});
|
|
|
|
return to;
|
|
};
|
|
|
|
/**
|
|
* copy objFrom properties to target
|
|
*
|
|
* @target
|
|
* @objFrom
|
|
*/
|
|
this.extend = function(target, objFrom) {
|
|
var obj,
|
|
keys,
|
|
proto,
|
|
isFunc = Util.type.function(objFrom),
|
|
isArray = Util.type.array(objFrom),
|
|
isObj = Util.type.object(target),
|
|
ret = isObj ? target : {};
|
|
|
|
if (isArray)
|
|
objFrom.forEach(function(item) {
|
|
ret = Util.extend(target, item);
|
|
});
|
|
|
|
|
|
else if (objFrom) {
|
|
obj = isFunc ? new objFrom() : objFrom;
|
|
keys = Object.keys(obj);
|
|
|
|
if (!keys.length) {
|
|
proto = Object.getPrototypeOf(objFrom);
|
|
keys = Object.keys(proto);
|
|
}
|
|
|
|
keys.forEach(function(name) {
|
|
ret[name] = obj[name];
|
|
});
|
|
}
|
|
|
|
return ret;
|
|
};
|
|
|
|
/**
|
|
* extend proto
|
|
*
|
|
* @obj
|
|
*/
|
|
this.extendProto = function(obj) {
|
|
var ret, F = function() {};
|
|
F.prototype = Util.extend({}, obj);
|
|
ret = new F();
|
|
|
|
return ret;
|
|
};
|
|
|
|
this.json = new JsonProto();
|
|
|
|
function JsonProto() {
|
|
/**
|
|
* @param str
|
|
*/
|
|
this.parse = function(str) {
|
|
var obj;
|
|
|
|
Util.exec.try(function() {
|
|
obj = JSON.parse(str);
|
|
});
|
|
|
|
return obj;
|
|
},
|
|
|
|
/**
|
|
* @param obj
|
|
*/
|
|
this.stringify = function(obj) {
|
|
var str;
|
|
|
|
Util.exec.try(function() {
|
|
str = JSON.stringify(obj, null, 4);
|
|
});
|
|
|
|
return str;
|
|
};
|
|
}
|
|
|
|
this.escapeRegExp = function(str) {
|
|
var isStr = Util.type.string(str);
|
|
|
|
if (isStr)
|
|
str = str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
|
|
|
|
return str;
|
|
};
|
|
|
|
/**
|
|
* get regexp from wild card
|
|
*/
|
|
this.getRegExp = function(wildcard) {
|
|
var regExp;
|
|
|
|
if (!wildcard)
|
|
wildcard = '*';
|
|
|
|
wildcard = '^' + wildcard /* search from start of line */
|
|
.replace('.', '\\.')
|
|
.replace('*', '.*')
|
|
.replace('?', '.?');
|
|
|
|
wildcard += '$'; /* search to end of line */
|
|
|
|
regExp = new RegExp(wildcard);
|
|
|
|
return regExp;
|
|
};
|
|
|
|
this.type = new TypeProto();
|
|
|
|
function TypeProto() {
|
|
/**
|
|
* get type of variable
|
|
*
|
|
* @param variable
|
|
*/
|
|
function type(variable) {
|
|
var regExp = /\s([a-zA-Z]+)/,
|
|
str = {}.toString.call(variable),
|
|
typeBig = str.match(regExp)[1],
|
|
result = typeBig.toLowerCase();
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* functions check is variable is type of name
|
|
*
|
|
* @param variable
|
|
*/
|
|
function typeOf(name, variable) {
|
|
return type(variable) === name;
|
|
}
|
|
|
|
function typeOfSimple(name, variable) {
|
|
return typeof variable === name;
|
|
}
|
|
|
|
['null', 'arrayBuffer', 'file', 'array', 'object']
|
|
.forEach(function(name) {
|
|
type[name] = typeOf.bind(null, name);
|
|
});
|
|
|
|
['string', 'undefined', 'boolean', 'number', 'function']
|
|
.forEach(function(name) {
|
|
type[name] = typeOfSimple.bind(null, name);
|
|
});
|
|
|
|
return type;
|
|
}
|
|
|
|
this.exec = exec;
|
|
|
|
/**
|
|
* function gets file extension
|
|
*
|
|
* @param pFileName
|
|
* @return Ext
|
|
*/
|
|
this.getExt = function(name) {
|
|
var ret = '',
|
|
dot,
|
|
isStr = Util.type.string(name);
|
|
|
|
if (isStr) {
|
|
dot = name.lastIndexOf('.');
|
|
|
|
if (~dot)
|
|
ret = name.substr(dot);
|
|
}
|
|
|
|
return ret;
|
|
};
|
|
|
|
/**
|
|
* get values from Object Array name properties
|
|
* or
|
|
* @pObj
|
|
*/
|
|
this.getNamesFromObjArray = function(arr) {
|
|
var ret = [];
|
|
|
|
if (!Array.isArray(arr))
|
|
throw(Error('arr should be array!'));
|
|
|
|
ret = arr.map(function(item) {
|
|
return item.name;
|
|
});
|
|
|
|
return ret;
|
|
};
|
|
|
|
/**
|
|
* find object by name in arrray
|
|
*
|
|
* @param array
|
|
* @param name
|
|
*/
|
|
this.findObjByNameInArr = function(array, name) {
|
|
var ret;
|
|
|
|
if (!Array.isArray(array))
|
|
throw(Error('array should be array!'));
|
|
|
|
if (typeof name !== 'string')
|
|
throw(Error('name should be string!'));
|
|
|
|
array.some(function(item) {
|
|
var is = item.name === name,
|
|
isArray = Util.type.array(item);
|
|
|
|
if (is)
|
|
ret = item;
|
|
else if (isArray)
|
|
item.some(function(item) {
|
|
is = item.name === name;
|
|
|
|
if (is)
|
|
ret = item.data;
|
|
|
|
return is;
|
|
});
|
|
|
|
return is;
|
|
});
|
|
|
|
return ret;
|
|
};
|
|
|
|
/**
|
|
* start timer
|
|
* @param name
|
|
*/
|
|
this.time = function(name) {
|
|
var console = Scope.console;
|
|
|
|
Util.exec.ifExist(console, 'time', [name]);
|
|
|
|
return this;
|
|
};
|
|
|
|
/**
|
|
* stop timer
|
|
* @param name
|
|
*/
|
|
this.timeEnd = function(name) {
|
|
var console = Scope.console;
|
|
|
|
Util.exec.ifExist(console, 'timeEnd', [name]);
|
|
|
|
return this;
|
|
};
|
|
}
|
|
|
|
})(this);
|