Diff
checker
テキスト
テキスト
画像
ドキュメント
Excel
フォルダ
Legal
Enterprise
デスクトップ
料金
ログイン
Diffchecker デスクトップのダウンロード
テキスト比較
2 つのテキスト ファイルの違いを見つける
ツール
履歴
ライブエディター
未変更行を折りたたむ
折り返しなし
レイアウト
分割
統合
比較精度
スマート
単語
文字
シンタックスハイライト
構文を選択
無視
テキスト変換
最初の差分へ移動
入力を編集
Diffchecker Desktop
Diffcheckerを実行する最も安全な方法。Diffchecker Desktopアプリを入手:あなたの差分はコンピューターから出ることはありません!
Desktopを入手
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(); }); }); } }
違いを見つける