@tencent-sdk/common
Version:
Tencent cloud common sdk
238 lines (234 loc) • 6.73 kB
JavaScript
import { createHmac, createHash } from 'crypto';
import camelCase from 'camelcase';
function sha1(str, key) {
return createHmac('sha1', key)
.update(str)
.digest('hex');
}
function hash(str, algorithm) {
return createHash(algorithm)
.update(str)
.digest('hex');
}
/**
* simple deep clone object
* @param {object} obj object
*/
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
/**
* return variable real type
* @param {any} obj input variable
*/
function getRealType(obj) {
return Object.prototype.toString.call(obj).slice(8, -1);
}
/**
* is array
* @param obj object
*/
function isArray(obj) {
return getRealType(obj) === 'Array';
}
/**
* is object
* @param obj object
*/
function isObject(obj) {
return getRealType(obj) === 'Object';
}
function isEmpty(val) {
return (val === undefined || val === null || (typeof val === 'number' && isNaN(val)));
}
function cleanEmptyValue(obj) {
var newObj = {};
for (var key in obj) {
var val = obj[key];
if (!isEmpty(val)) {
newObj[key] = val;
}
}
return newObj;
}
function camelCaseProps(obj, pascalCase) {
if (pascalCase === void 0) { pascalCase = false; }
var res = {};
if (isObject(obj)) {
res = {};
Object.keys(obj).forEach(function (key) {
var val = obj[key];
var k = camelCase(key, { pascalCase: pascalCase });
res[k] =
isObject(val) || isArray(val) ? camelCaseProps(val, pascalCase) : val;
});
}
if (isArray(obj)) {
res = [];
obj.forEach(function (item) {
res.push(isObject(item) || isArray(item)
? camelCaseProps(item, pascalCase)
: item);
});
}
return res;
}
function pascalCaseProps(obj) {
return camelCaseProps(obj, true);
}
function logger$1(topic, content) {
console.log("[DEBUG] " + topic + ": " + content + " ");
}
function getUnixTime(date) {
var val = date.getTime();
return Math.ceil(val / 1000);
}
function getDate(date) {
var year = date.getUTCFullYear();
var month = date.getUTCMonth() + 1;
var day = date.getUTCDate();
return year + "-" + (month > 9 ? month : "0" + month) + "-" + (day > 9 ? day : "0" + day);
}
/**
* iterate object or array
* @param obj object or array
* @param iterator iterator function
*/
function forEach(obj, iterator) {
if (isArray(obj)) {
var arr = obj;
if (arr.forEach) {
arr.forEach(iterator);
return;
}
for (var i = 0; i < arr.length; i += 1) {
iterator(arr[i], i, arr);
}
}
else {
var oo = obj;
for (var key in oo) {
if (obj.hasOwnProperty(key)) {
iterator(oo[key], key, obj);
}
}
}
}
/**
* flatter request parameter
* @param obj target object or array
*/
function flatten(obj) {
if (!isArray(obj) && !isObject(obj)) {
return {};
}
var ret = {};
var dump = function (obj, prefix, parents) {
var checkedParents = [];
if (parents) {
var i = void 0;
for (i = 0; i < parents.length; i++) {
if (parents[i] === obj) {
throw new Error('object has circular references');
}
checkedParents.push(obj);
}
}
checkedParents.push(obj);
if (!isArray(obj) && !isObject(obj)) {
if (!prefix) {
throw obj + 'is not object or array';
}
ret[prefix] = obj;
return {};
}
if (isArray(obj)) {
// it's an array
forEach(obj, function (obj, i) {
dump(obj, prefix ? prefix + '.' + i : '' + i, checkedParents);
});
}
else {
// it's an object
forEach(obj, function (obj, key) {
dump(obj, prefix ? prefix + '.' + key : '' + key, checkedParents);
});
}
};
dump(obj, null);
return ret;
}
function stringifyPrimitive(v) {
switch (typeof v) {
case 'string':
return v;
case 'boolean':
return v ? 'true' : 'false';
case 'number':
return isFinite(v) ? v : '';
default:
return '';
}
}
function safeUrlEncode(str) {
return encodeURIComponent(str)
.replace(/!/g, '%21')
.replace(/'/g, '%27')
.replace(/\(/g, '%28')
.replace(/\)/g, '%29')
.replace(/\*/g, '%2A');
}
function querystring(obj, isSafeEncode) {
if (isSafeEncode === void 0) { isSafeEncode = false; }
var sep = '&';
var eq = '=';
var encodeHandler = isSafeEncode ? safeUrlEncode : encodeURIComponent;
if (!obj)
return '';
if (obj && typeof obj === 'object') {
return Object.keys(obj)
.map(function (k) {
var ks = encodeHandler(stringifyPrimitive(k)) + eq;
if (Array.isArray(obj[k])) {
return obj[k]
.map(function (v) {
return ks + encodeHandler(stringifyPrimitive(v));
})
.join(sep);
}
else {
return ks + encodeHandler(stringifyPrimitive(obj[k]));
}
})
.filter(Boolean)
.join(sep);
}
return '';
}
function sortObjectKey(obj) {
var list = [];
Object.keys(obj).forEach(function (key) {
if (obj.hasOwnProperty(key)) {
list.push(key);
}
});
return list.sort(function (a, b) {
a = a.toLowerCase();
b = b.toLowerCase();
return a === b ? 0 : a > b ? 1 : -1;
});
}
function stringifyObject(obj, sortKeyMethod) {
var list = [];
var keyList = sortKeyMethod(obj);
keyList.forEach(function (key) {
var val = obj[key] === undefined || obj[key] === null ? '' : '' + obj[key];
key = key.toLowerCase();
key = safeUrlEncode(key);
val = safeUrlEncode(val) || '';
list.push(key + '=' + val);
});
return list.join('&');
}
export { deepClone, getRealType, isArray, isObject, isEmpty, cleanEmptyValue, camelCaseProps, pascalCaseProps, logger$1 as logger, getUnixTime, getDate, forEach, flatten, querystring, sortObjectKey, stringifyObject, sha1, hash };
//# sourceMappingURL=index.esm.js.map