class ConstMessage { constructor(id, message) { this.id = id; this.message = message; } isEqual(err) { if (!err || !err.id) return false; return this.id == err.id; } } function saveFile(data, mimeType, fileName) { fileName = fileName || document.title || "result"; var blob; if (typeof window.Blob == "function") { blob = new Blob([data], { type: mimeType }) } else { var BlobBuiler = window.BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder || window.MSBlobBuilder; var builer = new BlobBuiler(); builer.append(data); blob = builer.getBlob(mimeType) } var URL = window.URL || window.webkitURL; var url = URL.createObjectURL(blob); var link = document.createElement("a"); if ('download' in link) { link.style.visibility = "hidden"; link.href = url; link.download = fileName; document.body.appendChild(link); var j = document.createEvent("MouseEvents"); j.initEvent("click", true, true); link.dispatchEvent(j); document.body.removeChild(link) } else if (navigator.msSaveBlob) { navigator.msSaveBlob(blob, fileName) } else { location.href = url } }