private static JsRuntimeException ConvertJsExceptionToJsRuntimeException(
            OriginalJsException jsException)
        {
            string message = jsException.Message;
            string category;
            int    lineNumber     = 0;
            int    columnNumber   = 0;
            string sourceFragment = string.Empty;

            if (jsException is OriginalJsInteropException)
            {
                category = "InteropError";
            }
            else
            {
                category     = jsException.Type;
                lineNumber   = jsException.Line;
                columnNumber = jsException.Column;
            }

            var jsRuntimeException = new JsRuntimeException(message, EngineName, EngineVersion,
                                                            jsException)
            {
                Category       = category,
                LineNumber     = lineNumber,
                ColumnNumber   = columnNumber,
                SourceFragment = sourceFragment
            };

            return(jsRuntimeException);
        }
        private static WrapperException WrapJsException(OriginalException originalException)
        {
            WrapperException wrapperException;
            string           message      = originalException.Message;
            string           description  = message;
            string           type         = originalException.Type;
            string           documentName = originalException.Resource;
            int lineNumber   = originalException.Line;
            int columnNumber = originalException.Column;

            if (originalException is OriginalInteropException)
            {
                wrapperException = new WrapperException(message, EngineName, EngineVersion, originalException);
            }
            else if (type == null && message.Equals(":  at line: 0 column: 1.", StringComparison.Ordinal))
            {
                wrapperException = new WrapperInterruptedException(CoreStrings.Runtime_ScriptInterrupted,
                                                                   EngineName, EngineVersion, originalException);
            }
            else
            {
                Match scriptErrorMessageMatch = _scriptErrorMessageRegex.Match(message);
                if (scriptErrorMessageMatch.Success)
                {
                    WrapperScriptException wrapperScriptException;
                    description = scriptErrorMessageMatch.Groups["description"].Value;
                    message     = JsErrorHelpers.GenerateScriptErrorMessage(type, description, documentName,
                                                                            lineNumber, columnNumber);

                    if (type == JsErrorType.Syntax)
                    {
                        wrapperScriptException = new WrapperCompilationException(message,
                                                                                 EngineName, EngineVersion, originalException);
                    }
                    else
                    {
                        wrapperScriptException = new WrapperRuntimeException(message,
                                                                             EngineName, EngineVersion, originalException);
                    }
                    wrapperScriptException.Type         = type;
                    wrapperScriptException.DocumentName = documentName;
                    wrapperScriptException.LineNumber   = lineNumber;
                    wrapperScriptException.ColumnNumber = columnNumber;

                    wrapperException = wrapperScriptException;
                }
                else
                {
                    wrapperException = new WrapperException(message, EngineName, EngineVersion,
                                                            originalException);
                }
            }

            wrapperException.Description = description;

            return(wrapperException);
        }