blob: 3821edd1e0c7446397dfbf7995463182b3db8310 [file]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as Common from '../../core/common/common.js';
import * as StackTrace from '../stack_trace/stack_trace.js';
// TODO: also add SymbolizedSyntaxError and UnparsableError
export type SymbolizedError = SymbolizedErrorObject;
export class SymbolizedErrorObject extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
readonly message: string;
readonly stackTrace: StackTrace.StackTrace.ParsedErrorStackTrace;
readonly cause: SymbolizedError|null;
constructor(message: string, stackTrace: StackTrace.StackTrace.ParsedErrorStackTrace, cause: SymbolizedError|null) {
super();
this.message = message;
this.stackTrace = stackTrace;
this.cause = cause;
this.stackTrace.addEventListener(StackTrace.StackTrace.Events.UPDATED, this.#fireUpdated, this);
this.cause?.addEventListener(Events.UPDATED, this.#fireUpdated, this);
}
dispose(): void {
this.stackTrace.removeEventListener(StackTrace.StackTrace.Events.UPDATED, this.#fireUpdated, this);
this.cause?.removeEventListener(Events.UPDATED, this.#fireUpdated, this);
this.cause?.dispose();
}
#fireUpdated(): void {
this.dispatchEventToListeners(Events.UPDATED);
}
}
export const enum Events {
UPDATED = 'UPDATED',
}
export interface EventTypes {
[Events.UPDATED]: void;
}