Browse Source

Reimplement redactObject() without cloneDeep() (#2760)

* Reimplement redactObject() without cloneDeep()

* Update changelog
pull/2761/head^2
Thomas Kaul 1 year ago
committed by GitHub
parent
commit
7c33120546
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      CHANGELOG.md
  2. 14
      apps/api/src/helper/object.helper.ts

1
CHANGELOG.md

@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Set the select column of the lazy-loaded activities table to stick at the end (experimental) - Set the select column of the lazy-loaded activities table to stick at the end (experimental)
- Improved the performance of the value redaction interceptor for the impersonation mode by eliminating `cloneDeep`
## 2.31.0 - 2023-12-16 ## 2.31.0 - 2023-12-16

14
apps/api/src/helper/object.helper.ts

@ -32,9 +32,11 @@ export function nullifyValuesInObjects<T>(aObjects: T[], keys: string[]): T[] {
} }
export function redactAttributes({ export function redactAttributes({
isFirstRun = true,
object, object,
options options
}: { }: {
isFirstRun?: boolean;
object: any; object: any;
options: { attribute: string; valueMap: { [key: string]: any } }[]; options: { attribute: string; valueMap: { [key: string]: any } }[];
}): any { }): any {
@ -42,7 +44,10 @@ export function redactAttributes({
return object; return object;
} }
const redactedObject = cloneDeep(object); // Create deep clone
const redactedObject = isFirstRun
? JSON.parse(JSON.stringify(object))
: object;
for (const option of options) { for (const option of options) {
if (redactedObject.hasOwnProperty(option.attribute)) { if (redactedObject.hasOwnProperty(option.attribute)) {
@ -59,7 +64,11 @@ export function redactAttributes({
if (isArray(redactedObject[property])) { if (isArray(redactedObject[property])) {
redactedObject[property] = redactedObject[property].map( redactedObject[property] = redactedObject[property].map(
(currentObject) => { (currentObject) => {
return redactAttributes({ options, object: currentObject }); return redactAttributes({
options,
isFirstRun: false,
object: currentObject
});
} }
); );
} else if ( } else if (
@ -69,6 +78,7 @@ export function redactAttributes({
// Recursively call the function on the nested object // Recursively call the function on the nested object
redactedObject[property] = redactAttributes({ redactedObject[property] = redactAttributes({
options, options,
isFirstRun: false,
object: redactedObject[property] object: redactedObject[property]
}); });
} }

Loading…
Cancel
Save