private bool TryDeMinify(string package, int line, int column, out CallStackFrameInfo callStackFrameInfo)
        {
            AjaxMinSymbolForJavaScript javaScriptSymbol = default(AjaxMinSymbolForJavaScript);

            javaScriptSymbol.ScriptEndLine     = line;
            javaScriptSymbol.ScriptStartLine   = line;
            javaScriptSymbol.ScriptEndColumn   = column;
            javaScriptSymbol.ScriptStartColumn = column;
            AjaxMinSymbolForJavaScript ajaxMinSymbolForJavaScript;

            if (!this.parameters.MinificationSymbolsMapForJavaScript.Search(package, javaScriptSymbol, out ajaxMinSymbolForJavaScript))
            {
                callStackFrameInfo = null;
                return(false);
            }
            callStackFrameInfo = new CallStackFrameInfo
            {
                StartLine    = ajaxMinSymbolForJavaScript.SourceStartLine,
                StartColumn  = ajaxMinSymbolForJavaScript.SourceStartColumn,
                EndLine      = ajaxMinSymbolForJavaScript.SourceEndLine,
                EndColumn    = ajaxMinSymbolForJavaScript.SourceEndColumn,
                FunctionName = this.parameters.MinificationSymbolsMapForJavaScript.GetFunctionName(ajaxMinSymbolForJavaScript.FunctionNameIndex),
                FileName     = ClientWatsonDatapointHandler.GetRelativeFilePath(this.parameters.MinificationSymbolsMapForJavaScript.GetSourceFilePathFromId(ajaxMinSymbolForJavaScript.SourceFileId)),
                FolderPath   = this.parameters.ExchangeSourcesPath
            };
            return(true);
        }
        private ResultCode TryDeMinifyAndDeObfuscate(string package, int line, int column, out CallStackFrameInfo callStackFrameInfo)
        {
            AjaxMinSymbolForScriptSharp javaScriptSymbol = default(AjaxMinSymbolForScriptSharp);

            javaScriptSymbol.ScriptEndLine     = line;
            javaScriptSymbol.ScriptStartLine   = line;
            javaScriptSymbol.ScriptEndColumn   = column;
            javaScriptSymbol.ScriptStartColumn = column;
            AjaxMinSymbolForScriptSharp ajaxMinSymbolForScriptSharp;

            if (!this.parameters.MinificationSymbolsMapForScriptSharp.Search(package, javaScriptSymbol, out ajaxMinSymbolForScriptSharp))
            {
                callStackFrameInfo = null;
                return(ResultCode.FailedToDeMinify);
            }
            ScriptSharpSymbolWrapper javaScriptSymbol2 = new ScriptSharpSymbolWrapper(new ScriptSharpSymbol
            {
                ScriptStartPosition = ajaxMinSymbolForScriptSharp.SourceStartPosition,
                ScriptEndPosition   = ajaxMinSymbolForScriptSharp.SourceEndPosition
            });
            ScriptSharpSymbolWrapper scriptSharpSymbolWrapper;

            if (!this.parameters.ObfuscationSymbolsMap.Search(package, javaScriptSymbol2, out scriptSharpSymbolWrapper))
            {
                callStackFrameInfo = null;
                return(ResultCode.FailedToDeObfuscate);
            }
            ScriptSharpSymbol innerSymbol = scriptSharpSymbolWrapper.InnerSymbol;

            callStackFrameInfo = new CallStackFrameInfo
            {
                StartLine    = innerSymbol.SourceStartLine,
                FunctionName = this.parameters.ObfuscationSymbolsMap.GetFunctionName(innerSymbol.FunctionNameIndex),
                FileName     = ClientWatsonDatapointHandler.GetRelativeFilePath(this.parameters.ObfuscationSymbolsMap.GetSourceFilePathFromId(innerSymbol.SourceFileId)),
                FolderPath   = this.parameters.ExchangeSourcesPath
            };
            return(ResultCode.Success);
        }
        public ProcessingResult TryProcessCallStackFrame(string frame, out CallStackFrameInfo callStackFrameInfo)
        {
            List <Regex> regexList = new List <Regex>
            {
                ClientWatsonDatapointHandler.ChromeAndIEStackFrameRegex,
                ClientWatsonDatapointHandler.IOS7StackFrameRegex
            };

            callStackFrameInfo = null;
            Match match;

            if (!ClientWatsonDatapointHandler.TryMatchAny(frame, regexList, out match))
            {
                return(new ProcessingResult
                {
                    Code = ResultCode.NoMatch,
                    RawErrorFrame = frame
                });
            }
            string text = match.Groups["package"].Value;
            int    num  = text.LastIndexOf('/') + 1;

            if (num > 0)
            {
                text = text.Substring(num, text.Length - num);
            }
            int              num2  = int.Parse(match.Groups["line"].Value);
            int              num3  = int.Parse(match.Groups["column"].Value);
            string           text2 = match.Groups["function"].Value.TrimEnd(new char[0]);
            string           text3;
            Tuple <int, int> tuple;

            if (this.parameters.ConsolidationSymbolsMap.HasSymbolsLoadedForScript(text))
            {
                if (!this.parameters.ConsolidationSymbolsMap.Search(text, num2, num3, out text3, out tuple))
                {
                    return(new ProcessingResult
                    {
                        Code = ResultCode.FailedToDeConsolidate,
                        Package = text,
                        Function = text2,
                        Line = num2,
                        Column = num3
                    });
                }
            }
            else
            {
                text3 = text;
                tuple = new Tuple <int, int>(num2, num3);
            }
            if (this.parameters.MinificationSymbolsMapForScriptSharp.HasSymbolsLoadedForScript(text3))
            {
                ResultCode resultCode = this.TryDeMinifyAndDeObfuscate(text3, tuple.Item1, tuple.Item2, out callStackFrameInfo);
                if (resultCode != ResultCode.Success)
                {
                    return(new ProcessingResult
                    {
                        Code = resultCode,
                        SourceType = FrameSourceType.ScriptSharp,
                        Package = text3,
                        Function = text2,
                        Line = tuple.Item1,
                        Column = tuple.Item2
                    });
                }
            }
            else if (this.parameters.MinificationSymbolsMapForJavaScript.HasSymbolsLoadedForScript(text3))
            {
                if (!this.TryDeMinify(text3, tuple.Item1, tuple.Item2, out callStackFrameInfo))
                {
                    return(new ProcessingResult
                    {
                        Code = ResultCode.FailedToDeMinify,
                        SourceType = FrameSourceType.JavaScript,
                        Package = text3,
                        Function = text2,
                        Line = tuple.Item1,
                        Column = tuple.Item2
                    });
                }
            }
            else
            {
                callStackFrameInfo = new CallStackFrameInfo(true)
                {
                    StartLine    = tuple.Item1,
                    EndLine      = tuple.Item1,
                    StartColumn  = tuple.Item2,
                    EndColumn    = tuple.Item2,
                    FunctionName = text2,
                    FileName     = text3 + ".js",
                    FolderPath   = string.Empty
                };
            }
            callStackFrameInfo.PackageName = text3;
            return(new ProcessingResult
            {
                Code = ResultCode.Success
            });
        }