From 5b4556011840c03146a5a206f0672138a121ce73 Mon Sep 17 00:00:00 2001 From: kazukitaninaka Date: Wed, 24 Dec 2025 01:31:14 +0900 Subject: [PATCH] feat: add file property on RumError --- packages/core/src/domain/error/error.spec.ts | 13 +++++++------ packages/core/src/domain/error/error.ts | 1 + packages/core/src/domain/error/error.types.ts | 1 + .../src/domain/createErrorFieldFromRawError.spec.ts | 1 + .../rum-core/src/domain/error/errorCollection.ts | 1 + packages/rum-core/src/rawRumEvent.types.ts | 1 + 6 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/core/src/domain/error/error.spec.ts b/packages/core/src/domain/error/error.spec.ts index ce6c9f4a44..b261d040b2 100644 --- a/packages/core/src/domain/error/error.spec.ts +++ b/packages/core/src/domain/error/error.spec.ts @@ -100,21 +100,21 @@ describe('computeRawError', () => { column: 15, func: 'foo', line: 52, - url: 'http://path/to/file.js', + url: 'http://path/to/file-1.js', }, { args: [], column: undefined, func: '?', line: 12, - url: 'http://path/to/file.js', + url: 'http://path/to/file-2.js', }, { args: ['baz'], column: undefined, func: '?', line: undefined, - url: 'http://path/to/file.js', + url: 'http://path/to/file-3.js', }, ], } @@ -128,10 +128,11 @@ describe('computeRawError', () => { expect(formatted.message).toEqual('oh snap!') expect(formatted.stack).toEqual(`TypeError: oh snap! - at foo(1, bar) @ http://path/to/file.js:52:15 - at @ http://path/to/file.js:12 - at (baz) @ http://path/to/file.js`) + at foo(1, bar) @ http://path/to/file-1.js:52:15 + at @ http://path/to/file-2.js:12 + at (baz) @ http://path/to/file-3.js`) expect(formatted.type).toEqual('TypeError') + expect(formatted.file).toEqual('http://path/to/file-1.js') }) it('should set handling according to given parameter', () => { diff --git a/packages/core/src/domain/error/error.ts b/packages/core/src/domain/error/error.ts index 94a2da2145..092ffd3d3c 100644 --- a/packages/core/src/domain/error/error.ts +++ b/packages/core/src/domain/error/error.ts @@ -44,6 +44,7 @@ function computeErrorBase({ type: stackTrace ? stackTrace.name : undefined, message: computeMessage(stackTrace, isErrorInstance, nonErrorPrefix, originalError), stack: stackTrace ? toStackTraceString(stackTrace) : useFallbackStack ? NO_ERROR_STACK_PRESENT_MESSAGE : undefined, + file: stackTrace?.stack[0]?.url, } } diff --git a/packages/core/src/domain/error/error.types.ts b/packages/core/src/domain/error/error.types.ts index c4417daa52..670a80e876 100644 --- a/packages/core/src/domain/error/error.types.ts +++ b/packages/core/src/domain/error/error.types.ts @@ -30,6 +30,7 @@ export interface RawError { message: string type?: string stack?: string + file?: string source: ErrorSource originalError?: unknown handling?: ErrorHandling diff --git a/packages/logs/src/domain/createErrorFieldFromRawError.spec.ts b/packages/logs/src/domain/createErrorFieldFromRawError.spec.ts index d7df73733a..2cb9b9180b 100644 --- a/packages/logs/src/domain/createErrorFieldFromRawError.spec.ts +++ b/packages/logs/src/domain/createErrorFieldFromRawError.spec.ts @@ -15,6 +15,7 @@ describe('createErrorFieldFromRawError', () => { type: 'qux', message: 'quux', stack: 'quuz', + file: 'https://example.com/quux.js', causes: [], fingerprint: 'corge', csp: { diff --git a/packages/rum-core/src/domain/error/errorCollection.ts b/packages/rum-core/src/domain/error/errorCollection.ts index baa08d67a7..6f35427cef 100644 --- a/packages/rum-core/src/domain/error/errorCollection.ts +++ b/packages/rum-core/src/domain/error/errorCollection.ts @@ -78,6 +78,7 @@ function processError(error: RawError): RawRumEventCollectedData