what-core 0.6.7 → 0.6.9
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/compiler.js +59 -91
- package/dist/compiler.js.map +3 -3
- package/dist/compiler.min.js +1 -1
- package/dist/compiler.min.js.map +3 -3
- package/dist/devtools.js.map +1 -1
- package/dist/devtools.min.js.map +1 -1
- package/dist/index.js +165 -91
- package/dist/index.js.map +3 -3
- package/dist/index.min.js +6 -6
- package/dist/index.min.js.map +3 -3
- package/dist/render.js +59 -91
- package/dist/render.js.map +3 -3
- package/dist/render.min.js +2 -2
- package/dist/render.min.js.map +3 -3
- package/dist/testing.js +59 -91
- package/dist/testing.js.map +3 -3
- package/dist/testing.min.js +1 -1
- package/dist/testing.min.js.map +3 -3
- package/hooks.d.ts +15 -14
- package/index.d.ts +3 -3
- package/package.json +2 -2
- package/src/dom.js +31 -22
- package/src/index.js +7 -3
- package/src/reactive.js +36 -59
package/dist/testing.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var p=!(typeof process<"u"),a=null;var d=null,B=null,M=null,P=!1,R=0,b=[],$=!1,he=new WeakMap,me=Symbol("needs_upstream");function L(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&&P&&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&&a&&a.onSignalUpdate(s),o.size>0&&z(o))}return s.set=r=>{p&&P&&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&&a&&a.onSignalUpdate(s),o.size>0&&z(o))},s.peek=()=>n,s.subscribe=r=>C(()=>r(s())),s._signal=!0,p&&(s._subs=o,t&&(s._debugName=t)),p&&a&&a.onSignalCreate(s),s}function G(e){let t=0,n=e.deps;for(let o=0;o<n.length;o++){let s=he.get(n[o]);if(s){let r=s._level;r>t&&(t=r)}}e._level=t+1}function C(e,t){let n=ye(e);n._level=1;let o=d;d=n;try{let r=n.fn();typeof r=="function"&&(n._cleanup=r)}finally{d=o}G(n),t?.stable&&(n._stable=!0);let s=()=>_e(n);return B&&B.disposals.push(s),s}function ye(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&&a&&a.onEffectCreate(n),n}function ge(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){a?.onError&&a.onError(o,{type:"effect",effect:e}),p&&console.warn("[what] Error in stable effect:",o)}finally{d=n}p&&a?.onEffectRun&&a.onEffectRun(e);return}if(K(e),e._cleanup){try{e._cleanup()}catch(n){a?.onError&&a.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===me||a?.onError&&a.onError(n,{type:"effect",effect:e}),n}finally{d=t}p&&a?.onEffectRun&&a.onEffectRun(e)}function _e(e){if(e.disposed=!0,p&&a&&a.onEffectDispose(e),K(e),e._cleanup){try{e._cleanup()}catch(t){p&&console.warn("[what] Error in effect cleanup on dispose:",t)}e._cleanup=null}}function K(e){let t=e.deps;for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}var F=0,k=null,A=0;function z(e){if(F===0){F=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){a?.onError&&a.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&&($=!0),b.push(t)}}if(A>0){let t=0;for(;t<A;){let n=k[t];k[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){a?.onError&&a.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&&($=!0),b.push(o)}}}A=0}}finally{F=0}R===0&&b.length>0&&we()}else k===null&&(k=[]),A>=k.length?k.push(e):k[A]=e,A++}var D=!1;function we(){D||(D=!0,queueMicrotask(()=>{D=!1,Z()}))}var O=!1;function Z(){if(!O){O=!0;try{let e=0;for(;b.length>0&&e<25;){let t=b;b=[],t.length>1&&$&&t.sort((n,o)=>n._level-o._level),$=!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;ge(o),!o._computed&&o.deps.length!==s&&G(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,Z()}function J(e){let t=d;d=null;try{return e()}finally{d=t}}function I(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--)X(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 X(e){if(!e._disposed){e._disposed=!0;for(let t=e.children.length-1;t>=0;t--)X(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 be=Object.create(null);function H(e,t,...n){t=t||be;let o=Q(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 Q(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(...Q(o)):typeof o=="object"&&o._vnode||typeof o=="function"?t.push(o):t.push(String(o)))}return t}var Y=null;function ee(e){Y=e}function te(e,t){let n=t||Y?.();for(;n;){if(n._errorBoundary)return n._errorBoundary(e),!0;n=n._parentCtx}return!1}var Ee=null;function ne(e){Ee=e}var xe=new Set(["href","src","action","formaction","poster","cite","background","xlink:href"]),Ce=new Set(["srcset"]);function U(e){return String(e).toLowerCase()}function ve(e){return String(e).trim().replace(/[\s\x00-\x1f\x7f]/g,"").toLowerCase()}function oe(e){if(typeof e!="string")return!0;let t=ve(e);return!(t.startsWith("javascript:")||t.startsWith("data:")||t.startsWith("vbscript:"))}function Se(e){return typeof e!="string"?!0:e.split(",").every(t=>{let n=t.trim().split(/\s+/,1)[0]||"";return n===""||oe(n)})}function ke(e){return xe.has(U(e))}function Te(e){return Ce.has(U(e))}function re(e,t){return Te(e)?Se(t):ke(e)?oe(t):!0}function se(e){return e==="className"?"class":e==="htmlFor"?"for":U(e)==="formaction"?"formaction":e}var Ne=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"]),Me="http://www.w3.org/2000/svg",le=new Set,q=new WeakMap;function Ae(e){return!e||typeof e!="object"?!1:typeof Node<"u"&&e instanceof Node?!0:typeof e.nodeType=="number"&&typeof e.nodeName=="string"}function V(e){return!!e&&typeof e=="object"&&(e._vnode===!0||"tag"in e)}function ie(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&&a?.onComponentUnmount&&a.onComponentUnmount(e),le.delete(e)}}function T(e){if(!e)return;e._componentCtx&&ie(e._componentCtx);let t=q.get(e);if(t&&ie(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)T(n)}function W(e,t){typeof t=="string"&&(t=document.querySelector(t)),T(t),t.textContent="";let n=v(e,t);return n&&t.appendChild(n),()=>{T(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(Ae(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)T(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 V(e)&&typeof e.tag=="function"||V(e)&&(e.tag==="__errorBoundary"||e.tag==="__suspense"||e.tag==="__portal")?ce(e,t,n):V(e)?Oe(e,t,n):document.createTextNode(String(e))}var m=[];function ue(){return m[m.length-1]}ee(ue);ne(ue);function ce(e,t,n){let{tag:o,props:s,children:r}=e;if(typeof o=="function"&&(o.prototype?.isReactComponent||o.prototype?.render)){let f=o;o=function(S){return new f(S).render()},o.displayName=f.displayName||f.name||"ClassComponent"}if(o==="__errorBoundary"||e.tag==="__errorBoundary")return Le(e,t);if(o==="__suspense"||e.tag==="__suspense")return Be(e,t);if(o==="__portal"||e.tag==="__portal")return De(e,t);let i={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,Component:o,_parentCtx:m[m.length-1]||null,_errorBoundary:(()=>{let f=m[m.length-1];for(;f;){if(f._errorBoundary)return f._errorBoundary;f=f._parentCtx}return null})()},c=document.createComment("c:start"),l=document.createComment("c:end");q.set(c,i),i._startComment=c,i._endComment=l;let u=document.createDocumentFragment();u._componentCtx=i,i._wrapper=c,le.add(i),p&&a?.onComponentMount&&a.onComponentMount(i);let y=r.length===0?void 0:r.length===1?r[0]:r,h=L({...s,children:y});i._propsSignal=h;let _=new Proxy({},{get(f,E){return h()[E]},has(f,E){let S=h();return E in S},ownKeys(){let f=h();return Reflect.ownKeys(f)},getOwnPropertyDescriptor(f,E){let S=h();if(E in S)return{value:S[E],writable:!1,enumerable:!0,configurable:!0}}});m.push(i);let g;try{g=o(_)}catch(f){if(m.pop(),!te(f,i))throw console.error("[what] Uncaught error in component:",o.name||"Anonymous",f),f;return u.appendChild(c),u.appendChild(l),u}m.pop(),i.mounted=!0,i._mountCallbacks&&queueMicrotask(()=>{if(!i.disposed)for(let f of i._mountCallbacks)try{f()}catch(E){console.error("[what] onMount error:",E)}}),u.appendChild(c);let w=Array.isArray(g)?g:[g];for(let f of w){let E=v(f,u,n);E&&u.appendChild(E)}return u.appendChild(l),u}function Le(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};q.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;T(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 f=v(w,t);f&&(l.parentNode?l.parentNode.insertBefore(f,l):y.insertBefore(f,l))}m.pop()});return u.effects.push(h),y}function Be(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};q.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;T(w),w.parentNode.removeChild(w)}for(let w of g){let f=v(w,t);f&&(c.parentNode?c.parentNode.insertBefore(f,c):u.insertBefore(f,c))}m.pop()});return l.effects.push(y),u}function De(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)T(c),c.parentNode&&c.parentNode.removeChild(c)}],r}function Oe(e,t,n){let{tag:o,props:s,children:r}=e,i=n||Ne.has(o),c=i?document.createElementNS(Me,o):document.createElement(o);s&&$e(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 $e(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}fe(e,s,t[s],o)}}function fe(e,t,n,o){if(!re(t,n)){typeof console<"u"&&console.warn(`[what] Blocked unsafe URL in "${t}" attribute: ${n}`),e.removeAttribute(se(t));return}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();fe(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),J(()=>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 pe(){return typeof document<"u"&&(x=document.createElement("div"),x.id="test-root",document.body.appendChild(x)),x}function je(){x&&(x.innerHTML="",x.parentNode&&x.parentNode.removeChild(x),x=null)}function nt(e,t={}){let{container:n}=t,o=n||pe();if(!o)throw new Error("No DOM container available. Are you running in Node.js without jsdom?");let s=W(e,o);return{container:o,unmount:s,getByText:r=>N(o,r),getByTestId:r=>o.querySelector(`[data-testid="${r}"]`),getByRole:r=>o.querySelector(`[role="${r}"]`),getAllByText:r=>de(o,r),queryByText:r=>N(o,r),queryByTestId:r=>o.querySelector(`[data-testid="${r}"]`),debug:()=>console.log(o.innerHTML),findByText:(r,i)=>ae(()=>N(o,r),{timeout:i}),findByTestId:(r,i)=>ae(()=>o.querySelector(`[data-testid="${r}"]`),{timeout:i})}}function ot(e,t){let n=pe();if(!n)throw new Error("No DOM container available. Are you running in Node.js without jsdom?");let o={},s=null,r;return I(i=>{s=i;let c=H(e,t||{});r=W(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(),je()},getByText:i=>N(n,i),getByTestId:i=>n.querySelector(`[data-testid="${i}"]`),queryByText:i=>N(n,i),debug:()=>console.log(n.innerHTML)}}function rt(){j()}function st(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 I(l=>{c=l;let u=C(()=>{e()})}),c&&c(),{accessed:t,written:n}}function it(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 N(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 de(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 ct={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 ae(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 lt(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 ut(e){let t=await e();return j(),await new Promise(n=>queueMicrotask(n)),await new Promise(n=>setTimeout(n,0)),t}function ft(e){let t=L(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 at(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 pt={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}"`)}},dt={getByText:e=>N(document.body,e),getByTestId:e=>document.querySelector(`[data-testid="${e}"]`),getByRole:e=>document.querySelector(`[role="${e}"]`),getAllByText:e=>de(document.body,e),queryByText:e=>N(document.body,e),queryByTestId:e=>document.querySelector(`[data-testid="${e}"]`),debug:()=>console.log(document.body.innerHTML)};export{ut as act,je as cleanup,ft as createTestSignal,pt as expect,ct as fireEvent,rt as flushEffects,at as mockComponent,it as mockSignal,nt as render,ot as renderTest,dt as screen,pe as setupDOM,st as trackSignals,ae as waitFor,lt as waitForElementToBeRemoved};
|
|
1
|
+
var d=!(typeof process<"u"),a=null;var g=null,B=null,M=null,G=!1,R=0,b=[],$=!1,ye=new WeakMap,ge=Symbol("needs_upstream");function L(e,t){let n=e,o=new Set;function s(...r){if(r.length===0)return g&&(o.add(g),g.deps.push(o)),n;d&&G&&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&&a&&a.onSignalUpdate(s),o.size>0&&K(o))}return s.set=r=>{d&&G&&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&&a&&a.onSignalUpdate(s),o.size>0&&K(o))},s.peek=()=>n,s.subscribe=r=>C(()=>r(s())),s._signal=!0,d&&(s._subs=o,t&&(s._debugName=t)),d&&a&&a.onSignalCreate(s),s}function Z(e){let t=0,n=e.deps;for(let o=0;o<n.length;o++){let s=ye.get(n[o]);if(s){let r=s._level;r>t&&(t=r)}}e._level=t+1}function C(e,t){let n=_e(e);n._level=1;let o=g;g=n;try{let r=n.fn();typeof r=="function"&&(n._cleanup=r)}finally{g=o}Z(n),t?.stable&&(n._stable=!0);let s=()=>be(n);return B&&B.disposals.push(s),s}function _e(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&&a&&a.onEffectCreate(n),n}function we(e){if(e.disposed)return;if(e._stable){I(e);return}J(e),H(e,"effect cleanup");let t=g;g=e;try{let n=e.fn();typeof n=="function"&&(e._cleanup=n)}catch(n){throw n===ge||a?.onError&&a.onError(n,{type:"effect",effect:e}),n}finally{g=t}d&&a?.onEffectRun&&a.onEffectRun(e)}function be(e){e.disposed=!0,d&&a&&a.onEffectDispose(e),J(e),H(e,"effect cleanup on dispose")}function xe(e,t,n){a?.onError&&a.onError(e,{type:"effect-cleanup",effect:t,phase:n}),d&&console.warn(`[what] Error in ${n}:`,e)}function H(e,t){if(!e._cleanup)return;let n=e._cleanup;e._cleanup=null;try{n()}catch(o){xe(o,e,t)}}function I(e){let t=g;g=null;try{H(e,"stable effect cleanup");let n=e.fn();typeof n=="function"&&(e._cleanup=n)}catch(n){a?.onError&&a.onError(n,{type:"effect",effect:e}),d&&console.warn("[what] Error in stable effect:",n)}finally{g=t}d&&a?.onEffectRun&&a.onEffectRun(e)}function J(e){let t=e.deps;for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}var F=0,k=null,A=0;function K(e){if(F===0){F=1;try{for(let t of e)if(!t.disposed){if(t._onNotify)t._onNotify();else if(R===0&&t._stable)I(t);else if(!t._pending){t._pending=!0;let n=t._level,o=b.length;o>0&&b[o-1]._level>n&&($=!0),b.push(t)}}if(A>0){let t=0;for(;t<A;){let n=k[t];k[t]=null,t++;for(let o of n)if(!o.disposed){if(o._onNotify)o._onNotify();else if(R===0&&o._stable)I(o);else if(!o._pending){o._pending=!0;let s=o._level,r=b.length;r>0&&b[r-1]._level>s&&($=!0),b.push(o)}}}A=0}}finally{F=0}R===0&&b.length>0&&Ee()}else k===null&&(k=[]),A>=k.length?k.push(e):k[A]=e,A++}var D=!1;function Ee(){D||(D=!0,queueMicrotask(()=>{D=!1,X()}))}var O=!1;function X(){if(!O){O=!0;try{let e=0;for(;b.length>0&&e<25;){let t=b;b=[],t.length>1&&$&&t.sort((n,o)=>n._level-o._level),$=!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;we(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,d){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){d&&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(g){d&&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,X()}function Q(e){let t=g;g=null;try{return e()}finally{g=t}}function U(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--)Y(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 Y(e){if(!e._disposed){e._disposed=!0;for(let t=e.children.length-1;t>=0;t--)Y(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 Ce=Object.create(null);function V(e,t,...n){t=t||Ce;let o=ee(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 ee(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(...ee(o)):typeof o=="object"&&o._vnode||typeof o=="function"?t.push(o):t.push(String(o)))}return t}var te=null;function ne(e){te=e}function oe(e,t){let n=t||te?.();for(;n;){if(n._errorBoundary)return n._errorBoundary(e),!0;n=n._parentCtx}return!1}var ve=null;function re(e){ve=e}var Se=new Set(["href","src","action","formaction","poster","cite","background","xlink:href"]),ke=new Set(["srcset"]);function W(e){return String(e).toLowerCase()}function Te(e){return String(e).trim().replace(/[\s\x00-\x1f\x7f]/g,"").toLowerCase()}function se(e){if(typeof e!="string")return!0;let t=Te(e);return!(t.startsWith("javascript:")||t.startsWith("data:")||t.startsWith("vbscript:"))}function Ne(e){return typeof e!="string"?!0:e.split(",").every(t=>{let n=t.trim().split(/\s+/,1)[0]||"";return n===""||se(n)})}function Me(e){return Se.has(W(e))}function Ae(e){return ke.has(W(e))}function ie(e,t){return Ae(e)?Ne(t):Me(e)?se(t):!0}function ce(e){return e==="className"?"class":e==="htmlFor"?"for":W(e)==="formaction"?"formaction":e}var Le=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"]),Be="http://www.w3.org/2000/svg",fe=new Set,q=new WeakMap;function De(e){return!e||typeof e!="object"?!1:typeof Node<"u"&&e instanceof Node?!0:typeof e.nodeType=="number"&&typeof e.nodeName=="string"}function P(e){return!!e&&typeof e=="object"&&(e._vnode===!0||"tag"in e)}function ue(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&&a?.onComponentUnmount&&a.onComponentUnmount(e),fe.delete(e)}}function T(e){if(!e)return;e._componentCtx&&ue(e._componentCtx);let t=q.get(e);if(t&&ue(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)T(n)}function z(e,t){typeof t=="string"&&(t=document.querySelector(t)),T(t),t.textContent="";let n=v(e,t);return n&&t.appendChild(n),()=>{T(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(De(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 u=e(),l=u==null||u===!1||u===!0?[]:Array.isArray(u)?u:[u],m=s.parentNode;if(m){for(let p of r)T(p),p.parentNode===m&&m.removeChild(p);r=[];for(let p of l){let _=v(p,m,t?._isSvg);if(_)if(_.nodeType===11){let y=Array.from(_.childNodes);m.insertBefore(_,s);for(let w of y)r.push(w)}else m.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 P(e)&&typeof e.tag=="function"||P(e)&&(e.tag==="__errorBoundary"||e.tag==="__suspense"||e.tag==="__portal")?le(e,t,n):P(e)?qe(e,t,n):document.createTextNode(String(e))}var h=[];function ae(){return h[h.length-1]}ne(ae);re(ae);function le(e,t,n){let{tag:o,props:s,children:r}=e;if(typeof o=="function"&&(o.prototype?.isReactComponent||o.prototype?.render)){let f=o;o=function(S){return new f(S).render()},o.displayName=f.displayName||f.name||"ClassComponent"}if(o==="__errorBoundary"||e.tag==="__errorBoundary")return Oe(e,t);if(o==="__suspense"||e.tag==="__suspense")return $e(e,t);if(o==="__portal"||e.tag==="__portal")return je(e,t);let i={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,Component:o,_parentCtx:h[h.length-1]||null,_errorBoundary:(()=>{let f=h[h.length-1];for(;f;){if(f._errorBoundary)return f._errorBoundary;f=f._parentCtx}return null})()},c=document.createComment("c:start"),u=document.createComment("c:end");q.set(c,i),i._startComment=c,i._endComment=u;let l=document.createDocumentFragment();l._componentCtx=i,i._wrapper=c,fe.add(i),d&&a?.onComponentMount&&a.onComponentMount(i);let m=r.length===0?void 0:r.length===1?r[0]:r,p=L({...s,children:m});i._propsSignal=p;let _=new Proxy({},{get(f,x){return p()[x]},has(f,x){let S=p();return x in S},ownKeys(){let f=p();return Reflect.ownKeys(f)},getOwnPropertyDescriptor(f,x){let S=p();if(x in S)return{value:S[x],writable:!1,enumerable:!0,configurable:!0}}});h.push(i);let y;try{y=o(_)}catch(f){if(h.pop(),!oe(f,i))throw console.error("[what] Uncaught error in component:",o.name||"Anonymous",f),f;return l.appendChild(c),l.appendChild(u),l}h.pop(),i.mounted=!0,i._mountCallbacks&&queueMicrotask(()=>{if(!i.disposed)for(let f of i._mountCallbacks)try{f()}catch(x){console.error("[what] onMount error:",x)}}),l.appendChild(c);let w=Array.isArray(y)?y:[y];for(let f of w){let x=v(f,l,n);x&&l.appendChild(x)}return l.appendChild(u),l}function Oe(e,t){let{errorState:n,handleError:o,fallback:s,reset:r}=e.props,i=e.children,c=document.createComment("eb:start"),u=document.createComment("eb:end"),l={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,_parentCtx:h[h.length-1]||null,_errorBoundary:o,_startComment:c,_endComment:u};q.set(c,l);let m=document.createDocumentFragment();m._componentCtx=l,m.appendChild(c),m.appendChild(u);let p=C(()=>{let _=n();if(h.push(l),c.parentNode)for(;c.nextSibling&&c.nextSibling!==u;){let w=c.nextSibling;T(w),w.parentNode.removeChild(w)}let y;_?y=typeof s=="function"?[s({error:_,reset:r})]:[s]:y=i,y=Array.isArray(y)?y:[y];for(let w of y){let f=v(w,t);f&&(u.parentNode?u.parentNode.insertBefore(f,u):m.insertBefore(f,u))}h.pop()});return l.effects.push(p),m}function $e(e,t){let{boundary:n,fallback:o,loading:s}=e.props,r=e.children,i=document.createComment("sb:start"),c=document.createComment("sb:end"),u={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,_parentCtx:h[h.length-1]||null,_startComment:i,_endComment:c};q.set(i,u);let l=document.createDocumentFragment();l._componentCtx=u,l.appendChild(i),l.appendChild(c);let m=C(()=>{let _=s()?[o]:r,y=Array.isArray(_)?_:[_];if(h.push(u),i.parentNode)for(;i.nextSibling&&i.nextSibling!==c;){let w=i.nextSibling;T(w),w.parentNode.removeChild(w)}for(let w of y){let f=v(w,t);f&&(c.parentNode?c.parentNode.insertBefore(f,c):l.insertBefore(f,c))}h.pop()});return u.effects.push(m),l}function je(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:h[h.length-1]||null},r=document.createComment("portal");r._componentCtx=s;let i=[];for(let c of o){let u=v(c,n);u&&(n.appendChild(u),i.push(u))}return s._cleanupCallbacks=[()=>{for(let c of i)T(c),c.parentNode&&c.parentNode.removeChild(c)}],r}function qe(e,t,n){let{tag:o,props:s,children:r}=e,i=n||Le.has(o),c=i?document.createElementNS(Be,o):document.createElement(o);s&&Re(c,s,{},i);for(let u of r){let l=v(u,c,i&&o!=="foreignObject");l&&c.appendChild(l)}return c._vnode=e,c}function Re(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}pe(e,s,t[s],o)}}function pe(e,t,n,o){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,u=e._events?.[c];if(u&&u._original===n||(u&&e.removeEventListener(i,u,r),n==null))return;e._events||(e._events={});let l=p=>(p.nativeEvent||(p.nativeEvent=p),Q(()=>n(p)));l._original=n,e._events[c]=l;let m=n._eventOpts;e.addEventListener(i,l,m||r||void 0);return}if(t==="ref"){typeof n=="function"?n(e):n&&(n.current=e);return}if(!ie(t,n)){typeof console<"u"&&console.warn(`[what] Blocked unsafe URL in "${t}" attribute: ${n}`),e.removeAttribute(ce(t));return}if(typeof n=="function"){if(e._propEffects||(e._propEffects={}),e._propEffects[t])try{e._propEffects[t]()}catch{}e._propEffects[t]=C(()=>{let s=n();pe(e,t,s,o)});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 he(){return typeof document<"u"&&(E=document.createElement("div"),E.id="test-root",document.body.appendChild(E)),E}function Fe(){E&&(E.innerHTML="",E.parentNode&&E.parentNode.removeChild(E),E=null)}function st(e,t={}){let{container:n}=t,o=n||he();if(!o)throw new Error("No DOM container available. Are you running in Node.js without jsdom?");let s=z(e,o);return{container:o,unmount:s,getByText:r=>N(o,r),getByTestId:r=>o.querySelector(`[data-testid="${r}"]`),getByRole:r=>o.querySelector(`[role="${r}"]`),getAllByText:r=>me(o,r),queryByText:r=>N(o,r),queryByTestId:r=>o.querySelector(`[data-testid="${r}"]`),debug:()=>console.log(o.innerHTML),findByText:(r,i)=>de(()=>N(o,r),{timeout:i}),findByTestId:(r,i)=>de(()=>o.querySelector(`[data-testid="${r}"]`),{timeout:i})}}function it(e,t){let n=he();if(!n)throw new Error("No DOM container available. Are you running in Node.js without jsdom?");let o={},s=null,r;return U(i=>{s=i;let c=V(e,t||{});r=z(c,n)}),{container:n,signals:new Proxy(o,{get(i,c){if(c in i)return i[c]},set(i,c,u){return i[c]=u,!0}}),update(){j()},unmount(){r&&r(),s&&s(),Fe()},getByText:i=>N(n,i),getByTestId:i=>n.querySelector(`[data-testid="${i}"]`),queryByText:i=>N(n,i),debug:()=>console.log(n.innerHTML)}}function ct(){j()}function ut(e){let t=[],n=[],o=L,s=new Map,r=u=>{t.includes(u)||t.push(u)},i=u=>{n.includes(u)||n.push(u)},c;return U(u=>{c=u;let l=C(()=>{e()})}),c&&c(),{accessed:t,written:n}}function lt(e,t){let n=[t],o=0,s=L(t,e),r=s.set;s.set=function(u){let l=typeof u=="function"?u(s.peek()):u;return Object.is(s.peek(),l)||(o++,n.push(l)),r(l)};let i=s,c=function(...u){if(u.length===0)return i();let l=typeof u[0]=="function"?u[0](i.peek()):u[0];return Object.is(i.peek(),l)||(o++,n.push(l)),i(l)};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(u){let l=u!==void 0?u:t;n.length=0,n.push(l),o=0,i(l)},c}function N(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 me(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 ft={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 de(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 at(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 pt(e){let t=await e();return j(),await new Promise(n=>queueMicrotask(n)),await new Promise(n=>setTimeout(n,0)),t}function dt(e){let t=L(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 ht(e="MockComponent"){let t=[];function n(o){return t.push({props:o,timestamp:Date.now()}),V("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 mt={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}"`)}},yt={getByText:e=>N(document.body,e),getByTestId:e=>document.querySelector(`[data-testid="${e}"]`),getByRole:e=>document.querySelector(`[role="${e}"]`),getAllByText:e=>me(document.body,e),queryByText:e=>N(document.body,e),queryByTestId:e=>document.querySelector(`[data-testid="${e}"]`),debug:()=>console.log(document.body.innerHTML)};export{pt as act,Fe as cleanup,dt as createTestSignal,mt as expect,ft as fireEvent,ct as flushEffects,ht as mockComponent,lt as mockSignal,st as render,it as renderTest,yt as screen,he as setupDOM,ut as trackSignals,de as waitFor,at as waitForElementToBeRemoved};
|
|
2
2
|
//# sourceMappingURL=testing.min.js.map
|