UNPKG

@dash-ui/jest

Version:

Jest utilities for dash-ui

3 lines (2 loc) 4.56 kB
function e(e,r){return f(r)?((e,r)=>{var{props:t}=r;return u(e,t?t.className||t.class:null)})(e,r):"function"==typeof r.findWhere?((e,r)=>{var t=((e=>"function"==typeof e.dive&&"string"!=typeof e.type())(r)?r.dive():r).findWhere(l),n=t.length&&t.first().prop("className");return u(e,n)})(e,r):(e=>"[cheerio object]"===e.cheerio)(r)?((e,r)=>{var t=r.attr("class");return u(e,t)})(e,r):((e,r)=>u(e,r.getAttribute("class")))(e,r)}function r(e){return e.cssText}function t(e){return e.getAttribute("data-dash")}function n(e,r){return e.concat(r.rules)}function a(e,r){return e.concat(r.rules)}function o(e,r){return e.concat(r.declarations)}import{parse as s,stringify as c}from"css";import i from"chalk";var p={media:"media",supports:"supports",rule:"rule"},u=(e,r)=>r?e.concat(r.split(" ")):e,l=e=>e.prop("className")&&"string"==typeof e.type(),f=e=>e.$$typeof===Symbol.for("react.test.json")?1:e.hasOwnProperty("props")&&e.hasOwnProperty("type")&&e.hasOwnProperty("ref")&&e.hasOwnProperty("key")?(e.$$typeof=Symbol.for("react.test.json"),1):void 0,d=/^((HTML|SVG)\w*)?Element$/,v=e=>1===e.nodeType&&e.constructor&&e.constructor.name&&d.test(e.constructor.name),m=r=>r.reduce(e,[]),y=/^@keyframes\s+(animation-[^{\s]+)+/,h=/\/\*[\s\S]*?\*\//g,g=e=>{var t=e.textContent;return t?[t]:e.sheet?[].slice.call(e.sheet.cssRules).map(r):[]},w=(e,r)=>{if(!e.length)return"";var t=x(r);if(!t.length)return"";var n=new RegExp("^("+t.join("|")+")-"),a=e.filter(e=>n.test(e));if(!a.length)return"";var o,s,c=new RegExp("\\.("+a.join("|")+")"),i={},p="";(o=r,s=g,[].concat(...o.map(s))).forEach(e=>{c.test(e)&&(p+=e);var r=e.match(y);if(null!==r){var t=r[1];void 0===i[t]&&(i[t]=""),i[t]+=e}});var u=Object.keys(i),l="";if(u.length){var f=new RegExp(u.join("|"),"g"),d={},v=0;p=p.replace(f,e=>(void 0===d[e]&&(d[e]="animation-"+v++,l+=i[e]),d[e])),l=l.replace(f,e=>d[e])}return(l+p).replace(h,"")},E=()=>Array.from(document.querySelectorAll("style[data-dash]")),x=e=>{return(r=e.map(t),Array.from(new Set(r))).filter(Boolean);var r},j=(e,r,t)=>r.some(r=>t?t instanceof RegExp?t.test(r):S(r).includes(S(t)):e.includes(r.slice(1))),R=(e,r)=>e.filter(e=>{var t=e.media?e.media.replace(/\s/g,"").includes(r.replace(/\s/g,"")):0;return e.type===p.media&&t}).reduce(n,[]),A=(e,r)=>e.filter(e=>{var t=e.supports?e.supports.replace(/\s/g,"").trim().endsWith(r.replace(/\s/g,"").trim()):0;return e.type===p.supports&&t}).reduce(a,[]),$=/([:;,([{}>~/\s]|\/\*)\s+/g,b=/\s+([:;,)\]{}>~/!]|\*\/)/g,S=e=>e.trim().replace($,"$1").replace(b,"$1"),O={toHaveStyleRule:function(e,r,t,n){function a(){return"Property not found: "+r}void 0===n&&(n={});var{target:c,media:u,supports:l}=n,f=m([e]),d=w(f,E()),v=s(d).stylesheet.rules;u&&(v=R(v,u)),l&&(v=A(v,l));var y=v.filter(e=>e.type===p.rule&&j(f,e.selectors,c)).reduce(o,[]).filter(e=>"declaration"===e.type&&S(e.property)===S(r)).pop();if(!y)return{pass:0,message:a};var a,h=((e,r)=>r instanceof RegExp?r.test(e.value):(e=>{return e&&("Function",r=e.asymmetricMatch,"[object Function]"===Object.prototype.toString.apply(r));var r})(r)?r.asymmetricMatch(e.value):S(r)===S(e.value))(y,t);return{pass:h,message:a=()=>"Expected "+r+(h?" not ":" ")+"to match:\n "+i.green(t)+"\nReceived:\n "+i.red(y.value)}}},k=(e,r)=>"dash-ui-"+r,P=/^e[a-zA-Z0-9]+[0-9]+$/,M=function(e,r,t,n,a){void 0===a&&(a=k);var o=0,s=new RegExp("^("+n.join("|")+")-");return e.reduce((e,r)=>{if(s.test(r)||P.test(r)){var t=new RegExp(r.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"g");return e.replace(t,a(r,o++))}return e},r+(r?"\n\n":"")+t)},N=function(e){void 0===e&&(e={});var{classNameReplacer:r,DOMElements:t=1}=e,n=new WeakSet;return{test:e=>e&&!n.has(e)&&(f(e)||t&&v(e)),print(e,t){var a=function e(r,t){if(void 0===t&&(t=[]),Array.isArray(r)){for(var n of r)e(n,t);return t}var a=r.children||r.props&&r.props.children;if(a)for(var o of a=r.props?Array.isArray(a)?a:[a]:a)e(o,t);return"object"==typeof r&&t.push(r),t}(e),o=m(a),i=E(),p=((e,r)=>{var t,n=w(e,r);try{t=c(s(n))}catch(e){throw console.error(e),new Error('There was an error parsing the following css: "'+n+'"')}return t})(o,i);a.forEach(n.add,n);var u=t(e);a.forEach(n.delete,n);var l=x(i);return M(o,p,u,l,r)}}},{print:T,test:W}=N(),F={print:T,test:W};export default F;export{p as RULE_TYPES,N as createSerializer,m as getClassNamesFromNodes,x as getKeys,R as getMediaRules,E as getStyleElements,w as getStylesFromClassNames,A as getSupportsRules,j as hasClassNames,v as isDOMElement,f as isReactElement,O as matchers,T as print,M as replaceClassNames,W as test}; //# sourceMappingURL=index.mjs.map