diff options
author | Marius David Wieschollek <passwords.public@mdns.eu> | 2020-01-10 16:14:09 +0300 |
---|---|---|
committer | Marius David Wieschollek <passwords.public@mdns.eu> | 2020-01-10 16:14:09 +0300 |
commit | 8d26736cf82f63d2306a393e8943b3438e3f9a2c (patch) | |
tree | 071a7d26edf82d2dfc08f8433365aa7ab03a790c /src/Utility | |
parent | 6444dd8308ae7740f56e8ffb964c4b81bc9032c0 (diff) |
Separate server and api in different classes
Signed-off-by: Marius David Wieschollek <passwords.public@mdns.eu>
Diffstat (limited to 'src/Utility')
-rw-r--r-- | src/Utility/ObjectClone.js | 33 | ||||
-rw-r--r-- | src/Utility/ObjectMerger.js | 28 |
2 files changed, 61 insertions, 0 deletions
diff --git a/src/Utility/ObjectClone.js b/src/Utility/ObjectClone.js new file mode 100644 index 0000000..ca18f47 --- /dev/null +++ b/src/Utility/ObjectClone.js @@ -0,0 +1,33 @@ +class ObjectClone { + + /** + * + * @param {Object} object + * @return {Object} + */ + clone(object) { + if(typeof object !== 'object') return object; + + let clone = new object.constructor(); + for(let key in object) { + if(!object.hasOwnProperty(key)) continue; + let element = object[key]; + + if(Array.isArray(element)) { + clone[key] = element.slice(0); + } else if(element instanceof Date) { + clone[key] = new Date(element.getTime()); + } else if(element === null) { + clone[key] = null; + } else if(typeof element === 'object') { + clone[key] = this.clone(element); + } else { + clone[key] = element; + } + } + + return clone; + } +} + +export default new ObjectClone();
\ No newline at end of file diff --git a/src/Utility/ObjectMerger.js b/src/Utility/ObjectMerger.js new file mode 100644 index 0000000..e1d31f5 --- /dev/null +++ b/src/Utility/ObjectMerger.js @@ -0,0 +1,28 @@ +import ObjectClone from './ObjectClone'; + +class ObjectMerger { + merge(target, source) { + for(let key in source) { + if(!source.hasOwnProperty(key)) continue; + + if(!target.hasOwnProperty(key) || target[key] === null) { + target[key] = ObjectClone.clone(source[key]); + } + + let targetValue = target[key], + sourceValue = source[key]; + + if(typeof targetValue === 'object' && typeof sourceValue === 'object') { + target[key] = this.merge(targetValue, sourceValue); + } else if(Array.isArray(targetValue) && Array.isArray(sourceValue)) { + target[key] = targetValue.concat(sourceValue); + } else { + target[key] = ObjectClone.clone(sourceValue); + } + } + + return target; + } +} + +export default new ObjectMerger();
\ No newline at end of file |