private static Exception ParseResponseException(JavascriptResponse response, IEnumerable <string> evaluatedScriptFunctions) { var jsErrorJSON = response.Message; // try parse js exception jsErrorJSON = jsErrorJSON.Substring(Math.Max(0, jsErrorJSON.IndexOf("{"))); jsErrorJSON = jsErrorJSON.Substring(0, jsErrorJSON.LastIndexOf("}") + 1); var evaluatedStackFrames = evaluatedScriptFunctions.Where(f => !string.IsNullOrEmpty(f)) .Select(f => new JavascriptStackFrame() { FunctionName = f, SourceName = "eval" }); if (!string.IsNullOrEmpty(jsErrorJSON)) { JsError jsError = null; try { jsError = DeserializeJSON <JsError>(jsErrorJSON); } catch { // ignore will throw error at the end } if (jsError != null) { jsError.Name = jsError.Name ?? ""; jsError.Message = jsError.Message ?? ""; jsError.Stack = jsError.Stack ?? ""; var jsStack = jsError.Stack.Substring(Math.Min(jsError.Stack.Length, (jsError.Name + ": " + jsError.Message).Length)) .Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); var parsedStack = new List <JavascriptStackFrame>(); parsedStack.AddRange(evaluatedStackFrames); foreach (var stackFrame in jsStack) { var frameParts = StackFrameRegex.Match(stackFrame); if (frameParts.Success) { parsedStack.Add(new JavascriptStackFrame() { FunctionName = frameParts.Groups["method"].Value, SourceName = frameParts.Groups["location"].Value, LineNumber = int.Parse(frameParts.Groups["line"].Value), ColumnNumber = int.Parse(frameParts.Groups["column"].Value) }); } } return(new JavascriptException(jsError.Name, jsError.Message, parsedStack)); } } return(new JavascriptException("Javascript Error", response.Message, evaluatedStackFrames)); }
private static Exception ParseException(Exception exception, IEnumerable<string> evaluatedScriptFunctions) { var jsErrorJSON = ((exception is AggregateException aggregateException) ? aggregateException.InnerExceptions.FirstOrDefault(e => IsInternalException(e.Message))?.Message : exception.Message) ?? ""; // try parse js exception jsErrorJSON = jsErrorJSON.Substring(Math.Max(0, jsErrorJSON.IndexOf("{"))); jsErrorJSON = jsErrorJSON.Substring(0, jsErrorJSON.LastIndexOf("}") + 1); var evaluatedStackFrames = evaluatedScriptFunctions.Where(f => !string.IsNullOrEmpty(f)) .Select(f => new JavascriptStackFrame(f, "eval", 0, 0)); if (!string.IsNullOrEmpty(jsErrorJSON)) { JsError jsError = null; try { jsError = DeserializeJSON<JsError>(jsErrorJSON); } catch { // ignore will throw error at the end } if (jsError != null) { jsError.Name = jsError.Name ?? ""; jsError.Message = jsError.Message ?? ""; jsError.Stack = jsError.Stack ?? ""; var jsStack = jsError.Stack.Substring(Math.Min(jsError.Stack.Length, (jsError.Name + ": " + jsError.Message).Length)) .Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); var parsedStack = new List<JavascriptStackFrame>(); parsedStack.AddRange(evaluatedStackFrames); foreach (var stackFrame in jsStack) { var frameParts = StackFrameRegex.Match(stackFrame); if (frameParts.Success) { parsedStack.Add(new JavascriptStackFrame(frameParts.Groups["method"].Value, frameParts.Groups["location"].Value, int.Parse(frameParts.Groups["column"].Value), int.Parse(frameParts.Groups["line"].Value))); } } return new JavascriptException(jsError.Name, jsError.Message, parsedStack); } } return new JavascriptException(exception.Message, evaluatedStackFrames, exception.StackTrace); }