Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
linkedErrors integrations
생성일
5년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
16 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
78 행
복사
45 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
98 행
복사
import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';
import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core';
import { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types';
import { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types';
복사
복사됨
복사
복사됨
import { isInstanceOf
} from '@sentry/utils';
import { isInstanceOf
, SyncPromise
} from '@sentry/utils';
복사
복사됨
복사
복사됨
import {
exceptionFromStacktrace
} from '../parsers';
import {
getExceptionFromError
} from '../parsers';
import { computeStackTrace } from '../tracekit';
const DEFAULT_KEY = 'cause';
const DEFAULT_KEY = 'cause';
const DEFAULT_LIMIT = 5;
const DEFAULT_LIMIT = 5;
/** Adds SDK info to an event. */
/** Adds SDK info to an event. */
export class LinkedErrors implements Integration {
export class LinkedErrors implements Integration {
/**
/**
* @inheritDoc
* @inheritDoc
*/
*/
public static id: string = 'LinkedErrors';
public static id: string = 'LinkedErrors';
/**
/**
* @inheritDoc
* @inheritDoc
*/
*/
public readonly name: string = LinkedErrors.id;
public readonly name: string = LinkedErrors.id;
/**
/**
* @inheritDoc
* @inheritDoc
*/
*/
private readonly _key: string;
private readonly _key: string;
/**
/**
* @inheritDoc
* @inheritDoc
*/
*/
private readonly _limit: number;
private readonly _limit: number;
/**
/**
* @inheritDoc
* @inheritDoc
*/
*/
public constructor(options: { key?: string; limit?: number } = {}) {
public constructor(options: { key?: string; limit?: number } = {}) {
this._key = options.key || DEFAULT_KEY;
this._key = options.key || DEFAULT_KEY;
this._limit = options.limit || DEFAULT_LIMIT;
this._limit = options.limit || DEFAULT_LIMIT;
}
}
/**
/**
* @inheritDoc
* @inheritDoc
*/
*/
public setupOnce(): void {
public setupOnce(): void {
addGlobalEventProcessor((event: Event, hint?: EventHint) => {
addGlobalEventProcessor((event: Event, hint?: EventHint) => {
const self = getCurrentHub().getIntegration(LinkedErrors);
const self = getCurrentHub().getIntegration(LinkedErrors);
if (self) {
if (self) {
복사
복사됨
복사
복사됨
return
self._
handler(event, hint)
;
const handler = self._handler && self._handler.bind(self);
return
typeof handler === 'function' ?
handler(event, hint)
: event
;
}
}
return event;
return event;
});
});
}
}
/**
/**
* @inheritDoc
* @inheritDoc
*/
*/
복사
복사됨
복사
복사됨
private _handler(event: Event, hint?: EventHint):
Event
| null
{
private _handler(event: Event, hint?: EventHint):
PromiseLike<
Event
>
{
if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {
if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) {
복사
복사됨
복사
복사됨
return
event
;
return
SyncPromise.resolve(
event
)
;
}
}
복사
복사됨
복사
복사됨
const linkedErrors =
this._walkErrorTree(hint.originalException as
ExtendedError
, this._key)
;
event.exception.values = [...linkedErrors, ...event.exception.values];
return new SyncPromise<Event>(resolve => {
return event;
void
this._walkErrorTree(hint.originalException as
Error
, this._key)
.then((linkedErrors: Exception[]) => {
if (event && event.exception && event.exception.values) {
event.exception.values = [...linkedErrors, ...event.exception.values];
}
resolve(event);
})
.then(null, () => {
resolve(event);
});
});
}
}
/**
/**
* @inheritDoc
* @inheritDoc
*/
*/
복사
복사됨
복사
복사됨
private _walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []):
Exception[]
{
private _walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []):
PromiseLike<
Exception[]
>
{
if (!isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) {
if (!isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) {
복사
복사됨
복사
복사됨
return
stack
;
return
SyncPromise.resolve(
stack
)
;
}
}
복사
복사됨
복사
복사됨
const stacktrace = computeStackTrace
(error[key])
;
return new SyncPromise<Exception[]>((resolve, reject) => {
const
exception
= exceptionFromStacktrace(stacktrace);
void getExceptionFromError
(error[key])
return
this._walkErrorTree(error[key], key, [exception, ...stack]
);
.then((
exception
: Exception) => {
void
this._walkErrorTree(error[key], key, [exception, ...stack]
)
.then(resolve)
.then(null, () => {
reject();
});
})
.then(null, () => {
reject();
});
});
}
}
}
}
저장된 비교 결과
원본
파일 열기
import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core'; import { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types'; import { isInstanceOf } from '@sentry/utils'; import { exceptionFromStacktrace } from '../parsers'; import { computeStackTrace } from '../tracekit'; const DEFAULT_KEY = 'cause'; const DEFAULT_LIMIT = 5; /** Adds SDK info to an event. */ export class LinkedErrors implements Integration { /** * @inheritDoc */ public static id: string = 'LinkedErrors'; /** * @inheritDoc */ public readonly name: string = LinkedErrors.id; /** * @inheritDoc */ private readonly _key: string; /** * @inheritDoc */ private readonly _limit: number; /** * @inheritDoc */ public constructor(options: { key?: string; limit?: number } = {}) { this._key = options.key || DEFAULT_KEY; this._limit = options.limit || DEFAULT_LIMIT; } /** * @inheritDoc */ public setupOnce(): void { addGlobalEventProcessor((event: Event, hint?: EventHint) => { const self = getCurrentHub().getIntegration(LinkedErrors); if (self) { return self._handler(event, hint); } return event; }); } /** * @inheritDoc */ private _handler(event: Event, hint?: EventHint): Event | null { if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) { return event; } const linkedErrors = this._walkErrorTree(hint.originalException as ExtendedError, this._key); event.exception.values = [...linkedErrors, ...event.exception.values]; return event; } /** * @inheritDoc */ private _walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []): Exception[] { if (!isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) { return stack; } const stacktrace = computeStackTrace(error[key]); const exception = exceptionFromStacktrace(stacktrace); return this._walkErrorTree(error[key], key, [exception, ...stack]); } }
수정본
파일 열기
import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core'; import { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types'; import { isInstanceOf, SyncPromise } from '@sentry/utils'; import { getExceptionFromError } from '../parsers'; const DEFAULT_KEY = 'cause'; const DEFAULT_LIMIT = 5; /** Adds SDK info to an event. */ export class LinkedErrors implements Integration { /** * @inheritDoc */ public static id: string = 'LinkedErrors'; /** * @inheritDoc */ public readonly name: string = LinkedErrors.id; /** * @inheritDoc */ private readonly _key: string; /** * @inheritDoc */ private readonly _limit: number; /** * @inheritDoc */ public constructor(options: { key?: string; limit?: number } = {}) { this._key = options.key || DEFAULT_KEY; this._limit = options.limit || DEFAULT_LIMIT; } /** * @inheritDoc */ public setupOnce(): void { addGlobalEventProcessor((event: Event, hint?: EventHint) => { const self = getCurrentHub().getIntegration(LinkedErrors); if (self) { const handler = self._handler && self._handler.bind(self); return typeof handler === 'function' ? handler(event, hint) : event; } return event; }); } /** * @inheritDoc */ private _handler(event: Event, hint?: EventHint): PromiseLike<Event> { if (!event.exception || !event.exception.values || !hint || !isInstanceOf(hint.originalException, Error)) { return SyncPromise.resolve(event); } return new SyncPromise<Event>(resolve => { void this._walkErrorTree(hint.originalException as Error, this._key) .then((linkedErrors: Exception[]) => { if (event && event.exception && event.exception.values) { event.exception.values = [...linkedErrors, ...event.exception.values]; } resolve(event); }) .then(null, () => { resolve(event); }); }); } /** * @inheritDoc */ private _walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []): PromiseLike<Exception[]> { if (!isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) { return SyncPromise.resolve(stack); } return new SyncPromise<Exception[]>((resolve, reject) => { void getExceptionFromError(error[key]) .then((exception: Exception) => { void this._walkErrorTree(error[key], key, [exception, ...stack]) .then(resolve) .then(null, () => { reject(); }); }) .then(null, () => { reject(); }); }); } }
비교하기