UNPKG

@percy/agent

Version:

An agent process for integrating with Percy.

1 lines 6.8 kB
window.PercyAgent=function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";n.r(e);var r=5338;function i(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var a=function(){function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),o(this,"originalDOM",void 0),o(this,"clonedDOM",void 0),o(this,"options",void 0),o(this,"defaultDoctype","<!DOCTYPE html>"),this.originalDOM=e,this.options=n||{},this.clonedDOM=this.cloneDOM()}var e,n,r;return e=t,(n=[{key:"snapshotString",value:function(){var t=this.clonedDOM,e=this.getDoctype();if(this.options.domTransformation)try{t=this.options.domTransformation(t)}catch(t){console.error("Could not transform the dom: ",t)}return e+t.outerHTML}},{key:"getDoctype",value:function(){return this.clonedDOM.doctype?this.doctypeToString(this.clonedDOM.doctype):this.defaultDoctype}},{key:"doctypeToString",value:function(t){var e=t.publicId?' PUBLIC "'.concat(t.publicId,'" '):"",n=t.systemId?' SYSTEM "'.concat(t.systemId,'" '):"";return"<!DOCTYPE ".concat(t.name)+e+n+">"}},{key:"cloneDOM",value:function(){this.mutateOriginalDOM();var t=this.originalDOM.cloneNode(!0);return t=this.stabilizeDOM(t)}},{key:"stabilizeDOM",value:function(t){return this.serializeInputElements(t),this.options.enableJavaScript||this.serializeCSSOM(t),t.documentElement}},{key:"serializeInputElements",value:function(t){var e=this.originalDOM.querySelectorAll("input, textarea");Array.from(e).forEach(function(e){var n=e.getAttribute("data-percy-element-id"),r='[data-percy-element-id="'.concat(n,'"]'),i=t.querySelector(r);switch(e.type){case"checkbox":case"radio":e.checked&&i.setAttribute("checked","");break;case"textarea":i.innerText=e.value;break;default:i.setAttribute("value",e.value)}})}},{key:"serializeCSSOM",value:function(t){Array.from(this.originalDOM.styleSheets).forEach(function(e){if(i=e.href,o=e.ownerNode,a=o.innerText&&o.innerText.length>0,!i&&!a&&e.cssRules){var n=t.createElement("style"),r=Array.from(e.cssRules).reduce(function(t,e){return t+e.cssText},"");n.type="text/css",n.setAttribute("data-percy-cssom-serialized","true"),n.innerHTML=r,t.head.appendChild(n)}var i,o,a})}},{key:"mutateOriginalDOM",value:function(){var t=this.originalDOM.querySelectorAll("input, textarea");Array.from(t).forEach(function(t){var e,n;t.getAttribute("data-percy-element-id")||(e=t,n="_"+Math.random().toString(36).substr(2,9),e.setAttribute("data-percy-element-id",n))})}}])&&i(e.prototype,n),r&&i(e,r),t}();function c(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var l=function(){function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),s(this,"xhr",void 0),s(this,"agentHost",void 0),s(this,"agentConnected",!1),this.agentHost=e,this.xhr=new n||new XMLHttpRequest,this.healthCheck()}var e,n,r;return e=t,(n=[{key:"post",value:function(t,e){this.agentConnected?(this.xhr.open("post","".concat(this.agentHost).concat(t),!1),this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.send(JSON.stringify(e))):console.warn("percy agent not started.")}},{key:"healthCheck",value:function(){var t=this;try{this.xhr.open("get","".concat(this.agentHost).concat("/percy/healthcheck"),!1),this.xhr.onload=function(){200===t.xhr.status&&(t.agentConnected=!0)},this.xhr.send()}catch(t){this.agentConnected=!1}}}])&&c(e.prototype,n),r&&c(e,r),t}();function u(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function h(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var f=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),h(this,"clientInfo",void 0),h(this,"environmentInfo",void 0),h(this,"xhr",void 0),h(this,"handleAgentCommunication",void 0),h(this,"port",void 0),h(this,"domTransformation",void 0),h(this,"client",null),this.clientInfo=e.clientInfo||null,this.environmentInfo=e.environmentInfo||null,this.handleAgentCommunication=!1!==e.handleAgentCommunication,this.domTransformation=e.domTransformation||null,this.port=e.port||r,this.handleAgentCommunication&&(this.xhr=e.xhr||XMLHttpRequest,this.client=new l("http://localhost:".concat(this.port),this.xhr))}var e,n,i;return e=t,(n=[{key:"snapshot",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.document||document,r=this.domSnapshot(n,e);return this.handleAgentCommunication&&this.client&&this.client.post("/percy/snapshot",{name:t,url:n.URL,enableJavaScript:e.enableJavaScript||e.enableJavascript,widths:e.widths,minHeight:e.minHeight||e.minimumHeight,clientInfo:this.clientInfo,environmentInfo:this.environmentInfo,domSnapshot:r}),r}},{key:"domSnapshot",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new a(t,function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),r.forEach(function(e){h(t,e,n[e])})}return t}({},e,{domTransformation:this.domTransformation})).snapshotString()}}])&&u(e.prototype,n),i&&u(e,i),t}();e.default=f}]).default;