From ab693001939d1962064dc7b07d126a08b72e530e Mon Sep 17 00:00:00 2001 From: Grunet Date: Wed, 5 Apr 2023 03:11:40 +0000 Subject: [PATCH 1/4] fix(opentelemetry-sdk-trace-web): don't crash in runtimes where location isn't defined --- packages/opentelemetry-sdk-trace-web/src/utils.ts | 2 +- .../test/utils.test.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/opentelemetry-sdk-trace-web/src/utils.ts b/packages/opentelemetry-sdk-trace-web/src/utils.ts index 127454b0a64..8923ac66698 100644 --- a/packages/opentelemetry-sdk-trace-web/src/utils.ts +++ b/packages/opentelemetry-sdk-trace-web/src/utils.ts @@ -307,7 +307,7 @@ export function parseUrl(url: string): URLLike { if (typeof URL === 'function') { return new URL( url, - typeof document !== 'undefined' ? document.baseURI : location.href + typeof document !== 'undefined' ? document.baseURI : (typeof location !== 'undefined' ? location.href : undefined) ); } const element = getUrlNormalizingAnchor(); diff --git a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts index 06e550c1f06..92bed7ce8f8 100644 --- a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts +++ b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts @@ -495,6 +495,21 @@ describe('utils', () => { assert.strictEqual(typeof url[field], 'string'); }); }); + + // Deno is an example of this + it('should parse url in runtimes where global location is not defined', () => { + const actualLocationObj = globalThis.location; + globalThis.location = undefined as any; + + try { + const url = parseUrl('https://opentelemetry.io/foo'); + urlFields.forEach(field => { + assert.strictEqual(typeof url[field], 'string'); + }); + } finally { + globalThis.location = actualLocationObj; + } + }); }); describe('normalizeUrl', () => { From 72295ee7ae464ab56560e01b8bf31c1654d7167f Mon Sep 17 00:00:00 2001 From: Grunet Date: Wed, 5 Apr 2023 03:19:50 +0000 Subject: [PATCH 2/4] chore: updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9172dab89a..d2612844b27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :bug: (Bug Fix) * fix(instrumentation-http): fixed description for http.server.duration metric [#3710](https://github.com/open-telemetry/opentelemetry-js/pull/3710) +* fix(opentelemetry-sdk-trace-web): don't crash in runtimes where location isn't defined [#3715](https://github.com/open-telemetry/opentelemetry-js/pull/3715) ### :books: (Refine Doc) From 1194a92f3c364c91c95cbfb0ad06f97c1759a5a5 Mon Sep 17 00:00:00 2001 From: Grunet Date: Wed, 5 Apr 2023 03:33:02 +0000 Subject: [PATCH 3/4] chore(opentelemetry-sdk-trace-web): fix linter issues --- packages/opentelemetry-sdk-trace-web/src/utils.ts | 6 +++++- packages/opentelemetry-sdk-trace-web/test/utils.test.ts | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/opentelemetry-sdk-trace-web/src/utils.ts b/packages/opentelemetry-sdk-trace-web/src/utils.ts index 8923ac66698..04898e6a033 100644 --- a/packages/opentelemetry-sdk-trace-web/src/utils.ts +++ b/packages/opentelemetry-sdk-trace-web/src/utils.ts @@ -307,7 +307,11 @@ export function parseUrl(url: string): URLLike { if (typeof URL === 'function') { return new URL( url, - typeof document !== 'undefined' ? document.baseURI : (typeof location !== 'undefined' ? location.href : undefined) + typeof document !== 'undefined' + ? document.baseURI + : typeof location !== 'undefined' + ? location.href + : undefined ); } const element = getUrlNormalizingAnchor(); diff --git a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts index 92bed7ce8f8..3c1c60b90a6 100644 --- a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts +++ b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts @@ -499,8 +499,8 @@ describe('utils', () => { // Deno is an example of this it('should parse url in runtimes where global location is not defined', () => { const actualLocationObj = globalThis.location; - globalThis.location = undefined as any; - + globalThis.location = undefined as any; // undefined is not allowed as a value normally, hence the any + try { const url = parseUrl('https://opentelemetry.io/foo'); urlFields.forEach(field => { From 4ecedcef3312641feaf724dd0ce3ff249b3399d9 Mon Sep 17 00:00:00 2001 From: Grunet Date: Mon, 10 Apr 2023 22:44:26 +0000 Subject: [PATCH 4/4] fix(opentelemetry-sdk-trace-web): Remove broken test and replace with comment --- packages/opentelemetry-sdk-trace-web/src/utils.ts | 2 +- .../test/utils.test.ts | 15 --------------- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/packages/opentelemetry-sdk-trace-web/src/utils.ts b/packages/opentelemetry-sdk-trace-web/src/utils.ts index 04898e6a033..2027abc42f0 100644 --- a/packages/opentelemetry-sdk-trace-web/src/utils.ts +++ b/packages/opentelemetry-sdk-trace-web/src/utils.ts @@ -309,7 +309,7 @@ export function parseUrl(url: string): URLLike { url, typeof document !== 'undefined' ? document.baseURI - : typeof location !== 'undefined' + : typeof location !== 'undefined' // Some JS runtimes (e.g. Deno) don't define this ? location.href : undefined ); diff --git a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts index 3c1c60b90a6..06e550c1f06 100644 --- a/packages/opentelemetry-sdk-trace-web/test/utils.test.ts +++ b/packages/opentelemetry-sdk-trace-web/test/utils.test.ts @@ -495,21 +495,6 @@ describe('utils', () => { assert.strictEqual(typeof url[field], 'string'); }); }); - - // Deno is an example of this - it('should parse url in runtimes where global location is not defined', () => { - const actualLocationObj = globalThis.location; - globalThis.location = undefined as any; // undefined is not allowed as a value normally, hence the any - - try { - const url = parseUrl('https://opentelemetry.io/foo'); - urlFields.forEach(field => { - assert.strictEqual(typeof url[field], 'string'); - }); - } finally { - globalThis.location = actualLocationObj; - } - }); }); describe('normalizeUrl', () => {