in src/helpers/parseError.ts [20:93]
export function parseError(error: any): IParsedError {
let errorType: string = '';
let message: string = '';
let stack: string | undefined;
if (typeof (error) === 'object' && error !== null) {
if (error.constructor !== Object) {
errorType = error.constructor.name;
}
stack = getCallstack(error);
errorType = getCode(error, errorType);
// See https://github.com/Microsoft/vscode-azureappservice/issues/419 for an example error that requires these 'unpack's
error = unpackErrorFromField(error, 'value');
error = unpackErrorFromField(error, '_value');
error = unpackErrorFromField(error, 'error');
error = unpackErrorFromField(error, 'error');
if (Array.isArray(error.errors) && error.errors.length) {
error = error.errors[0];
}
errorType = getCode(error, errorType);
message = getMessage(error, message);
if (!errorType || !message || /error.*deserializing.*response.*body/i.test(message)) {
error = unpackErrorFromField(error, 'response');
error = unpackErrorFromField(error, 'body');
errorType = getCode(error, errorType);
message = getMessage(error, message);
}
// Azure errors have a JSON object in the message
let parsedMessage: any = parseIfJson(error.message);
// For some reason, the message is sometimes serialized twice and we need to parse it again
parsedMessage = parseIfJson(parsedMessage);
// Extract out the "internal" error if it exists
if (parsedMessage && parsedMessage.error) {
parsedMessage = parsedMessage.error;
}
errorType = getCode(parsedMessage, errorType);
message = getMessage(parsedMessage, message);
message = message || convertCodeToError(errorType) || JSON.stringify(error);
} else if (error !== undefined && error !== null && error.toString && error.toString().trim() !== '') {
errorType = typeof (error);
message = error.toString();
}
message = unpackErrorsInMessage(message);
[message, errorType] = parseIfFileSystemError(message, errorType);
// tslint:disable-next-line:strict-boolean-expressions
errorType = errorType || typeof (error);
message = message || 'Unknown Error';
message = parseIfHtml(message);
// Azure storage SDK errors are presented in XML
// https://github.com/Azure/azure-sdk-for-js/issues/6927
message = parseIfXml(message);
return {
errorType: errorType,
message: message,
stack: stack,
// NOTE: Intentionally not using 'error instanceof UserCancelledError' because that doesn't work if multiple versions of the UI package are used in one extension
// See https://github.com/Microsoft/vscode-azuretools/issues/51 for more info
isUserCancelledError: errorType === 'UserCancelledError'
};
}