azure-devops-mcp

by RyanCardin15
Verified
/** * An extended version of the `Event` emitted by the `EventSource` object when an error occurs. * While the spec does not include any additional properties, we intentionally go beyond the spec * and provide some (minimal) additional information to aid in debugging. * * @public */ export class ErrorEvent extends Event { /** * HTTP status code, if this was triggered by an HTTP error * Note: this is not part of the spec, but is included for better error handling. * * @public */ public code?: number | undefined /** * Optional message attached to the error. * Note: this is not part of the spec, but is included for better error handling. * * @public */ public message?: string | undefined /** * Constructs a new `ErrorEvent` instance. This is typically not called directly, * but rather emitted by the `EventSource` object when an error occurs. * * @param type - The type of the event (should be "error") * @param errorEventInitDict - Optional properties to include in the error event */ constructor( type: string, errorEventInitDict?: {message?: string | undefined; code?: number | undefined}, ) { super(type) this.code = errorEventInitDict?.code ?? undefined this.message = errorEventInitDict?.message ?? undefined } /** * Node.js "hides" the `message` and `code` properties of the `ErrorEvent` instance, * when it is `console.log`'ed. This makes it harder to debug errors. To ease debugging, * we explicitly include the properties in the `inspect` method. * * This is automatically called by Node.js when you `console.log` an instance of this class. * * @param _depth - The current depth * @param options - The options passed to `util.inspect` * @param inspect - The inspect function to use (prevents having to import it from `util`) * @returns A string representation of the error */ [Symbol.for('nodejs.util.inspect.custom')]( _depth: number, options: {colors: boolean}, inspect: (obj: unknown, inspectOptions: {colors: boolean}) => string, ): string { return inspect(inspectableError(this), options) } /** * Deno "hides" the `message` and `code` properties of the `ErrorEvent` instance, * when it is `console.log`'ed. This makes it harder to debug errors. To ease debugging, * we explicitly include the properties in the `inspect` method. * * This is automatically called by Deno when you `console.log` an instance of this class. * * @param inspect - The inspect function to use (prevents having to import it from `util`) * @param options - The options passed to `Deno.inspect` * @returns A string representation of the error */ [Symbol.for('Deno.customInspect')]( inspect: (obj: unknown, inspectOptions: {colors: boolean}) => string, options: {colors: boolean}, ): string { return inspect(inspectableError(this), options) } } /** * For environments where DOMException may not exist, we will use a SyntaxError instead. * While this isn't strictly according to spec, it is very close. * * @param message - The message to include in the error * @returns A `DOMException` or `SyntaxError` instance * @internal */ export function syntaxError(message: string): SyntaxError { // If someone can figure out a way to make this work without depending on DOM/Node.js typings, // and without casting to `any`, please send a PR 🙏 // eslint-disable-next-line @typescript-eslint/no-explicit-any const DomException = (globalThis as any).DOMException if (typeof DomException === 'function') { return new DomException(message, 'SyntaxError') } return new SyntaxError(message) } /** * Flatten an error into a single error message string. * Unwraps nested errors and joins them with a comma. * * @param err - The error to flatten * @returns A string representation of the error * @internal */ export function flattenError(err: unknown): string { if (!(err instanceof Error)) { return `${err}` } if ('errors' in err && Array.isArray(err.errors)) { return err.errors.map(flattenError).join(', ') } if ('cause' in err && err.cause instanceof Error) { return `${err}: ${flattenError(err.cause)}` } return err.message } /** * Convert an `ErrorEvent` instance into a plain object for inspection. * * @param err - The `ErrorEvent` instance to inspect * @returns A plain object representation of the error * @internal */ function inspectableError(err: ErrorEvent) { return { type: err.type, message: err.message, code: err.code, defaultPrevented: err.defaultPrevented, cancelable: err.cancelable, timeStamp: err.timeStamp, } }