Skip to content

Commit

Permalink
feat: add a max depth param that defaults to 10 to cycle check
Browse files Browse the repository at this point in the history
Signed-off-by: Naseem <naseem@transit.app>
  • Loading branch information
Naseem committed Sep 10, 2020
1 parent 17532bb commit f4624b0
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
8 changes: 6 additions & 2 deletions packages/opentelemetry-core/src/utils/deep-merge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,19 @@
*/
export function deepMerge(
target: Record<string, any>,
source: Record<string, any>
source: Record<string, any>,
maxDepth = 10
) {
const merged = target;
if (maxDepth === 0) {
throw new Error('Max depth exceeded.');
}
for (const prop in source) {
if (bothPropsAreArrays(target, source, prop)) {
merged[prop] = [];
merged[prop] = source[prop];
} else if (bothPropsAreObjects(target, source, prop)) {
merged[prop] = deepMerge(target[prop], source[prop]);
merged[prop] = deepMerge(target[prop], source[prop], maxDepth - 1);
} else {
merged[prop] = source[prop];
}
Expand Down
10 changes: 10 additions & 0 deletions packages/opentelemetry-core/test/utils/deep-merge.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,14 @@ describe('deepMerge', () => {
const merged = deepMerge(target, source);
assert.deepEqual(merged, expected);
});

it('should respect the max depth', () => {
assert.throws(() => {
deepMerge(
{ a: { a: { a: { a: { a: { a: 1 } } } } } },
{ a: { a: { a: { a: { a: { a: 1 } } } } } },
5
);
});
});
});

0 comments on commit f4624b0

Please sign in to comment.