what-core 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +115 -50
- package/dist/index.js.map +2 -2
- package/dist/index.min.js +6 -6
- package/dist/index.min.js.map +3 -3
- package/dist/render.js +98 -49
- package/dist/render.js.map +2 -2
- package/dist/render.min.js +1 -1
- package/dist/render.min.js.map +3 -3
- package/dist/testing.js +100 -47
- package/dist/testing.js.map +2 -2
- package/dist/testing.min.js +1 -1
- package/dist/testing.min.js.map +3 -3
- package/package.json +1 -1
- package/src/dom.js +60 -20
- package/src/reactive.js +78 -40
- package/src/render.js +20 -0
package/dist/testing.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var d=!(typeof process<"u"),f=null;var h=null,A=null,N=null,F=!1,j=0,g=[],O=!1,le=new WeakMap,ue=Symbol("needs_upstream");function L(e,t){let n=e,o=new Set;function s(...r){if(r.length===0)return h&&(o.add(h),h.deps.push(o)),n;d&&F&&console.warn("[what] Signal.set() called inside a computed function. This may cause infinite loops. Use effect() instead."+(t?` (signal: ${t})`:""));let i=typeof r[0]=="function"?r[0](n):r[0];Object.is(n,i)||(n=i,d&&f&&f.onSignalUpdate(s),o.size>0&&P(o))}return s.set=r=>{d&&F&&console.warn("[what] Signal.set() called inside a computed function. This may cause infinite loops. Use effect() instead."+(t?` (signal: ${t})`:""));let i=typeof r=="function"?r(n):r;Object.is(n,i)||(n=i,d&&f&&f.onSignalUpdate(s),o.size>0&&P(o))},s.peek=()=>n,s.subscribe=r=>x(()=>r(s())),s._signal=!0,d&&(s._subs=o,t&&(s._debugName=t)),d&&f&&f.onSignalCreate(s),s}function V(e){let t=0,n=e.deps;for(let o=0;o<n.length;o++){let s=le.get(n[o]);if(s){let r=s._level;r>t&&(t=r)}}e._level=t+1}function x(e,t){let n=fe(e);n._level=1;let o=h;h=n;try{let r=n.fn();typeof r=="function"&&(n._cleanup=r)}finally{h=o}V(n),t?.stable&&(n._stable=!0);let s=()=>pe(n);return A&&A.disposals.push(s),s}function fe(e,t){let n={fn:e,deps:[],lazy:t||!1,_onNotify:null,disposed:!1,_pending:!1,_stable:!1,_level:0,_computed:!1,_computedSubs:null,_isDirty:null,_markDirty:null};return d&&f&&f.onEffectCreate(n),n}function ae(e){if(e.disposed)return;if(e._stable){if(e._cleanup){try{e._cleanup()}catch(o){d&&console.warn("[what] Error in effect cleanup:",o)}e._cleanup=null}let n=h;h=null;try{let o=e.fn();typeof o=="function"&&(e._cleanup=o)}catch(o){f?.onError&&f.onError(o,{type:"effect",effect:e}),d&&console.warn("[what] Error in stable effect:",o)}finally{h=n}d&&f?.onEffectRun&&f.onEffectRun(e);return}if(W(e),e._cleanup){try{e._cleanup()}catch(n){f?.onError&&f.onError(n,{type:"effect-cleanup",effect:e}),d&&console.warn("[what] Error in effect cleanup:",n)}e._cleanup=null}let t=h;h=e;try{let n=e.fn();typeof n=="function"&&(e._cleanup=n)}catch(n){throw n===ue||f?.onError&&f.onError(n,{type:"effect",effect:e}),n}finally{h=t}d&&f?.onEffectRun&&f.onEffectRun(e)}function pe(e){if(e.disposed=!0,d&&f&&f.onEffectDispose(e),W(e),e._cleanup){try{e._cleanup()}catch(t){d&&console.warn("[what] Error in effect cleanup on dispose:",t)}e._cleanup=null}}function W(e){let t=e.deps;for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}var $=0,k=null,M=0;function P(e){if($===0){$=1;try{for(let t of e)if(!t.disposed){if(t._onNotify)t._onNotify();else if(j===0&&t._stable){let n=h;h=null;try{let o=t.fn();if(typeof o=="function"){if(t._cleanup)try{t._cleanup()}catch{}t._cleanup=o}}catch(o){f?.onError&&f.onError(o,{type:"effect",effect:t}),d&&console.warn("[what] Error in stable effect:",o)}finally{h=n}}else if(!t._pending){t._pending=!0;let n=t._level,o=g.length;o>0&&g[o-1]._level>n&&(O=!0),g.push(t)}}if(M>0){let t=0;for(;t<M;){let n=k[t];k[t]=null,t++;for(let o of n)if(!o.disposed){if(o._onNotify)o._onNotify();else if(j===0&&o._stable){let s=h;h=null;try{let r=o.fn();if(typeof r=="function"){if(o._cleanup)try{o._cleanup()}catch{}o._cleanup=r}}catch(r){f?.onError&&f.onError(r,{type:"effect",effect:o}),d&&console.warn("[what] Error in stable effect:",r)}finally{h=s}}else if(!o._pending){o._pending=!0;let s=o._level,r=g.length;r>0&&g[r-1]._level>s&&(O=!0),g.push(o)}}}M=0}}finally{$=0}j===0&&g.length>0&&de()}else k===null&&(k=[]),M>=k.length?k.push(e):k[M]=e,M++}var D=!1;function de(){D||(D=!0,queueMicrotask(()=>{D=!1,z()}))}function z(){let e=0;for(;g.length>0&&e<25;){let t=g;g=[],t.length>1&&O&&t.sort((n,o)=>n._level-o._level),O=!1;for(let n=0;n<t.length;n++){let o=t[n];if(o._pending=!1,!o.disposed&&!o._onNotify){let s=o.deps.length;ae(o),!o._computed&&o.deps.length!==s&&V(o)}}e++}if(e>=25){if(d){let n=g.slice(0,3).map(o=>o.fn?.name||o.fn?.toString().slice(0,60)||"(anonymous)");console.warn(`[what] Possible infinite effect loop detected (25 iterations). Likely cause: an effect writes to a signal it also reads, creating a cycle. Use untrack() to read signals without subscribing. Looping effects: ${n.join(", ")}`)}else console.warn("[what] Possible infinite effect loop detected");for(let t=0;t<g.length;t++)g[t]._pending=!1;g.length=0}}function B(){D=!1,z()}function U(e){let t=h;h=null;try{return e()}finally{h=t}}function R(e){let t=A,n=N,o={disposals:[],owner:N,children:[],_disposed:!1};N&&N.children.push(o),A=o,N=o;try{return e(()=>{if(!o._disposed){o._disposed=!0;for(let r=o.children.length-1;r>=0;r--)G(o.children[r]);o.children.length=0;for(let r=o.disposals.length-1;r>=0;r--)o.disposals[r]();if(o.disposals.length=0,o.owner){let r=o.owner.children.indexOf(o);r>=0&&o.owner.children.splice(r,1)}}})}finally{A=t,N=n}}function G(e){if(!e._disposed){e._disposed=!0;for(let t=e.children.length-1;t>=0;t--)G(e.children[t]);e.children.length=0;for(let t=e.disposals.length-1;t>=0;t--)e.disposals[t]();e.disposals.length=0}}var he=Object.create(null);function I(e,t,...n){t=t||he;let o=K(n),s=t.key??null;return t.key!==void 0&&(t={...t},delete t.key),{tag:e,props:t,children:o,key:s,_vnode:!0}}function K(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n];o==null||o===!1||o===!0||(Array.isArray(o)?t.push(...K(o)):typeof o=="object"&&o._vnode||typeof o=="function"?t.push(o):t.push(String(o)))}return t}var Z=null;function J(e){Z=e}function X(e,t){let n=t||Z?.();for(;n;){if(n._errorBoundary)return n._errorBoundary(e),!0;n=n._parentCtx}return!1}var me=null;function Q(e){me=e}var ye=new Set(["svg","path","circle","rect","line","polyline","polygon","ellipse","g","defs","use","symbol","clipPath","mask","pattern","image","text","tspan","textPath","foreignObject","linearGradient","radialGradient","stop","marker","animate","animateTransform","animateMotion","set","filter","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence"]),ge="http://www.w3.org/2000/svg",te=new Set,ne=new WeakMap;function _e(e){return!e||typeof e!="object"?!1:typeof Node<"u"&&e instanceof Node?!0:typeof e.nodeType=="number"&&typeof e.nodeName=="string"}function Y(e){return!!e&&typeof e=="object"&&(e._vnode===!0||"tag"in e)}function ee(e){if(!e.disposed){if(e.disposed=!0,e.cleanups)for(let t of e.cleanups)try{t()}catch(n){console.error("[what] cleanup error:",n)}if(e.effects)for(let t of e.effects)try{t()}catch{}if(e.hooks){for(let t of e.hooks)if(t&&typeof t.cleanup=="function")try{t.cleanup()}catch(n){console.error("[what] hook cleanup error:",n)}}if(e._cleanupCallbacks)for(let t of e._cleanupCallbacks)try{t()}catch(n){console.error("[what] onCleanup error:",n)}d&&f?.onComponentUnmount&&f.onComponentUnmount(e),te.delete(e)}}function S(e){if(!e)return;e._componentCtx&&ee(e._componentCtx);let t=ne.get(e);if(t&&ee(t),e._dispose)try{e._dispose()}catch{}if(e._propEffects)for(let n in e._propEffects)try{e._propEffects[n]()}catch{}if(e.childNodes)for(let n of e.childNodes)S(n)}function H(e,t){typeof t=="string"&&(t=document.querySelector(t)),S(t),t.textContent="";let n=C(e,t);return n&&t.appendChild(n),()=>{S(t),t.textContent=""}}function C(e,t,n){if(e==null||e===!1||e===!0)return document.createComment("");if(typeof e=="string"||typeof e=="number")return document.createTextNode(String(e));if(_e(e))return e;if(typeof e=="function"){let o=document.createComment("fn"),s=document.createComment("/fn"),r=[],i=document.createDocumentFragment();i.appendChild(o),i.appendChild(s);let c=x(()=>{let l=e(),u=l==null||l===!1||l===!0?[]:Array.isArray(l)?l:[l],y=s.parentNode;if(y){for(let a of r)S(a),a.parentNode===y&&y.removeChild(a);r=[];for(let a of u){let _=C(a,y,t?._isSvg);if(_)if(_.nodeType===11){let w=Array.from(_.childNodes);y.insertBefore(_,s);for(let q of w)r.push(q)}else y.insertBefore(_,s),r.push(_)}}});return o._dispose=c,s._dispose=c,i}if(Array.isArray(e)){let o=document.createDocumentFragment();for(let s of e){let r=C(s,t,n);r&&o.appendChild(r)}return o}return Y(e)&&typeof e.tag=="function"?we(e,t,n):Y(e)?Ce(e,t,n):document.createTextNode(String(e))}var m=[];function oe(){return m[m.length-1]}J(oe);Q(oe);function we(e,t,n){let{tag:o,props:s,children:r}=e;if(typeof o=="function"&&(o.prototype?.isReactComponent||o.prototype?.render)){let p=o;o=function(v){return new p(v).render()},o.displayName=p.displayName||p.name||"ClassComponent"}if(o==="__errorBoundary"||e.tag==="__errorBoundary")return be(e,t);if(o==="__suspense"||e.tag==="__suspense")return Ee(e,t);if(o==="__portal"||e.tag==="__portal")return xe(e,t);let i={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,Component:o,_parentCtx:m[m.length-1]||null,_errorBoundary:(()=>{let p=m[m.length-1];for(;p;){if(p._errorBoundary)return p._errorBoundary;p=p._parentCtx}return null})()},c=document.createComment("c:start"),l=document.createComment("c:end");ne.set(c,i),i._startComment=c,i._endComment=l;let u=document.createDocumentFragment();u._componentCtx=i,i._wrapper=c,te.add(i),d&&f?.onComponentMount&&f.onComponentMount(i);let y=r.length===0?void 0:r.length===1?r[0]:r,a=L({...s,children:y});i._propsSignal=a;let _=new Proxy({},{get(p,b){return a()[b]},has(p,b){let v=a();return b in v},ownKeys(){let p=a();return Reflect.ownKeys(p)},getOwnPropertyDescriptor(p,b){let v=a();if(b in v)return{value:v[b],writable:!1,enumerable:!0,configurable:!0}}});m.push(i);let w;try{w=o(_)}catch(p){if(m.pop(),!X(p,i))throw console.error("[what] Uncaught error in component:",o.name||"Anonymous",p),p;return u.appendChild(c),u.appendChild(l),u}m.pop(),i.mounted=!0,i._mountCallbacks&&queueMicrotask(()=>{if(!i.disposed)for(let p of i._mountCallbacks)try{p()}catch(b){console.error("[what] onMount error:",b)}}),u.appendChild(c);let q=Array.isArray(w)?w:[w];for(let p of q){let b=C(p,u,n);b&&u.appendChild(b)}return u.appendChild(l),u}function be(e,t){let{errorState:n,handleError:o,fallback:s,reset:r}=e.props,i=e.children,c=document.createElement("span");c.style.display="contents";let l={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,_parentCtx:m[m.length-1]||null,_errorBoundary:o};c._componentCtx=l;let u=x(()=>{let y=n();for(m.push(l);c.firstChild;)S(c.firstChild),c.removeChild(c.firstChild);let a;y?a=typeof s=="function"?[s({error:y,reset:r})]:[s]:a=i,a=Array.isArray(a)?a:[a];for(let _ of a){let w=C(_,c);w&&c.appendChild(w)}m.pop()});return l.effects.push(u),c}function Ee(e,t){let{boundary:n,fallback:o,loading:s}=e.props,r=e.children,i=document.createElement("span");i.style.display="contents";let c={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,_parentCtx:m[m.length-1]||null};i._componentCtx=c;let l=x(()=>{let y=s()?[o]:r,a=Array.isArray(y)?y:[y];for(m.push(c);i.firstChild;)S(i.firstChild),i.removeChild(i.firstChild);for(let _ of a){let w=C(_,i);w&&i.appendChild(w)}m.pop()});return c.effects.push(l),i}function xe(e,t){let{container:n}=e.props,o=e.children;if(!n)return console.warn("[what] Portal: target container not found"),document.createComment("portal:empty");let s={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,_parentCtx:m[m.length-1]||null},r=document.createComment("portal");r._componentCtx=s;let i=[];for(let c of o){let l=C(c,n);l&&(n.appendChild(l),i.push(l))}return s._cleanupCallbacks=[()=>{for(let c of i)S(c),c.parentNode&&c.parentNode.removeChild(c)}],r}function Ce(e,t,n){let{tag:o,props:s,children:r}=e,i=n||ye.has(o),c=i?document.createElementNS(ge,o):document.createElement(o);s&&ve(c,s,{},i);for(let l of r){let u=C(l,c,i&&o!=="foreignObject");u&&c.appendChild(u)}return c._vnode=e,c}function ve(e,t,n,o){t=t||{},n=n||{};for(let s in t)if(!(s==="key"||s==="children")){if(s==="ref"){typeof t.ref=="function"?t.ref(e):t.ref&&(t.ref.current=e);continue}re(e,s,t[s],o)}}function re(e,t,n,o){if(typeof n=="function"&&!(t.startsWith("on")&&t.length>2)&&t!=="ref"){if(e._propEffects||(e._propEffects={}),e._propEffects[t])try{e._propEffects[t]()}catch{}e._propEffects[t]=x(()=>{let s=n();re(e,t,s,o)});return}if(t.startsWith("on")&&t.length>2){let s=t.slice(2),r=!1;s.endsWith("Capture")&&(s=s.slice(0,-7),r=!0);let i=s.toLowerCase(),c=r?i+"_capture":i,l=e._events?.[c];if(l&&l._original===n||(l&&e.removeEventListener(i,l,r),n==null))return;e._events||(e._events={});let u=a=>(a.nativeEvent||(a.nativeEvent=a),U(()=>n(a)));u._original=n,e._events[c]=u;let y=n._eventOpts;e.addEventListener(i,u,y||r||void 0);return}if(t==="className"||t==="class"){o?e.setAttribute("class",n||""):e.className=n||"";return}if(t==="style"){if(typeof n=="string")e.style.cssText=n,e._prevStyle=null;else if(typeof n=="object"){let s=e._prevStyle||{};for(let r in s)r in n||(e.style[r]="");for(let r in n)e.style[r]=n[r]??"";e._prevStyle={...n}}return}if(t==="dangerouslySetInnerHTML"){e.innerHTML=n?.__html??"";return}if(t==="innerHTML"){if(n==null)return;if(n&&typeof n=="object"&&"__html"in n)e.innerHTML=n.__html??"";else{d&&console.warn("[what] innerHTML received a raw string. This is a security risk (XSS). Use innerHTML={{ __html: trustedString }} or dangerouslySetInnerHTML={{ __html: trustedString }} instead.");return}return}if(typeof n=="boolean"){n?e.setAttribute(t,""):e.removeAttribute(t);return}if(t.startsWith("data-")||t.startsWith("aria-")){e.setAttribute(t,n);return}if(o){n===!1||n==null?e.removeAttribute(t):e.setAttribute(t,n===!0?"":String(n));return}t in e?e[t]=n:e.setAttribute(t,n)}var E=null;function ie(){return typeof document<"u"&&(E=document.createElement("div"),E.id="test-root",document.body.appendChild(E)),E}function ke(){E&&(E.innerHTML="",E.parentNode&&E.parentNode.removeChild(E),E=null)}function Ve(e,t={}){let{container:n}=t,o=n||ie();if(!o)throw new Error("No DOM container available. Are you running in Node.js without jsdom?");let s=H(e,o);return{container:o,unmount:s,getByText:r=>T(o,r),getByTestId:r=>o.querySelector(`[data-testid="${r}"]`),getByRole:r=>o.querySelector(`[role="${r}"]`),getAllByText:r=>ce(o,r),queryByText:r=>T(o,r),queryByTestId:r=>o.querySelector(`[data-testid="${r}"]`),debug:()=>console.log(o.innerHTML),findByText:(r,i)=>se(()=>T(o,r),{timeout:i}),findByTestId:(r,i)=>se(()=>o.querySelector(`[data-testid="${r}"]`),{timeout:i})}}function We(e,t){let n=ie();if(!n)throw new Error("No DOM container available. Are you running in Node.js without jsdom?");let o={},s=null,r;return R(i=>{s=i;let c=I(e,t||{});r=H(c,n)}),{container:n,signals:new Proxy(o,{get(i,c){if(c in i)return i[c]},set(i,c,l){return i[c]=l,!0}}),update(){B()},unmount(){r&&r(),s&&s(),ke()},getByText:i=>T(n,i),getByTestId:i=>n.querySelector(`[data-testid="${i}"]`),queryByText:i=>T(n,i),debug:()=>console.log(n.innerHTML)}}function ze(){B()}function Ue(e){let t=[],n=[],o=L,s=new Map,r=l=>{t.includes(l)||t.push(l)},i=l=>{n.includes(l)||n.push(l)},c;return R(l=>{c=l;let u=x(()=>{e()})}),c&&c(),{accessed:t,written:n}}function Ge(e,t){let n=[t],o=0,s=L(t,e),r=s.set;s.set=function(l){let u=typeof l=="function"?l(s.peek()):l;return Object.is(s.peek(),u)||(o++,n.push(u)),r(u)};let i=s,c=function(...l){if(l.length===0)return i();let u=typeof l[0]=="function"?l[0](i.peek()):l[0];return Object.is(i.peek(),u)||(o++,n.push(u)),i(u)};return c._signal=!0,c.peek=s.peek,c.set=s.set,c.subscribe=s.subscribe,s._debugName&&(c._debugName=s._debugName),s._subs&&(c._subs=s._subs),Object.defineProperty(c,"history",{get(){return n}}),Object.defineProperty(c,"setCount",{get(){return o}}),c.reset=function(l){let u=l!==void 0?l:t;n.length=0,n.push(u),o=0,i(u)},c}function T(e,t){let n=t instanceof RegExp?t:null,o=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1);for(;o.nextNode();){let s=o.currentNode;if(n?n.test(s.textContent):s.textContent.includes(t))return s.parentElement}return null}function ce(e,t){let n=[],o=t instanceof RegExp?t:null,s=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1);for(;s.nextNode();){let r=s.currentNode;(o?o.test(r.textContent):r.textContent.includes(t))&&n.push(r.parentElement)}return n}var Ke={click(e){let t=new MouseEvent("click",{bubbles:!0,cancelable:!0,view:typeof window<"u"?window:void 0});return e.dispatchEvent(t),t},change(e,t){e.value=t;let n=new Event("input",{bubbles:!0});e.dispatchEvent(n);let o=new Event("change",{bubbles:!0});return e.dispatchEvent(o),o},input(e,t){e.value=t;let n=new Event("input",{bubbles:!0});return e.dispatchEvent(n),n},submit(e){let t=new Event("submit",{bubbles:!0,cancelable:!0});return e.dispatchEvent(t),t},focus(e){e.focus();let t=new FocusEvent("focus",{bubbles:!0});return e.dispatchEvent(t),t},blur(e){e.blur();let t=new FocusEvent("blur",{bubbles:!0});return e.dispatchEvent(t),t},keyDown(e,t,n={}){let o=new KeyboardEvent("keydown",{bubbles:!0,cancelable:!0,key:t,...n});return e.dispatchEvent(o),o},keyUp(e,t,n={}){let o=new KeyboardEvent("keyup",{bubbles:!0,cancelable:!0,key:t,...n});return e.dispatchEvent(o),o},mouseEnter(e){let t=new MouseEvent("mouseenter",{bubbles:!0});return e.dispatchEvent(t),t},mouseLeave(e){let t=new MouseEvent("mouseleave",{bubbles:!0});return e.dispatchEvent(t),t}};async function se(e,t={}){let{timeout:n=1e3,interval:o=50}=t,s=Date.now();for(;Date.now()-s<n;){try{let r=e();if(r)return r}catch{}await new Promise(r=>setTimeout(r,o))}throw new Error(`waitFor timed out after ${n}ms`)}async function Ze(e,t={}){let{timeout:n=1e3,interval:o=50}=t,s=Date.now(),r=e();if(!r)throw new Error("Element not found");for(;Date.now()-s<n;){if(r=e(),!r)return;await new Promise(i=>setTimeout(i,o))}throw new Error(`Element still present after ${n}ms`)}async function Je(e){let t=await e();return B(),await new Promise(n=>queueMicrotask(n)),await new Promise(n=>setTimeout(n,0)),t}function Xe(e){let t=L(e),n=[e];return x(()=>{n.push(t())}),{signal:t,get value(){return t()},set value(o){t.set(o)},history:n,reset(){n.length=0,n.push(t())}}}function Qe(e="MockComponent"){let t=[];function n(o){return t.push({props:o,timestamp:Date.now()}),I("div",{"data-testid":`mock-${e}`},JSON.stringify(o,null,2))}return n.displayName=e,n.calls=t,n.lastCall=()=>t[t.length-1],n.reset=()=>{t.length=0},n}var Ye={toBeInTheDocument(e){if(!e||!e.parentNode)throw new Error("Expected element to be in the document")},toHaveTextContent(e,t){if(!e)throw new Error("Element not found");let n=e.textContent;if(!(t instanceof RegExp?t.test(n):n.includes(t)))throw new Error(`Expected "${n}" to contain "${t}"`)},toHaveAttribute(e,t,n){if(!e)throw new Error("Element not found");let o=e.getAttribute(t);if(n!==void 0&&o!==n)throw new Error(`Expected attribute "${t}" to be "${n}", got "${o}"`);if(n===void 0&&o===null)throw new Error(`Expected element to have attribute "${t}"`)},toHaveClass(e,t){if(!e)throw new Error("Element not found");if(!e.classList.contains(t))throw new Error(`Expected element to have class "${t}"`)},toBeVisible(e){if(!e)throw new Error("Element not found");let t=window.getComputedStyle(e);if(t.display==="none"||t.visibility==="hidden"||t.opacity==="0")throw new Error("Expected element to be visible")},toBeDisabled(e){if(!e)throw new Error("Element not found");if(!e.disabled)throw new Error("Expected element to be disabled")},toHaveValue(e,t){if(!e)throw new Error("Element not found");if(e.value!==t)throw new Error(`Expected value to be "${t}", got "${e.value}"`)}},et={getByText:e=>T(document.body,e),getByTestId:e=>document.querySelector(`[data-testid="${e}"]`),getByRole:e=>document.querySelector(`[role="${e}"]`),getAllByText:e=>ce(document.body,e),queryByText:e=>T(document.body,e),queryByTestId:e=>document.querySelector(`[data-testid="${e}"]`),debug:()=>console.log(document.body.innerHTML)};export{Je as act,ke as cleanup,Xe as createTestSignal,Ye as expect,Ke as fireEvent,ze as flushEffects,Qe as mockComponent,Ge as mockSignal,Ve as render,We as renderTest,et as screen,ie as setupDOM,Ue as trackSignals,se as waitFor,Ze as waitForElementToBeRemoved};
|
|
1
|
+
var p=!(typeof process<"u"),f=null;var d=null,B=null,M=null,V=!1,R=0,b=[],q=!1,ue=new WeakMap,ae=Symbol("needs_upstream");function A(e,t){let n=e,o=new Set;function s(...r){if(r.length===0)return d&&(o.add(d),d.deps.push(o)),n;p&&V&&console.warn("[what] Signal.set() called inside a computed function. This may cause infinite loops. Use effect() instead."+(t?` (signal: ${t})`:""));let i=typeof r[0]=="function"?r[0](n):r[0];Object.is(n,i)||(n=i,p&&f&&f.onSignalUpdate(s),o.size>0&&W(o))}return s.set=r=>{p&&V&&console.warn("[what] Signal.set() called inside a computed function. This may cause infinite loops. Use effect() instead."+(t?` (signal: ${t})`:""));let i=typeof r=="function"?r(n):r;Object.is(n,i)||(n=i,p&&f&&f.onSignalUpdate(s),o.size>0&&W(o))},s.peek=()=>n,s.subscribe=r=>C(()=>r(s())),s._signal=!0,p&&(s._subs=o,t&&(s._debugName=t)),p&&f&&f.onSignalCreate(s),s}function z(e){let t=0,n=e.deps;for(let o=0;o<n.length;o++){let s=ue.get(n[o]);if(s){let r=s._level;r>t&&(t=r)}}e._level=t+1}function C(e,t){let n=fe(e);n._level=1;let o=d;d=n;try{let r=n.fn();typeof r=="function"&&(n._cleanup=r)}finally{d=o}z(n),t?.stable&&(n._stable=!0);let s=()=>de(n);return B&&B.disposals.push(s),s}function fe(e,t){let n={fn:e,deps:[],lazy:t||!1,_onNotify:null,disposed:!1,_pending:!1,_stable:!1,_level:0,_computed:!1,_computedSubs:null,_isDirty:null,_markDirty:null};return p&&f&&f.onEffectCreate(n),n}function pe(e){if(e.disposed)return;if(e._stable){if(e._cleanup){try{e._cleanup()}catch(o){p&&console.warn("[what] Error in effect cleanup:",o)}e._cleanup=null}let n=d;d=null;try{let o=e.fn();typeof o=="function"&&(e._cleanup=o)}catch(o){f?.onError&&f.onError(o,{type:"effect",effect:e}),p&&console.warn("[what] Error in stable effect:",o)}finally{d=n}p&&f?.onEffectRun&&f.onEffectRun(e);return}if(U(e),e._cleanup){try{e._cleanup()}catch(n){f?.onError&&f.onError(n,{type:"effect-cleanup",effect:e}),p&&console.warn("[what] Error in effect cleanup:",n)}e._cleanup=null}let t=d;d=e;try{let n=e.fn();typeof n=="function"&&(e._cleanup=n)}catch(n){throw n===ae||f?.onError&&f.onError(n,{type:"effect",effect:e}),n}finally{d=t}p&&f?.onEffectRun&&f.onEffectRun(e)}function de(e){if(e.disposed=!0,p&&f&&f.onEffectDispose(e),U(e),e._cleanup){try{e._cleanup()}catch(t){p&&console.warn("[what] Error in effect cleanup on dispose:",t)}e._cleanup=null}}function U(e){let t=e.deps;for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}var I=0,S=null,L=0;function W(e){if(I===0){I=1;try{for(let t of e)if(!t.disposed){if(t._onNotify)t._onNotify();else if(R===0&&t._stable){let n=d;d=null;try{let o=t.fn();if(typeof o=="function"){if(t._cleanup)try{t._cleanup()}catch{}t._cleanup=o}}catch(o){f?.onError&&f.onError(o,{type:"effect",effect:t}),p&&console.warn("[what] Error in stable effect:",o)}finally{d=n}}else if(!t._pending){t._pending=!0;let n=t._level,o=b.length;o>0&&b[o-1]._level>n&&(q=!0),b.push(t)}}if(L>0){let t=0;for(;t<L;){let n=S[t];S[t]=null,t++;for(let o of n)if(!o.disposed){if(o._onNotify)o._onNotify();else if(R===0&&o._stable){let s=d;d=null;try{let r=o.fn();if(typeof r=="function"){if(o._cleanup)try{o._cleanup()}catch{}o._cleanup=r}}catch(r){f?.onError&&f.onError(r,{type:"effect",effect:o}),p&&console.warn("[what] Error in stable effect:",r)}finally{d=s}}else if(!o._pending){o._pending=!0;let s=o._level,r=b.length;r>0&&b[r-1]._level>s&&(q=!0),b.push(o)}}}L=0}}finally{I=0}R===0&&b.length>0&&he()}else S===null&&(S=[]),L>=S.length?S.push(e):S[L]=e,L++}var D=!1;function he(){D||(D=!0,queueMicrotask(()=>{D=!1,G()}))}var O=!1;function G(){if(!O){O=!0;try{let e=0;for(;b.length>0&&e<25;){let t=b;b=[],t.length>1&&q&&t.sort((n,o)=>n._level-o._level),q=!1;for(let n=0;n<t.length;n++){let o=t[n];if(o._pending=!1,!o.disposed&&!o._onNotify){let s=o.deps.length;pe(o),!o._computed&&o.deps.length!==s&&z(o)}}e++}if(e>=25){for(let t=0;t<b.length;t++)b[t]._pending=!1;if(b.length=0,p){let n=b.slice(0,3).map(o=>o.fn?.name||o.fn?.toString().slice(0,60)||"(anonymous)");console.warn(`[what] Possible infinite effect loop detected (25 iterations). Likely cause: an effect writes to a signal it also reads, creating a cycle. Use untrack() to read signals without subscribing. Looping effects: ${n.join(", ")}`)}else console.warn("[what] Possible infinite effect loop detected")}}finally{O=!1}}}function j(){if(O){p&&console.warn("[what] flushSync() called during an active flush (e.g., inside a component render or effect). This is a no-op to prevent infinite loops. Move flushSync() to an event handler or onMount callback.");return}if(d){p&&console.warn("[what] flushSync() called during effect execution. This is a no-op to prevent infinite loops. Move flushSync() to an event handler or onMount callback.");return}D=!1,G()}function K(e){let t=d;d=null;try{return e()}finally{d=t}}function F(e){let t=B,n=M,o={disposals:[],owner:M,children:[],_disposed:!1};M&&M.children.push(o),B=o,M=o;try{return e(()=>{if(!o._disposed){o._disposed=!0;for(let r=o.children.length-1;r>=0;r--)Z(o.children[r]);o.children.length=0;for(let r=o.disposals.length-1;r>=0;r--)o.disposals[r]();if(o.disposals.length=0,o.owner){let r=o.owner.children.indexOf(o);r>=0&&o.owner.children.splice(r,1)}}})}finally{B=t,M=n}}function Z(e){if(!e._disposed){e._disposed=!0;for(let t=e.children.length-1;t>=0;t--)Z(e.children[t]);e.children.length=0;for(let t=e.disposals.length-1;t>=0;t--)e.disposals[t]();e.disposals.length=0}}var me=Object.create(null);function H(e,t,...n){t=t||me;let o=J(n),s=t.key??null;return t.key!==void 0&&(t={...t},delete t.key),{tag:e,props:t,children:o,key:s,_vnode:!0}}function J(e){let t=[];for(let n=0;n<e.length;n++){let o=e[n];o==null||o===!1||o===!0||(Array.isArray(o)?t.push(...J(o)):typeof o=="object"&&o._vnode||typeof o=="function"?t.push(o):t.push(String(o)))}return t}var X=null;function Q(e){X=e}function Y(e,t){let n=t||X?.();for(;n;){if(n._errorBoundary)return n._errorBoundary(e),!0;n=n._parentCtx}return!1}var ye=null;function ee(e){ye=e}var ge=new Set(["svg","path","circle","rect","line","polyline","polygon","ellipse","g","defs","use","symbol","clipPath","mask","pattern","image","text","tspan","textPath","foreignObject","linearGradient","radialGradient","stop","marker","animate","animateTransform","animateMotion","set","filter","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence"]),_e="http://www.w3.org/2000/svg",oe=new Set,$=new WeakMap;function we(e){return!e||typeof e!="object"?!1:typeof Node<"u"&&e instanceof Node?!0:typeof e.nodeType=="number"&&typeof e.nodeName=="string"}function te(e){return!!e&&typeof e=="object"&&(e._vnode===!0||"tag"in e)}function ne(e){if(!e.disposed){if(e.disposed=!0,e.cleanups)for(let t of e.cleanups)try{t()}catch(n){console.error("[what] cleanup error:",n)}if(e.effects)for(let t of e.effects)try{t()}catch{}if(e.hooks){for(let t of e.hooks)if(t&&typeof t.cleanup=="function")try{t.cleanup()}catch(n){console.error("[what] hook cleanup error:",n)}}if(e._cleanupCallbacks)for(let t of e._cleanupCallbacks)try{t()}catch(n){console.error("[what] onCleanup error:",n)}p&&f?.onComponentUnmount&&f.onComponentUnmount(e),oe.delete(e)}}function N(e){if(!e)return;e._componentCtx&&ne(e._componentCtx);let t=$.get(e);if(t&&ne(t),e._dispose)try{e._dispose()}catch{}if(e._propEffects)for(let n in e._propEffects)try{e._propEffects[n]()}catch{}if(e.childNodes)for(let n of e.childNodes)N(n)}function P(e,t){typeof t=="string"&&(t=document.querySelector(t)),N(t),t.textContent="";let n=v(e,t);return n&&t.appendChild(n),()=>{N(t),t.textContent=""}}function v(e,t,n){if(e==null||e===!1||e===!0)return document.createComment("");if(typeof e=="string"||typeof e=="number")return document.createTextNode(String(e));if(we(e))return e;if(typeof e=="function"){let o=document.createComment("fn"),s=document.createComment("/fn"),r=[],i=document.createDocumentFragment();i.appendChild(o),i.appendChild(s);let c=C(()=>{let l=e(),u=l==null||l===!1||l===!0?[]:Array.isArray(l)?l:[l],y=s.parentNode;if(y){for(let h of r)N(h),h.parentNode===y&&y.removeChild(h);r=[];for(let h of u){let _=v(h,y,t?._isSvg);if(_)if(_.nodeType===11){let g=Array.from(_.childNodes);y.insertBefore(_,s);for(let w of g)r.push(w)}else y.insertBefore(_,s),r.push(_)}}});return o._dispose=c,s._dispose=c,i}if(Array.isArray(e)){let o=document.createDocumentFragment();for(let s of e){let r=v(s,t,n);r&&o.appendChild(r)}return o}return te(e)&&typeof e.tag=="function"?be(e,t,n):te(e)?ve(e,t,n):document.createTextNode(String(e))}var m=[];function re(){return m[m.length-1]}Q(re);ee(re);function be(e,t,n){let{tag:o,props:s,children:r}=e;if(typeof o=="function"&&(o.prototype?.isReactComponent||o.prototype?.render)){let a=o;o=function(k){return new a(k).render()},o.displayName=a.displayName||a.name||"ClassComponent"}if(o==="__errorBoundary"||e.tag==="__errorBoundary")return Ee(e,t);if(o==="__suspense"||e.tag==="__suspense")return xe(e,t);if(o==="__portal"||e.tag==="__portal")return Ce(e,t);let i={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,Component:o,_parentCtx:m[m.length-1]||null,_errorBoundary:(()=>{let a=m[m.length-1];for(;a;){if(a._errorBoundary)return a._errorBoundary;a=a._parentCtx}return null})()},c=document.createComment("c:start"),l=document.createComment("c:end");$.set(c,i),i._startComment=c,i._endComment=l;let u=document.createDocumentFragment();u._componentCtx=i,i._wrapper=c,oe.add(i),p&&f?.onComponentMount&&f.onComponentMount(i);let y=r.length===0?void 0:r.length===1?r[0]:r,h=A({...s,children:y});i._propsSignal=h;let _=new Proxy({},{get(a,E){return h()[E]},has(a,E){let k=h();return E in k},ownKeys(){let a=h();return Reflect.ownKeys(a)},getOwnPropertyDescriptor(a,E){let k=h();if(E in k)return{value:k[E],writable:!1,enumerable:!0,configurable:!0}}});m.push(i);let g;try{g=o(_)}catch(a){if(m.pop(),!Y(a,i))throw console.error("[what] Uncaught error in component:",o.name||"Anonymous",a),a;return u.appendChild(c),u.appendChild(l),u}m.pop(),i.mounted=!0,i._mountCallbacks&&queueMicrotask(()=>{if(!i.disposed)for(let a of i._mountCallbacks)try{a()}catch(E){console.error("[what] onMount error:",E)}}),u.appendChild(c);let w=Array.isArray(g)?g:[g];for(let a of w){let E=v(a,u,n);E&&u.appendChild(E)}return u.appendChild(l),u}function Ee(e,t){let{errorState:n,handleError:o,fallback:s,reset:r}=e.props,i=e.children,c=document.createComment("eb:start"),l=document.createComment("eb:end"),u={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,_parentCtx:m[m.length-1]||null,_errorBoundary:o,_startComment:c,_endComment:l};$.set(c,u);let y=document.createDocumentFragment();y._componentCtx=u,y.appendChild(c),y.appendChild(l);let h=C(()=>{let _=n();if(m.push(u),c.parentNode)for(;c.nextSibling&&c.nextSibling!==l;){let w=c.nextSibling;N(w),w.parentNode.removeChild(w)}let g;_?g=typeof s=="function"?[s({error:_,reset:r})]:[s]:g=i,g=Array.isArray(g)?g:[g];for(let w of g){let a=v(w,t);a&&(l.parentNode?l.parentNode.insertBefore(a,l):y.insertBefore(a,l))}m.pop()});return u.effects.push(h),y}function xe(e,t){let{boundary:n,fallback:o,loading:s}=e.props,r=e.children,i=document.createComment("sb:start"),c=document.createComment("sb:end"),l={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,_parentCtx:m[m.length-1]||null,_startComment:i,_endComment:c};$.set(i,l);let u=document.createDocumentFragment();u._componentCtx=l,u.appendChild(i),u.appendChild(c);let y=C(()=>{let _=s()?[o]:r,g=Array.isArray(_)?_:[_];if(m.push(l),i.parentNode)for(;i.nextSibling&&i.nextSibling!==c;){let w=i.nextSibling;N(w),w.parentNode.removeChild(w)}for(let w of g){let a=v(w,t);a&&(c.parentNode?c.parentNode.insertBefore(a,c):u.insertBefore(a,c))}m.pop()});return l.effects.push(y),u}function Ce(e,t){let{container:n}=e.props,o=e.children;if(!n)return console.warn("[what] Portal: target container not found"),document.createComment("portal:empty");let s={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,_parentCtx:m[m.length-1]||null},r=document.createComment("portal");r._componentCtx=s;let i=[];for(let c of o){let l=v(c,n);l&&(n.appendChild(l),i.push(l))}return s._cleanupCallbacks=[()=>{for(let c of i)N(c),c.parentNode&&c.parentNode.removeChild(c)}],r}function ve(e,t,n){let{tag:o,props:s,children:r}=e,i=n||ge.has(o),c=i?document.createElementNS(_e,o):document.createElement(o);s&&ke(c,s,{},i);for(let l of r){let u=v(l,c,i&&o!=="foreignObject");u&&c.appendChild(u)}return c._vnode=e,c}function ke(e,t,n,o){t=t||{},n=n||{};for(let s in t)if(!(s==="key"||s==="children")){if(s==="ref"){typeof t.ref=="function"?t.ref(e):t.ref&&(t.ref.current=e);continue}se(e,s,t[s],o)}}function se(e,t,n,o){if(typeof n=="function"&&!(t.startsWith("on")&&t.length>2)&&t!=="ref"){if(e._propEffects||(e._propEffects={}),e._propEffects[t])try{e._propEffects[t]()}catch{}e._propEffects[t]=C(()=>{let s=n();se(e,t,s,o)});return}if(t.startsWith("on")&&t.length>2){let s=t.slice(2),r=!1;s.endsWith("Capture")&&(s=s.slice(0,-7),r=!0);let i=s.toLowerCase(),c=r?i+"_capture":i,l=e._events?.[c];if(l&&l._original===n||(l&&e.removeEventListener(i,l,r),n==null))return;e._events||(e._events={});let u=h=>(h.nativeEvent||(h.nativeEvent=h),K(()=>n(h)));u._original=n,e._events[c]=u;let y=n._eventOpts;e.addEventListener(i,u,y||r||void 0);return}if(t==="className"||t==="class"){o?e.setAttribute("class",n||""):e.className=n||"";return}if(t==="style"){if(typeof n=="string")e.style.cssText=n,e._prevStyle=null;else if(typeof n=="object"){let s=e._prevStyle||{};for(let r in s)r in n||(e.style[r]="");for(let r in n)e.style[r]=n[r]??"";e._prevStyle={...n}}return}if(t==="dangerouslySetInnerHTML"){e.innerHTML=n?.__html??"";return}if(t==="innerHTML"){if(n==null)return;if(n&&typeof n=="object"&&"__html"in n)e.innerHTML=n.__html??"";else{p&&console.warn("[what] innerHTML received a raw string. This is a security risk (XSS). Use innerHTML={{ __html: trustedString }} or dangerouslySetInnerHTML={{ __html: trustedString }} instead.");return}return}if(typeof n=="boolean"){n?e.setAttribute(t,""):e.removeAttribute(t);return}if(t.startsWith("data-")||t.startsWith("aria-")){e.setAttribute(t,n);return}if(o){n===!1||n==null?e.removeAttribute(t):e.setAttribute(t,n===!0?"":String(n));return}t in e?e[t]=n:e.setAttribute(t,n)}var x=null;function ce(){return typeof document<"u"&&(x=document.createElement("div"),x.id="test-root",document.body.appendChild(x)),x}function Se(){x&&(x.innerHTML="",x.parentNode&&x.parentNode.removeChild(x),x=null)}function We(e,t={}){let{container:n}=t,o=n||ce();if(!o)throw new Error("No DOM container available. Are you running in Node.js without jsdom?");let s=P(e,o);return{container:o,unmount:s,getByText:r=>T(o,r),getByTestId:r=>o.querySelector(`[data-testid="${r}"]`),getByRole:r=>o.querySelector(`[role="${r}"]`),getAllByText:r=>le(o,r),queryByText:r=>T(o,r),queryByTestId:r=>o.querySelector(`[data-testid="${r}"]`),debug:()=>console.log(o.innerHTML),findByText:(r,i)=>ie(()=>T(o,r),{timeout:i}),findByTestId:(r,i)=>ie(()=>o.querySelector(`[data-testid="${r}"]`),{timeout:i})}}function ze(e,t){let n=ce();if(!n)throw new Error("No DOM container available. Are you running in Node.js without jsdom?");let o={},s=null,r;return F(i=>{s=i;let c=H(e,t||{});r=P(c,n)}),{container:n,signals:new Proxy(o,{get(i,c){if(c in i)return i[c]},set(i,c,l){return i[c]=l,!0}}),update(){j()},unmount(){r&&r(),s&&s(),Se()},getByText:i=>T(n,i),getByTestId:i=>n.querySelector(`[data-testid="${i}"]`),queryByText:i=>T(n,i),debug:()=>console.log(n.innerHTML)}}function Ue(){j()}function Ge(e){let t=[],n=[],o=A,s=new Map,r=l=>{t.includes(l)||t.push(l)},i=l=>{n.includes(l)||n.push(l)},c;return F(l=>{c=l;let u=C(()=>{e()})}),c&&c(),{accessed:t,written:n}}function Ke(e,t){let n=[t],o=0,s=A(t,e),r=s.set;s.set=function(l){let u=typeof l=="function"?l(s.peek()):l;return Object.is(s.peek(),u)||(o++,n.push(u)),r(u)};let i=s,c=function(...l){if(l.length===0)return i();let u=typeof l[0]=="function"?l[0](i.peek()):l[0];return Object.is(i.peek(),u)||(o++,n.push(u)),i(u)};return c._signal=!0,c.peek=s.peek,c.set=s.set,c.subscribe=s.subscribe,s._debugName&&(c._debugName=s._debugName),s._subs&&(c._subs=s._subs),Object.defineProperty(c,"history",{get(){return n}}),Object.defineProperty(c,"setCount",{get(){return o}}),c.reset=function(l){let u=l!==void 0?l:t;n.length=0,n.push(u),o=0,i(u)},c}function T(e,t){let n=t instanceof RegExp?t:null,o=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1);for(;o.nextNode();){let s=o.currentNode;if(n?n.test(s.textContent):s.textContent.includes(t))return s.parentElement}return null}function le(e,t){let n=[],o=t instanceof RegExp?t:null,s=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null,!1);for(;s.nextNode();){let r=s.currentNode;(o?o.test(r.textContent):r.textContent.includes(t))&&n.push(r.parentElement)}return n}var Ze={click(e){let t=new MouseEvent("click",{bubbles:!0,cancelable:!0,view:typeof window<"u"?window:void 0});return e.dispatchEvent(t),t},change(e,t){e.value=t;let n=new Event("input",{bubbles:!0});e.dispatchEvent(n);let o=new Event("change",{bubbles:!0});return e.dispatchEvent(o),o},input(e,t){e.value=t;let n=new Event("input",{bubbles:!0});return e.dispatchEvent(n),n},submit(e){let t=new Event("submit",{bubbles:!0,cancelable:!0});return e.dispatchEvent(t),t},focus(e){e.focus();let t=new FocusEvent("focus",{bubbles:!0});return e.dispatchEvent(t),t},blur(e){e.blur();let t=new FocusEvent("blur",{bubbles:!0});return e.dispatchEvent(t),t},keyDown(e,t,n={}){let o=new KeyboardEvent("keydown",{bubbles:!0,cancelable:!0,key:t,...n});return e.dispatchEvent(o),o},keyUp(e,t,n={}){let o=new KeyboardEvent("keyup",{bubbles:!0,cancelable:!0,key:t,...n});return e.dispatchEvent(o),o},mouseEnter(e){let t=new MouseEvent("mouseenter",{bubbles:!0});return e.dispatchEvent(t),t},mouseLeave(e){let t=new MouseEvent("mouseleave",{bubbles:!0});return e.dispatchEvent(t),t}};async function ie(e,t={}){let{timeout:n=1e3,interval:o=50}=t,s=Date.now();for(;Date.now()-s<n;){try{let r=e();if(r)return r}catch{}await new Promise(r=>setTimeout(r,o))}throw new Error(`waitFor timed out after ${n}ms`)}async function Je(e,t={}){let{timeout:n=1e3,interval:o=50}=t,s=Date.now(),r=e();if(!r)throw new Error("Element not found");for(;Date.now()-s<n;){if(r=e(),!r)return;await new Promise(i=>setTimeout(i,o))}throw new Error(`Element still present after ${n}ms`)}async function Xe(e){let t=await e();return j(),await new Promise(n=>queueMicrotask(n)),await new Promise(n=>setTimeout(n,0)),t}function Qe(e){let t=A(e),n=[e];return C(()=>{n.push(t())}),{signal:t,get value(){return t()},set value(o){t.set(o)},history:n,reset(){n.length=0,n.push(t())}}}function Ye(e="MockComponent"){let t=[];function n(o){return t.push({props:o,timestamp:Date.now()}),H("div",{"data-testid":`mock-${e}`},JSON.stringify(o,null,2))}return n.displayName=e,n.calls=t,n.lastCall=()=>t[t.length-1],n.reset=()=>{t.length=0},n}var et={toBeInTheDocument(e){if(!e||!e.parentNode)throw new Error("Expected element to be in the document")},toHaveTextContent(e,t){if(!e)throw new Error("Element not found");let n=e.textContent;if(!(t instanceof RegExp?t.test(n):n.includes(t)))throw new Error(`Expected "${n}" to contain "${t}"`)},toHaveAttribute(e,t,n){if(!e)throw new Error("Element not found");let o=e.getAttribute(t);if(n!==void 0&&o!==n)throw new Error(`Expected attribute "${t}" to be "${n}", got "${o}"`);if(n===void 0&&o===null)throw new Error(`Expected element to have attribute "${t}"`)},toHaveClass(e,t){if(!e)throw new Error("Element not found");if(!e.classList.contains(t))throw new Error(`Expected element to have class "${t}"`)},toBeVisible(e){if(!e)throw new Error("Element not found");let t=window.getComputedStyle(e);if(t.display==="none"||t.visibility==="hidden"||t.opacity==="0")throw new Error("Expected element to be visible")},toBeDisabled(e){if(!e)throw new Error("Element not found");if(!e.disabled)throw new Error("Expected element to be disabled")},toHaveValue(e,t){if(!e)throw new Error("Element not found");if(e.value!==t)throw new Error(`Expected value to be "${t}", got "${e.value}"`)}},tt={getByText:e=>T(document.body,e),getByTestId:e=>document.querySelector(`[data-testid="${e}"]`),getByRole:e=>document.querySelector(`[role="${e}"]`),getAllByText:e=>le(document.body,e),queryByText:e=>T(document.body,e),queryByTestId:e=>document.querySelector(`[data-testid="${e}"]`),debug:()=>console.log(document.body.innerHTML)};export{Xe as act,Se as cleanup,Qe as createTestSignal,et as expect,Ze as fireEvent,Ue as flushEffects,Ye as mockComponent,Ke as mockSignal,We as render,ze as renderTest,tt as screen,ce as setupDOM,Ge as trackSignals,ie as waitFor,Je as waitForElementToBeRemoved};
|
|
2
2
|
//# sourceMappingURL=testing.min.js.map
|