|
@@ -1,16 +1,12 @@
|
|
|
/**
|
|
/**
|
|
|
* @category Services/utils
|
|
* @category Services/utils
|
|
|
- * @class ObjectUtils
|
|
|
|
|
- * Classe aidant à manipuler des Objets
|
|
|
|
|
|
|
+ * Utilitaire aidant à manipuler des Objets
|
|
|
*/
|
|
*/
|
|
|
import _ from 'lodash'
|
|
import _ from 'lodash'
|
|
|
import type { AnyJson } from '~/types/data'
|
|
import type { AnyJson } from '~/types/data'
|
|
|
import StringUtils from '~/services/utils/stringUtils'
|
|
import StringUtils from '~/services/utils/stringUtils'
|
|
|
-export default class ObjectUtils {
|
|
|
|
|
- // Private constructor to prevent instantiation
|
|
|
|
|
- private constructor() {
|
|
|
|
|
- // This utility class is not meant to be instantiated
|
|
|
|
|
- }
|
|
|
|
|
|
|
+
|
|
|
|
|
+const ObjectUtils = {
|
|
|
/**
|
|
/**
|
|
|
* Flatten un objet nested en un objet avec un seul niveau avec des noms de propriétés transformées comme cela 'foo.bar'
|
|
* Flatten un objet nested en un objet avec un seul niveau avec des noms de propriétés transformées comme cela 'foo.bar'
|
|
|
* L'objet passé en paramètre reste inchangé car il est cloné
|
|
* L'objet passé en paramètre reste inchangé car il est cloné
|
|
@@ -21,7 +17,7 @@ export default class ObjectUtils {
|
|
|
* @param excludedProperties
|
|
* @param excludedProperties
|
|
|
* @return {AnyJson}
|
|
* @return {AnyJson}
|
|
|
*/
|
|
*/
|
|
|
- static cloneAndFlatten(
|
|
|
|
|
|
|
+ cloneAndFlatten(
|
|
|
object: AnyJson,
|
|
object: AnyJson,
|
|
|
excludedProperties: Array<string> = [],
|
|
excludedProperties: Array<string> = [],
|
|
|
): AnyJson {
|
|
): AnyJson {
|
|
@@ -53,7 +49,7 @@ export default class ObjectUtils {
|
|
|
}
|
|
}
|
|
|
return values
|
|
return values
|
|
|
}, {})
|
|
}, {})
|
|
|
- }
|
|
|
|
|
|
|
+ },
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Transforme un objet flattened en un objet nested. L'objet passé en paramètre reste inchangé
|
|
* Transforme un objet flattened en un objet nested. L'objet passé en paramètre reste inchangé
|
|
@@ -62,7 +58,7 @@ export default class ObjectUtils {
|
|
|
* @param {AnyJson} object
|
|
* @param {AnyJson} object
|
|
|
* @return {AnyJson}
|
|
* @return {AnyJson}
|
|
|
*/
|
|
*/
|
|
|
- static cloneAndNest(object: AnyJson): AnyJson {
|
|
|
|
|
|
|
+ cloneAndNest(object: AnyJson): AnyJson {
|
|
|
if (typeof object !== 'object') {
|
|
if (typeof object !== 'object') {
|
|
|
throw new TypeError('Expecting an object parameter')
|
|
throw new TypeError('Expecting an object parameter')
|
|
|
}
|
|
}
|
|
@@ -94,7 +90,7 @@ export default class ObjectUtils {
|
|
|
)
|
|
)
|
|
|
return values
|
|
return values
|
|
|
}, {})
|
|
}, {})
|
|
|
- }
|
|
|
|
|
|
|
+ },
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Teste si le paramètre est un objet
|
|
* Teste si le paramètre est un objet
|
|
@@ -102,14 +98,14 @@ export default class ObjectUtils {
|
|
|
* @param {AnyJson} value
|
|
* @param {AnyJson} value
|
|
|
* @return {boolean}
|
|
* @return {boolean}
|
|
|
*/
|
|
*/
|
|
|
- static isObject(value: unknown): boolean {
|
|
|
|
|
|
|
+ isObject(value: unknown): boolean {
|
|
|
return (
|
|
return (
|
|
|
value !== null &&
|
|
value !== null &&
|
|
|
typeof value === 'object' &&
|
|
typeof value === 'object' &&
|
|
|
!Array.isArray(value) &&
|
|
!Array.isArray(value) &&
|
|
|
- ObjectUtils.prototype.toString.call(value) !== '[object Date]'
|
|
|
|
|
|
|
+ Object.prototype.toString.call(value) !== '[object Date]'
|
|
|
)
|
|
)
|
|
|
- }
|
|
|
|
|
|
|
+ },
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Clone l'objet et ses propriétés.
|
|
* Clone l'objet et ses propriétés.
|
|
@@ -117,14 +113,14 @@ export default class ObjectUtils {
|
|
|
* @param {ObjectUtils} object
|
|
* @param {ObjectUtils} object
|
|
|
* @return {ObjectUtils}
|
|
* @return {ObjectUtils}
|
|
|
*/
|
|
*/
|
|
|
- static clone(object: AnyJson): AnyJson {
|
|
|
|
|
|
|
+ clone(object: AnyJson): AnyJson {
|
|
|
return Object.keys(object).reduce((values: AnyJson, name: string) => {
|
|
return Object.keys(object).reduce((values: AnyJson, name: string) => {
|
|
|
if (Object.prototype.hasOwnProperty.call(object, name)) {
|
|
if (Object.prototype.hasOwnProperty.call(object, name)) {
|
|
|
values[name] = object[name]
|
|
values[name] = object[name]
|
|
|
}
|
|
}
|
|
|
return values
|
|
return values
|
|
|
}, {})
|
|
}, {})
|
|
|
- }
|
|
|
|
|
|
|
+ },
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Trie un objet selon ses clés (par ordre alphanumérique)
|
|
* Trie un objet selon ses clés (par ordre alphanumérique)
|
|
@@ -132,7 +128,7 @@ export default class ObjectUtils {
|
|
|
* @example sortObjectsByKey({b:1, d:2, c:3, a:4}) => {a:4, b:1, c:3, d:2}
|
|
* @example sortObjectsByKey({b:1, d:2, c:3, a:4}) => {a:4, b:1, c:3, d:2}
|
|
|
* @param toSort
|
|
* @param toSort
|
|
|
*/
|
|
*/
|
|
|
- static sortObjectsByKey(toSort: AnyJson): AnyJson {
|
|
|
|
|
|
|
+ sortObjectsByKey(toSort: AnyJson): AnyJson {
|
|
|
if (typeof toSort !== 'object') {
|
|
if (typeof toSort !== 'object') {
|
|
|
throw new TypeError('Expecting an object parameter')
|
|
throw new TypeError('Expecting an object parameter')
|
|
|
}
|
|
}
|
|
@@ -142,7 +138,7 @@ export default class ObjectUtils {
|
|
|
obj[key] = toSort[key]
|
|
obj[key] = toSort[key]
|
|
|
return obj
|
|
return obj
|
|
|
}, {})
|
|
}, {})
|
|
|
- }
|
|
|
|
|
|
|
+ },
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* Créé un hash à partir d'un objet
|
|
* Créé un hash à partir d'un objet
|
|
@@ -150,8 +146,10 @@ export default class ObjectUtils {
|
|
|
*
|
|
*
|
|
|
* @param obj
|
|
* @param obj
|
|
|
*/
|
|
*/
|
|
|
- static async hash(obj: object): Promise<string> {
|
|
|
|
|
|
|
+ async hash(obj: object): Promise<string> {
|
|
|
const sortedObject = this.sortObjectsByKey(_.cloneDeep(obj))
|
|
const sortedObject = this.sortObjectsByKey(_.cloneDeep(obj))
|
|
|
return await StringUtils.hash(JSON.stringify(sortedObject), 'SHA-1')
|
|
return await StringUtils.hash(JSON.stringify(sortedObject), 'SHA-1')
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+export default ObjectUtils
|