fingerprintjs

Форк
0
/
mock_properties.ts 
36 строк · 1.2 Кб
1
/**
2
 * Sets new property values to the object and reverts the properties when the action is complete
3
 */
4
export default async function withMockProperties<T>(
5
  object: Record<never, unknown>,
6
  mockProperties: Record<string, PropertyDescriptor | undefined>,
7
  action: () => Promise<T> | T,
8
): Promise<T> {
9
  const originalProperties: Record<string, PropertyDescriptor | undefined> = {}
10

11
  for (const property of Object.keys(mockProperties)) {
12
    originalProperties[property] = Object.getOwnPropertyDescriptor(object, property)
13
    const mockProperty = mockProperties[property]
14
    if (mockProperty) {
15
      Object.defineProperty(object, property, {
16
        ...mockProperty,
17
        configurable: true, // Must be configurable, otherwise won't be able to revert
18
      })
19
    } else {
20
      delete (object as Record<keyof never, unknown>)[property]
21
    }
22
  }
23

24
  try {
25
    return await action()
26
  } finally {
27
    for (const property of Object.keys(originalProperties)) {
28
      const propertyDescriptor = originalProperties[property]
29
      if (propertyDescriptor === undefined) {
30
        delete (object as Record<keyof never, unknown>)[property]
31
      } else {
32
        Object.defineProperty(object, property, propertyDescriptor)
33
      }
34
    }
35
  }
36
}
37

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.