gamelet-cli
Version:
Download project from code.gamelet.com, edit/test in vscode and sync back to server.
191 lines • 13.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ObjectUtil = void 0;
class ObjectUtil {
/**
* Create a new object and deep clone data from provided source.
*
* @param {any} data
* @return {any}
*/
static deepCloneObject(data) {
if (!data) {
return data;
}
if (typeof data === 'object') {
if (Array.isArray(data)) {
return data.map(item => ObjectUtil.deepCloneObject(item));
}
else {
let obj = {};
for (let key in data) {
obj[key] = ObjectUtil.deepCloneObject(data[key]);
}
return obj;
}
}
return data;
}
/**
* Compare 2 objects to see if they contains same data.
*
* @param {any} data0
* @param {any} data1
* @return {boolean}
*/
static equals(data0, data1) {
if (data0 && data1 && typeof data0 === 'object' && typeof data1 === 'object') {
if (Array.isArray(data0)) {
if (Array.isArray(data1)) {
// array comparing
let len = data0.length;
if (data1.length != len) {
return false;
}
for (let i = 0; i < len; ++i) {
if (!ObjectUtil.equals(data0[i], data1[i])) {
return false;
}
}
return true;
}
return false;
}
else if (Array.isArray(data1)) {
return false;
}
// object comparing
let keys0 = Object.keys(data0);
let keys1 = Object.keys(data1);
let len = keys0.length;
if (len != keys1.length) {
return false;
}
keys0.sort();
keys1.sort();
for (let i = 0; i < len; ++i) {
let key = keys0[i];
if (key != keys1[i]) {
return false;
}
if (!ObjectUtil.equals(data0[key], data1[key])) {
return false;
}
}
return true;
}
return data0 === data1;
}
/**
* Similar to Object.assign, but will not overwrite child that is object-typed.
* safeAssign() will recursively safeAssign object-typed children.
*
* @param {any} target The target object.
* @param {any} source The source object(s).
* @return {any} The target object.
*/
static safeAssign(target, source) {
if (source && typeof source === 'object') {
if (target && typeof target === 'object') {
if (Array.isArray(source)) {
if (Array.isArray(target)) {
// copy array items
for (let i = 0; i < source.length; ++i) {
target[i] = ObjectUtil.safeAssign(target[i], source[i]);
}
return target;
}
else {
return ObjectUtil.safeAssign([], source);
}
}
else if (Array.isArray(target)) {
return ObjectUtil.safeAssign({}, source);
}
else {
// copy object items
for (let key in source) {
target[key] = ObjectUtil.safeAssign(target[key], source[key]);
}
return target;
}
}
else if (Array.isArray(source)) {
return ObjectUtil.safeAssign([], source);
}
else {
return ObjectUtil.safeAssign({}, source);
}
}
else {
return source;
}
}
/**
* Remove keys on data that contain same value as in reference.
*
* @param {any} data The target object that is being modified.
* @param {any} reference The reference object.
* @return {any} The target object.
*/
static removeKeysWithSameValue(target, reference) {
if (target && typeof target === 'object' && reference && typeof reference === 'object') {
if (Array.isArray(target)) {
if (Array.isArray(reference)) {
for (let i = 0; i < target.length; ++i) {
ObjectUtil.removeKeysWithSameValue(target[i], reference[i]);
}
}
}
else if (Array.isArray(reference)) {
// do nothing with object vs array
}
else {
for (let key in target) {
let value = target[key];
let refValue = reference[key];
if (value === refValue) {
delete target[key];
}
else {
ObjectUtil.removeKeysWithSameValue(value, refValue);
}
}
}
}
return target;
}
static forEach(obj, callback) {
if (obj && typeof obj === 'object') {
if (Array.isArray(obj)) {
throw new Error('ObjectUtil.forEach: obj is an array, use Array.forEach instead.');
}
Object.keys(obj).forEach(key => {
callback(key, obj[key], obj);
});
}
else {
throw new Error('ObjectUtil.forEach: not an object');
}
}
static map(obj, callback) {
if (obj && typeof obj === 'object') {
if (Array.isArray(obj)) {
throw new Error('ObjectUtil.map: obj is an array, use Array.map instead.');
}
let ret = {};
Object.keys(obj).map(key => {
ret[key] = callback(key, obj[key], obj);
});
return ret;
}
else {
throw new Error('ObjectUtil.map: not an object');
}
}
static isPromise(value) {
return value && Promise.resolve(value) == value;
}
}
exports.ObjectUtil = ObjectUtil;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JqZWN0VXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvT2JqZWN0VXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFhLFVBQVU7SUFFdEI7Ozs7O09BS007SUFDQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQVM7UUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFDRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMxRDtpQkFBTTtnQkFDTixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7b0JBQ3JCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDtnQkFDRCxPQUFPLEdBQUcsQ0FBQzthQUNYO1NBQ0Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7O09BTU07SUFDQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQVUsRUFBRSxLQUFVO1FBQzFDLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUN6QixrQkFBa0I7b0JBQ2xCLElB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