本文整理汇总了TypeScript中@sentry/utils.SyncPromise类的典型用法代码示例。如果您正苦于以下问题:TypeScript SyncPromise类的具体用法?TypeScript SyncPromise怎么用?TypeScript SyncPromise使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SyncPromise类的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: parseStack
export function parseStack(stack: stacktrace.StackFrame[], options?: NodeOptions): SyncPromise<StackFrame[]> {
const filesToRead: string[] = [];
const linesOfContext =
options && options.frameContextLines !== undefined ? options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;
const frames: StackFrame[] = stack.map(frame => {
const parsedFrame: StackFrame = {
colno: frame.columnNumber,
filename: frame.fileName || '',
function: getFunction(frame),
lineno: frame.lineNumber,
};
const isInternal =
frame.native ||
(parsedFrame.filename &&
!parsedFrame.filename.startsWith('/') &&
!parsedFrame.filename.startsWith('.') &&
parsedFrame.filename.indexOf(':\\') !== 1);
// in_app is all that's not an internal Node function or a module within node_modules
// note that isNative appears to return true even for node core libraries
// see https://github.com/getsentry/raven-node/issues/176
parsedFrame.in_app =
!isInternal && parsedFrame.filename !== undefined && !parsedFrame.filename.includes('node_modules/');
// Extract a module name based on the filename
if (parsedFrame.filename) {
parsedFrame.module = getModule(parsedFrame.filename);
if (!isInternal && linesOfContext > 0) {
filesToRead.push(parsedFrame.filename);
}
}
return parsedFrame;
});
// We do an early return if we do not want to fetch context liens
if (linesOfContext <= 0) {
return SyncPromise.resolve(frames);
}
try {
return addPrePostContext(filesToRead, frames, linesOfContext);
} catch (_) {
// This happens in electron for example where we are not able to read files from asar.
// So it's fine, we recover be just returning all frames without pre/post context.
return SyncPromise.resolve(frames);
}
}
示例2: addExceptionTypeValue
return this.eventFromMessage(stringException, undefined, hint).then(messageEvent => {
addExceptionTypeValue(messageEvent, `${stringException}`, undefined, {
handled: true,
synthetic: true,
type: 'generic',
});
messageEvent.level = Severity.Error;
return SyncPromise.resolve(this._buildEvent(messageEvent, hint));
});
示例3: eventFromException
public eventFromException(exception: any): SyncPromise<Event> {
return SyncPromise.resolve({
exception: {
values: [
{
type: exception.name,
value: exception.message,
},
],
},
});
}
示例4: readSourceFiles
/**
* This function reads file contents and caches them in a global LRU cache.
* Returns a Promise filepath => content array for all files that we were able to read.
*
* @param filenames Array of filepaths to read content from.
*/
function readSourceFiles(filenames: string[]): SyncPromise<{ [key: string]: string | null }> {
// we're relying on filenames being de-duped already
if (filenames.length === 0) {
return SyncPromise.resolve({});
}
return new SyncPromise<{
[key: string]: string | null;
}>(resolve => {
const sourceFiles: {
[key: string]: string | null;
} = {};
let count = 0;
// tslint:disable-next-line:prefer-for-of
for (let i = 0; i < filenames.length; i++) {
const filename = filenames[i];
const cache = FILE_CONTENT_CACHE.get(filename);
// We have a cache hit
if (cache !== undefined) {
// If it's not null (which means we found a file and have a content)
// we set the content and return it later.
if (cache !== null) {
sourceFiles[filename] = cache;
}
count++;
// In any case we want to skip here then since we have a content already or we couldn't
// read the file and don't want to try again.
if (count === filenames.length) {
resolve(sourceFiles);
}
continue;
}
readFile(filename, (err: Error | null, data: Buffer) => {
const content = err ? null : data.toString();
sourceFiles[filename] = content;
// We always want to set the cache, even to null which means there was an error reading the file.
// We do not want to try to read the file again.
FILE_CONTENT_CACHE.set(filename, content);
count++;
if (count === filenames.length) {
resolve(sourceFiles);
}
});
}
});
}
示例5: eventFromMessage
/**
* @inheritDoc
*/
public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): SyncPromise<Event> {
const event: Event = {
event_id: hint && hint.event_id,
level,
message,
};
if (this._options.attachStacktrace && hint && hint.syntheticException) {
const stacktrace = _computeStackTrace(hint.syntheticException);
const frames = prepareFramesForEvent(stacktrace.stack);
event.stacktrace = {
frames,
};
}
return SyncPromise.resolve(event);
}
示例6: eventFromException
/**
* @inheritDoc
*/
public eventFromException(exception: any, hint?: EventHint): SyncPromise<Event> {
let event: Event;
if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {
// If it is an ErrorEvent with `error` property, extract it to get actual Error
const errorEvent = exception as ErrorEvent;
exception = errorEvent.error; // tslint:disable-line:no-parameter-reassignment
event = eventFromStacktrace(_computeStackTrace(exception as Error));
return SyncPromise.resolve(this._buildEvent(event, hint));
}
if (isDOMError(exception as DOMError) || isDOMException(exception as DOMException)) {
// If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
// then we just extract the name and message, as they don't provide anything else
// https://developer.mozilla.org/en-US/docs/Web/API/DOMError
// https://developer.mozilla.org/en-US/docs/Web/API/DOMException
const domException = exception as DOMException;
const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');
const message = domException.message ? `${name}: ${domException.message}` : name;
return this.eventFromMessage(message, Severity.Error, hint).then(messageEvent => {
addExceptionTypeValue(messageEvent, message);
return SyncPromise.resolve(this._buildEvent(messageEvent, hint));
});
}
if (isError(exception as Error)) {
// we have a real Error object, do nothing
event = eventFromStacktrace(_computeStackTrace(exception as Error));
return SyncPromise.resolve(this._buildEvent(event, hint));
}
if (isPlainObject(exception as {}) && hint && hint.syntheticException) {
// If it is plain Object, serialize it manually and extract options
// This will allow us to group events based on top-level keys
// which is much better than creating new group when any key/value change
const objectException = exception as {};
event = eventFromPlainObject(objectException, hint.syntheticException);
addExceptionTypeValue(event, 'Custom Object', undefined, {
handled: true,
synthetic: true,
type: 'generic',
});
event.level = Severity.Error;
return SyncPromise.resolve(this._buildEvent(event, hint));
}
// If none of previous checks were valid, then it means that
// it's not a DOMError/DOMException
// it's not a plain Object
// it's not a valid ErrorEvent (one with an error property)
// it's not an Error
// So bail out and capture it as a simple message:
const stringException = exception as string;
return this.eventFromMessage(stringException, undefined, hint).then(messageEvent => {
addExceptionTypeValue(messageEvent, `${stringException}`, undefined, {
handled: true,
synthetic: true,
type: 'generic',
});
messageEvent.level = Severity.Error;
return SyncPromise.resolve(this._buildEvent(messageEvent, hint));
});
}
示例7: eventFromMessage
public eventFromMessage(message: string): SyncPromise<Event> {
return SyncPromise.resolve({ message });
}