From de344a98f52e0308162b3a881f39ff5a1046ec13 Mon Sep 17 00:00:00 2001 From: SorsOps <80043879+sorsOps@users.noreply.github.com> Date: Mon, 4 Sep 2023 14:02:16 +0200 Subject: [PATCH 1/4] fix: throwing errors on undefined --- packages/utils/src/instrument.ts | 8 ++++---- packages/utils/test/instrument.test.ts | 20 +++++++++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/utils/src/instrument.ts b/packages/utils/src/instrument.ts index 157fe8a50c0b..93766daaa46f 100644 --- a/packages/utils/src/instrument.ts +++ b/packages/utils/src/instrument.ts @@ -247,8 +247,8 @@ export function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: str } /** JSDoc */ -function instrumentXHR(): void { - if (!('XMLHttpRequest' in WINDOW)) { +export function instrumentXHR(): void { + if (!((WINDOW as any).XMLHttpRequest)) { return; } @@ -539,8 +539,8 @@ type InstrumentedElement = Element & { }; /** JSDoc */ -function instrumentDOM(): void { - if (!('document' in WINDOW)) { +export function instrumentDOM(): void { + if (!(WINDOW.document)) { return; } diff --git a/packages/utils/test/instrument.test.ts b/packages/utils/test/instrument.test.ts index f9088ca1257a..14e89e7883d0 100644 --- a/packages/utils/test/instrument.test.ts +++ b/packages/utils/test/instrument.test.ts @@ -1,6 +1,24 @@ -import { parseFetchArgs } from '../src/instrument'; +import jestMock from 'jest-mock'; +import { instrumentXHR, instrumentDOM, parseFetchArgs } from '../src/instrument'; + +//@ts-ignore +jestMock.mock('../src/worldwide', () => ({ + //Return an empty object with undefined properties + getGlobalObject: () => ({ + document: undefined, + XMLHttpRequest: undefined, + }) +})) describe('instrument', () => { + describe('polyfilling', () => { + it('does not instrumentXHR if no XMLHttpRequest detected', () => { + expect(instrumentXHR()).not.toThrow(); + }); + it('does not instrumentDOM if no document detected', () => { + expect(instrumentDOM()).not.toThrow(); + }); + }); describe('parseFetchArgs', () => { it.each([ ['string URL only', ['http://example.com'], { method: 'GET', url: 'http://example.com' }], From 371c49919ce0377e2ce1a50e3303a6e8f885630f Mon Sep 17 00:00:00 2001 From: SorsOps <80043879+sorsOps@users.noreply.github.com> Date: Mon, 4 Sep 2023 14:04:18 +0200 Subject: [PATCH 2/4] Lint fix --- packages/utils/src/instrument.ts | 4 ++-- packages/utils/test/instrument.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/utils/src/instrument.ts b/packages/utils/src/instrument.ts index 93766daaa46f..ef70ad63d3e3 100644 --- a/packages/utils/src/instrument.ts +++ b/packages/utils/src/instrument.ts @@ -248,7 +248,7 @@ export function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: str /** JSDoc */ export function instrumentXHR(): void { - if (!((WINDOW as any).XMLHttpRequest)) { + if (!(WINDOW as any).XMLHttpRequest) { return; } @@ -540,7 +540,7 @@ type InstrumentedElement = Element & { /** JSDoc */ export function instrumentDOM(): void { - if (!(WINDOW.document)) { + if (!WINDOW.document) { return; } diff --git a/packages/utils/test/instrument.test.ts b/packages/utils/test/instrument.test.ts index 14e89e7883d0..3f722fd09b62 100644 --- a/packages/utils/test/instrument.test.ts +++ b/packages/utils/test/instrument.test.ts @@ -7,8 +7,8 @@ jestMock.mock('../src/worldwide', () => ({ getGlobalObject: () => ({ document: undefined, XMLHttpRequest: undefined, - }) -})) + }), +})); describe('instrument', () => { describe('polyfilling', () => { From e1407c1513b8ef9827a0833c6ac80c0279ec21de Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Mon, 4 Sep 2023 15:56:39 +0000 Subject: [PATCH 3/4] Update test --- packages/utils/test/instrument.test.ts | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/packages/utils/test/instrument.test.ts b/packages/utils/test/instrument.test.ts index 3f722fd09b62..f1ec46b93fb1 100644 --- a/packages/utils/test/instrument.test.ts +++ b/packages/utils/test/instrument.test.ts @@ -1,9 +1,7 @@ -import jestMock from 'jest-mock'; -import { instrumentXHR, instrumentDOM, parseFetchArgs } from '../src/instrument'; +import { instrumentDOM, instrumentXHR, parseFetchArgs } from '../src/instrument'; -//@ts-ignore -jestMock.mock('../src/worldwide', () => ({ - //Return an empty object with undefined properties +jest.mock('../src/worldwide', () => ({ + // Return an empty object with undefined properties getGlobalObject: () => ({ document: undefined, XMLHttpRequest: undefined, @@ -11,14 +9,14 @@ jestMock.mock('../src/worldwide', () => ({ })); describe('instrument', () => { - describe('polyfilling', () => { - it('does not instrumentXHR if no XMLHttpRequest detected', () => { - expect(instrumentXHR()).not.toThrow(); - }); - it('does not instrumentDOM if no document detected', () => { - expect(instrumentDOM()).not.toThrow(); - }); + it('instrumentXHR() does not throw if XMLHttpRequest is a key on window but not defined', () => { + expect(instrumentXHR).not.toThrow(); }); + + it('instrumentDOM() does not throw if XMLHttpRequest is a key on window but not defined', () => { + expect(instrumentDOM).not.toThrow(); + }); + describe('parseFetchArgs', () => { it.each([ ['string URL only', ['http://example.com'], { method: 'GET', url: 'http://example.com' }], From b53b1253567d358511c015ef057c2decf7f381c5 Mon Sep 17 00:00:00 2001 From: Luca Forstner Date: Tue, 5 Sep 2023 08:28:01 +0000 Subject: [PATCH 4/4] Ignore linter --- packages/utils/src/instrument.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/utils/src/instrument.ts b/packages/utils/src/instrument.ts index ef70ad63d3e3..f3364ba92b9c 100644 --- a/packages/utils/src/instrument.ts +++ b/packages/utils/src/instrument.ts @@ -248,6 +248,7 @@ export function parseFetchArgs(fetchArgs: unknown[]): { method: string; url: str /** JSDoc */ export function instrumentXHR(): void { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (!(WINDOW as any).XMLHttpRequest) { return; }