refactor: use native cloning function
authorJérôme Benoit <jerome.benoit@sap.com>
Tue, 13 Feb 2024 23:42:26 +0000 (00:42 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Tue, 13 Feb 2024 23:42:26 +0000 (00:42 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/utils/Utils.ts
tests/utils/Utils.test.ts

index 9bd5a9bb3ec990e16d92cfcc95dc3070ea9ec636..12c206ff63849ec0303c37a7ce8c41fffc5c29bb 100644 (file)
@@ -12,7 +12,6 @@ import {
   minutesToSeconds,
   secondsToMilliseconds
 } from 'date-fns'
-import { clone as cloneDeep } from 'rambda'
 
 import { Constants } from './Constants.js'
 import {
@@ -213,7 +212,7 @@ export const extractTimeSeriesValues = (timeSeries: TimestampedData[]): number[]
 }
 
 export const clone = <T>(object: T): T => {
-  return cloneDeep<T>(object)
+  return structuredClone<T>(object)
 }
 
 /**
index 7bee08ac625850cb73f40819d8467f3c176e8b6e..3b2a52ae88d8b33911033f607155d0c3a89daaf3 100644 (file)
@@ -341,14 +341,17 @@ await describe('Utils test suite', async () => {
     const date = new Date()
     expect(clone(date)).toStrictEqual(date)
     expect(clone(date) === date).toBe(false)
+    // The URL object seems to have not enumerable properties
+    const url = new URL('https://domain.tld')
+    expect(clone(url)).toStrictEqual({})
     const map = new Map([['1', '2']])
-    expect(clone(map)).toStrictEqual({})
+    expect(clone(map)).toStrictEqual(map)
     const set = new Set(['1'])
-    expect(clone(set)).toStrictEqual({})
+    expect(clone(set)).toStrictEqual(set)
     const weakMap = new WeakMap([[{ 1: 1 }, { 2: 2 }]])
-    expect(clone(weakMap)).toStrictEqual({})
+    expect(() => clone(weakMap)).toThrow(new Error('#<WeakMap> could not be cloned.'))
     const weakSet = new WeakSet([{ 1: 1 }, { 2: 2 }])
-    expect(clone(weakSet)).toStrictEqual({})
+    expect(() => clone(weakSet)).toThrow(new Error('#<WeakSet> could not be cloned.'))
   })
 
   await it('Verify hasOwnProp()', () => {