a(c,n)))break e;e[r]=c,e[u]=n,r=u}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}var u=[],c=[],d=1,f=null,p=3,h=!1,m=!1,v=!1,y="function"==typeof setTimeout?setTimeout:null,g="function"==typeof clearTimeout?clearTimeout:null,b="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(c);null!==t;){if(null===t.callback)o(c);else{if(!(t.startTime<=e))break;o(c),t.sortIndex=t.expirationTime,n(u,t)}t=r(c)}}function x(e){if(v=!1,w(e),!m)if(null!==r(u))m=!0,N(S);else{var t=r(c);null!==t&&L(x,t.startTime-e)}}function S(e,n){m=!1,v&&(v=!1,g(C),C=-1),h=!0;var a=p;try{for(w(n),f=r(u);null!==f&&(!(f.expirationTime>n)||e&&!_());){var i=f.callback;if("function"==typeof i){f.callback=null,p=f.priorityLevel;var l=i(f.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?f.callback=l:f===r(u)&&o(u),w(n)}else o(u);f=r(u)}if(null!==f)var s=!0;else{var d=r(c);null!==d&&L(x,d.startTime-n),s=!1}return s}finally{f=null,p=a,h=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var k,A=!1,E=null,C=-1,P=5,O=-1;function _(){return!(t.unstable_now()-Oe||125i?(e.sortIndex=a,n(c,e),null===r(u)&&e===r(c)&&(v?(g(C),C=-1):v=!0,L(x,a-i))):(e.sortIndex=l,n(u,e),m||h||(m=!0,N(S))),e},t.unstable_shouldYield=_,t.unstable_wrapCallback=function(e){var t=p;return function(){var n=p;p=t;try{return e.apply(this,arguments)}finally{p=n}}}},9982:(e,t,n)=>{"use strict";e.exports=n(7463)},7154:(e,t,n)=>{"use strict";var r=n(6540),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useSyncExternalStore,i=r.useRef,l=r.useEffect,s=r.useMemo,u=r.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,r,c){var d=i(null);if(null===d.current){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=s((function(){function e(e){if(!l){if(l=!0,a=e,e=r(e),void 0!==c&&f.hasValue){var t=f.value;if(c(t,e))return i=t}return i=e}if(t=i,o(a,e))return t;var n=r(e);return void 0!==c&&c(t,n)?t:(a=e,i=n)}var a,i,l=!1,s=void 0===n?null:n;return[function(){return e(t())},null===s?void 0:function(){return e(s())}]}),[t,n,r,c]);var p=a(e,d[0],d[1]);return l((function(){f.hasValue=!0,f.value=p}),[p]),u(p),p}},8418:(e,t,n)=>{"use strict";e.exports=n(7154)},4634:e=>{function t(){return e.exports=t=Object.assign?Object.assign.bind():function(e){for(var t=1;t{e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports},4893:e=>{e.exports=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n},e.exports.__esModule=!0,e.exports.default=e.exports},8168:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;tr})},8587:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}n.d(t,{A:()=>r})},4164:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;to});const o=function(){for(var e,t,n=0,o="",a=arguments.length;n{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var o=Object.create(null);i.r(o);var a={};e=e||[null,t({}),t([]),t(t)];for(var l=2&r&&n;"object"==typeof l&&!~e.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach((e=>a[e]=()=>n[e]));return a.default=()=>n,i.d(o,a),o},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,n)=>(i.f[n](e,t),t)),[])),i.u=e=>e+".bundle.js",i.miniCssF=e=>{},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},r="client-side:",i.l=(e,t,o,a)=>{if(n[e])n[e].push(t);else{var l,s;if(void 0!==o)for(var u=document.getElementsByTagName("script"),c=0;c{l.onerror=l.onload=null,clearTimeout(p);var o=n[e];if(delete n[e],l.parentNode&&l.parentNode.removeChild(l),o&&o.forEach((e=>e(r))),t)return t(r)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=f.bind(null,l.onerror),l.onload=f.bind(null,l.onload),s&&document.head.appendChild(l)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="/",(()=>{var e={792:0};i.f.j=(t,n)=>{var r=i.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=e[t]=[n,o]));n.push(r[2]=o);var a=i.p+i.u(t),l=new Error;i.l(a,(n=>{if(i.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;l.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",l.name="ChunkLoadError",l.type=o,l.request=a,r[1](l)}}),"chunk-"+t,t)}};var t=(t,n)=>{var r,o,a=n[0],l=n[1],s=n[2],u=0;if(a.some((t=>0!==e[t]))){for(r in l)i.o(l,r)&&(i.m[r]=l[r]);s&&s(i)}for(t&&t(n);u{"use strict";var e=i(6540),t=i.t(e,2),n=i(5338);var r=i(8418),o=e,a=Symbol.for("react-redux-context"),l="undefined"!=typeof globalThis?globalThis:{};function s(){if(!o.createContext)return{};const e=l[a]??(l[a]=new Map);let t=e.get(o.createContext);return t||(t=o.createContext(null),e.set(o.createContext,t)),t}var u=s();function c(e=u){return function(){return o.useContext(e)}}var d=c(),f=()=>{throw new Error("uSES not initialized!")},p=(e,t)=>e===t;function h(e=u){const t=e===u?d:c(e),n=(e,n={})=>{const{equalityFn:r=p,devModeChecks:a={}}="function"==typeof n?{equalityFn:n}:n,{store:i,subscription:l,getServerState:s,stabilityCheck:u,identityFunctionCheck:c}=t(),d=(o.useRef(!0),o.useCallback({[e.name]:t=>e(t)}[e.name],[e,u,a.stabilityCheck])),h=f(l.addNestedSub,i.getState,s||i.getState,d,r);return o.useDebugValue(h),h};return Object.assign(n,{withTypes:()=>n}),n}var m=h();Symbol.for("react.element"),Symbol.for("react.portal"),Symbol.for("react.fragment"),Symbol.for("react.strict_mode"),Symbol.for("react.profiler"),Symbol.for("react.provider"),Symbol.for("react.context"),Symbol.for("react.server_context"),Symbol.for("react.forward_ref"),Symbol.for("react.suspense"),Symbol.for("react.suspense_list"),Symbol.for("react.memo"),Symbol.for("react.lazy"),Symbol.for("react.offscreen"),Symbol.for("react.client.reference");var v={notify(){},get:()=>[]};var y=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),g="undefined"!=typeof navigator&&"ReactNative"===navigator.product,b=y||g?o.useLayoutEffect:o.useEffect;Object.defineProperty,Object.getOwnPropertyNames,Object.getOwnPropertySymbols,Object.getOwnPropertyDescriptor,Object.getPrototypeOf,Object.prototype;var w,x=function({store:e,context:t,children:n,serverState:r,stabilityCheck:a="once",identityFunctionCheck:i="once"}){const l=o.useMemo((()=>{const t=function(e,t){let n,r=v,o=0,a=!1;function i(){u.onStateChange&&u.onStateChange()}function l(){o++,n||(n=t?t.addNestedSub(i):e.subscribe(i),r=function(){let e=null,t=null;return{clear(){e=null,t=null},notify(){(()=>{let t=e;for(;t;)t.callback(),t=t.next})()},get(){const t=[];let n=e;for(;n;)t.push(n),n=n.next;return t},subscribe(n){let r=!0;const o=t={callback:n,next:null,prev:t};return o.prev?o.prev.next=o:e=o,function(){r&&null!==e&&(r=!1,o.next?o.next.prev=o.prev:t=o.prev,o.prev?o.prev.next=o.next:e=o.next)}}}}())}function s(){o--,n&&0===o&&(n(),n=void 0,r.clear(),r=v)}const u={addNestedSub:function(e){l();const t=r.subscribe(e);let n=!1;return()=>{n||(n=!0,t(),s())}},notifyNestedSubs:function(){r.notify()},handleChangeWrapper:i,isSubscribed:function(){return a},trySubscribe:function(){a||(a=!0,l())},tryUnsubscribe:function(){a&&(a=!1,s())},getListeners:()=>r};return u}(e);return{store:e,subscription:t,getServerState:r?()=>r:void 0,stabilityCheck:a,identityFunctionCheck:i}}),[e,r,a,i]),s=o.useMemo((()=>e.getState()),[e]);b((()=>{const{subscription:t}=l;return t.onStateChange=t.notifyNestedSubs,t.trySubscribe(),s!==e.getState()&&t.notifyNestedSubs(),()=>{t.tryUnsubscribe(),t.onStateChange=void 0}}),[l,s]);const c=t||u;return o.createElement(c.Provider,{value:l},n)};w=r.useSyncExternalStoreWithSelector,f=w,e.useSyncExternalStore;var S,k=i(961),A=i.t(k,2);function E(){return E=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}var N;function L(e,t,n){return void 0===n&&(n="/"),function(e,t,n,r){let o=X(("string"==typeof t?M(t):t).pathname||"/",n);if(null==o)return null;let a=z(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let i=null;for(let e=0;null==i&&e{let i={relativePath:void 0===a?e.path||"":a,caseSensitive:!0===e.caseSensitive,childrenIndex:o,route:e};i.relativePath.startsWith("/")&&(P(i.relativePath.startsWith(r),'Absolute route path "'+i.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),i.relativePath=i.relativePath.slice(r.length));let l=Y([r,i.relativePath]),s=n.concat(i);e.children&&e.children.length>0&&(P(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+l+'".'),z(e.children,t,s,l)),(null!=e.path||e.index)&&t.push({path:l,score:V(l,e.index),routesMeta:s})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let n of I(e.path))o(e,t,n);else o(e,t)})),t}function I(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,o=n.endsWith("?"),a=n.replace(/\?$/,"");if(0===r.length)return o?[a,""]:[a];let i=I(r.join("/")),l=[];return l.push(...i.map((e=>""===e?a:[a,e].join("/")))),o&&l.push(...i),l.map((t=>e.startsWith("/")&&""===t?"/":t))}!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(N||(N={})),new Set(["lazy","caseSensitive","path","id","index","children"]);const j=/^:[\w-]+$/,F=3,D=2,$=1,B=10,W=-2,U=e=>"*"===e;function V(e,t){let n=e.split("/"),r=n.length;return n.some(U)&&(r+=W),t&&(r+=D),n.filter((e=>!U(e))).reduce(((e,t)=>e+(j.test(t)?F:""===t?$:B)),r)}function H(e,t,n){void 0===n&&(n=!1);let{routesMeta:r}=e,o={},a="/",i=[];for(let e=0;e(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));return e.endsWith("*")?(r.push({paramName:"*"}),o+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?o+="\\/*$":""!==e&&"/"!==e&&(o+="(?:(?=\\/|$))"),[new RegExp(o,t?void 0:"i"),r]}(e.path,e.caseSensitive,e.end),o=t.match(n);if(!o)return null;let a=o[0],i=a.replace(/(.)\/+$/,"$1"),l=o.slice(1);return{params:r.reduce(((e,t,n)=>{let{paramName:r,isOptional:o}=t;if("*"===r){let e=l[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}const s=l[n];return e[r]=o&&!s?void 0:(s||"").replace(/%2F/g,"/"),e}),{}),pathname:a,pathnameBase:i,pattern:e}}function q(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return O(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function X(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function Q(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}const Y=e=>e.join("/").replace(/\/\/+/g,"/"),G=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),J=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",Z=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Error;const ee=["post","put","patch","delete"],te=(new Set(ee),["get",...ee]);function ne(){return ne=Object.assign?Object.assign.bind():function(e){for(var t=1;t{r.current=!0})),e.useCallback((function(e,o){void 0===o&&(o={}),r.current&&("number"==typeof e?t.navigate(e):t.navigate(e,ne({fromRouteId:n},o)))}),[t,n])}():function(){ue()||P(!1);let t=e.useContext(re),{basename:n,future:r,navigator:o}=e.useContext(ae),{matches:a}=e.useContext(le),{pathname:i}=ce(),l=JSON.stringify(function(e,t){let n=function(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}(e);return t?n.map(((e,t)=>t===n.length-1?e.pathname:e.pathnameBase)):n.map((e=>e.pathnameBase))}(a,r.v7_relativeSplatPath)),s=e.useRef(!1);return de((()=>{s.current=!0})),e.useCallback((function(e,r){if(void 0===r&&(r={}),!s.current)return;if("number"==typeof e)return void o.go(e);let a=function(e,t,n,r){let o;void 0===r&&(r=!1),"string"==typeof e?o=M(e):(o=E({},e),P(!o.pathname||!o.pathname.includes("?"),Q("?","pathname","search",o)),P(!o.pathname||!o.pathname.includes("#"),Q("#","pathname","hash",o)),P(!o.search||!o.search.includes("#"),Q("#","search","hash",o)));let a,i=""===e||""===o.pathname,l=i?"/":o.pathname;if(null==l)a=n;else{let e=t.length-1;if(!r&&l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;o.pathname=t.join("/")}a=e>=0?t[e]:"/"}let s=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:o=""}="string"==typeof e?M(e):e,a=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:a,search:J(r),hash:Z(o)}}(o,a),u=l&&"/"!==l&&l.endsWith("/"),c=(i||"."===l)&&n.endsWith("/");return s.pathname.endsWith("/")||!u&&!c||(s.pathname+="/"),s}(e,JSON.parse(l),i,"path"===r.relative);null==t&&"/"!==n&&(a.pathname="/"===a.pathname?n:Y([n,a.pathname])),(r.replace?o.replace:o.push)(a,r.state,r)}),[n,o,l,i,t])}()}const pe=e.createContext(null);function he(t,n,r,o){ue()||P(!1);let{navigator:a}=e.useContext(ae),{matches:i}=e.useContext(le),l=i[i.length-1],s=l?l.params:{},u=(l&&l.pathname,l?l.pathnameBase:"/");l&&l.route;let c,d=ce();if(n){var f;let e="string"==typeof n?M(n):n;"/"===u||(null==(f=e.pathname)?void 0:f.startsWith(u))||P(!1),c=e}else c=d;let p=c.pathname||"/",h=p;if("/"!==u){let e=u.replace(/^\//,"").split("/");h="/"+p.replace(/^\//,"").split("/").slice(e.length).join("/")}let m=L(t,{pathname:h}),v=function(t,n,r,o){var a;if(void 0===n&&(n=[]),void 0===r&&(r=null),void 0===o&&(o=null),null==t){var i;if(!r)return null;if(r.errors)t=r.matches;else{if(!(null!=(i=o)&&i.v7_partialHydration&&0===n.length&&!r.initialized&&r.matches.length>0))return null;t=r.matches}}let l=t,s=null==(a=r)?void 0:a.errors;if(null!=s){let e=l.findIndex((e=>e.route.id&&void 0!==(null==s?void 0:s[e.route.id])));e>=0||P(!1),l=l.slice(0,Math.min(l.length,e+1))}let u=!1,c=-1;if(r&&o&&o.v7_partialHydration)for(let e=0;e=0?l.slice(0,c+1):[l[0]];break}}}return l.reduceRight(((t,o,a)=>{let i,d=!1,f=null,p=null;var h;r&&(i=s&&o.route.id?s[o.route.id]:void 0,f=o.route.errorElement||ve,u&&(c<0&&0===a?(Se[h="route-fallback"]||(Se[h]=!0),d=!0,p=null):c===a&&(d=!0,p=o.route.hydrateFallbackElement||null)));let m=n.concat(l.slice(0,a+1)),v=()=>{let n;return n=i?f:d?p:o.route.Component?e.createElement(o.route.Component,null):o.route.element?o.route.element:t,e.createElement(ge,{match:o,routeContext:{outlet:t,matches:m,isDataRoute:null!=r},children:n})};return r&&(o.route.ErrorBoundary||o.route.errorElement||0===a)?e.createElement(ye,{location:r.location,revalidation:r.revalidation,component:f,error:i,children:v(),routeContext:{outlet:null,matches:m,isDataRoute:!0}}):v()}),null)}(m&&m.map((e=>Object.assign({},e,{params:Object.assign({},s,e.params),pathname:Y([u,a.encodeLocation?a.encodeLocation(e.pathname).pathname:e.pathname]),pathnameBase:"/"===e.pathnameBase?u:Y([u,a.encodeLocation?a.encodeLocation(e.pathnameBase).pathname:e.pathnameBase])}))),i,r,o);return n&&v?e.createElement(ie.Provider,{value:{location:ne({pathname:"/",search:"",hash:"",state:null,key:"default"},c),navigationType:S.Pop}},v):v}function me(){let t=function(){var t;let n=e.useContext(se),r=function(t){let n=e.useContext(oe);return n||P(!1),n}(we.UseRouteError),o=xe(we.UseRouteError);return void 0!==n?n:null==(t=r.errors)?void 0:t[o]}(),n=function(e){return null!=e&&"number"==typeof e.status&&"string"==typeof e.statusText&&"boolean"==typeof e.internal&&"data"in e}(t)?t.status+" "+t.statusText:t instanceof Error?t.message:JSON.stringify(t),r=t instanceof Error?t.stack:null,o={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return e.createElement(e.Fragment,null,e.createElement("h2",null,"Unexpected Application Error!"),e.createElement("h3",{style:{fontStyle:"italic"}},n),r?e.createElement("pre",{style:o},r):null,null)}const ve=e.createElement(me,null);class ye extends e.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||"idle"!==t.revalidation&&"idle"===e.revalidation?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:void 0!==e.error?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return void 0!==this.state.error?e.createElement(le.Provider,{value:this.props.routeContext},e.createElement(se.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function ge(t){let{routeContext:n,match:r,children:o}=t,a=e.useContext(re);return a&&a.static&&a.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(a.staticContext._deepestRenderedBoundaryId=r.route.id),e.createElement(le.Provider,{value:n},o)}var be=function(e){return e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e}(be||{}),we=function(e){return e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId",e}(we||{});function xe(t){let n=function(t){let n=e.useContext(le);return n||P(!1),n}(),r=n.matches[n.matches.length-1];return r.route.id||P(!1),r.route.id}const Se={};function ke(t){return function(t){let n=e.useContext(le).outlet;return n?e.createElement(pe.Provider,{value:t},n):n}(t.context)}function Ae(e){P(!1)}function Ee(t){let{basename:n="/",children:r=null,location:o,navigationType:a=S.Pop,navigator:i,static:l=!1,future:s}=t;ue()&&P(!1);let u=n.replace(/^\/*/,"/"),c=e.useMemo((()=>({basename:u,navigator:i,static:l,future:ne({v7_relativeSplatPath:!1},s)})),[u,s,i,l]);"string"==typeof o&&(o=M(o));let{pathname:d="/",search:f="",hash:p="",state:h=null,key:m="default"}=o,v=e.useMemo((()=>{let e=X(d,u);return null==e?null:{location:{pathname:e,search:f,hash:p,state:h,key:m},navigationType:a}}),[u,d,f,p,h,m,a]);return null==v?null:e.createElement(ae.Provider,{value:c},e.createElement(ie.Provider,{children:r,value:v}))}function Ce(e){let{children:t,location:n}=e;return he(Pe(t),n)}function Pe(t,n){void 0===n&&(n=[]);let r=[];return e.Children.forEach(t,((t,o)=>{if(!e.isValidElement(t))return;let a=[...n,o];if(t.type===e.Fragment)return void r.push.apply(r,Pe(t.props.children,a));t.type!==Ae&&P(!1),t.props.index&&t.props.children&&P(!1);let i={id:t.props.id||a.join("-"),caseSensitive:t.props.caseSensitive,element:t.props.element,Component:t.props.Component,index:t.props.index,path:t.props.path,loader:t.props.loader,action:t.props.action,errorElement:t.props.errorElement,ErrorBoundary:t.props.ErrorBoundary,hasErrorBoundary:null!=t.props.ErrorBoundary||null!=t.props.errorElement,shouldRevalidate:t.props.shouldRevalidate,handle:t.props.handle,lazy:t.props.lazy};t.props.children&&(i.children=Pe(t.props.children,a)),r.push(i)})),r}t.startTransition,new Promise((()=>{})),e.Component,new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);try{window.__reactRouterVersion="6"}catch(e){}new Map;const Oe=t.startTransition;function _e(t){let{basename:n,children:r,future:o,window:a}=t,i=e.useRef();var l;null==i.current&&(i.current=(void 0===(l={window:a,v5Compat:!0})&&(l={}),function(e,t,n,r){void 0===r&&(r={});let{window:o=document.defaultView,v5Compat:a=!1}=r,i=o.history,l=S.Pop,s=null,u=c();function c(){return(i.state||{idx:null}).idx}function d(){l=S.Pop;let e=c(),t=null==e?null:e-u;u=e,s&&s({action:l,location:p.location,delta:t})}function f(e){let t="null"!==o.location.origin?o.location.origin:o.location.href,n="string"==typeof e?e:T(e);return n=n.replace(/ $/,"%20"),P(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==u&&(u=0,i.replaceState(E({},i.state,{idx:u}),""));let p={get action(){return l},get location(){return e(o,i)},listen(e){if(s)throw new Error("A history only accepts one active listener");return o.addEventListener(C,d),s=e,()=>{o.removeEventListener(C,d),s=null}},createHref:e=>t(o,e),createURL:f,encodeLocation(e){let t=f(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){l=S.Push;let r=R(p.location,e,t);n&&n(r,e),u=c()+1;let d=_(r,u),f=p.createHref(r);try{i.pushState(d,"",f)}catch(e){if(e instanceof DOMException&&"DataCloneError"===e.name)throw e;o.location.assign(f)}a&&s&&s({action:l,location:p.location,delta:1})},replace:function(e,t){l=S.Replace;let r=R(p.location,e,t);n&&n(r,e),u=c();let o=_(r,u),d=p.createHref(r);i.replaceState(o,"",d),a&&s&&s({action:l,location:p.location,delta:0})},go:e=>i.go(e)};return p}((function(e,t){let{pathname:n="/",search:r="",hash:o=""}=M(e.location.hash.substr(1));return n.startsWith("/")||n.startsWith(".")||(n="/"+n),R("",{pathname:n,search:r,hash:o},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){let n=e.document.querySelector("base"),r="";if(n&&n.getAttribute("href")){let t=e.location.href,n=t.indexOf("#");r=-1===n?t:t.slice(0,n)}return r+"#"+("string"==typeof t?t:T(t))}),(function(e,t){O("/"===e.pathname.charAt(0),"relative pathnames are not supported in hash history.push("+JSON.stringify(t)+")")}),l)));let s=i.current,[u,c]=e.useState({action:s.action,location:s.location}),{v7_startTransition:d}=o||{},f=e.useCallback((e=>{d&&Oe?Oe((()=>c(e))):c(e)}),[c,d]);return e.useLayoutEffect((()=>s.listen(f)),[s,f]),e.createElement(Ee,{basename:n,children:r,location:u.location,navigationType:u.action,navigator:s,future:o})}var Re,Te;A.flushSync,t.useId,"undefined"!=typeof window&&void 0!==window.document&&window.document.createElement,function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"}(Re||(Re={})),function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"}(Te||(Te={}));var Me=i(8168),Ne=i(8587),Le=i(4164),ze=i(4073),Ie=i(3571),je=i(9599),Fe=i(8749),De=i(85);const $e=(0,Fe.A)(),Be=function(t=$e){return function(t=null){const n=e.useContext(De.T);return n&&(r=n,0!==Object.keys(r).length)?n:t;var r}(t)};var We=i(4848);const Ue=["className","component"];var Ve=i(9071),He=i(3478),Ke=i(8312),qe=i(8413);const Xe=(0,qe.A)("MuiBox",["root"]),Qe=(0,He.A)(),Ye=function(t={}){const{themeId:n,defaultTheme:r,defaultClassName:o="MuiBox-root",generateClassName:a}=t,i=(0,ze.default)("div",{shouldForwardProp:e=>"theme"!==e&&"sx"!==e&&"as"!==e})(Ie.A);return e.forwardRef((function(e,t){const l=Be(r),s=(0,je.A)(e),{className:u,component:c="div"}=s,d=(0,Ne.A)(s,Ue);return(0,We.jsx)(i,(0,Me.A)({as:c,ref:t,className:(0,Le.A)(u,a?a(o):o),theme:n&&l[n]||l},d))}))}({themeId:Ke.A,defaultTheme:Qe,defaultClassName:Xe.root,generateClassName:Ve.A.generate}),Ge=Ye;var Je=i(5659),Ze=i(1848),et=i(5607),tt=i(8466),nt=i(1609);function rt(e){return(0,nt.Ay)("MuiTypography",e)}(0,qe.A)("MuiTypography",["root","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","body1","body2","inherit","button","caption","overline","alignLeft","alignRight","alignCenter","alignJustify","noWrap","gutterBottom","paragraph"]);const ot=["align","className","component","gutterBottom","noWrap","paragraph","variant","variantMapping"],at=(0,Ze.Ay)("span",{name:"MuiTypography",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.variant&&t[n.variant],"inherit"!==n.align&&t[`align${(0,tt.A)(n.align)}`],n.noWrap&&t.noWrap,n.gutterBottom&&t.gutterBottom,n.paragraph&&t.paragraph]}})((({theme:e,ownerState:t})=>(0,Me.A)({margin:0},"inherit"===t.variant&&{font:"inherit"},"inherit"!==t.variant&&e.typography[t.variant],"inherit"!==t.align&&{textAlign:t.align},t.noWrap&&{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},t.gutterBottom&&{marginBottom:"0.35em"},t.paragraph&&{marginBottom:16}))),it={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p",inherit:"p"},lt={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},st=e.forwardRef((function(e,t){const n=(0,et.b)({props:e,name:"MuiTypography"}),r=(e=>lt[e]||e)(n.color),o=(0,je.A)((0,Me.A)({},n,{color:r})),{align:a="inherit",className:i,component:l,gutterBottom:s=!1,noWrap:u=!1,paragraph:c=!1,variant:d="body1",variantMapping:f=it}=o,p=(0,Ne.A)(o,ot),h=(0,Me.A)({},o,{align:a,color:r,className:i,component:l,gutterBottom:s,noWrap:u,paragraph:c,variant:d,variantMapping:f}),m=l||(c?"p":f[d]||it[d])||"span",v=(e=>{const{align:t,gutterBottom:n,noWrap:r,paragraph:o,variant:a,classes:i}=e,l={root:["root",a,"inherit"!==e.align&&`align${(0,tt.A)(t)}`,n&&"gutterBottom",r&&"noWrap",o&&"paragraph"]};return(0,Je.A)(l,rt,i)})(h);return(0,We.jsx)(at,(0,Me.A)({as:m,ref:t,ownerState:h,className:(0,Le.A)(v.root,i)},p))})),ut=()=>e.createElement(Ge,{className:"footer-wrapper"},e.createElement(st,{variant:"body2",className:"footer-text"},"© Developed by ExtraTech team. visit us:",e.createElement("a",{href:"https://extra.tech/he/%D7%A2%D7%9E%D7%95%D7%93-%D7%94%D7%91%D7%99%D7%AA/",className:"link-style"}," ExtraTeck")));function ct(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var dt=(()=>"function"==typeof Symbol&&Symbol.observable||"@@observable")(),ft=()=>Math.random().toString(36).substring(7).split("").join("."),pt={INIT:`@@redux/INIT${ft()}`,REPLACE:`@@redux/REPLACE${ft()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${ft()}`};function ht(e){if("object"!=typeof e||null===e)return!1;let t=e;for(;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||null===Object.getPrototypeOf(e)}function mt(e,t,n){if("function"!=typeof e)throw new Error(ct(2));if("function"==typeof t&&"function"==typeof n||"function"==typeof n&&"function"==typeof arguments[3])throw new Error(ct(0));if("function"==typeof t&&void 0===n&&(n=t,t=void 0),void 0!==n){if("function"!=typeof n)throw new Error(ct(1));return n(mt)(e,t)}let r=e,o=t,a=new Map,i=a,l=0,s=!1;function u(){i===a&&(i=new Map,a.forEach(((e,t)=>{i.set(t,e)})))}function c(){if(s)throw new Error(ct(3));return o}function d(e){if("function"!=typeof e)throw new Error(ct(4));if(s)throw new Error(ct(5));let t=!0;u();const n=l++;return i.set(n,e),function(){if(t){if(s)throw new Error(ct(6));t=!1,u(),i.delete(n),a=null}}}function f(e){if(!ht(e))throw new Error(ct(7));if(void 0===e.type)throw new Error(ct(8));if("string"!=typeof e.type)throw new Error(ct(17));if(s)throw new Error(ct(9));try{s=!0,o=r(o,e)}finally{s=!1}return(a=i).forEach((e=>{e()})),e}return f({type:pt.INIT}),{dispatch:f,subscribe:d,getState:c,replaceReducer:function(e){if("function"!=typeof e)throw new Error(ct(10));r=e,f({type:pt.REPLACE})},[dt]:function(){const e=d;return{subscribe(t){if("object"!=typeof t||null===t)throw new Error(ct(11));function n(){const e=t;e.next&&e.next(c())}return n(),{unsubscribe:e(n)}},[dt](){return this}}}}}function vt(...e){return 0===e.length?e=>e:1===e.length?e[0]:e.reduce(((e,t)=>(...n)=>e(t(...n))))}function yt(e){return({dispatch:t,getState:n})=>r=>o=>"function"==typeof o?o(t,n,e):r(o)}var gt=yt(),bt=yt,wt=Symbol.for("immer-nothing"),xt=Symbol.for("immer-draftable"),St=Symbol.for("immer-state");function kt(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var At=Object.getPrototypeOf;function Et(e){return!!e&&!!e[St]}function Ct(e){return!!e&&(Ot(e)||Array.isArray(e)||!!e[xt]||!!e.constructor?.[xt]||Nt(e)||Lt(e))}var Pt=Object.prototype.constructor.toString();function Ot(e){if(!e||"object"!=typeof e)return!1;const t=At(e);if(null===t)return!0;const n=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return n===Object||"function"==typeof n&&Function.toString.call(n)===Pt}function _t(e,t){0===Rt(e)?Reflect.ownKeys(e).forEach((n=>{t(n,e[n],e)})):e.forEach(((n,r)=>t(r,n,e)))}function Rt(e){const t=e[St];return t?t.type_:Array.isArray(e)?1:Nt(e)?2:Lt(e)?3:0}function Tt(e,t){return 2===Rt(e)?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Mt(e,t,n){const r=Rt(e);2===r?e.set(t,n):3===r?e.add(n):e[t]=n}function Nt(e){return e instanceof Map}function Lt(e){return e instanceof Set}function zt(e){return e.copy_||e.base_}function It(e,t){if(Nt(e))return new Map(e);if(Lt(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const n=Ot(e);if(!0===t||"class_only"===t&&!n){const t=Object.getOwnPropertyDescriptors(e);delete t[St];let n=Reflect.ownKeys(t);for(let r=0;r1&&(e.set=e.add=e.clear=e.delete=Ft),Object.freeze(e),t&&Object.entries(e).forEach((([e,t])=>jt(t,!0)))),e}function Ft(){kt(2)}function Dt(e){return Object.isFrozen(e)}var $t,Bt={};function Wt(e){const t=Bt[e];return t||kt(0),t}function Ut(){return $t}function Vt(e,t){t&&(Wt("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Ht(e){Kt(e),e.drafts_.forEach(Xt),e.drafts_=null}function Kt(e){e===$t&&($t=e.parent_)}function qt(e){return $t={drafts_:[],parent_:$t,immer_:e,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function Xt(e){const t=e[St];0===t.type_||1===t.type_?t.revoke_():t.revoked_=!0}function Qt(e,t){t.unfinalizedDrafts_=t.drafts_.length;const n=t.drafts_[0];return void 0!==e&&e!==n?(n[St].modified_&&(Ht(t),kt(4)),Ct(e)&&(e=Yt(t,e),t.parent_||Jt(t,e)),t.patches_&&Wt("Patches").generateReplacementPatches_(n[St].base_,e,t.patches_,t.inversePatches_)):e=Yt(t,n,[]),Ht(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==wt?e:void 0}function Yt(e,t,n){if(Dt(t))return t;const r=t[St];if(!r)return _t(t,((o,a)=>Gt(e,r,t,o,a,n))),t;if(r.scope_!==e)return t;if(!r.modified_)return Jt(e,r.base_,!0),r.base_;if(!r.finalized_){r.finalized_=!0,r.scope_.unfinalizedDrafts_--;const t=r.copy_;let o=t,a=!1;3===r.type_&&(o=new Set(t),t.clear(),a=!0),_t(o,((o,i)=>Gt(e,r,t,o,i,n,a))),Jt(e,t,!1),n&&e.patches_&&Wt("Patches").generatePatches_(r,n,e.patches_,e.inversePatches_)}return r.copy_}function Gt(e,t,n,r,o,a,i){if(Et(o)){const i=Yt(e,o,a&&t&&3!==t.type_&&!Tt(t.assigned_,r)?a.concat(r):void 0);if(Mt(n,r,i),!Et(i))return;e.canAutoFreeze_=!1}else i&&n.add(o);if(Ct(o)&&!Dt(o)){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1)return;Yt(e,o),t&&t.scope_.parent_||"symbol"==typeof r||!Object.prototype.propertyIsEnumerable.call(n,r)||Jt(e,o)}}function Jt(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&jt(t,n)}var Zt={get(e,t){if(t===St)return e;const n=zt(e);if(!Tt(n,t))return function(e,t,n){const r=nn(t,n);return r?"value"in r?r.value:r.get?.call(e.draft_):void 0}(e,n,t);const r=n[t];return e.finalized_||!Ct(r)?r:r===tn(e.base_,t)?(on(e),e.copy_[t]=an(r,e)):r},has:(e,t)=>t in zt(e),ownKeys:e=>Reflect.ownKeys(zt(e)),set(e,t,n){const r=nn(zt(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){const r=tn(zt(e),t),i=r?.[St];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_[t]=!1,!0;if(((o=n)===(a=r)?0!==o||1/o==1/a:o!=o&&a!=a)&&(void 0!==n||Tt(e.base_,t)))return!0;on(e),rn(e)}var o,a;return e.copy_[t]===n&&(void 0!==n||t in e.copy_)||Number.isNaN(n)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=n,e.assigned_[t]=!0),!0},deleteProperty:(e,t)=>(void 0!==tn(e.base_,t)||t in e.base_?(e.assigned_[t]=!1,on(e),rn(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0),getOwnPropertyDescriptor(e,t){const n=zt(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r?{writable:!0,configurable:1!==e.type_||"length"!==t,enumerable:r.enumerable,value:n[t]}:r},defineProperty(){kt(11)},getPrototypeOf:e=>At(e.base_),setPrototypeOf(){kt(12)}},en={};function tn(e,t){const n=e[St];return(n?zt(n):e)[t]}function nn(e,t){if(!(t in e))return;let n=At(e);for(;n;){const e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=At(n)}}function rn(e){e.modified_||(e.modified_=!0,e.parent_&&rn(e.parent_))}function on(e){e.copy_||(e.copy_=It(e.base_,e.scope_.immer_.useStrictShallowCopy_))}function an(e,t){const n=Nt(e)?Wt("MapSet").proxyMap_(e,t):Lt(e)?Wt("MapSet").proxySet_(e,t):function(e,t){const n=Array.isArray(e),r={type_:n?1:0,scope_:t?t.scope_:Ut(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let o=r,a=Zt;n&&(o=[r],a=en);const{revoke:i,proxy:l}=Proxy.revocable(o,a);return r.draft_=l,r.revoke_=i,l}(e,t);return(t?t.scope_:Ut()).drafts_.push(n),n}function ln(e){if(!Ct(e)||Dt(e))return e;const t=e[St];let n;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=It(e,t.scope_.immer_.useStrictShallowCopy_)}else n=It(e,!0);return _t(n,((e,t)=>{Mt(n,e,ln(t))})),t&&(t.finalized_=!1),n}_t(Zt,((e,t)=>{en[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}})),en.deleteProperty=function(e,t){return en.set.call(this,e,t,void 0)},en.set=function(e,t,n){return Zt.set.call(this,e[0],t,n,e[0])};var sn=new class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.produce=(e,t,n)=>{if("function"==typeof e&&"function"!=typeof t){const n=t;t=e;const r=this;return function(e=n,...o){return r.produce(e,(e=>t.call(this,e,...o)))}}let r;if("function"!=typeof t&&kt(6),void 0!==n&&"function"!=typeof n&&kt(7),Ct(e)){const o=qt(this),a=an(e,void 0);let i=!0;try{r=t(a),i=!1}finally{i?Ht(o):Kt(o)}return Vt(o,n),Qt(r,o)}if(!e||"object"!=typeof e){if(r=t(e),void 0===r&&(r=e),r===wt&&(r=void 0),this.autoFreeze_&&jt(r,!0),n){const t=[],o=[];Wt("Patches").generateReplacementPatches_(e,r,t,o),n(t,o)}return r}kt(1)},this.produceWithPatches=(e,t)=>{if("function"==typeof e)return(t,...n)=>this.produceWithPatches(t,(t=>e(t,...n)));let n,r;return[this.produce(e,t,((e,t)=>{n=e,r=t})),n,r]},"boolean"==typeof e?.autoFreeze&&this.setAutoFreeze(e.autoFreeze),"boolean"==typeof e?.useStrictShallowCopy&&this.setUseStrictShallowCopy(e.useStrictShallowCopy)}createDraft(e){var t;Ct(e)||kt(8),Et(e)&&(Et(t=e)||kt(10),e=ln(t));const n=qt(this),r=an(e,void 0);return r[St].isManual_=!0,Kt(n),r}finishDraft(e,t){const n=e&&e[St];n&&n.isManual_||kt(9);const{scope_:r}=n;return Vt(r,t),Qt(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){const r=t[n];if(0===r.path.length&&"replace"===r.op){e=r.value;break}}n>-1&&(t=t.slice(n+1));const r=Wt("Patches").applyPatches_;return Et(e)?r(e,t):this.produce(e,(e=>r(e,t)))}},un=sn.produce;sn.produceWithPatches.bind(sn),sn.setAutoFreeze.bind(sn),sn.setUseStrictShallowCopy.bind(sn),sn.applyPatches.bind(sn),sn.createDraft.bind(sn),sn.finishDraft.bind(sn);var cn="undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(0!==arguments.length)return"object"==typeof arguments[0]?vt:vt.apply(null,arguments)};function dn(e,t){function n(...n){if(t){let r=t(...n);if(!r)throw new Error(En(0));return{type:e,payload:r.payload,..."meta"in r&&{meta:r.meta},..."error"in r&&{error:r.error}}}return{type:e,payload:n[0]}}return n.toString=()=>`${e}`,n.type=e,n.match=t=>function(e){return ht(e)&&"type"in e&&"string"==typeof e.type}(t)&&t.type===e,n}"undefined"!=typeof window&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__;var fn=class e extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,e.prototype)}static get[Symbol.species](){return e}concat(...e){return super.concat.apply(this,e)}prepend(...t){return 1===t.length&&Array.isArray(t[0])?new e(...t[0].concat(this)):new e(...t.concat(this))}};function pn(e){return Ct(e)?un(e,(()=>{})):e}function hn(e,t,n){if(e.has(t)){let r=e.get(t);return n.update&&(r=n.update(r,t,e),e.set(t,r)),r}if(!n.insert)throw new Error(En(10));const r=n.insert(t,e);return e.set(t,r),r}var mn=e=>t=>{setTimeout(t,e)},vn="undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame:mn(10);function yn(e){const t={},n=[];let r;const o={addCase(e,n){const r="string"==typeof e?e:e.type;if(!r)throw new Error(En(28));if(r in t)throw new Error(En(29));return t[r]=n,o},addMatcher:(e,t)=>(n.push({matcher:e,reducer:t}),o),addDefaultCase:e=>(r=e,o)};return e(o),[t,n,r]}var gn=Symbol.for("rtk-slice-createasyncthunk");function bn(e,t){return`${e}/${t}`}function wn({creators:e}={}){const t=e?.asyncThunk?.[gn];return function(e){const{name:n,reducerPath:r=n}=e;if(!n)throw new Error(En(11));const o=("function"==typeof e.reducers?e.reducers(function(){function e(e,t){return{_reducerDefinitionType:"asyncThunk",payloadCreator:e,...t}}return e.withTypes=()=>e,{reducer:e=>Object.assign({[e.name]:(...t)=>e(...t)}[e.name],{_reducerDefinitionType:"reducer"}),preparedReducer:(e,t)=>({_reducerDefinitionType:"reducerWithPrepare",prepare:e,reducer:t}),asyncThunk:e}}()):e.reducers)||{},a=Object.keys(o),i={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},l={addCase(e,t){const n="string"==typeof e?e:e.type;if(!n)throw new Error(En(12));if(n in i.sliceCaseReducersByType)throw new Error(En(13));return i.sliceCaseReducersByType[n]=t,l},addMatcher:(e,t)=>(i.sliceMatchers.push({matcher:e,reducer:t}),l),exposeAction:(e,t)=>(i.actionCreators[e]=t,l),exposeCaseReducer:(e,t)=>(i.sliceCaseReducersByName[e]=t,l)};function s(){const[t={},n=[],r]="function"==typeof e.extraReducers?yn(e.extraReducers):[e.extraReducers],o={...t,...i.sliceCaseReducersByType};return function(e,t){let a,[l,s,u]=yn((e=>{for(let t in o)e.addCase(t,o[t]);for(let t of i.sliceMatchers)e.addMatcher(t.matcher,t.reducer);for(let t of n)e.addMatcher(t.matcher,t.reducer);r&&e.addDefaultCase(r)}));if("function"==typeof e)a=()=>pn(e());else{const t=pn(e);a=()=>t}function c(e=a(),t){let n=[l[t.type],...s.filter((({matcher:e})=>e(t))).map((({reducer:e})=>e))];return 0===n.filter((e=>!!e)).length&&(n=[u]),n.reduce(((e,n)=>{if(n){if(Et(e)){const r=n(e,t);return void 0===r?e:r}if(Ct(e))return un(e,(e=>n(e,t)));{const r=n(e,t);if(void 0===r){if(null===e)return e;throw new Error(En(9))}return r}}return e}),e)}return c.getInitialState=a,c}(e.initialState)}a.forEach((r=>{const a=o[r],i={reducerName:r,type:bn(n,r),createNotation:"function"==typeof e.reducers};!function(e){return"asyncThunk"===e._reducerDefinitionType}(a)?function({type:e,reducerName:t,createNotation:n},r,o){let a,i;if("reducer"in r){if(n&&!function(e){return"reducerWithPrepare"===e._reducerDefinitionType}(r))throw new Error(En(17));a=r.reducer,i=r.prepare}else a=r;o.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,i?dn(e,i):dn(e))}(i,a,l):function({type:e,reducerName:t},n,r,o){if(!o)throw new Error(En(18));const{payloadCreator:a,fulfilled:i,pending:l,rejected:s,settled:u,options:c}=n,d=o(e,a,c);r.exposeAction(t,d),i&&r.addCase(d.fulfilled,i),l&&r.addCase(d.pending,l),s&&r.addCase(d.rejected,s),u&&r.addMatcher(d.settled,u),r.exposeCaseReducer(t,{fulfilled:i||kn,pending:l||kn,rejected:s||kn,settled:u||kn})}(i,a,l,t)}));const u=e=>e,c=new Map;let d;function f(e,t){return d||(d=s()),d(e,t)}function p(){return d||(d=s()),d.getInitialState()}function h(t,n=!1){function r(e){let r=e[t];return void 0===r&&n&&(r=p()),r}function o(t=u){const r=hn(c,n,{insert:()=>new WeakMap});return hn(r,t,{insert:()=>{const r={};for(const[o,a]of Object.entries(e.selectors??{}))r[o]=xn(a,t,p,n);return r}})}return{reducerPath:t,getSelectors:o,get selectors(){return o(r)},selectSlice:r}}const m={name:n,reducer:f,actions:i.actionCreators,caseReducers:i.sliceCaseReducersByName,getInitialState:p,...h(r),injectInto(e,{reducerPath:t,...n}={}){const o=t??r;return e.inject({reducerPath:o,reducer:f},n),{...m,...h(o,!0)}}};return m}}function xn(e,t,n,r){function o(o,...a){let i=t(o);return void 0===i&&r&&(i=n()),e(i,...a)}return o.unwrapped=e,o}var Sn=wn();function kn(){}var{assign:An}=Object;function En(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}Symbol.for("rtk-state-proxy-original");const Cn=Sn({name:"profile",initialState:{profilesName:[],profilesDetails:[]},reducers:{setProfilesName:(e,t)=>{e.profilesName=t.payload},setProfileDetails:(e,t)=>{const n=e.profilesDetails.findIndex((e=>e.id===t.payload.id));-1!==n?e.profilesDetails[n]=t.payload.details:e.profilesDetails.push(t.payload)},addProfile:(e,t)=>{e.profilesDetails.push(t.payload)},updateProfile:(e,t)=>{const n=e.profilesDetails.findIndex((e=>e.id===t.payload.id));-1!==n&&(e.profilesDetails[n]=t.payload)},deleteProfile:(e,t)=>{const n=e.profilesDetails.findIndex((e=>e.id===t.payload));-1!==n&&e.profilesDetails.splice(n,1)},deleteWebsiteFromProfile:(e,t)=>{const n=e.profilesDetails.find((e=>e.id===t.payload.profileId));n&&(n.listWebsites=n.listWebsites.filter((e=>e._id!==t.payload.websiteId)))}}}),{setProfilesName:Pn,setProfileDetails:On,addProfile:_n,updateProfile:Rn,deleteProfile:Tn,deleteWebsiteFromProfile:Mn}=Cn.actions,Nn=Cn.reducer,Ln=Sn({name:"visitedWebsite",initialState:{visitedWebsites:[]},reducers:{setVisitedWebsite:(e,t)=>{e.visitedWebsites=t.payload},addVisitedWebsite:(e,t)=>{e.visitedWebsites.push(t.payload)},updateVisitedWebsite:(e,t)=>{const n=e.visitedWebsites.findIndex((e=>e.id===t.payload.id));-1!==n&&(e.visitedWebsites[n]=t.payload)},deleteVisitedWebsite:(e,t)=>{const n=e.visitedWebsites.findIndex((e=>e.id===t.payload));-1!==n&&e.visitedWebsites.splice(n,1)}}}),{setVisitedWebsite:zn,addVisitedWebsite:In,updateVisitedWebsite:jn,deleteVisitedWebsite:Fn}=Ln.actions,Dn=Ln.reducer,$n=Sn({name:"user",initialState:{users:[]},reducers:{setUser:(e,t)=>{e.users=t.payload},addUser:(e,t)=>{e.users.push(t.payload)},updateUser:(e,t)=>{const n=e.users.findIndex((e=>e.id===t.payload.id));-1!==n&&(e.users[n]=t.payload)},deleteUser:(e,t)=>{const n=e.users.findIndex((e=>e.id===t.payload));-1!==n&&e.users.splice(n,1)}}}),{setUser:Bn,addUser:Wn,updateUser:Un,deleteUser:Vn}=$n.actions,Hn=$n.reducer,Kn=Sn({name:"preference",initialState:{preferences:[]},reducers:{setPreference:(e,t)=>{e.preferences=t.payload},addPreference:(e,t)=>{e.preferences.push(t.payload)},updatePreference:(e,t)=>{const n=e.preferences.findIndex((e=>e.id===t.payload.id));-1!==n&&(e.preferences[n]=t.payload)},deletePreference:(e,t)=>{const n=e.preferences.findIndex((e=>e.id===t.payload));-1!==n&&e.preferences.splice(n,1)}}}),{setPreference:qn,addPreference:Xn,updatePreference:Qn,deletePreference:Yn}=Kn.actions,Gn=Kn.reducer,Jn=Sn({name:"auth",initialState:{user:null,isAuthenticated:!1,isInitialized:!1},reducers:{setCurrentUser:(e,t)=>{e.user=t.payload,e.isAuthenticated=!0,e.isInitialized=!0},setInitialized:e=>{e.isInitialized=!0},deleteCurrentUser:e=>{e.user=null,e.isAuthenticated=!1,e.isInitialized=!1},updateCurrentUser:(e,t)=>{e.user=t.payload}}}),{setCurrentUser:Zn,setInitialized:er,deleteCurrentUser:tr,updateCurrentUser:nr}=Jn.actions,rr=function(e){const t=function(e){const{thunk:t=!0,immutableCheck:n=!0,serializableCheck:r=!0,actionCreatorCheck:o=!0}=e??{};let a=new fn;return t&&("boolean"==typeof t?a.push(gt):a.push(bt(t.extraArgument))),a},{reducer:n,middleware:r,devTools:o=!0,preloadedState:a,enhancers:i}=e||{};let l,s;if("function"==typeof n)l=n;else{if(!ht(n))throw new Error(En(1));l=function(e){const t=Object.keys(e),n={};for(let r=0;r{const n=e[t];if(void 0===n(void 0,{type:pt.INIT}))throw new Error(ct(12));if(void 0===n(void 0,{type:pt.PROBE_UNKNOWN_ACTION()}))throw new Error(ct(13))}))}(n)}catch(e){o=e}return function(e={},t){if(o)throw o;let a=!1;const i={};for(let o=0;o(n,r)=>{const o=t(n,r);let a=()=>{throw new Error(ct(15))};const i={getState:o.getState,dispatch:(e,...t)=>a(e,...t)},l=e.map((e=>e(i)));return a=vt(...l)(o.dispatch),{...o,dispatch:a}}}(...s),d=(e=>function(t){const{autoBatch:n=!0}=t??{};let r=new fn(e);return n&&r.push(((e={type:"raf"})=>t=>(...n)=>{const r=t(...n);let o=!0,a=!1,i=!1;const l=new Set,s="tick"===e.type?queueMicrotask:"raf"===e.type?vn:"callback"===e.type?e.queueNotification:mn(e.timeout),u=()=>{i=!1,a&&(a=!1,l.forEach((e=>e())))};return Object.assign({},r,{subscribe(e){const t=r.subscribe((()=>o&&e()));return l.add(e),()=>{t(),l.delete(e)}},dispatch(e){try{return o=!e?.meta?.RTK_autoBatch,a=!o,a&&(i||(i=!0,s(u))),r.dispatch(e)}finally{o=!0}}})})("object"==typeof n?n:void 0)),r})(c);return mt(l,a,u(..."function"==typeof i?i(d):d()))}({reducer:{profile:Nn,preference:Gn,user:Hn,visitedWebsites:Dn,auth:Jn.reducer}});var or=i(771);const ar=e=>{let t;return t=e<1?5.11916*e**2:4.5*Math.log(e+1)+2,(t/100).toFixed(2)};function ir(e){return(0,nt.Ay)("MuiPaper",e)}(0,qe.A)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);const lr=["className","component","elevation","square","variant"],sr=(0,Ze.Ay)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],!n.square&&t.rounded,"elevation"===n.variant&&t[`elevation${n.elevation}`]]}})((({theme:e,ownerState:t})=>{var n;return(0,Me.A)({backgroundColor:(e.vars||e).palette.background.paper,color:(e.vars||e).palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.divider}`},"elevation"===t.variant&&(0,Me.A)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,or.X4)("#fff",ar(t.elevation))}, ${(0,or.X4)("#fff",ar(t.elevation))})`},e.vars&&{backgroundImage:null==(n=e.vars.overlays)?void 0:n[t.elevation]}))})),ur=e.forwardRef((function(e,t){const n=(0,et.b)({props:e,name:"MuiPaper"}),{className:r,component:o="div",elevation:a=1,square:i=!1,variant:l="elevation"}=n,s=(0,Ne.A)(n,lr),u=(0,Me.A)({},n,{component:o,elevation:a,square:i,variant:l}),c=(e=>{const{square:t,elevation:n,variant:r,classes:o}=e,a={root:["root",r,!t&&"rounded","elevation"===r&&`elevation${n}`]};return(0,Je.A)(a,ir,o)})(u);return(0,We.jsx)(sr,(0,Me.A)({as:o,ownerState:u,className:(0,Le.A)(c.root,r),ref:t},s))}));function cr(e){return(0,nt.Ay)("MuiAppBar",e)}(0,qe.A)("MuiAppBar",["root","positionFixed","positionAbsolute","positionSticky","positionStatic","positionRelative","colorDefault","colorPrimary","colorSecondary","colorInherit","colorTransparent","colorError","colorInfo","colorSuccess","colorWarning"]);const dr=["className","color","enableColorOnDark","position"],fr=(e,t)=>e?`${null==e?void 0:e.replace(")","")}, ${t})`:t,pr=(0,Ze.Ay)(ur,{name:"MuiAppBar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`position${(0,tt.A)(n.position)}`],t[`color${(0,tt.A)(n.color)}`]]}})((({theme:e,ownerState:t})=>{const n="light"===e.palette.mode?e.palette.grey[100]:e.palette.grey[900];return(0,Me.A)({display:"flex",flexDirection:"column",width:"100%",boxSizing:"border-box",flexShrink:0},"fixed"===t.position&&{position:"fixed",zIndex:(e.vars||e).zIndex.appBar,top:0,left:"auto",right:0,"@media print":{position:"absolute"}},"absolute"===t.position&&{position:"absolute",zIndex:(e.vars||e).zIndex.appBar,top:0,left:"auto",right:0},"sticky"===t.position&&{position:"sticky",zIndex:(e.vars||e).zIndex.appBar,top:0,left:"auto",right:0},"static"===t.position&&{position:"static"},"relative"===t.position&&{position:"relative"},!e.vars&&(0,Me.A)({},"default"===t.color&&{backgroundColor:n,color:e.palette.getContrastText(n)},t.color&&"default"!==t.color&&"inherit"!==t.color&&"transparent"!==t.color&&{backgroundColor:e.palette[t.color].main,color:e.palette[t.color].contrastText},"inherit"===t.color&&{color:"inherit"},"dark"===e.palette.mode&&!t.enableColorOnDark&&{backgroundColor:null,color:null},"transparent"===t.color&&(0,Me.A)({backgroundColor:"transparent",color:"inherit"},"dark"===e.palette.mode&&{backgroundImage:"none"})),e.vars&&(0,Me.A)({},"default"===t.color&&{"--AppBar-background":t.enableColorOnDark?e.vars.palette.AppBar.defaultBg:fr(e.vars.palette.AppBar.darkBg,e.vars.palette.AppBar.defaultBg),"--AppBar-color":t.enableColorOnDark?e.vars.palette.text.primary:fr(e.vars.palette.AppBar.darkColor,e.vars.palette.text.primary)},t.color&&!t.color.match(/^(default|inherit|transparent)$/)&&{"--AppBar-background":t.enableColorOnDark?e.vars.palette[t.color].main:fr(e.vars.palette.AppBar.darkBg,e.vars.palette[t.color].main),"--AppBar-color":t.enableColorOnDark?e.vars.palette[t.color].contrastText:fr(e.vars.palette.AppBar.darkColor,e.vars.palette[t.color].contrastText)},{backgroundColor:"var(--AppBar-background)",color:"inherit"===t.color?"inherit":"var(--AppBar-color)"},"transparent"===t.color&&{backgroundImage:"none",backgroundColor:"transparent",color:"inherit"}))})),hr=e.forwardRef((function(e,t){const n=(0,et.b)({props:e,name:"MuiAppBar"}),{className:r,color:o="primary",enableColorOnDark:a=!1,position:i="fixed"}=n,l=(0,Ne.A)(n,dr),s=(0,Me.A)({},n,{color:o,position:i,enableColorOnDark:a}),u=(e=>{const{color:t,position:n,classes:r}=e,o={root:["root",`color${(0,tt.A)(t)}`,`position${(0,tt.A)(n)}`]};return(0,Je.A)(o,cr,r)})(s);return(0,We.jsx)(pr,(0,Me.A)({square:!0,component:"header",ownerState:s,elevation:4,className:(0,Le.A)(u.root,r,"fixed"===i&&"mui-fixed"),ref:t},l))}));var mr=i(3967),vr=i(7379);var yr=i(1317);const gr=["ownerState"],br=["variants"],wr=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function xr(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}const Sr=(0,Fe.A)(),kr=e=>e?e.charAt(0).toLowerCase()+e.slice(1):e;function Ar({defaultTheme:e,theme:t,themeId:n}){return r=t,0===Object.keys(r).length?e:t[n]||t;var r}function Er(e){return e?(t,n)=>n[e]:null}function Cr(e,t){let{ownerState:n}=t,r=(0,Ne.A)(t,gr);const o="function"==typeof e?e((0,Me.A)({ownerState:n},r)):e;if(Array.isArray(o))return o.flatMap((e=>Cr(e,(0,Me.A)({ownerState:n},r))));if(o&&"object"==typeof o&&Array.isArray(o.variants)){const{variants:e=[]}=o;let t=(0,Ne.A)(o,br);return e.forEach((e=>{let o=!0;"function"==typeof e.props?o=e.props((0,Me.A)({ownerState:n},r,n)):Object.keys(e.props).forEach((t=>{(null==n?void 0:n[t])!==e.props[t]&&r[t]!==e.props[t]&&(o=!1)})),o&&(Array.isArray(t)||(t=[t]),t.push("function"==typeof e.style?e.style((0,Me.A)({ownerState:n},r,n)):e.style))})),t}return o}const Pr=function(e={}){const{themeId:t,defaultTheme:n=Sr,rootShouldForwardProp:r=xr,slotShouldForwardProp:o=xr}=e,a=e=>(0,Ie.A)((0,Me.A)({},e,{theme:Ar((0,Me.A)({},e,{defaultTheme:n,themeId:t}))}));return a.__mui_systemSx=!0,(e,i={})=>{(0,ze.internal_processStyles)(e,(e=>e.filter((e=>!(null!=e&&e.__mui_systemSx)))));const{name:l,slot:s,skipVariantsResolver:u,skipSx:c,overridesResolver:d=Er(kr(s))}=i,f=(0,Ne.A)(i,wr),p=void 0!==u?u:s&&"Root"!==s&&"root"!==s||!1,h=c||!1;let m=xr;"Root"===s||"root"===s?m=r:s?m=o:function(e){return"string"==typeof e&&e.charCodeAt(0)>96}(e)&&(m=void 0);const v=(0,ze.default)(e,(0,Me.A)({shouldForwardProp:m,label:void 0},f)),y=e=>"function"==typeof e&&e.__emotion_real!==e||(0,yr.Q)(e)?r=>Cr(e,(0,Me.A)({},r,{theme:Ar({theme:r.theme,defaultTheme:n,themeId:t})})):e,g=(r,...o)=>{let i=y(r);const s=o?o.map(y):[];l&&d&&s.push((e=>{const r=Ar((0,Me.A)({},e,{defaultTheme:n,themeId:t}));if(!r.components||!r.components[l]||!r.components[l].styleOverrides)return null;const o=r.components[l].styleOverrides,a={};return Object.entries(o).forEach((([t,n])=>{a[t]=Cr(n,(0,Me.A)({},e,{theme:r}))})),d(e,a)})),l&&!p&&s.push((e=>{var r;const o=Ar((0,Me.A)({},e,{defaultTheme:n,themeId:t}));return Cr({variants:null==o||null==(r=o.components)||null==(r=r[l])?void 0:r.variants},(0,Me.A)({},e,{theme:o}))})),h||s.push(a);const u=s.length-o.length;if(Array.isArray(r)&&u>0){const e=new Array(u).fill("");i=[...r,...e],i.raw=[...r.raw,...e]}const c=v(i,...s);return e.muiName&&(c.muiName=e.muiName),c};return v.withConfig&&(g.withConfig=v.withConfig),g}}(),Or=Pr,_r=["className","component","disableGutters","fixed","maxWidth","classes"],Rr=(0,Fe.A)(),Tr=Or("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`maxWidth${(0,mr.A)(String(n.maxWidth))}`],n.fixed&&t.fixed,n.disableGutters&&t.disableGutters]}}),Mr=e=>function({props:e,name:t,defaultTheme:n,themeId:r}){let o=Be(n);r&&(o=o[r]||o);return function(e){const{theme:t,name:n,props:r}=e;return t&&t.components&&t.components[n]&&t.components[n].defaultProps?(0,vr.A)(t.components[n].defaultProps,r):r}({theme:o,name:t,props:e})}({props:e,name:"MuiContainer",defaultTheme:Rr}),Nr=function(t={}){const{createStyledComponent:n=Tr,useThemeProps:r=Mr,componentName:o="MuiContainer"}=t,a=n((({theme:e,ownerState:t})=>(0,Me.A)({width:"100%",marginLeft:"auto",boxSizing:"border-box",marginRight:"auto",display:"block"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}})),(({theme:e,ownerState:t})=>t.fixed&&Object.keys(e.breakpoints.values).reduce(((t,n)=>{const r=n,o=e.breakpoints.values[r];return 0!==o&&(t[e.breakpoints.up(r)]={maxWidth:`${o}${e.breakpoints.unit}`}),t}),{})),(({theme:e,ownerState:t})=>(0,Me.A)({},"xs"===t.maxWidth&&{[e.breakpoints.up("xs")]:{maxWidth:Math.max(e.breakpoints.values.xs,444)}},t.maxWidth&&"xs"!==t.maxWidth&&{[e.breakpoints.up(t.maxWidth)]:{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`}}))),i=e.forwardRef((function(e,t){const n=r(e),{className:i,component:l="div",disableGutters:s=!1,fixed:u=!1,maxWidth:c="lg"}=n,d=(0,Ne.A)(n,_r),f=(0,Me.A)({},n,{component:l,disableGutters:s,fixed:u,maxWidth:c}),p=((e,t)=>{const{classes:n,fixed:r,disableGutters:o,maxWidth:a}=e,i={root:["root",a&&`maxWidth${(0,mr.A)(String(a))}`,r&&"fixed",o&&"disableGutters"]};return(0,Je.A)(i,(e=>(0,nt.Ay)(t,e)),n)})(f,o);return(0,We.jsx)(a,(0,Me.A)({as:l,ownerState:f,className:(0,Le.A)(p.root,i),ref:t},d))}));return i}({createStyledComponent:(0,Ze.Ay)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[`maxWidth${(0,tt.A)(String(n.maxWidth))}`],n.fixed&&t.fixed,n.disableGutters&&t.disableGutters]}}),useThemeProps:e=>(0,et.b)({props:e,name:"MuiContainer"})}),Lr=Nr;function zr(e){return(0,nt.Ay)("MuiToolbar",e)}(0,qe.A)("MuiToolbar",["root","gutters","regular","dense"]);const Ir=["className","component","disableGutters","variant"],jr=(0,Ze.Ay)("div",{name:"MuiToolbar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disableGutters&&t.gutters,t[n.variant]]}})((({theme:e,ownerState:t})=>(0,Me.A)({position:"relative",display:"flex",alignItems:"center"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},"dense"===t.variant&&{minHeight:48})),(({theme:e,ownerState:t})=>"regular"===t.variant&&e.mixins.toolbar)),Fr=e.forwardRef((function(e,t){const n=(0,et.b)({props:e,name:"MuiToolbar"}),{className:r,component:o="div",disableGutters:a=!1,variant:i="regular"}=n,l=(0,Ne.A)(n,Ir),s=(0,Me.A)({},n,{component:o,disableGutters:a,variant:i}),u=(e=>{const{classes:t,disableGutters:n,variant:r}=e,o={root:["root",!n&&"gutters",r]};return(0,Je.A)(o,zr,t)})(s);return(0,We.jsx)(jr,(0,Me.A)({as:o,className:(0,Le.A)(u.root,r),ref:t,ownerState:s},l))}));var Dr=i(6852),$r=i(3034),Br=i(1984);function Wr(e,t){return Wr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Wr(e,t)}function Ur(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,Wr(e,t)}const Vr=e.createContext(null);function Hr(t,n){var r=Object.create(null);return t&&e.Children.map(t,(function(e){return e})).forEach((function(t){r[t.key]=function(t){return n&&(0,e.isValidElement)(t)?n(t):t}(t)})),r}function Kr(e,t,n){return null!=n[t]?n[t]:e.props[t]}function qr(t,n,r){var o=Hr(t.children),a=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),a=[];for(var i in e)i in t?a.length&&(o[i]=a,a=[]):a.push(i);var l={};for(var s in t){if(o[s])for(r=0;re;const io=(0,Gr.i7)(to||(to=ao`
+ 0% {
+ transform: scale(0);
+ opacity: 0.1;
+ }
+
+ 100% {
+ transform: scale(1);
+ opacity: 0.3;
+ }
+`)),lo=(0,Gr.i7)(no||(no=ao`
+ 0% {
+ opacity: 1;
+ }
+
+ 100% {
+ opacity: 0;
+ }
+`)),so=(0,Gr.i7)(ro||(ro=ao`
+ 0% {
+ transform: scale(1);
+ }
+
+ 50% {
+ transform: scale(0.92);
+ }
+
+ 100% {
+ transform: scale(1);
+ }
+`)),uo=(0,Ze.Ay)("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),co=(0,Ze.Ay)((function(t){const{className:n,classes:r,pulsate:o=!1,rippleX:a,rippleY:i,rippleSize:l,in:s,onExited:u,timeout:c}=t,[d,f]=e.useState(!1),p=(0,Le.A)(n,r.ripple,r.rippleVisible,o&&r.ripplePulsate),h={width:l,height:l,top:-l/2+i,left:-l/2+a},m=(0,Le.A)(r.child,d&&r.childLeaving,o&&r.childPulsate);return s||d||f(!0),e.useEffect((()=>{if(!s&&null!=u){const e=setTimeout(u,c);return()=>{clearTimeout(e)}}}),[u,s,c]),(0,We.jsx)("span",{className:p,style:h,children:(0,We.jsx)("span",{className:m})})}),{name:"MuiTouchRipple",slot:"Ripple"})(oo||(oo=ao`
+ opacity: 0;
+ position: absolute;
+
+ &.${0} {
+ opacity: 0.3;
+ transform: scale(1);
+ animation-name: ${0};
+ animation-duration: ${0}ms;
+ animation-timing-function: ${0};
+ }
+
+ &.${0} {
+ animation-duration: ${0}ms;
+ }
+
+ & .${0} {
+ opacity: 1;
+ display: block;
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ background-color: currentColor;
+ }
+
+ & .${0} {
+ opacity: 0;
+ animation-name: ${0};
+ animation-duration: ${0}ms;
+ animation-timing-function: ${0};
+ }
+
+ & .${0} {
+ position: absolute;
+ /* @noflip */
+ left: 0px;
+ top: 0;
+ animation-name: ${0};
+ animation-duration: 2500ms;
+ animation-timing-function: ${0};
+ animation-iteration-count: infinite;
+ animation-delay: 200ms;
+ }
+`),Zr.rippleVisible,io,550,(({theme:e})=>e.transitions.easing.easeInOut),Zr.ripplePulsate,(({theme:e})=>e.transitions.duration.shorter),Zr.child,Zr.childLeaving,lo,550,(({theme:e})=>e.transitions.easing.easeInOut),Zr.childPulsate,so,(({theme:e})=>e.transitions.easing.easeInOut)),fo=e.forwardRef((function(t,n){const r=(0,et.b)({props:t,name:"MuiTouchRipple"}),{center:o=!1,classes:a={},className:i}=r,l=(0,Ne.A)(r,eo),[s,u]=e.useState([]),c=e.useRef(0),d=e.useRef(null);e.useEffect((()=>{d.current&&(d.current(),d.current=null)}),[s]);const f=e.useRef(!1),p=(0,Jr.A)(),h=e.useRef(null),m=e.useRef(null),v=e.useCallback((e=>{const{pulsate:t,rippleX:n,rippleY:r,rippleSize:o,cb:i}=e;u((e=>[...e,(0,We.jsx)(co,{classes:{ripple:(0,Le.A)(a.ripple,Zr.ripple),rippleVisible:(0,Le.A)(a.rippleVisible,Zr.rippleVisible),ripplePulsate:(0,Le.A)(a.ripplePulsate,Zr.ripplePulsate),child:(0,Le.A)(a.child,Zr.child),childLeaving:(0,Le.A)(a.childLeaving,Zr.childLeaving),childPulsate:(0,Le.A)(a.childPulsate,Zr.childPulsate)},timeout:550,pulsate:t,rippleX:n,rippleY:r,rippleSize:o},c.current)])),c.current+=1,d.current=i}),[a]),y=e.useCallback(((e={},t={},n=(()=>{}))=>{const{pulsate:r=!1,center:a=o||t.pulsate,fakeElement:i=!1}=t;if("mousedown"===(null==e?void 0:e.type)&&f.current)return void(f.current=!1);"touchstart"===(null==e?void 0:e.type)&&(f.current=!0);const l=i?null:m.current,s=l?l.getBoundingClientRect():{width:0,height:0,left:0,top:0};let u,c,d;if(a||void 0===e||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)u=Math.round(s.width/2),c=Math.round(s.height/2);else{const{clientX:t,clientY:n}=e.touches&&e.touches.length>0?e.touches[0]:e;u=Math.round(t-s.left),c=Math.round(n-s.top)}if(a)d=Math.sqrt((2*s.width**2+s.height**2)/3),d%2==0&&(d+=1);else{const e=2*Math.max(Math.abs((l?l.clientWidth:0)-u),u)+2,t=2*Math.max(Math.abs((l?l.clientHeight:0)-c),c)+2;d=Math.sqrt(e**2+t**2)}null!=e&&e.touches?null===h.current&&(h.current=()=>{v({pulsate:r,rippleX:u,rippleY:c,rippleSize:d,cb:n})},p.start(80,(()=>{h.current&&(h.current(),h.current=null)}))):v({pulsate:r,rippleX:u,rippleY:c,rippleSize:d,cb:n})}),[o,v,p]),g=e.useCallback((()=>{y({},{pulsate:!0})}),[y]),b=e.useCallback(((e,t)=>{if(p.clear(),"touchend"===(null==e?void 0:e.type)&&h.current)return h.current(),h.current=null,void p.start(0,(()=>{b(e,t)}));h.current=null,u((e=>e.length>0?e.slice(1):e)),d.current=t}),[p]);return e.useImperativeHandle(n,(()=>({pulsate:g,start:y,stop:b})),[g,y,b]),(0,We.jsx)(uo,(0,Me.A)({className:(0,Le.A)(Zr.root,a.root,i),ref:m},l,{children:(0,We.jsx)(Yr,{component:null,exit:!0,children:s})}))})),po=fo;function ho(e){return(0,nt.Ay)("MuiButtonBase",e)}const mo=(0,qe.A)("MuiButtonBase",["root","disabled","focusVisible"]),vo=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],yo=(0,Ze.Ay)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${mo.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),go=e.forwardRef((function(t,n){const r=(0,et.b)({props:t,name:"MuiButtonBase"}),{action:o,centerRipple:a=!1,children:i,className:l,component:s="button",disabled:u=!1,disableRipple:c=!1,disableTouchRipple:d=!1,focusRipple:f=!1,LinkComponent:p="a",onBlur:h,onClick:m,onContextMenu:v,onDragLeave:y,onFocus:g,onFocusVisible:b,onKeyDown:w,onKeyUp:x,onMouseDown:S,onMouseLeave:k,onMouseUp:A,onTouchEnd:E,onTouchMove:C,onTouchStart:P,tabIndex:O=0,TouchRippleProps:_,touchRippleRef:R,type:T}=r,M=(0,Ne.A)(r,vo),N=e.useRef(null),L=e.useRef(null),z=(0,Dr.A)(L,R),{isFocusVisibleRef:I,onFocus:j,onBlur:F,ref:D}=(0,Br.A)(),[$,B]=e.useState(!1);u&&$&&B(!1),e.useImperativeHandle(o,(()=>({focusVisible:()=>{B(!0),N.current.focus()}})),[]);const[W,U]=e.useState(!1);e.useEffect((()=>{U(!0)}),[]);const V=W&&!c&&!u;function H(e,t,n=d){return(0,$r.A)((r=>(t&&t(r),!n&&L.current&&L.current[e](r),!0)))}e.useEffect((()=>{$&&f&&!c&&W&&L.current.pulsate()}),[c,f,$,W]);const K=H("start",S),q=H("stop",v),X=H("stop",y),Q=H("stop",A),Y=H("stop",(e=>{$&&e.preventDefault(),k&&k(e)})),G=H("start",P),J=H("stop",E),Z=H("stop",C),ee=H("stop",(e=>{F(e),!1===I.current&&B(!1),h&&h(e)}),!1),te=(0,$r.A)((e=>{N.current||(N.current=e.currentTarget),j(e),!0===I.current&&(B(!0),b&&b(e)),g&&g(e)})),ne=()=>{const e=N.current;return s&&"button"!==s&&!("A"===e.tagName&&e.href)},re=e.useRef(!1),oe=(0,$r.A)((e=>{f&&!re.current&&$&&L.current&&" "===e.key&&(re.current=!0,L.current.stop(e,(()=>{L.current.start(e)}))),e.target===e.currentTarget&&ne()&&" "===e.key&&e.preventDefault(),w&&w(e),e.target===e.currentTarget&&ne()&&"Enter"===e.key&&!u&&(e.preventDefault(),m&&m(e))})),ae=(0,$r.A)((e=>{f&&" "===e.key&&L.current&&$&&!e.defaultPrevented&&(re.current=!1,L.current.stop(e,(()=>{L.current.pulsate(e)}))),x&&x(e),m&&e.target===e.currentTarget&&ne()&&" "===e.key&&!e.defaultPrevented&&m(e)}));let ie=s;"button"===ie&&(M.href||M.to)&&(ie=p);const le={};"button"===ie?(le.type=void 0===T?"button":T,le.disabled=u):(M.href||M.to||(le.role="button"),u&&(le["aria-disabled"]=u));const se=(0,Dr.A)(n,D,N),ue=(0,Me.A)({},r,{centerRipple:a,component:s,disabled:u,disableRipple:c,disableTouchRipple:d,focusRipple:f,tabIndex:O,focusVisible:$}),ce=(e=>{const{disabled:t,focusVisible:n,focusVisibleClassName:r,classes:o}=e,a={root:["root",t&&"disabled",n&&"focusVisible"]},i=(0,Je.A)(a,ho,o);return n&&r&&(i.root+=` ${r}`),i})(ue);return(0,We.jsxs)(yo,(0,Me.A)({as:ie,className:(0,Le.A)(ce.root,l),ownerState:ue,onBlur:ee,onClick:m,onContextMenu:q,onFocus:te,onKeyDown:oe,onKeyUp:ae,onMouseDown:K,onMouseLeave:Y,onMouseUp:Q,onDragLeave:X,onTouchEnd:J,onTouchMove:Z,onTouchStart:G,ref:se,tabIndex:u?-1:O,type:T},le,M,{children:[i,V?(0,We.jsx)(po,(0,Me.A)({ref:z,center:a},_)):null]}))}));function bo(e){return(0,nt.Ay)("MuiIconButton",e)}const wo=(0,qe.A)("MuiIconButton",["root","disabled","colorInherit","colorPrimary","colorSecondary","colorError","colorInfo","colorSuccess","colorWarning","edgeStart","edgeEnd","sizeSmall","sizeMedium","sizeLarge"]),xo=["edge","children","className","color","disabled","disableFocusRipple","size"],So=(0,Ze.Ay)(go,{name:"MuiIconButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,"default"!==n.color&&t[`color${(0,tt.A)(n.color)}`],n.edge&&t[`edge${(0,tt.A)(n.edge)}`],t[`size${(0,tt.A)(n.size)}`]]}})((({theme:e,ownerState:t})=>(0,Me.A)({textAlign:"center",flex:"0 0 auto",fontSize:e.typography.pxToRem(24),padding:8,borderRadius:"50%",overflow:"visible",color:(e.vars||e).palette.action.active,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shortest})},!t.disableRipple&&{"&:hover":{backgroundColor:e.vars?`rgba(${e.vars.palette.action.activeChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,or.X4)(e.palette.action.active,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"start"===t.edge&&{marginLeft:"small"===t.size?-3:-12},"end"===t.edge&&{marginRight:"small"===t.size?-3:-12})),(({theme:e,ownerState:t})=>{var n;const r=null==(n=(e.vars||e).palette)?void 0:n[t.color];return(0,Me.A)({},"inherit"===t.color&&{color:"inherit"},"inherit"!==t.color&&"default"!==t.color&&(0,Me.A)({color:null==r?void 0:r.main},!t.disableRipple&&{"&:hover":(0,Me.A)({},r&&{backgroundColor:e.vars?`rgba(${r.mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,or.X4)(r.main,e.palette.action.hoverOpacity)},{"@media (hover: none)":{backgroundColor:"transparent"}})}),"small"===t.size&&{padding:5,fontSize:e.typography.pxToRem(18)},"large"===t.size&&{padding:12,fontSize:e.typography.pxToRem(28)},{[`&.${wo.disabled}`]:{backgroundColor:"transparent",color:(e.vars||e).palette.action.disabled}})})),ko=e.forwardRef((function(e,t){const n=(0,et.b)({props:e,name:"MuiIconButton"}),{edge:r=!1,children:o,className:a,color:i="default",disabled:l=!1,disableFocusRipple:s=!1,size:u="medium"}=n,c=(0,Ne.A)(n,xo),d=(0,Me.A)({},n,{edge:r,color:i,disabled:l,disableFocusRipple:s,size:u}),f=(e=>{const{classes:t,disabled:n,color:r,edge:o,size:a}=e,i={root:["root",n&&"disabled","default"!==r&&`color${(0,tt.A)(r)}`,o&&`edge${(0,tt.A)(o)}`,`size${(0,tt.A)(a)}`]};return(0,Je.A)(i,bo,t)})(d);return(0,We.jsx)(So,(0,Me.A)({className:(0,Le.A)(f.root,a),centerRipple:!0,focusRipple:!s,disabled:l,ref:t},c,{ownerState:d,children:o}))}));i(2);var Ao=i(1523);function Eo(e){return"string"==typeof e}function Co(e,t,n){return void 0===e||Eo(e)?t:(0,Me.A)({},t,{ownerState:(0,Me.A)({},t.ownerState,n)})}function Po(e,t=[]){if(void 0===e)return{};const n={};return Object.keys(e).filter((n=>n.match(/^on[A-Z]/)&&"function"==typeof e[n]&&!t.includes(n))).forEach((t=>{n[t]=e[t]})),n}function Oo(e){if(void 0===e)return{};const t={};return Object.keys(e).filter((t=>!(t.match(/^on[A-Z]/)&&"function"==typeof e[t]))).forEach((n=>{t[n]=e[n]})),t}function _o(e){const{getSlotProps:t,additionalProps:n,externalSlotProps:r,externalForwardedProps:o,className:a}=e;if(!t){const e=(0,Le.A)(null==n?void 0:n.className,a,null==o?void 0:o.className,null==r?void 0:r.className),t=(0,Me.A)({},null==n?void 0:n.style,null==o?void 0:o.style,null==r?void 0:r.style),i=(0,Me.A)({},n,o,r);return e.length>0&&(i.className=e),Object.keys(t).length>0&&(i.style=t),{props:i,internalRef:void 0}}const i=Po((0,Me.A)({},o,r)),l=Oo(r),s=Oo(o),u=t(i),c=(0,Le.A)(null==u?void 0:u.className,null==n?void 0:n.className,a,null==o?void 0:o.className,null==r?void 0:r.className),d=(0,Me.A)({},null==u?void 0:u.style,null==n?void 0:n.style,null==o?void 0:o.style,null==r?void 0:r.style),f=(0,Me.A)({},u,n,s,l);return c.length>0&&(f.className=c),Object.keys(d).length>0&&(f.style=d),{props:f,internalRef:u.ref}}function Ro(e,t,n){return"function"==typeof e?e(t,n):e}const To=["elementType","externalSlotProps","ownerState","skipResolvingSlotProps"];function Mo(e){var t;const{elementType:n,externalSlotProps:r,ownerState:o,skipResolvingSlotProps:a=!1}=e,i=(0,Ne.A)(e,To),l=a?{}:Ro(r,o),{props:s,internalRef:u}=_o((0,Me.A)({},i,{externalSlotProps:l})),c=(0,Ao.A)(u,null==l?void 0:l.ref,null==(t=e.additionalProps)?void 0:t.ref);return Co(n,(0,Me.A)({},s,{ref:c}),o)}const No=e.createContext(),Lo=()=>{const t=e.useContext(No);return null!=t&&t};var zo=i(6248);const Io=e.createContext({});function jo(e){return(0,nt.Ay)("MuiList",e)}(0,qe.A)("MuiList",["root","padding","dense","subheader"]);const Fo=["children","className","component","dense","disablePadding","subheader"],Do=(0,Ze.Ay)("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.disablePadding&&t.padding,n.dense&&t.dense,n.subheader&&t.subheader]}})((({ownerState:e})=>(0,Me.A)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),$o=e.forwardRef((function(t,n){const r=(0,et.b)({props:t,name:"MuiList"}),{children:o,className:a,component:i="ul",dense:l=!1,disablePadding:s=!1,subheader:u}=r,c=(0,Ne.A)(r,Fo),d=e.useMemo((()=>({dense:l})),[l]),f=(0,Me.A)({},r,{component:i,dense:l,disablePadding:s}),p=(e=>{const{classes:t,disablePadding:n,dense:r,subheader:o}=e,a={root:["root",!n&&"padding",r&&"dense",o&&"subheader"]};return(0,Je.A)(a,jo,t)})(f);return(0,We.jsx)(Io.Provider,{value:d,children:(0,We.jsxs)(Do,(0,Me.A)({as:i,className:(0,Le.A)(p.root,a),ref:n,ownerState:f},c,{children:[u,o]}))})}));function Bo(e){const t=e.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}const Wo=Bo;var Uo=i(2778);const Vo=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function Ho(e,t,n){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:n?null:e.firstChild}function Ko(e,t,n){return e===t?n?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:n?null:e.lastChild}function qo(e,t){if(void 0===t)return!0;let n=e.innerText;return void 0===n&&(n=e.textContent),n=n.trim().toLowerCase(),0!==n.length&&(t.repeating?n[0]===t.keys[0]:0===n.indexOf(t.keys.join("")))}function Xo(e,t,n,r,o,a){let i=!1,l=o(e,t,!!t&&n);for(;l;){if(l===e.firstChild){if(i)return!1;i=!0}const t=!r&&(l.disabled||"true"===l.getAttribute("aria-disabled"));if(l.hasAttribute("tabindex")&&qo(l,a)&&!t)return l.focus(),!0;l=o(e,l,n)}return!1}const Qo=e.forwardRef((function(t,n){const{actions:r,autoFocus:o=!1,autoFocusItem:a=!1,children:i,className:l,disabledItemsFocusable:s=!1,disableListWrap:u=!1,onKeyDown:c,variant:d="selectedMenu"}=t,f=(0,Ne.A)(t,Vo),p=e.useRef(null),h=e.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,Uo.A)((()=>{o&&p.current.focus()}),[o]),e.useImperativeHandle(r,(()=>({adjustStyleForScrollbar:(e,{direction:t})=>{const n=!p.current.style.width;if(e.clientHeight{e.isValidElement(t)?(t.props.disabled||("selectedMenu"===d&&t.props.selected||-1===v)&&(v=n),v===n&&(t.props.disabled||t.props.muiSkipListHighlight||t.type.muiSkipListHighlight)&&(v+=1,v>=i.length&&(v=-1))):v===n&&(v+=1,v>=i.length&&(v=-1))}));const y=e.Children.map(i,((t,n)=>{if(n===v){const n={};return a&&(n.autoFocus=!0),void 0===t.props.tabIndex&&"selectedMenu"===d&&(n.tabIndex=0),e.cloneElement(t,n)}return t}));return(0,We.jsx)($o,(0,Me.A)({role:"menu",ref:m,className:l,onKeyDown:e=>{const t=p.current,n=e.key,r=(0,zo.A)(t).activeElement;if("ArrowDown"===n)e.preventDefault(),Xo(t,r,u,s,Ho);else if("ArrowUp"===n)e.preventDefault(),Xo(t,r,u,s,Ko);else if("Home"===n)e.preventDefault(),Xo(t,null,u,s,Ho);else if("End"===n)e.preventDefault(),Xo(t,null,u,s,Ko);else if(1===n.length){const o=h.current,a=n.toLowerCase(),i=performance.now();o.keys.length>0&&(i-o.lastTime>500?(o.keys=[],o.repeating=!0,o.previousKeyMatched=!0):o.repeating&&a!==o.keys[0]&&(o.repeating=!1)),o.lastTime=i,o.keys.push(a);const l=r&&!o.repeating&&qo(r,o);o.previousKeyMatched&&(l||Xo(t,r,!1,s,Ho,o))?e.preventDefault():o.previousKeyMatched=!1}c&&c(e)},tabIndex:o?0:-1},f,{children:y}))}));var Yo=i(3608),Go=i(3749);var Jo="unmounted",Zo="exited",ea="entering",ta="entered",na="exiting",ra=function(t){function n(e,n){var r;r=t.call(this,e,n)||this;var o,a=n&&!n.isMounting?e.enter:e.appear;return r.appearStatus=null,e.in?a?(o=Zo,r.appearStatus=ea):o=ta:o=e.unmountOnExit||e.mountOnEnter?Jo:Zo,r.state={status:o},r.nextCallback=null,r}Ur(n,t),n.getDerivedStateFromProps=function(e,t){return e.in&&t.status===Jo?{status:Zo}:null};var r=n.prototype;return r.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},r.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==ea&&n!==ta&&(t=ea):n!==ea&&n!==ta||(t=na)}this.updateStatus(!1,t)},r.componentWillUnmount=function(){this.cancelNextCallback()},r.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},r.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===ea){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:k.findDOMNode(this);n&&function(e){e.scrollTop}(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===Zo&&this.setState({status:Jo})},r.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[k.findDOMNode(this),r],a=o[0],i=o[1],l=this.getTimeouts(),s=r?l.appear:l.enter;e||n?(this.props.onEnter(a,i),this.safeSetState({status:ea},(function(){t.props.onEntering(a,i),t.onTransitionEnd(s,(function(){t.safeSetState({status:ta},(function(){t.props.onEntered(a,i)}))}))}))):this.safeSetState({status:ta},(function(){t.props.onEntered(a)}))},r.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:k.findDOMNode(this);t?(this.props.onExit(r),this.safeSetState({status:na},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:Zo},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:Zo},(function(){e.props.onExited(r)}))},r.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},r.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},r.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},r.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:k.findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=o[0],i=o[1];this.props.addEndListener(a,i)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},r.render=function(){var t=this.state.status;if(t===Jo)return null;var n=this.props,r=n.children,o=(n.in,n.mountOnEnter,n.unmountOnExit,n.appear,n.enter,n.exit,n.timeout,n.addEndListener,n.onEnter,n.onEntering,n.onEntered,n.onExit,n.onExiting,n.onExited,n.nodeRef,(0,Ne.A)(n,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return e.createElement(Vr.Provider,{value:null},"function"==typeof r?r(t,o):e.cloneElement(e.Children.only(r),o))},n}(e.Component);function oa(){}ra.contextType=Vr,ra.propTypes={},ra.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:oa,onEntering:oa,onEntered:oa,onExit:oa,onExiting:oa,onExited:oa},ra.UNMOUNTED=Jo,ra.EXITED=Zo,ra.ENTERING=ea,ra.ENTERED=ta,ra.EXITING=na;const aa=ra;var ia=i(2765);function la(){const e=Be(ia.A);return e[Ke.A]||e}const sa=e=>e.scrollTop;function ua(e,t){var n,r;const{timeout:o,easing:a,style:i={}}=e;return{duration:null!=(n=i.transitionDuration)?n:"number"==typeof o?o:o[t.mode]||0,easing:null!=(r=i.transitionTimingFunction)?r:"object"==typeof a?a[t.mode]:a,delay:i.transitionDelay}}const ca=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function da(e){return`scale(${e}, ${e**2})`}const fa={entering:{opacity:1,transform:da(1)},entered:{opacity:1,transform:"none"}},pa="undefined"!=typeof navigator&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),ha=e.forwardRef((function(t,n){const{addEndListener:r,appear:o=!0,children:a,easing:i,in:l,onEnter:s,onEntered:u,onEntering:c,onExit:d,onExited:f,onExiting:p,style:h,timeout:m="auto",TransitionComponent:v=aa}=t,y=(0,Ne.A)(t,ca),g=(0,Jr.A)(),b=e.useRef(),w=la(),x=e.useRef(null),S=(0,Dr.A)(x,a.ref,n),k=e=>t=>{if(e){const n=x.current;void 0===t?e(n):e(n,t)}},A=k(c),E=k(((e,t)=>{sa(e);const{duration:n,delay:r,easing:o}=ua({style:h,timeout:m,easing:i},{mode:"enter"});let a;"auto"===m?(a=w.transitions.getAutoHeightDuration(e.clientHeight),b.current=a):a=n,e.style.transition=[w.transitions.create("opacity",{duration:a,delay:r}),w.transitions.create("transform",{duration:pa?a:.666*a,delay:r,easing:o})].join(","),s&&s(e,t)})),C=k(u),P=k(p),O=k((e=>{const{duration:t,delay:n,easing:r}=ua({style:h,timeout:m,easing:i},{mode:"exit"});let o;"auto"===m?(o=w.transitions.getAutoHeightDuration(e.clientHeight),b.current=o):o=t,e.style.transition=[w.transitions.create("opacity",{duration:o,delay:n}),w.transitions.create("transform",{duration:pa?o:.666*o,delay:pa?n:n||.333*o,easing:r})].join(","),e.style.opacity=0,e.style.transform=da(.75),d&&d(e)})),_=k(f);return(0,We.jsx)(v,(0,Me.A)({appear:o,in:l,nodeRef:x,onEnter:E,onEntered:C,onEntering:A,onExit:O,onExited:_,onExiting:P,addEndListener:e=>{"auto"===m&&g.start(b.current||0,e),r&&r(x.current,e)},timeout:"auto"===m?null:m},y,{children:(t,n)=>e.cloneElement(a,(0,Me.A)({style:(0,Me.A)({opacity:0,transform:da(.75),visibility:"exited"!==t||l?void 0:"hidden"},fa[t],h,a.props.style),ref:S},n))}))}));ha.muiSupportAuto=!0;const ma=ha;var va=i(2325),ya=i(1547),ga=i(6673),ba=i(4877);function wa(e,t){t?e.setAttribute("aria-hidden","true"):e.removeAttribute("aria-hidden")}function xa(e){return parseInt((0,ba.A)(e).getComputedStyle(e).paddingRight,10)||0}function Sa(e,t,n,r,o){const a=[t,n,...r];[].forEach.call(e.children,(e=>{const t=-1===a.indexOf(e),n=!function(e){const t=-1!==["TEMPLATE","SCRIPT","STYLE","LINK","MAP","META","NOSCRIPT","PICTURE","COL","COLGROUP","PARAM","SLOT","SOURCE","TRACK"].indexOf(e.tagName),n="INPUT"===e.tagName&&"hidden"===e.getAttribute("type");return t||n}(e);t&&n&&wa(e,o)}))}function ka(e,t){let n=-1;return e.some(((e,r)=>!!t(e)&&(n=r,!0))),n}const Aa=new class{constructor(){this.containers=void 0,this.modals=void 0,this.modals=[],this.containers=[]}add(e,t){let n=this.modals.indexOf(e);if(-1!==n)return n;n=this.modals.length,this.modals.push(e),e.modalRef&&wa(e.modalRef,!1);const r=function(e){const t=[];return[].forEach.call(e.children,(e=>{"true"===e.getAttribute("aria-hidden")&&t.push(e)})),t}(t);Sa(t,e.mount,e.modalRef,r,!0);const o=ka(this.containers,(e=>e.container===t));return-1!==o?(this.containers[o].modals.push(e),n):(this.containers.push({modals:[e],container:t,restore:null,hiddenSiblings:r}),n)}mount(e,t){const n=ka(this.containers,(t=>-1!==t.modals.indexOf(e))),r=this.containers[n];r.restore||(r.restore=function(e,t){const n=[],r=e.container;if(!t.disableScrollLock){if(function(e){const t=(0,va.A)(e);return t.body===e?(0,ba.A)(e).innerWidth>t.documentElement.clientWidth:e.scrollHeight>e.clientHeight}(r)){const e=Bo((0,va.A)(r));n.push({value:r.style.paddingRight,property:"padding-right",el:r}),r.style.paddingRight=`${xa(r)+e}px`;const t=(0,va.A)(r).querySelectorAll(".mui-fixed");[].forEach.call(t,(t=>{n.push({value:t.style.paddingRight,property:"padding-right",el:t}),t.style.paddingRight=`${xa(t)+e}px`}))}let e;if(r.parentNode instanceof DocumentFragment)e=(0,va.A)(r).body;else{const t=r.parentElement,n=(0,ba.A)(r);e="HTML"===(null==t?void 0:t.nodeName)&&"scroll"===n.getComputedStyle(t).overflowY?t:r}n.push({value:e.style.overflow,property:"overflow",el:e},{value:e.style.overflowX,property:"overflow-x",el:e},{value:e.style.overflowY,property:"overflow-y",el:e}),e.style.overflow="hidden"}return()=>{n.forEach((({value:e,el:t,property:n})=>{e?t.style.setProperty(n,e):t.style.removeProperty(n)}))}}(r,t))}remove(e,t=!0){const n=this.modals.indexOf(e);if(-1===n)return n;const r=ka(this.containers,(t=>-1!==t.modals.indexOf(e))),o=this.containers[r];if(o.modals.splice(o.modals.indexOf(e),1),this.modals.splice(n,1),0===o.modals.length)o.restore&&o.restore(),e.modalRef&&wa(e.modalRef,t),Sa(o.container,e.mount,e.modalRef,o.hiddenSiblings,!1),this.containers.splice(r,1);else{const e=o.modals[o.modals.length-1];e.modalRef&&wa(e.modalRef,!1)}return n}isTopModal(e){return this.modals.length>0&&this.modals[this.modals.length-1]===e}};const Ea=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'].join(",");function Ca(e){const t=[],n=[];return Array.from(e.querySelectorAll(Ea)).forEach(((e,r)=>{const o=function(e){const t=parseInt(e.getAttribute("tabindex")||"",10);return Number.isNaN(t)?"true"===e.contentEditable||("AUDIO"===e.nodeName||"VIDEO"===e.nodeName||"DETAILS"===e.nodeName)&&null===e.getAttribute("tabindex")?0:e.tabIndex:t}(e);-1!==o&&function(e){return!(e.disabled||"INPUT"===e.tagName&&"hidden"===e.type||function(e){if("INPUT"!==e.tagName||"radio"!==e.type)return!1;if(!e.name)return!1;const t=t=>e.ownerDocument.querySelector(`input[type="radio"]${t}`);let n=t(`[name="${e.name}"]:checked`);return n||(n=t(`[name="${e.name}"]`)),n!==e}(e))}(e)&&(0===o?t.push(e):n.push({documentOrder:r,tabIndex:o,node:e}))})),n.sort(((e,t)=>e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex)).map((e=>e.node)).concat(t)}function Pa(){return!0}function Oa(t){const{children:n,disableAutoFocus:r=!1,disableEnforceFocus:o=!1,disableRestoreFocus:a=!1,getTabbable:i=Ca,isEnabled:l=Pa,open:s}=t,u=e.useRef(!1),c=e.useRef(null),d=e.useRef(null),f=e.useRef(null),p=e.useRef(null),h=e.useRef(!1),m=e.useRef(null),v=(0,Ao.A)(n.ref,m),y=e.useRef(null);e.useEffect((()=>{s&&m.current&&(h.current=!r)}),[r,s]),e.useEffect((()=>{if(!s||!m.current)return;const e=(0,va.A)(m.current);return m.current.contains(e.activeElement)||(m.current.hasAttribute("tabIndex")||m.current.setAttribute("tabIndex","-1"),h.current&&m.current.focus()),()=>{a||(f.current&&f.current.focus&&(u.current=!0,f.current.focus()),f.current=null)}}),[s]),e.useEffect((()=>{if(!s||!m.current)return;const e=(0,va.A)(m.current),t=t=>{y.current=t,!o&&l()&&"Tab"===t.key&&e.activeElement===m.current&&t.shiftKey&&(u.current=!0,d.current&&d.current.focus())},n=()=>{const t=m.current;if(null===t)return;if(!e.hasFocus()||!l()||u.current)return void(u.current=!1);if(t.contains(e.activeElement))return;if(o&&e.activeElement!==c.current&&e.activeElement!==d.current)return;if(e.activeElement!==p.current)p.current=null;else if(null!==p.current)return;if(!h.current)return;let n=[];if(e.activeElement!==c.current&&e.activeElement!==d.current||(n=i(m.current)),n.length>0){var r,a;const e=Boolean((null==(r=y.current)?void 0:r.shiftKey)&&"Tab"===(null==(a=y.current)?void 0:a.key)),t=n[0],o=n[n.length-1];"string"!=typeof t&&"string"!=typeof o&&(e?o.focus():t.focus())}else t.focus()};e.addEventListener("focusin",n),e.addEventListener("keydown",t,!0);const r=setInterval((()=>{e.activeElement&&"BODY"===e.activeElement.tagName&&n()}),50);return()=>{clearInterval(r),e.removeEventListener("focusin",n),e.removeEventListener("keydown",t,!0)}}),[r,o,a,l,s,i]);const g=e=>{null===f.current&&(f.current=e.relatedTarget),h.current=!0};return(0,We.jsxs)(e.Fragment,{children:[(0,We.jsx)("div",{tabIndex:s?0:-1,onFocus:g,ref:c,"data-testid":"sentinelStart"}),e.cloneElement(n,{ref:v,onFocus:e=>{null===f.current&&(f.current=e.relatedTarget),h.current=!0,p.current=e.target;const t=n.props.onFocus;t&&t(e)}}),(0,We.jsx)("div",{tabIndex:s?0:-1,onFocus:g,ref:d,"data-testid":"sentinelEnd"})]})}var _a=i(1529),Ra=i(7365);const Ta=e.forwardRef((function(t,n){const{children:r,container:o,disablePortal:a=!1}=t,[i,l]=e.useState(null),s=(0,Ao.A)(e.isValidElement(r)?r.ref:null,n);if((0,_a.A)((()=>{a||l(function(e){return"function"==typeof e?e():e}(o)||document.body)}),[o,a]),(0,_a.A)((()=>{if(i&&!a)return(0,Ra.A)(n,i),()=>{(0,Ra.A)(n,null)}}),[n,i,a]),a){if(e.isValidElement(r)){const t={ref:s};return e.cloneElement(r,t)}return(0,We.jsx)(e.Fragment,{children:r})}return(0,We.jsx)(e.Fragment,{children:i?k.createPortal(r,i):i})})),Ma=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],Na={entering:{opacity:1},entered:{opacity:1}},La=e.forwardRef((function(t,n){const r=la(),o={enter:r.transitions.duration.enteringScreen,exit:r.transitions.duration.leavingScreen},{addEndListener:a,appear:i=!0,children:l,easing:s,in:u,onEnter:c,onEntered:d,onEntering:f,onExit:p,onExited:h,onExiting:m,style:v,timeout:y=o,TransitionComponent:g=aa}=t,b=(0,Ne.A)(t,Ma),w=e.useRef(null),x=(0,Dr.A)(w,l.ref,n),S=e=>t=>{if(e){const n=w.current;void 0===t?e(n):e(n,t)}},k=S(f),A=S(((e,t)=>{sa(e);const n=ua({style:v,timeout:y,easing:s},{mode:"enter"});e.style.webkitTransition=r.transitions.create("opacity",n),e.style.transition=r.transitions.create("opacity",n),c&&c(e,t)})),E=S(d),C=S(m),P=S((e=>{const t=ua({style:v,timeout:y,easing:s},{mode:"exit"});e.style.webkitTransition=r.transitions.create("opacity",t),e.style.transition=r.transitions.create("opacity",t),p&&p(e)})),O=S(h);return(0,We.jsx)(g,(0,Me.A)({appear:i,in:u,nodeRef:w,onEnter:A,onEntered:E,onEntering:k,onExit:P,onExited:O,onExiting:C,addEndListener:e=>{a&&a(w.current,e)},timeout:y},b,{children:(t,n)=>e.cloneElement(l,(0,Me.A)({style:(0,Me.A)({opacity:0,visibility:"exited"!==t||u?void 0:"hidden"},Na[t],v,l.props.style),ref:x},n))}))}));function za(e){return(0,nt.Ay)("MuiBackdrop",e)}(0,qe.A)("MuiBackdrop",["root","invisible"]);const Ia=["children","className","component","components","componentsProps","invisible","open","slotProps","slots","TransitionComponent","transitionDuration"],ja=(0,Ze.Ay)("div",{name:"MuiBackdrop",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.invisible&&t.invisible]}})((({ownerState:e})=>(0,Me.A)({position:"fixed",display:"flex",alignItems:"center",justifyContent:"center",right:0,bottom:0,top:0,left:0,backgroundColor:"rgba(0, 0, 0, 0.5)",WebkitTapHighlightColor:"transparent"},e.invisible&&{backgroundColor:"transparent"}))),Fa=e.forwardRef((function(e,t){var n,r,o;const a=(0,et.b)({props:e,name:"MuiBackdrop"}),{children:i,className:l,component:s="div",components:u={},componentsProps:c={},invisible:d=!1,open:f,slotProps:p={},slots:h={},TransitionComponent:m=La,transitionDuration:v}=a,y=(0,Ne.A)(a,Ia),g=(0,Me.A)({},a,{component:s,invisible:d}),b=(e=>{const{classes:t,invisible:n}=e,r={root:["root",n&&"invisible"]};return(0,Je.A)(r,za,t)})(g),w=null!=(n=p.root)?n:c.root;return(0,We.jsx)(m,(0,Me.A)({in:f,timeout:v},y,{children:(0,We.jsx)(ja,(0,Me.A)({"aria-hidden":!0},w,{as:null!=(r=null!=(o=h.root)?o:u.Root)?r:s,className:(0,Le.A)(b.root,l,null==w?void 0:w.className),ownerState:(0,Me.A)({},g,null==w?void 0:w.ownerState),classes:b,ref:t,children:i}))}))}));function Da(e){return(0,nt.Ay)("MuiModal",e)}(0,qe.A)("MuiModal",["root","hidden","backdrop"]);const $a=["BackdropComponent","BackdropProps","classes","className","closeAfterTransition","children","container","component","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","onBackdropClick","onClose","onTransitionEnter","onTransitionExited","open","slotProps","slots","theme"],Ba=(0,Ze.Ay)("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,!n.open&&n.exited&&t.hidden]}})((({theme:e,ownerState:t})=>(0,Me.A)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),Wa=(0,Ze.Ay)(Fa,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),Ua=e.forwardRef((function(t,n){var r,o,a,i,l,s;const u=(0,et.b)({name:"MuiModal",props:t}),{BackdropComponent:c=Wa,BackdropProps:d,className:f,closeAfterTransition:p=!1,children:h,container:m,component:v,components:y={},componentsProps:g={},disableAutoFocus:b=!1,disableEnforceFocus:w=!1,disableEscapeKeyDown:x=!1,disablePortal:S=!1,disableRestoreFocus:k=!1,disableScrollLock:A=!1,hideBackdrop:E=!1,keepMounted:C=!1,onBackdropClick:P,open:O,slotProps:_,slots:R}=u,T=(0,Ne.A)(u,$a),M=(0,Me.A)({},u,{closeAfterTransition:p,disableAutoFocus:b,disableEnforceFocus:w,disableEscapeKeyDown:x,disablePortal:S,disableRestoreFocus:k,disableScrollLock:A,hideBackdrop:E,keepMounted:C}),{getRootProps:N,getBackdropProps:L,getTransitionProps:z,portalRef:I,isTopModal:j,exited:F,hasTransition:D}=function(t){const{container:n,disableEscapeKeyDown:r=!1,disableScrollLock:o=!1,manager:a=Aa,closeAfterTransition:i=!1,onTransitionEnter:l,onTransitionExited:s,children:u,onClose:c,open:d,rootRef:f}=t,p=e.useRef({}),h=e.useRef(null),m=e.useRef(null),v=(0,Ao.A)(m,f),[y,g]=e.useState(!d),b=function(e){return!!e&&e.props.hasOwnProperty("in")}(u);let w=!0;"false"!==t["aria-hidden"]&&!1!==t["aria-hidden"]||(w=!1);const x=()=>(p.current.modalRef=m.current,p.current.mount=h.current,p.current),S=()=>{a.mount(x(),{disableScrollLock:o}),m.current&&(m.current.scrollTop=0)},k=(0,ya.A)((()=>{const e=function(e){return"function"==typeof e?e():e}(n)||(0,va.A)(h.current).body;a.add(x(),e),m.current&&S()})),A=e.useCallback((()=>a.isTopModal(x())),[a]),E=(0,ya.A)((e=>{h.current=e,e&&(d&&A()?S():m.current&&wa(m.current,w))})),C=e.useCallback((()=>{a.remove(x(),w)}),[w,a]);e.useEffect((()=>()=>{C()}),[C]),e.useEffect((()=>{d?k():b&&i||C()}),[d,C,b,i,k]);const P=e=>t=>{var n;null==(n=e.onKeyDown)||n.call(e,t),"Escape"===t.key&&229!==t.which&&A()&&(r||(t.stopPropagation(),c&&c(t,"escapeKeyDown")))},O=e=>t=>{var n;null==(n=e.onClick)||n.call(e,t),t.target===t.currentTarget&&c&&c(t,"backdropClick")};return{getRootProps:(e={})=>{const n=Po(t);delete n.onTransitionEnter,delete n.onTransitionExited;const r=(0,Me.A)({},n,e);return(0,Me.A)({role:"presentation"},r,{onKeyDown:P(r),ref:v})},getBackdropProps:(e={})=>{const t=e;return(0,Me.A)({"aria-hidden":!0},t,{onClick:O(t),open:d})},getTransitionProps:()=>({onEnter:(0,ga.A)((()=>{g(!1),l&&l()}),null==u?void 0:u.props.onEnter),onExited:(0,ga.A)((()=>{g(!0),s&&s(),i&&C()}),null==u?void 0:u.props.onExited)}),rootRef:v,portalRef:E,isTopModal:A,exited:y,hasTransition:b}}((0,Me.A)({},M,{rootRef:n})),$=(0,Me.A)({},M,{exited:F}),B=(e=>{const{open:t,exited:n,classes:r}=e,o={root:["root",!t&&n&&"hidden"],backdrop:["backdrop"]};return(0,Je.A)(o,Da,r)})($),W={};if(void 0===h.props.tabIndex&&(W.tabIndex="-1"),D){const{onEnter:e,onExited:t}=z();W.onEnter=e,W.onExited=t}const U=null!=(r=null!=(o=null==R?void 0:R.root)?o:y.Root)?r:Ba,V=null!=(a=null!=(i=null==R?void 0:R.backdrop)?i:y.Backdrop)?a:c,H=null!=(l=null==_?void 0:_.root)?l:g.root,K=null!=(s=null==_?void 0:_.backdrop)?s:g.backdrop,q=Mo({elementType:U,externalSlotProps:H,externalForwardedProps:T,getSlotProps:N,additionalProps:{ref:n,as:v},ownerState:$,className:(0,Le.A)(f,null==H?void 0:H.className,null==B?void 0:B.root,!$.open&&$.exited&&(null==B?void 0:B.hidden))}),X=Mo({elementType:V,externalSlotProps:K,additionalProps:d,getSlotProps:e=>L((0,Me.A)({},e,{onClick:t=>{P&&P(t),null!=e&&e.onClick&&e.onClick(t)}})),className:(0,Le.A)(null==K?void 0:K.className,null==d?void 0:d.className,null==B?void 0:B.backdrop),ownerState:$});return C||O||D&&!F?(0,We.jsx)(Ta,{ref:I,container:m,disablePortal:S,children:(0,We.jsxs)(U,(0,Me.A)({},q,{children:[!E&&c?(0,We.jsx)(V,(0,Me.A)({},X)):null,(0,We.jsx)(Oa,{disableEnforceFocus:w,disableAutoFocus:b,disableRestoreFocus:k,isEnabled:j,open:O,children:e.cloneElement(h,W)})]}))}):null})),Va=Ua;function Ha(e){return(0,nt.Ay)("MuiPopover",e)}(0,qe.A)("MuiPopover",["root","paper"]);const Ka=["onEntering"],qa=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","slots","slotProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps","disableScrollLock"],Xa=["slotProps"];function Qa(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.height/2:"bottom"===t&&(n=e.height),n}function Ya(e,t){let n=0;return"number"==typeof t?n=t:"center"===t?n=e.width/2:"right"===t&&(n=e.width),n}function Ga(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function Ja(e){return"function"==typeof e?e():e}const Za=(0,Ze.Ay)(Va,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),ei=(0,Ze.Ay)(ur,{name:"MuiPopover",slot:"Paper",overridesResolver:(e,t)=>t.paper})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),ti=e.forwardRef((function(t,n){var r,o,a;const i=(0,et.b)({props:t,name:"MuiPopover"}),{action:l,anchorEl:s,anchorOrigin:u={vertical:"top",horizontal:"left"},anchorPosition:c,anchorReference:d="anchorEl",children:f,className:p,container:h,elevation:m=8,marginThreshold:v=16,open:y,PaperProps:g={},slots:b,slotProps:w,transformOrigin:x={vertical:"top",horizontal:"left"},TransitionComponent:S=ma,transitionDuration:k="auto",TransitionProps:{onEntering:A}={},disableScrollLock:E=!1}=i,C=(0,Ne.A)(i.TransitionProps,Ka),P=(0,Ne.A)(i,qa),O=null!=(r=null==w?void 0:w.paper)?r:g,_=e.useRef(),R=(0,Dr.A)(_,O.ref),T=(0,Me.A)({},i,{anchorOrigin:u,anchorReference:d,elevation:m,marginThreshold:v,externalPaperSlotProps:O,transformOrigin:x,TransitionComponent:S,transitionDuration:k,TransitionProps:C}),M=(e=>{const{classes:t}=e;return(0,Je.A)({root:["root"],paper:["paper"]},Ha,t)})(T),N=e.useCallback((()=>{if("anchorPosition"===d)return c;const e=Ja(s),t=(e&&1===e.nodeType?e:(0,zo.A)(_.current).body).getBoundingClientRect();return{top:t.top+Qa(t,u.vertical),left:t.left+Ya(t,u.horizontal)}}),[s,u.horizontal,u.vertical,c,d]),L=e.useCallback((e=>({vertical:Qa(e,x.vertical),horizontal:Ya(e,x.horizontal)})),[x.horizontal,x.vertical]),z=e.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},n=L(t);if("none"===d)return{top:null,left:null,transformOrigin:Ga(n)};const r=N();let o=r.top-n.vertical,a=r.left-n.horizontal;const i=o+t.height,l=a+t.width,u=(0,Go.A)(Ja(s)),c=u.innerHeight-v,f=u.innerWidth-v;if(null!==v&&oc){const e=i-c;o-=e,n.vertical+=e}if(null!==v&&af){const e=l-f;a-=e,n.horizontal+=e}return{top:`${Math.round(o)}px`,left:`${Math.round(a)}px`,transformOrigin:Ga(n)}}),[s,d,N,L,v]),[I,j]=e.useState(y),F=e.useCallback((()=>{const e=_.current;if(!e)return;const t=z(e);null!==t.top&&(e.style.top=t.top),null!==t.left&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin,j(!0)}),[z]);e.useEffect((()=>(E&&window.addEventListener("scroll",F),()=>window.removeEventListener("scroll",F))),[s,E,F]),e.useEffect((()=>{y&&F()})),e.useImperativeHandle(l,(()=>y?{updatePosition:()=>{F()}}:null),[y,F]),e.useEffect((()=>{if(!y)return;const e=(0,Yo.A)((()=>{F()})),t=(0,Go.A)(s);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[s,y,F]);let D=k;"auto"!==k||S.muiSupportAuto||(D=void 0);const $=h||(s?(0,zo.A)(Ja(s)).body:void 0),B=null!=(o=null==b?void 0:b.root)?o:Za,W=null!=(a=null==b?void 0:b.paper)?a:ei,U=Mo({elementType:W,externalSlotProps:(0,Me.A)({},O,{style:I?O.style:(0,Me.A)({},O.style,{opacity:0})}),additionalProps:{elevation:m,ref:R},ownerState:T,className:(0,Le.A)(M.paper,null==O?void 0:O.className)}),V=Mo({elementType:B,externalSlotProps:(null==w?void 0:w.root)||{},externalForwardedProps:P,additionalProps:{ref:n,slotProps:{backdrop:{invisible:!0}},container:$,open:y},ownerState:T,className:(0,Le.A)(M.root,p)}),{slotProps:H}=V,K=(0,Ne.A)(V,Xa);return(0,We.jsx)(B,(0,Me.A)({},K,!Eo(B)&&{slotProps:H,disableScrollLock:E},{children:(0,We.jsx)(S,(0,Me.A)({appear:!0,in:y,onEntering:(e,t)=>{A&&A(e,t),F()},onExited:()=>{j(!1)},timeout:D},C,{children:(0,We.jsx)(W,(0,Me.A)({},U,{children:f}))}))}))})),ni=ti;var ri=i(3431);function oi(e){return(0,nt.Ay)("MuiMenu",e)}(0,qe.A)("MuiMenu",["root","paper","list"]);const ai=["onEntering"],ii=["autoFocus","children","className","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant","slots","slotProps"],li={vertical:"top",horizontal:"right"},si={vertical:"top",horizontal:"left"},ui=(0,Ze.Ay)(ni,{shouldForwardProp:e=>(0,ri.A)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),ci=(0,Ze.Ay)(ei,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),di=(0,Ze.Ay)(Qo,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),fi=e.forwardRef((function(t,n){var r,o;const a=(0,et.b)({props:t,name:"MuiMenu"}),{autoFocus:i=!0,children:l,className:s,disableAutoFocusItem:u=!1,MenuListProps:c={},onClose:d,open:f,PaperProps:p={},PopoverClasses:h,transitionDuration:m="auto",TransitionProps:{onEntering:v}={},variant:y="selectedMenu",slots:g={},slotProps:b={}}=a,w=(0,Ne.A)(a.TransitionProps,ai),x=(0,Ne.A)(a,ii),S=Lo(),k=(0,Me.A)({},a,{autoFocus:i,disableAutoFocusItem:u,MenuListProps:c,onEntering:v,PaperProps:p,transitionDuration:m,TransitionProps:w,variant:y}),A=(e=>{const{classes:t}=e;return(0,Je.A)({root:["root"],paper:["paper"],list:["list"]},oi,t)})(k),E=i&&!u&&f,C=e.useRef(null);let P=-1;e.Children.map(l,((t,n)=>{e.isValidElement(t)&&(t.props.disabled||("selectedMenu"===y&&t.props.selected||-1===P)&&(P=n))}));const O=null!=(r=g.paper)?r:ci,_=null!=(o=b.paper)?o:p,R=Mo({elementType:g.root,externalSlotProps:b.root,ownerState:k,className:[A.root,s]}),T=Mo({elementType:O,externalSlotProps:_,ownerState:k,className:A.paper});return(0,We.jsx)(ui,(0,Me.A)({onClose:d,anchorOrigin:{vertical:"bottom",horizontal:S?"right":"left"},transformOrigin:S?li:si,slots:{paper:O,root:g.root},slotProps:{root:R,paper:T},open:f,ref:n,transitionDuration:m,TransitionProps:(0,Me.A)({onEntering:(e,t)=>{C.current&&C.current.adjustStyleForScrollbar(e,{direction:S?"rtl":"ltr"}),v&&v(e,t)}},w),ownerState:k},x,{classes:h,children:(0,We.jsx)(di,(0,Me.A)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),d&&d(e,"tabKeyDown"))},actions:C,autoFocus:i&&(-1===P||u),autoFocusItem:E,variant:y},c,{className:(0,Le.A)(A.list,c.className),children:l}))}))}));function pi(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function hi(e){return e instanceof pi(e).Element||e instanceof Element}function mi(e){return e instanceof pi(e).HTMLElement||e instanceof HTMLElement}function vi(e){return"undefined"!=typeof ShadowRoot&&(e instanceof pi(e).ShadowRoot||e instanceof ShadowRoot)}var yi=Math.max,gi=Math.min,bi=Math.round;function wi(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function xi(){return!/^((?!chrome|android).)*safari/i.test(wi())}function Si(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var r=e.getBoundingClientRect(),o=1,a=1;t&&mi(e)&&(o=e.offsetWidth>0&&bi(r.width)/e.offsetWidth||1,a=e.offsetHeight>0&&bi(r.height)/e.offsetHeight||1);var i=(hi(e)?pi(e):window).visualViewport,l=!xi()&&n,s=(r.left+(l&&i?i.offsetLeft:0))/o,u=(r.top+(l&&i?i.offsetTop:0))/a,c=r.width/o,d=r.height/a;return{width:c,height:d,top:u,right:s+c,bottom:u+d,left:s,x:s,y:u}}function ki(e){var t=pi(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function Ai(e){return e?(e.nodeName||"").toLowerCase():null}function Ei(e){return((hi(e)?e.ownerDocument:e.document)||window.document).documentElement}function Ci(e){return Si(Ei(e)).left+ki(e).scrollLeft}function Pi(e){return pi(e).getComputedStyle(e)}function Oi(e){var t=Pi(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function _i(e,t,n){void 0===n&&(n=!1);var r,o,a=mi(t),i=mi(t)&&function(e){var t=e.getBoundingClientRect(),n=bi(t.width)/e.offsetWidth||1,r=bi(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(t),l=Ei(t),s=Si(e,i,n),u={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(a||!a&&!n)&&(("body"!==Ai(t)||Oi(l))&&(u=(r=t)!==pi(r)&&mi(r)?{scrollLeft:(o=r).scrollLeft,scrollTop:o.scrollTop}:ki(r)),mi(t)?((c=Si(t,!0)).x+=t.clientLeft,c.y+=t.clientTop):l&&(c.x=Ci(l))),{x:s.left+u.scrollLeft-c.x,y:s.top+u.scrollTop-c.y,width:s.width,height:s.height}}function Ri(e){var t=Si(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function Ti(e){return"html"===Ai(e)?e:e.assignedSlot||e.parentNode||(vi(e)?e.host:null)||Ei(e)}function Mi(e){return["html","body","#document"].indexOf(Ai(e))>=0?e.ownerDocument.body:mi(e)&&Oi(e)?e:Mi(Ti(e))}function Ni(e,t){var n;void 0===t&&(t=[]);var r=Mi(e),o=r===(null==(n=e.ownerDocument)?void 0:n.body),a=pi(r),i=o?[a].concat(a.visualViewport||[],Oi(r)?r:[]):r,l=t.concat(i);return o?l:l.concat(Ni(Ti(i)))}function Li(e){return["table","td","th"].indexOf(Ai(e))>=0}function zi(e){return mi(e)&&"fixed"!==Pi(e).position?e.offsetParent:null}function Ii(e){for(var t=pi(e),n=zi(e);n&&Li(n)&&"static"===Pi(n).position;)n=zi(n);return n&&("html"===Ai(n)||"body"===Ai(n)&&"static"===Pi(n).position)?t:n||function(e){var t=/firefox/i.test(wi());if(/Trident/i.test(wi())&&mi(e)&&"fixed"===Pi(e).position)return null;var n=Ti(e);for(vi(n)&&(n=n.host);mi(n)&&["html","body"].indexOf(Ai(n))<0;){var r=Pi(n);if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||t&&"filter"===r.willChange||t&&r.filter&&"none"!==r.filter)return n;n=n.parentNode}return null}(e)||t}var ji="top",Fi="bottom",Di="right",$i="left",Bi="auto",Wi=[ji,Fi,Di,$i],Ui="start",Vi="end",Hi="viewport",Ki="popper",qi=Wi.reduce((function(e,t){return e.concat([t+"-"+Ui,t+"-"+Vi])}),[]),Xi=[].concat(Wi,[Bi]).reduce((function(e,t){return e.concat([t,t+"-"+Ui,t+"-"+Vi])}),[]),Qi=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function Yi(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function Gi(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=void 0,n(e())}))}))),t}}var Ji={placement:"bottom",modifiers:[],strategy:"absolute"};function Zi(){for(var e=arguments.length,t=new Array(e),n=0;n=0?"x":"y"}function al(e){var t,n=e.reference,r=e.element,o=e.placement,a=o?nl(o):null,i=o?rl(o):null,l=n.x+n.width/2-r.width/2,s=n.y+n.height/2-r.height/2;switch(a){case ji:t={x:l,y:n.y-r.height};break;case Fi:t={x:l,y:n.y+n.height};break;case Di:t={x:n.x+n.width,y:s};break;case $i:t={x:n.x-r.width,y:s};break;default:t={x:n.x,y:n.y}}var u=a?ol(a):null;if(null!=u){var c="y"===u?"height":"width";switch(i){case Ui:t[u]=t[u]-(n[c]/2-r[c]/2);break;case Vi:t[u]=t[u]+(n[c]/2-r[c]/2)}}return t}var il={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ll(e){var t,n=e.popper,r=e.popperRect,o=e.placement,a=e.variation,i=e.offsets,l=e.position,s=e.gpuAcceleration,u=e.adaptive,c=e.roundOffsets,d=e.isFixed,f=i.x,p=void 0===f?0:f,h=i.y,m=void 0===h?0:h,v="function"==typeof c?c({x:p,y:m}):{x:p,y:m};p=v.x,m=v.y;var y=i.hasOwnProperty("x"),g=i.hasOwnProperty("y"),b=$i,w=ji,x=window;if(u){var S=Ii(n),k="clientHeight",A="clientWidth";S===pi(n)&&"static"!==Pi(S=Ei(n)).position&&"absolute"===l&&(k="scrollHeight",A="scrollWidth"),(o===ji||(o===$i||o===Di)&&a===Vi)&&(w=Fi,m-=(d&&S===x&&x.visualViewport?x.visualViewport.height:S[k])-r.height,m*=s?1:-1),o!==$i&&(o!==ji&&o!==Fi||a!==Vi)||(b=Di,p-=(d&&S===x&&x.visualViewport?x.visualViewport.width:S[A])-r.width,p*=s?1:-1)}var E,C=Object.assign({position:l},u&&il),P=!0===c?function(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:bi(n*o)/o||0,y:bi(r*o)/o||0}}({x:p,y:m},pi(n)):{x:p,y:m};return p=P.x,m=P.y,s?Object.assign({},C,((E={})[w]=g?"0":"",E[b]=y?"0":"",E.transform=(x.devicePixelRatio||1)<=1?"translate("+p+"px, "+m+"px)":"translate3d("+p+"px, "+m+"px, 0)",E)):Object.assign({},C,((t={})[w]=g?m+"px":"",t[b]=y?p+"px":"",t.transform="",t))}var sl={left:"right",right:"left",bottom:"top",top:"bottom"};function ul(e){return e.replace(/left|right|bottom|top/g,(function(e){return sl[e]}))}var cl={start:"end",end:"start"};function dl(e){return e.replace(/start|end/g,(function(e){return cl[e]}))}function fl(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&vi(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function pl(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function hl(e,t,n){return t===Hi?pl(function(e,t){var n=pi(e),r=Ei(e),o=n.visualViewport,a=r.clientWidth,i=r.clientHeight,l=0,s=0;if(o){a=o.width,i=o.height;var u=xi();(u||!u&&"fixed"===t)&&(l=o.offsetLeft,s=o.offsetTop)}return{width:a,height:i,x:l+Ci(e),y:s}}(e,n)):hi(t)?function(e,t){var n=Si(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):pl(function(e){var t,n=Ei(e),r=ki(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=yi(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),i=yi(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),l=-r.scrollLeft+Ci(e),s=-r.scrollTop;return"rtl"===Pi(o||n).direction&&(l+=yi(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:i,x:l,y:s}}(Ei(e)))}function ml(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function vl(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function yl(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=void 0===r?e.placement:r,a=n.strategy,i=void 0===a?e.strategy:a,l=n.boundary,s=void 0===l?"clippingParents":l,u=n.rootBoundary,c=void 0===u?Hi:u,d=n.elementContext,f=void 0===d?Ki:d,p=n.altBoundary,h=void 0!==p&&p,m=n.padding,v=void 0===m?0:m,y=ml("number"!=typeof v?v:vl(v,Wi)),g=f===Ki?"reference":Ki,b=e.rects.popper,w=e.elements[h?g:f],x=function(e,t,n,r){var o="clippingParents"===t?function(e){var t=Ni(Ti(e)),n=["absolute","fixed"].indexOf(Pi(e).position)>=0&&mi(e)?Ii(e):e;return hi(n)?t.filter((function(e){return hi(e)&&fl(e,n)&&"body"!==Ai(e)})):[]}(e):[].concat(t),a=[].concat(o,[n]),i=a[0],l=a.reduce((function(t,n){var o=hl(e,n,r);return t.top=yi(o.top,t.top),t.right=gi(o.right,t.right),t.bottom=gi(o.bottom,t.bottom),t.left=yi(o.left,t.left),t}),hl(e,i,r));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l}(hi(w)?w:w.contextElement||Ei(e.elements.popper),s,c,i),S=Si(e.elements.reference),k=al({reference:S,element:b,strategy:"absolute",placement:o}),A=pl(Object.assign({},b,k)),E=f===Ki?A:S,C={top:x.top-E.top+y.top,bottom:E.bottom-x.bottom+y.bottom,left:x.left-E.left+y.left,right:E.right-x.right+y.right},P=e.modifiersData.offset;if(f===Ki&&P){var O=P[o];Object.keys(C).forEach((function(e){var t=[Di,Fi].indexOf(e)>=0?1:-1,n=[ji,Fi].indexOf(e)>=0?"y":"x";C[e]+=O[n]*t}))}return C}function gl(e,t,n){return yi(e,gi(t,n))}function bl(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function wl(e){return[ji,Di,Fi,$i].some((function(t){return e[t]>=0}))}var xl=el({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,r=e.options,o=r.scroll,a=void 0===o||o,i=r.resize,l=void 0===i||i,s=pi(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&u.forEach((function(e){e.addEventListener("scroll",n.update,tl)})),l&&s.addEventListener("resize",n.update,tl),function(){a&&u.forEach((function(e){e.removeEventListener("scroll",n.update,tl)})),l&&s.removeEventListener("resize",n.update,tl)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=al({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,a=n.adaptive,i=void 0===a||a,l=n.roundOffsets,s=void 0===l||l,u={placement:nl(t.placement),variation:rl(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,ll(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:i,roundOffsets:s})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,ll(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:s})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},o=t.elements[e];mi(o)&&Ai(o)&&(Object.assign(o.style,n),Object.keys(r).forEach((function(e){var t=r[e];!1===t?o.removeAttribute(e):o.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var r=t.elements[e],o=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});mi(r)&&Ai(r)&&(Object.assign(r.style,a),Object.keys(o).forEach((function(e){r.removeAttribute(e)})))}))}},requires:["computeStyles"]},{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,a=void 0===o?[0,0]:o,i=Xi.reduce((function(e,n){return e[n]=function(e,t,n){var r=nl(e),o=[$i,ji].indexOf(r)>=0?-1:1,a="function"==typeof n?n(Object.assign({},t,{placement:e})):n,i=a[0],l=a[1];return i=i||0,l=(l||0)*o,[$i,Di].indexOf(r)>=0?{x:l,y:i}:{x:i,y:l}}(n,t.rects,a),e}),{}),l=i[t.placement],s=l.x,u=l.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=s,t.modifiersData.popperOffsets.y+=u),t.modifiersData[r]=i}},{name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,a=void 0===o||o,i=n.altAxis,l=void 0===i||i,s=n.fallbackPlacements,u=n.padding,c=n.boundary,d=n.rootBoundary,f=n.altBoundary,p=n.flipVariations,h=void 0===p||p,m=n.allowedAutoPlacements,v=t.options.placement,y=nl(v),g=s||(y!==v&&h?function(e){if(nl(e)===Bi)return[];var t=ul(e);return[dl(e),t,dl(t)]}(v):[ul(v)]),b=[v].concat(g).reduce((function(e,n){return e.concat(nl(n)===Bi?function(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,a=n.rootBoundary,i=n.padding,l=n.flipVariations,s=n.allowedAutoPlacements,u=void 0===s?Xi:s,c=rl(r),d=c?l?qi:qi.filter((function(e){return rl(e)===c})):Wi,f=d.filter((function(e){return u.indexOf(e)>=0}));0===f.length&&(f=d);var p=f.reduce((function(t,n){return t[n]=yl(e,{placement:n,boundary:o,rootBoundary:a,padding:i})[nl(n)],t}),{});return Object.keys(p).sort((function(e,t){return p[e]-p[t]}))}(t,{placement:n,boundary:c,rootBoundary:d,padding:u,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),w=t.rects.reference,x=t.rects.popper,S=new Map,k=!0,A=b[0],E=0;E=0,R=_?"width":"height",T=yl(t,{placement:C,boundary:c,rootBoundary:d,altBoundary:f,padding:u}),M=_?O?Di:$i:O?Fi:ji;w[R]>x[R]&&(M=ul(M));var N=ul(M),L=[];if(a&&L.push(T[P]<=0),l&&L.push(T[M]<=0,T[N]<=0),L.every((function(e){return e}))){A=C,k=!1;break}S.set(C,L)}if(k)for(var z=function(e){var t=b.find((function(t){var n=S.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return A=t,"break"},I=h?3:1;I>0&&"break"!==z(I);I--);t.placement!==A&&(t.modifiersData[r]._skip=!0,t.placement=A,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,a=void 0===o||o,i=n.altAxis,l=void 0!==i&&i,s=n.boundary,u=n.rootBoundary,c=n.altBoundary,d=n.padding,f=n.tether,p=void 0===f||f,h=n.tetherOffset,m=void 0===h?0:h,v=yl(t,{boundary:s,rootBoundary:u,padding:d,altBoundary:c}),y=nl(t.placement),g=rl(t.placement),b=!g,w=ol(y),x="x"===w?"y":"x",S=t.modifiersData.popperOffsets,k=t.rects.reference,A=t.rects.popper,E="function"==typeof m?m(Object.assign({},t.rects,{placement:t.placement})):m,C="number"==typeof E?{mainAxis:E,altAxis:E}:Object.assign({mainAxis:0,altAxis:0},E),P=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(S){if(a){var _,R="y"===w?ji:$i,T="y"===w?Fi:Di,M="y"===w?"height":"width",N=S[w],L=N+v[R],z=N-v[T],I=p?-A[M]/2:0,j=g===Ui?k[M]:A[M],F=g===Ui?-A[M]:-k[M],D=t.elements.arrow,$=p&&D?Ri(D):{width:0,height:0},B=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},W=B[R],U=B[T],V=gl(0,k[M],$[M]),H=b?k[M]/2-I-V-W-C.mainAxis:j-V-W-C.mainAxis,K=b?-k[M]/2+I+V+U+C.mainAxis:F+V+U+C.mainAxis,q=t.elements.arrow&&Ii(t.elements.arrow),X=q?"y"===w?q.clientTop||0:q.clientLeft||0:0,Q=null!=(_=null==P?void 0:P[w])?_:0,Y=N+K-Q,G=gl(p?gi(L,N+H-Q-X):L,N,p?yi(z,Y):z);S[w]=G,O[w]=G-N}if(l){var J,Z="x"===w?ji:$i,ee="x"===w?Fi:Di,te=S[x],ne="y"===x?"height":"width",re=te+v[Z],oe=te-v[ee],ae=-1!==[ji,$i].indexOf(y),ie=null!=(J=null==P?void 0:P[x])?J:0,le=ae?re:te-k[ne]-A[ne]-ie+C.altAxis,se=ae?te+k[ne]+A[ne]-ie-C.altAxis:oe,ue=p&&ae?function(e,t,n){var r=gl(e,t,n);return r>n?n:r}(le,te,se):gl(p?le:re,te,p?se:oe);S[x]=ue,O[x]=ue-te}t.modifiersData[r]=O}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,a=n.elements.arrow,i=n.modifiersData.popperOffsets,l=nl(n.placement),s=ol(l),u=[$i,Di].indexOf(l)>=0?"height":"width";if(a&&i){var c=function(e,t){return ml("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:vl(e,Wi))}(o.padding,n),d=Ri(a),f="y"===s?ji:$i,p="y"===s?Fi:Di,h=n.rects.reference[u]+n.rects.reference[s]-i[s]-n.rects.popper[u],m=i[s]-n.rects.reference[s],v=Ii(a),y=v?"y"===s?v.clientHeight||0:v.clientWidth||0:0,g=h/2-m/2,b=c[f],w=y-d[u]-c[p],x=y/2-d[u]/2+g,S=gl(b,x,w),k=s;n.modifiersData[r]=((t={})[k]=S,t.centerOffset=S-x,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&fl(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,a=t.modifiersData.preventOverflow,i=yl(t,{elementContext:"reference"}),l=yl(t,{altBoundary:!0}),s=bl(i,r),u=bl(l,o,a),c=wl(s),d=wl(u);t.modifiersData[n]={referenceClippingOffsets:s,popperEscapeOffsets:u,isReferenceHidden:c,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":d})}}]});const Sl="base";function kl(e,t){const n=nt.li[t];return n?`${Sl}--${n}`:function(e,t){return`${Sl}-${e}-${t}`}(e,t)}const Al="Popper";function El(e){return kl(Al,e)}!function(e,t){const n={};["root"].forEach((t=>{n[t]=kl(e,t)}))}(Al);const Cl={disableDefaultClasses:!1},Pl=e.createContext(Cl),Ol=["anchorEl","children","direction","disablePortal","modifiers","open","placement","popperOptions","popperRef","slotProps","slots","TransitionProps","ownerState"],_l=["anchorEl","children","container","direction","disablePortal","keepMounted","modifiers","open","placement","popperOptions","popperRef","style","transition","slotProps","slots"];function Rl(e){return"function"==typeof e?e():e}const Tl={},Ml=e.forwardRef((function(t,n){var r;const{anchorEl:o,children:a,direction:i,disablePortal:l,modifiers:s,open:u,placement:c,popperOptions:d,popperRef:f,slotProps:p={},slots:h={},TransitionProps:m}=t,v=(0,Ne.A)(t,Ol),y=e.useRef(null),g=(0,Ao.A)(y,n),b=e.useRef(null),w=(0,Ao.A)(b,f),x=e.useRef(w);(0,_a.A)((()=>{x.current=w}),[w]),e.useImperativeHandle(f,(()=>b.current),[]);const S=function(e,t){if("ltr"===t)return e;switch(e){case"bottom-end":return"bottom-start";case"bottom-start":return"bottom-end";case"top-end":return"top-start";case"top-start":return"top-end";default:return e}}(c,i),[k,A]=e.useState(S),[E,C]=e.useState(Rl(o));e.useEffect((()=>{b.current&&b.current.forceUpdate()})),e.useEffect((()=>{o&&C(Rl(o))}),[o]),(0,_a.A)((()=>{if(!E||!u)return;let e=[{name:"preventOverflow",options:{altBoundary:l}},{name:"flip",options:{altBoundary:l}},{name:"onUpdate",enabled:!0,phase:"afterWrite",fn:({state:e})=>{A(e.placement)}}];null!=s&&(e=e.concat(s)),d&&null!=d.modifiers&&(e=e.concat(d.modifiers));const t=xl(E,y.current,(0,Me.A)({placement:S},d,{modifiers:e}));return x.current(t),()=>{t.destroy(),x.current(null)}}),[E,l,s,u,d,S]);const P={placement:k};null!==m&&(P.TransitionProps=m);const O=(0,Je.A)({root:["root"]},function(t){const{disableDefaultClasses:n}=e.useContext(Pl);return e=>n?"":t(e)}(El)),_=null!=(r=h.root)?r:"div",R=Mo({elementType:_,externalSlotProps:p.root,externalForwardedProps:v,additionalProps:{role:"tooltip",ref:g},ownerState:t,className:O.root});return(0,We.jsx)(_,(0,Me.A)({},R,{children:"function"==typeof a?a(P):a}))})),Nl=e.forwardRef((function(t,n){const{anchorEl:r,children:o,container:a,direction:i="ltr",disablePortal:l=!1,keepMounted:s=!1,modifiers:u,open:c,placement:d="bottom",popperOptions:f=Tl,popperRef:p,style:h,transition:m=!1,slotProps:v={},slots:y={}}=t,g=(0,Ne.A)(t,_l),[b,w]=e.useState(!0);if(!s&&!c&&(!m||b))return null;let x;if(a)x=a;else if(r){const e=Rl(r);x=e&&void 0!==e.nodeType?(0,va.A)(e).body:(0,va.A)(null).body}const S=c||!s||m&&!b?void 0:"none",k=m?{in:c,onEnter:()=>{w(!1)},onExited:()=>{w(!0)}}:void 0;return(0,We.jsx)(Ta,{disablePortal:l,container:x,children:(0,We.jsx)(Ml,(0,Me.A)({anchorEl:r,direction:i,disablePortal:l,modifiers:u,ref:n,open:m?!b:c,placement:d,popperOptions:f,popperRef:p,slotProps:v,slots:y},g,{style:(0,Me.A)({position:"fixed",top:0,left:0,display:S},h),TransitionProps:k,children:o}))})}));var Ll=i(2923);const zl=["anchorEl","component","components","componentsProps","container","disablePortal","keepMounted","modifiers","open","placement","popperOptions","popperRef","transition","slots","slotProps"],Il=(0,Ze.Ay)(Nl,{name:"MuiPopper",slot:"Root",overridesResolver:(e,t)=>t.root})({}),jl=e.forwardRef((function(e,t){var n;const r=(0,Ll.A)(),o=(0,et.b)({props:e,name:"MuiPopper"}),{anchorEl:a,component:i,components:l,componentsProps:s,container:u,disablePortal:c,keepMounted:d,modifiers:f,open:p,placement:h,popperOptions:m,popperRef:v,transition:y,slots:g,slotProps:b}=o,w=(0,Ne.A)(o,zl),x=null!=(n=null==g?void 0:g.root)?n:null==l?void 0:l.Root,S=(0,Me.A)({anchorEl:a,container:u,disablePortal:c,keepMounted:d,modifiers:f,open:p,placement:h,popperOptions:m,popperRef:v,transition:y},w);return(0,We.jsx)(Il,(0,Me.A)({as:i,direction:null==r?void 0:r.direction,slots:{root:x},slotProps:null!=b?b:s},S,{ref:t}))}));var Fl=i(336),Dl=i(1381);function $l(e){return(0,nt.Ay)("MuiTooltip",e)}const Bl=(0,qe.A)("MuiTooltip",["popper","popperInteractive","popperArrow","popperClose","tooltip","tooltipArrow","touch","tooltipPlacementLeft","tooltipPlacementRight","tooltipPlacementTop","tooltipPlacementBottom","arrow"]),Wl=["arrow","children","classes","components","componentsProps","describeChild","disableFocusListener","disableHoverListener","disableInteractive","disableTouchListener","enterDelay","enterNextDelay","enterTouchDelay","followCursor","id","leaveDelay","leaveTouchDelay","onClose","onOpen","open","placement","PopperComponent","PopperProps","slotProps","slots","title","TransitionComponent","TransitionProps"],Ul=(0,Ze.Ay)(jl,{name:"MuiTooltip",slot:"Popper",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.popper,!n.disableInteractive&&t.popperInteractive,n.arrow&&t.popperArrow,!n.open&&t.popperClose]}})((({theme:e,ownerState:t,open:n})=>(0,Me.A)({zIndex:(e.vars||e).zIndex.tooltip,pointerEvents:"none"},!t.disableInteractive&&{pointerEvents:"auto"},!n&&{pointerEvents:"none"},t.arrow&&{[`&[data-popper-placement*="bottom"] .${Bl.arrow}`]:{top:0,marginTop:"-0.71em","&::before":{transformOrigin:"0 100%"}},[`&[data-popper-placement*="top"] .${Bl.arrow}`]:{bottom:0,marginBottom:"-0.71em","&::before":{transformOrigin:"100% 0"}},[`&[data-popper-placement*="right"] .${Bl.arrow}`]:(0,Me.A)({},t.isRtl?{right:0,marginRight:"-0.71em"}:{left:0,marginLeft:"-0.71em"},{height:"1em",width:"0.71em","&::before":{transformOrigin:"100% 100%"}}),[`&[data-popper-placement*="left"] .${Bl.arrow}`]:(0,Me.A)({},t.isRtl?{left:0,marginLeft:"-0.71em"}:{right:0,marginRight:"-0.71em"},{height:"1em",width:"0.71em","&::before":{transformOrigin:"0 0"}})}))),Vl=(0,Ze.Ay)("div",{name:"MuiTooltip",slot:"Tooltip",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.tooltip,n.touch&&t.touch,n.arrow&&t.tooltipArrow,t[`tooltipPlacement${(0,tt.A)(n.placement.split("-")[0])}`]]}})((({theme:e,ownerState:t})=>{return(0,Me.A)({backgroundColor:e.vars?e.vars.palette.Tooltip.bg:(0,or.X4)(e.palette.grey[700],.92),borderRadius:(e.vars||e).shape.borderRadius,color:(e.vars||e).palette.common.white,fontFamily:e.typography.fontFamily,padding:"4px 8px",fontSize:e.typography.pxToRem(11),maxWidth:300,margin:2,wordWrap:"break-word",fontWeight:e.typography.fontWeightMedium},t.arrow&&{position:"relative",margin:0},t.touch&&{padding:"8px 16px",fontSize:e.typography.pxToRem(14),lineHeight:(n=16/14,Math.round(1e5*n)/1e5+"em"),fontWeight:e.typography.fontWeightRegular},{[`.${Bl.popper}[data-popper-placement*="left"] &`]:(0,Me.A)({transformOrigin:"right center"},t.isRtl?(0,Me.A)({marginLeft:"14px"},t.touch&&{marginLeft:"24px"}):(0,Me.A)({marginRight:"14px"},t.touch&&{marginRight:"24px"})),[`.${Bl.popper}[data-popper-placement*="right"] &`]:(0,Me.A)({transformOrigin:"left center"},t.isRtl?(0,Me.A)({marginRight:"14px"},t.touch&&{marginRight:"24px"}):(0,Me.A)({marginLeft:"14px"},t.touch&&{marginLeft:"24px"})),[`.${Bl.popper}[data-popper-placement*="top"] &`]:(0,Me.A)({transformOrigin:"center bottom",marginBottom:"14px"},t.touch&&{marginBottom:"24px"}),[`.${Bl.popper}[data-popper-placement*="bottom"] &`]:(0,Me.A)({transformOrigin:"center top",marginTop:"14px"},t.touch&&{marginTop:"24px"})});var n})),Hl=(0,Ze.Ay)("span",{name:"MuiTooltip",slot:"Arrow",overridesResolver:(e,t)=>t.arrow})((({theme:e})=>({overflow:"hidden",position:"absolute",width:"1em",height:"0.71em",boxSizing:"border-box",color:e.vars?e.vars.palette.Tooltip.bg:(0,or.X4)(e.palette.grey[700],.9),"&::before":{content:'""',margin:"auto",display:"block",width:"100%",height:"100%",backgroundColor:"currentColor",transform:"rotate(45deg)"}})));let Kl=!1;const ql=new Jr.E;let Xl={x:0,y:0};function Ql(e,t){return(n,...r)=>{t&&t(n,...r),e(n,...r)}}const Yl=e.forwardRef((function(t,n){var r,o,a,i,l,s,u,c,d,f,p,h,m,v,y,g,b,w,x;const S=(0,et.b)({props:t,name:"MuiTooltip"}),{arrow:k=!1,children:A,components:E={},componentsProps:C={},describeChild:P=!1,disableFocusListener:O=!1,disableHoverListener:_=!1,disableInteractive:R=!1,disableTouchListener:T=!1,enterDelay:M=100,enterNextDelay:N=0,enterTouchDelay:L=700,followCursor:z=!1,id:I,leaveDelay:j=0,leaveTouchDelay:F=1500,onClose:D,onOpen:$,open:B,placement:W="bottom",PopperComponent:U,PopperProps:V={},slotProps:H={},slots:K={},title:q,TransitionComponent:X=ma,TransitionProps:Q}=S,Y=(0,Ne.A)(S,Wl),G=e.isValidElement(A)?A:(0,We.jsx)("span",{children:A}),J=la(),Z=Lo(),[ee,te]=e.useState(),[ne,re]=e.useState(null),oe=e.useRef(!1),ae=R||z,ie=(0,Jr.A)(),le=(0,Jr.A)(),se=(0,Jr.A)(),ue=(0,Jr.A)(),[ce,de]=(0,Dl.A)({controlled:B,default:!1,name:"Tooltip",state:"open"});let fe=ce;const pe=(0,Fl.A)(I),he=e.useRef(),me=(0,$r.A)((()=>{void 0!==he.current&&(document.body.style.WebkitUserSelect=he.current,he.current=void 0),ue.clear()}));e.useEffect((()=>me),[me]);const ve=e=>{ql.clear(),Kl=!0,de(!0),$&&!fe&&$(e)},ye=(0,$r.A)((e=>{ql.start(800+j,(()=>{Kl=!1})),de(!1),D&&fe&&D(e),ie.start(J.transitions.duration.shortest,(()=>{oe.current=!1}))})),ge=e=>{oe.current&&"touchstart"!==e.type||(ee&&ee.removeAttribute("title"),le.clear(),se.clear(),M||Kl&&N?le.start(Kl?N:M,(()=>{ve(e)})):ve(e))},be=e=>{le.clear(),se.start(j,(()=>{ye(e)}))},{isFocusVisibleRef:we,onBlur:xe,onFocus:Se,ref:ke}=(0,Br.A)(),[,Ae]=e.useState(!1),Ee=e=>{xe(e),!1===we.current&&(Ae(!1),be(e))},Ce=e=>{ee||te(e.currentTarget),Se(e),!0===we.current&&(Ae(!0),ge(e))},Pe=e=>{oe.current=!0;const t=G.props;t.onTouchStart&&t.onTouchStart(e)};e.useEffect((()=>{if(fe)return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)};function e(e){"Escape"!==e.key&&"Esc"!==e.key||ye(e)}}),[ye,fe]);const Oe=(0,Dr.A)(G.ref,ke,te,n);q||0===q||(fe=!1);const _e=e.useRef(),Re={},Te="string"==typeof q;P?(Re.title=fe||!Te||_?null:q,Re["aria-describedby"]=fe?pe:null):(Re["aria-label"]=Te?q:null,Re["aria-labelledby"]=fe&&!Te?pe:null);const ze=(0,Me.A)({},Re,Y,G.props,{className:(0,Le.A)(Y.className,G.props.className),onTouchStart:Pe,ref:Oe},z?{onMouseMove:e=>{const t=G.props;t.onMouseMove&&t.onMouseMove(e),Xl={x:e.clientX,y:e.clientY},_e.current&&_e.current.update()}}:{}),Ie={};T||(ze.onTouchStart=e=>{Pe(e),se.clear(),ie.clear(),me(),he.current=document.body.style.WebkitUserSelect,document.body.style.WebkitUserSelect="none",ue.start(L,(()=>{document.body.style.WebkitUserSelect=he.current,ge(e)}))},ze.onTouchEnd=e=>{G.props.onTouchEnd&&G.props.onTouchEnd(e),me(),se.start(F,(()=>{ye(e)}))}),_||(ze.onMouseOver=Ql(ge,ze.onMouseOver),ze.onMouseLeave=Ql(be,ze.onMouseLeave),ae||(Ie.onMouseOver=ge,Ie.onMouseLeave=be)),O||(ze.onFocus=Ql(Ce,ze.onFocus),ze.onBlur=Ql(Ee,ze.onBlur),ae||(Ie.onFocus=Ce,Ie.onBlur=Ee));const je=e.useMemo((()=>{var e;let t=[{name:"arrow",enabled:Boolean(ne),options:{element:ne,padding:4}}];return null!=(e=V.popperOptions)&&e.modifiers&&(t=t.concat(V.popperOptions.modifiers)),(0,Me.A)({},V.popperOptions,{modifiers:t})}),[ne,V]),Fe=(0,Me.A)({},S,{isRtl:Z,arrow:k,disableInteractive:ae,placement:W,PopperComponentProp:U,touch:oe.current}),De=(e=>{const{classes:t,disableInteractive:n,arrow:r,touch:o,placement:a}=e,i={popper:["popper",!n&&"popperInteractive",r&&"popperArrow"],tooltip:["tooltip",r&&"tooltipArrow",o&&"touch",`tooltipPlacement${(0,tt.A)(a.split("-")[0])}`],arrow:["arrow"]};return(0,Je.A)(i,$l,t)})(Fe),$e=null!=(r=null!=(o=K.popper)?o:E.Popper)?r:Ul,Be=null!=(a=null!=(i=null!=(l=K.transition)?l:E.Transition)?i:X)?a:ma,Ue=null!=(s=null!=(u=K.tooltip)?u:E.Tooltip)?s:Vl,Ve=null!=(c=null!=(d=K.arrow)?d:E.Arrow)?c:Hl,He=Co($e,(0,Me.A)({},V,null!=(f=H.popper)?f:C.popper,{className:(0,Le.A)(De.popper,null==V?void 0:V.className,null==(p=null!=(h=H.popper)?h:C.popper)?void 0:p.className)}),Fe),Ke=Co(Be,(0,Me.A)({},Q,null!=(m=H.transition)?m:C.transition),Fe),qe=Co(Ue,(0,Me.A)({},null!=(v=H.tooltip)?v:C.tooltip,{className:(0,Le.A)(De.tooltip,null==(y=null!=(g=H.tooltip)?g:C.tooltip)?void 0:y.className)}),Fe),Xe=Co(Ve,(0,Me.A)({},null!=(b=H.arrow)?b:C.arrow,{className:(0,Le.A)(De.arrow,null==(w=null!=(x=H.arrow)?x:C.arrow)?void 0:w.className)}),Fe);return(0,We.jsxs)(e.Fragment,{children:[e.cloneElement(G,ze),(0,We.jsx)($e,(0,Me.A)({as:null!=U?U:jl,placement:W,anchorEl:z?{getBoundingClientRect:()=>({top:Xl.y,left:Xl.x,right:Xl.x,bottom:Xl.y,width:0,height:0})}:ee,popperRef:_e,open:!!ee&&fe,id:pe,transition:!0},Ie,He,{popperOptions:je,children:({TransitionProps:e})=>(0,We.jsx)(Be,(0,Me.A)({timeout:J.transitions.duration.shorter},e,Ke,{children:(0,We.jsxs)(Ue,(0,Me.A)({},qe,{children:[q,k?(0,We.jsx)(Ve,(0,Me.A)({},Xe,{ref:re})):null]}))}))}))]})}));var Gl=i(5003);const Jl=(0,Gl.A)((0,We.jsx)("path",{d:"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"}),"Person");function Zl(e){return(0,nt.Ay)("MuiAvatar",e)}(0,qe.A)("MuiAvatar",["root","colorDefault","circular","rounded","square","img","fallback"]);const es=["className","elementType","ownerState","externalForwardedProps","getSlotOwnerState","internalForwardedProps"],ts=["component","slots","slotProps"],ns=["component"],rs=["alt","children","className","component","slots","slotProps","imgProps","sizes","src","srcSet","variant"],os=(0,Ze.Ay)("div",{name:"MuiAvatar",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,t[n.variant],n.colorDefault&&t.colorDefault]}})((({theme:e})=>({position:"relative",display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,width:40,height:40,fontFamily:e.typography.fontFamily,fontSize:e.typography.pxToRem(20),lineHeight:1,borderRadius:"50%",overflow:"hidden",userSelect:"none",variants:[{props:{variant:"rounded"},style:{borderRadius:(e.vars||e).shape.borderRadius}},{props:{variant:"square"},style:{borderRadius:0}},{props:{colorDefault:!0},style:(0,Me.A)({color:(e.vars||e).palette.background.default},e.vars?{backgroundColor:e.vars.palette.Avatar.defaultBg}:(0,Me.A)({backgroundColor:e.palette.grey[400]},e.applyStyles("dark",{backgroundColor:e.palette.grey[600]})))}]}))),as=(0,Ze.Ay)("img",{name:"MuiAvatar",slot:"Img",overridesResolver:(e,t)=>t.img})({width:"100%",height:"100%",textAlign:"center",objectFit:"cover",color:"transparent",textIndent:1e4}),is=(0,Ze.Ay)(Jl,{name:"MuiAvatar",slot:"Fallback",overridesResolver:(e,t)=>t.fallback})({width:"75%",height:"75%"}),ls=e.forwardRef((function(t,n){const r=(0,et.b)({props:t,name:"MuiAvatar"}),{alt:o,children:a,className:i,component:l="div",slots:s={},slotProps:u={},imgProps:c,sizes:d,src:f,srcSet:p,variant:h="circular"}=r,m=(0,Ne.A)(r,rs);let v=null;const y=function({crossOrigin:t,referrerPolicy:n,src:r,srcSet:o}){const[a,i]=e.useState(!1);return e.useEffect((()=>{if(!r&&!o)return;i(!1);let e=!0;const a=new Image;return a.onload=()=>{e&&i("loaded")},a.onerror=()=>{e&&i("error")},a.crossOrigin=t,a.referrerPolicy=n,a.src=r,o&&(a.srcset=o),()=>{e=!1}}),[t,n,r,o]),a}((0,Me.A)({},c,{src:f,srcSet:p})),g=f||p,b=g&&"error"!==y,w=(0,Me.A)({},r,{colorDefault:!b,component:l,variant:h}),x=(e=>{const{classes:t,variant:n,colorDefault:r}=e,o={root:["root",n,r&&"colorDefault"],img:["img"],fallback:["fallback"]};return(0,Je.A)(o,Zl,t)})(w),[S,k]=function(e,t){const{className:n,elementType:r,ownerState:o,externalForwardedProps:a,getSlotOwnerState:i,internalForwardedProps:l}=t,s=(0,Ne.A)(t,es),{component:u,slots:c={[e]:void 0},slotProps:d={[e]:void 0}}=a,f=(0,Ne.A)(a,ts),p=c[e]||r,h=Ro(d[e],o),m=_o((0,Me.A)({className:n},s,{externalForwardedProps:"root"===e?f:void 0,externalSlotProps:h})),{props:{component:v},internalRef:y}=m,g=(0,Ne.A)(m.props,ns),b=(0,Ao.A)(y,null==h?void 0:h.ref,t.ref),w=i?i(g):{},x=(0,Me.A)({},o,w),S="root"===e?v||u:v,k=Co(p,(0,Me.A)({},"root"===e&&!u&&!c[e]&&l,"root"!==e&&!c[e]&&l,g,S&&{as:S},{ref:b}),x);return Object.keys(w).forEach((e=>{delete k[e]})),[p,k]}("img",{className:x.img,elementType:as,externalForwardedProps:{slots:s,slotProps:{img:(0,Me.A)({},c,u.img)}},additionalProps:{alt:o,src:f,srcSet:p,sizes:d},ownerState:w});return v=b?(0,We.jsx)(S,(0,Me.A)({},k)):a||0===a?a:g&&o?o[0]:(0,We.jsx)(is,{ownerState:w,className:x.fallback}),(0,We.jsx)(os,(0,Me.A)({as:l,ownerState:w,className:(0,Le.A)(x.root,i),ref:n},m,{children:v}))}));var ss=i(2274),us=i(5556),cs=i.n(us);let ds;function fs(){if(ds)return ds;const e=document.createElement("div"),t=document.createElement("div");return t.style.width="10px",t.style.height="1px",e.appendChild(t),e.dir="rtl",e.style.fontSize="14px",e.style.width="4px",e.style.height="1px",e.style.position="absolute",e.style.top="-1000px",e.style.overflow="scroll",document.body.appendChild(e),ds="reverse",e.scrollLeft>0?ds="default":(e.scrollLeft=1,0===e.scrollLeft&&(ds="negative")),document.body.removeChild(e),ds}function ps(e,t){const n=e.scrollLeft;if("rtl"!==t)return n;switch(fs()){case"negative":return e.scrollWidth-e.clientWidth+n;case"reverse":return e.scrollWidth-e.clientWidth-n;default:return n}}function hs(e){return(1+Math.sin(Math.PI*e-Math.PI/2))/2}const ms=["onChange"],vs={width:99,height:99,position:"absolute",top:-9999,overflow:"scroll"},ys=(0,Gl.A)((0,We.jsx)("path",{d:"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"}),"KeyboardArrowLeft"),gs=(0,Gl.A)((0,We.jsx)("path",{d:"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"}),"KeyboardArrowRight");function bs(e){return(0,nt.Ay)("MuiTabScrollButton",e)}const ws=(0,qe.A)("MuiTabScrollButton",["root","vertical","horizontal","disabled"]),xs=["className","slots","slotProps","direction","orientation","disabled"],Ss=(0,Ze.Ay)(go,{name:"MuiTabScrollButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.orientation&&t[n.orientation]]}})((({ownerState:e})=>(0,Me.A)({width:40,flexShrink:0,opacity:.8,[`&.${ws.disabled}`]:{opacity:0}},"vertical"===e.orientation&&{width:"100%",height:40,"& svg":{transform:`rotate(${e.isRtl?-90:90}deg)`}}))),ks=e.forwardRef((function(e,t){var n,r;const o=(0,et.b)({props:e,name:"MuiTabScrollButton"}),{className:a,slots:i={},slotProps:l={},direction:s}=o,u=(0,Ne.A)(o,xs),c=Lo(),d=(0,Me.A)({isRtl:c},o),f=(e=>{const{classes:t,orientation:n,disabled:r}=e,o={root:["root",n,r&&"disabled"]};return(0,Je.A)(o,bs,t)})(d),p=null!=(n=i.StartScrollButtonIcon)?n:ys,h=null!=(r=i.EndScrollButtonIcon)?r:gs,m=Mo({elementType:p,externalSlotProps:l.startScrollButtonIcon,additionalProps:{fontSize:"small"},ownerState:d}),v=Mo({elementType:h,externalSlotProps:l.endScrollButtonIcon,additionalProps:{fontSize:"small"},ownerState:d});return(0,We.jsx)(Ss,(0,Me.A)({component:"div",className:(0,Le.A)(f.root,a),ref:t,role:null,ownerState:d,tabIndex:null},u,{children:"left"===s?(0,We.jsx)(p,(0,Me.A)({},m)):(0,We.jsx)(h,(0,Me.A)({},v))}))}));function As(e){return(0,nt.Ay)("MuiTabs",e)}const Es=(0,qe.A)("MuiTabs",["root","vertical","flexContainer","flexContainerVertical","centered","scroller","fixed","scrollableX","scrollableY","hideScrollbar","scrollButtons","scrollButtonsHideMobile","indicator"]),Cs=["aria-label","aria-labelledby","action","centered","children","className","component","allowScrollButtonsMobile","indicatorColor","onChange","orientation","ScrollButtonComponent","scrollButtons","selectionFollowsFocus","slots","slotProps","TabIndicatorProps","TabScrollButtonProps","textColor","value","variant","visibleScrollbar"],Ps=(e,t)=>e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:e.firstChild,Os=(e,t)=>e===t?e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:e.lastChild,_s=(e,t,n)=>{let r=!1,o=n(e,t);for(;o;){if(o===e.firstChild){if(r)return;r=!0}const t=o.disabled||"true"===o.getAttribute("aria-disabled");if(o.hasAttribute("tabindex")&&!t)return void o.focus();o=n(e,o)}},Rs=(0,Ze.Ay)("div",{name:"MuiTabs",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[{[`& .${Es.scrollButtons}`]:t.scrollButtons},{[`& .${Es.scrollButtons}`]:n.scrollButtonsHideMobile&&t.scrollButtonsHideMobile},t.root,n.vertical&&t.vertical]}})((({ownerState:e,theme:t})=>(0,Me.A)({overflow:"hidden",minHeight:48,WebkitOverflowScrolling:"touch",display:"flex"},e.vertical&&{flexDirection:"column"},e.scrollButtonsHideMobile&&{[`& .${Es.scrollButtons}`]:{[t.breakpoints.down("sm")]:{display:"none"}}}))),Ts=(0,Ze.Ay)("div",{name:"MuiTabs",slot:"Scroller",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.scroller,n.fixed&&t.fixed,n.hideScrollbar&&t.hideScrollbar,n.scrollableX&&t.scrollableX,n.scrollableY&&t.scrollableY]}})((({ownerState:e})=>(0,Me.A)({position:"relative",display:"inline-block",flex:"1 1 auto",whiteSpace:"nowrap"},e.fixed&&{overflowX:"hidden",width:"100%"},e.hideScrollbar&&{scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}},e.scrollableX&&{overflowX:"auto",overflowY:"hidden"},e.scrollableY&&{overflowY:"auto",overflowX:"hidden"}))),Ms=(0,Ze.Ay)("div",{name:"MuiTabs",slot:"FlexContainer",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.flexContainer,n.vertical&&t.flexContainerVertical,n.centered&&t.centered]}})((({ownerState:e})=>(0,Me.A)({display:"flex"},e.vertical&&{flexDirection:"column"},e.centered&&{justifyContent:"center"}))),Ns=(0,Ze.Ay)("span",{name:"MuiTabs",slot:"Indicator",overridesResolver:(e,t)=>t.indicator})((({ownerState:e,theme:t})=>(0,Me.A)({position:"absolute",height:2,bottom:0,width:"100%",transition:t.transitions.create()},"primary"===e.indicatorColor&&{backgroundColor:(t.vars||t).palette.primary.main},"secondary"===e.indicatorColor&&{backgroundColor:(t.vars||t).palette.secondary.main},e.vertical&&{height:"100%",width:2,right:0}))),Ls=(0,Ze.Ay)((function(t){const{onChange:n}=t,r=(0,Ne.A)(t,ms),o=e.useRef(),a=e.useRef(null),i=()=>{o.current=a.current.offsetHeight-a.current.clientHeight};return(0,Uo.A)((()=>{const e=(0,Yo.A)((()=>{const e=o.current;i(),e!==o.current&&n(o.current)})),t=(0,Go.A)(a.current);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[n]),e.useEffect((()=>{i(),n(o.current)}),[n]),(0,We.jsx)("div",(0,Me.A)({style:vs,ref:a},r))}))({overflowX:"auto",overflowY:"hidden",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}),zs={},Is=e.forwardRef((function(t,n){const r=(0,et.b)({props:t,name:"MuiTabs"}),o=la(),a=Lo(),{"aria-label":i,"aria-labelledby":l,action:s,centered:u=!1,children:c,className:d,component:f="div",allowScrollButtonsMobile:p=!1,indicatorColor:h="primary",onChange:m,orientation:v="horizontal",ScrollButtonComponent:y=ks,scrollButtons:g="auto",selectionFollowsFocus:b,slots:w={},slotProps:x={},TabIndicatorProps:S={},TabScrollButtonProps:k={},textColor:A="primary",value:E,variant:C="standard",visibleScrollbar:P=!1}=r,O=(0,Ne.A)(r,Cs),_="scrollable"===C,R="vertical"===v,T=R?"scrollTop":"scrollLeft",M=R?"top":"left",N=R?"bottom":"right",L=R?"clientHeight":"clientWidth",z=R?"height":"width",I=(0,Me.A)({},r,{component:f,allowScrollButtonsMobile:p,indicatorColor:h,orientation:v,vertical:R,scrollButtons:g,textColor:A,variant:C,visibleScrollbar:P,fixed:!_,hideScrollbar:_&&!P,scrollableX:_&&!R,scrollableY:_&&R,centered:u&&!_,scrollButtonsHideMobile:!p}),j=(e=>{const{vertical:t,fixed:n,hideScrollbar:r,scrollableX:o,scrollableY:a,centered:i,scrollButtonsHideMobile:l,classes:s}=e,u={root:["root",t&&"vertical"],scroller:["scroller",n&&"fixed",r&&"hideScrollbar",o&&"scrollableX",a&&"scrollableY"],flexContainer:["flexContainer",t&&"flexContainerVertical",i&&"centered"],indicator:["indicator"],scrollButtons:["scrollButtons",l&&"scrollButtonsHideMobile"],scrollableX:[o&&"scrollableX"],hideScrollbar:[r&&"hideScrollbar"]};return(0,Je.A)(u,As,s)})(I),F=Mo({elementType:w.StartScrollButtonIcon,externalSlotProps:x.startScrollButtonIcon,ownerState:I}),D=Mo({elementType:w.EndScrollButtonIcon,externalSlotProps:x.endScrollButtonIcon,ownerState:I}),[$,B]=e.useState(!1),[W,U]=e.useState(zs),[V,H]=e.useState(!1),[K,q]=e.useState(!1),[X,Q]=e.useState(!1),[Y,G]=e.useState({overflow:"hidden",scrollbarWidth:0}),J=new Map,Z=e.useRef(null),ee=e.useRef(null),te=()=>{const e=Z.current;let t,n;if(e){const n=e.getBoundingClientRect();t={clientWidth:e.clientWidth,scrollLeft:e.scrollLeft,scrollTop:e.scrollTop,scrollLeftNormalized:ps(e,a?"rtl":"ltr"),scrollWidth:e.scrollWidth,top:n.top,bottom:n.bottom,left:n.left,right:n.right}}if(e&&!1!==E){const e=ee.current.children;if(e.length>0){const t=e[J.get(E)];n=t?t.getBoundingClientRect():null}}return{tabsMeta:t,tabMeta:n}},ne=(0,$r.A)((()=>{const{tabsMeta:e,tabMeta:t}=te();let n,r=0;if(R)n="top",t&&e&&(r=t.top-e.top+e.scrollTop);else if(n=a?"right":"left",t&&e){const o=a?e.scrollLeftNormalized+e.clientWidth-e.scrollWidth:e.scrollLeft;r=(a?-1:1)*(t[n]-e[n]+o)}const o={[n]:r,[z]:t?t[z]:0};if(isNaN(W[n])||isNaN(W[z]))U(o);else{const e=Math.abs(W[n]-o[n]),t=Math.abs(W[z]-o[z]);(e>=1||t>=1)&&U(o)}})),re=(e,{animation:t=!0}={})=>{t?function(e,t,n,r={},o=(()=>{})){const{ease:a=hs,duration:i=300}=r;let l=null;const s=t[e];let u=!1;const c=r=>{if(u)return void o(new Error("Animation cancelled"));null===l&&(l=r);const d=Math.min(1,(r-l)/i);t[e]=a(d)*(n-s)+s,d>=1?requestAnimationFrame((()=>{o(null)})):requestAnimationFrame(c)};s===n?o(new Error("Element already at target position")):requestAnimationFrame(c)}(T,Z.current,e,{duration:o.transitions.duration.standard}):Z.current[T]=e},oe=e=>{let t=Z.current[T];R?t+=e:(t+=e*(a?-1:1),t*=a&&"reverse"===fs()?-1:1),re(t)},ae=()=>{const e=Z.current[L];let t=0;const n=Array.from(ee.current.children);for(let r=0;re){0===r&&(t=e);break}t+=o[L]}return t},ie=()=>{oe(-1*ae())},le=()=>{oe(ae())},se=e.useCallback((e=>{G({overflow:null,scrollbarWidth:e})}),[]),ue=(0,$r.A)((e=>{const{tabsMeta:t,tabMeta:n}=te();if(n&&t)if(n[M]t[N]){const r=t[T]+(n[N]-t[N]);re(r,{animation:e})}})),ce=(0,$r.A)((()=>{_&&!1!==g&&Q(!X)}));e.useEffect((()=>{const e=(0,Yo.A)((()=>{Z.current&&ne()}));let t;const n=(0,Go.A)(Z.current);let r;return n.addEventListener("resize",e),"undefined"!=typeof ResizeObserver&&(t=new ResizeObserver(e),Array.from(ee.current.children).forEach((e=>{t.observe(e)}))),"undefined"!=typeof MutationObserver&&(r=new MutationObserver((n=>{n.forEach((e=>{e.removedNodes.forEach((e=>{var n;null==(n=t)||n.unobserve(e)})),e.addedNodes.forEach((e=>{var n;null==(n=t)||n.observe(e)}))})),e(),ce()})),r.observe(ee.current,{childList:!0})),()=>{var o,a;e.clear(),n.removeEventListener("resize",e),null==(o=r)||o.disconnect(),null==(a=t)||a.disconnect()}}),[ne,ce]),e.useEffect((()=>{const e=Array.from(ee.current.children),t=e.length;if("undefined"!=typeof IntersectionObserver&&t>0&&_&&!1!==g){const n=e[0],r=e[t-1],o={root:Z.current,threshold:.99},a=new IntersectionObserver((e=>{H(!e[0].isIntersecting)}),o);a.observe(n);const i=new IntersectionObserver((e=>{q(!e[0].isIntersecting)}),o);return i.observe(r),()=>{a.disconnect(),i.disconnect()}}}),[_,g,X,null==c?void 0:c.length]),e.useEffect((()=>{B(!0)}),[]),e.useEffect((()=>{ne()})),e.useEffect((()=>{ue(zs!==W)}),[ue,W]),e.useImperativeHandle(s,(()=>({updateIndicator:ne,updateScrollButtons:ce})),[ne,ce]);const de=(0,We.jsx)(Ns,(0,Me.A)({},S,{className:(0,Le.A)(j.indicator,S.className),ownerState:I,style:(0,Me.A)({},W,S.style)}));let fe=0;const pe=e.Children.map(c,(t=>{if(!e.isValidElement(t))return null;const n=void 0===t.props.value?fe:t.props.value;J.set(n,fe);const r=n===E;return fe+=1,e.cloneElement(t,(0,Me.A)({fullWidth:"fullWidth"===C,indicator:r&&!$&&de,selected:r,selectionFollowsFocus:b,onChange:m,textColor:A,value:n},1!==fe||!1!==E||t.props.tabIndex?{}:{tabIndex:0}))})),he=(()=>{const e={};e.scrollbarSizeListener=_?(0,We.jsx)(Ls,{onChange:se,className:(0,Le.A)(j.scrollableX,j.hideScrollbar)}):null;const t=_&&("auto"===g&&(V||K)||!0===g);return e.scrollButtonStart=t?(0,We.jsx)(y,(0,Me.A)({slots:{StartScrollButtonIcon:w.StartScrollButtonIcon},slotProps:{startScrollButtonIcon:F},orientation:v,direction:a?"right":"left",onClick:ie,disabled:!V},k,{className:(0,Le.A)(j.scrollButtons,k.className)})):null,e.scrollButtonEnd=t?(0,We.jsx)(y,(0,Me.A)({slots:{EndScrollButtonIcon:w.EndScrollButtonIcon},slotProps:{endScrollButtonIcon:D},orientation:v,direction:a?"left":"right",onClick:le,disabled:!K},k,{className:(0,Le.A)(j.scrollButtons,k.className)})):null,e})();return(0,We.jsxs)(Rs,(0,Me.A)({className:(0,Le.A)(j.root,d),ownerState:I,ref:n,as:f},O,{children:[he.scrollButtonStart,he.scrollbarSizeListener,(0,We.jsxs)(Ts,{className:j.scroller,ownerState:I,style:{overflow:Y.overflow,[R?"margin"+(a?"Left":"Right"):"marginBottom"]:P?void 0:-Y.scrollbarWidth},ref:Z,children:[(0,We.jsx)(Ms,{"aria-label":i,"aria-labelledby":l,"aria-orientation":"vertical"===v?"vertical":null,className:j.flexContainer,ownerState:I,onKeyDown:e=>{const t=ee.current,n=(0,zo.A)(t).activeElement;if("tab"!==n.getAttribute("role"))return;let r="horizontal"===v?"ArrowLeft":"ArrowUp",o="horizontal"===v?"ArrowRight":"ArrowDown";switch("horizontal"===v&&a&&(r="ArrowRight",o="ArrowLeft"),e.key){case r:e.preventDefault(),_s(t,n,Os);break;case o:e.preventDefault(),_s(t,n,Ps);break;case"Home":e.preventDefault(),_s(t,null,Ps);break;case"End":e.preventDefault(),_s(t,null,Os)}},ref:ee,role:"tablist",children:pe}),$&&de]}),he.scrollButtonEnd]}))})),js=Is;function Fs(e){return(0,nt.Ay)("MuiTab",e)}const Ds=(0,qe.A)("MuiTab",["root","labelIcon","textColorInherit","textColorPrimary","textColorSecondary","selected","disabled","fullWidth","wrapped","iconWrapper"]),$s=["className","disabled","disableFocusRipple","fullWidth","icon","iconPosition","indicator","label","onChange","onClick","onFocus","selected","selectionFollowsFocus","textColor","value","wrapped"],Bs=(0,Ze.Ay)(go,{name:"MuiTab",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.root,n.label&&n.icon&&t.labelIcon,t[`textColor${(0,tt.A)(n.textColor)}`],n.fullWidth&&t.fullWidth,n.wrapped&&t.wrapped,{[`& .${Ds.iconWrapper}`]:t.iconWrapper}]}})((({theme:e,ownerState:t})=>(0,Me.A)({},e.typography.button,{maxWidth:360,minWidth:90,position:"relative",minHeight:48,flexShrink:0,padding:"12px 16px",overflow:"hidden",whiteSpace:"normal",textAlign:"center"},t.label&&{flexDirection:"top"===t.iconPosition||"bottom"===t.iconPosition?"column":"row"},{lineHeight:1.25},t.icon&&t.label&&{minHeight:72,paddingTop:9,paddingBottom:9,[`& > .${Ds.iconWrapper}`]:(0,Me.A)({},"top"===t.iconPosition&&{marginBottom:6},"bottom"===t.iconPosition&&{marginTop:6},"start"===t.iconPosition&&{marginRight:e.spacing(1)},"end"===t.iconPosition&&{marginLeft:e.spacing(1)})},"inherit"===t.textColor&&{color:"inherit",opacity:.6,[`&.${Ds.selected}`]:{opacity:1},[`&.${Ds.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity}},"primary"===t.textColor&&{color:(e.vars||e).palette.text.secondary,[`&.${Ds.selected}`]:{color:(e.vars||e).palette.primary.main},[`&.${Ds.disabled}`]:{color:(e.vars||e).palette.text.disabled}},"secondary"===t.textColor&&{color:(e.vars||e).palette.text.secondary,[`&.${Ds.selected}`]:{color:(e.vars||e).palette.secondary.main},[`&.${Ds.disabled}`]:{color:(e.vars||e).palette.text.disabled}},t.fullWidth&&{flexShrink:1,flexGrow:1,flexBasis:0,maxWidth:"none"},t.wrapped&&{fontSize:e.typography.pxToRem(12)}))),Ws=e.forwardRef((function(t,n){const r=(0,et.b)({props:t,name:"MuiTab"}),{className:o,disabled:a=!1,disableFocusRipple:i=!1,fullWidth:l,icon:s,iconPosition:u="top",indicator:c,label:d,onChange:f,onClick:p,onFocus:h,selected:m,selectionFollowsFocus:v,textColor:y="inherit",value:g,wrapped:b=!1}=r,w=(0,Ne.A)(r,$s),x=(0,Me.A)({},r,{disabled:a,disableFocusRipple:i,selected:m,icon:!!s,iconPosition:u,label:!!d,fullWidth:l,textColor:y,wrapped:b}),S=(e=>{const{classes:t,textColor:n,fullWidth:r,wrapped:o,icon:a,label:i,selected:l,disabled:s}=e,u={root:["root",a&&i&&"labelIcon",`textColor${(0,tt.A)(n)}`,r&&"fullWidth",o&&"wrapped",l&&"selected",s&&"disabled"],iconWrapper:["iconWrapper"]};return(0,Je.A)(u,Fs,t)})(x),k=s&&d&&e.isValidElement(s)?e.cloneElement(s,{className:(0,Le.A)(S.iconWrapper,s.props.className)}):s;return(0,We.jsxs)(Bs,(0,Me.A)({focusRipple:!i,className:(0,Le.A)(S.root,o),ref:n,role:"tab","aria-selected":m,disabled:a,onClick:e=>{!m&&f&&f(e,g),p&&p(e)},onFocus:e=>{v&&!m&&f&&f(e,g),h&&h(e)},ownerState:x,tabIndex:m?0:-1},w,{children:["top"===u||"start"===u?(0,We.jsxs)(e.Fragment,{children:[k,d]}):(0,We.jsxs)(e.Fragment,{children:[d,k]}),c]}))}));function Us(t){let{nameOfClass:n="every-tabs",text:r=[],nav:o=[]}=t;const[a,i]=(0,e.useState)(0),l=fe();return e.createElement("div",{className:"div"},e.createElement(Ge,{sx:{width:"100%"}},e.createElement(js,{value:a,onChange:(e,t)=>{i(t)},centered:!0,TabIndicatorProps:{className:"tabs"}},Array.isArray(r)&&r.map(((t,r)=>e.createElement(Ws,{className:n,key:r,label:t,onClick:()=>(e=>{o&&o[e]&&l(o[e])})(r)}))))))}Us.propTypes={text:cs().arrayOf(cs().string).isRequired,nameOfClass:cs().string,nav:cs().arrayOf(cs().string).isRequired};const Vs=t=>{const n=e.useRef({});return e.useEffect((()=>{n.current=t})),n.current};function Hs(e){return(0,nt.Ay)("MuiBadge",e)}const Ks=(0,qe.A)("MuiBadge",["root","badge","dot","standard","anchorOriginTopRight","anchorOriginBottomRight","anchorOriginTopLeft","anchorOriginBottomLeft","invisible","colorError","colorInfo","colorPrimary","colorSecondary","colorSuccess","colorWarning","overlapRectangular","overlapCircular","anchorOriginTopLeftCircular","anchorOriginTopLeftRectangular","anchorOriginTopRightCircular","anchorOriginTopRightRectangular","anchorOriginBottomLeftCircular","anchorOriginBottomLeftRectangular","anchorOriginBottomRightCircular","anchorOriginBottomRightRectangular"]),qs=["anchorOrigin","className","classes","component","components","componentsProps","children","overlap","color","invisible","max","badgeContent","slots","slotProps","showZero","variant"],Xs=(0,Ze.Ay)("span",{name:"MuiBadge",slot:"Root",overridesResolver:(e,t)=>t.root})({position:"relative",display:"inline-flex",verticalAlign:"middle",flexShrink:0}),Qs=(0,Ze.Ay)("span",{name:"MuiBadge",slot:"Badge",overridesResolver:(e,t)=>{const{ownerState:n}=e;return[t.badge,t[n.variant],t[`anchorOrigin${(0,tt.A)(n.anchorOrigin.vertical)}${(0,tt.A)(n.anchorOrigin.horizontal)}${(0,tt.A)(n.overlap)}`],"default"!==n.color&&t[`color${(0,tt.A)(n.color)}`],n.invisible&&t.invisible]}})((({theme:e})=>{var t;return{display:"flex",flexDirection:"row",flexWrap:"wrap",justifyContent:"center",alignContent:"center",alignItems:"center",position:"absolute",boxSizing:"border-box",fontFamily:e.typography.fontFamily,fontWeight:e.typography.fontWeightMedium,fontSize:e.typography.pxToRem(12),minWidth:20,lineHeight:1,padding:"0 6px",height:20,borderRadius:10,zIndex:1,transition:e.transitions.create("transform",{easing:e.transitions.easing.easeInOut,duration:e.transitions.duration.enteringScreen}),variants:[...Object.keys((null!=(t=e.vars)?t:e).palette).filter((t=>{var n,r;return(null!=(n=e.vars)?n:e).palette[t].main&&(null!=(r=e.vars)?r:e).palette[t].contrastText})).map((t=>({props:{color:t},style:{backgroundColor:(e.vars||e).palette[t].main,color:(e.vars||e).palette[t].contrastText}}))),{props:{variant:"dot"},style:{borderRadius:4,height:8,minWidth:8,padding:0}},{props:({ownerState:e})=>"top"===e.anchorOrigin.vertical&&"right"===e.anchorOrigin.horizontal&&"rectangular"===e.overlap,style:{top:0,right:0,transform:"scale(1) translate(50%, -50%)",transformOrigin:"100% 0%",[`&.${Ks.invisible}`]:{transform:"scale(0) translate(50%, -50%)"}}},{props:({ownerState:e})=>"bottom"===e.anchorOrigin.vertical&&"right"===e.anchorOrigin.horizontal&&"rectangular"===e.overlap,style:{bottom:0,right:0,transform:"scale(1) translate(50%, 50%)",transformOrigin:"100% 100%",[`&.${Ks.invisible}`]:{transform:"scale(0) translate(50%, 50%)"}}},{props:({ownerState:e})=>"top"===e.anchorOrigin.vertical&&"left"===e.anchorOrigin.horizontal&&"rectangular"===e.overlap,style:{top:0,left:0,transform:"scale(1) translate(-50%, -50%)",transformOrigin:"0% 0%",[`&.${Ks.invisible}`]:{transform:"scale(0) translate(-50%, -50%)"}}},{props:({ownerState:e})=>"bottom"===e.anchorOrigin.vertical&&"left"===e.anchorOrigin.horizontal&&"rectangular"===e.overlap,style:{bottom:0,left:0,transform:"scale(1) translate(-50%, 50%)",transformOrigin:"0% 100%",[`&.${Ks.invisible}`]:{transform:"scale(0) translate(-50%, 50%)"}}},{props:({ownerState:e})=>"top"===e.anchorOrigin.vertical&&"right"===e.anchorOrigin.horizontal&&"circular"===e.overlap,style:{top:"14%",right:"14%",transform:"scale(1) translate(50%, -50%)",transformOrigin:"100% 0%",[`&.${Ks.invisible}`]:{transform:"scale(0) translate(50%, -50%)"}}},{props:({ownerState:e})=>"bottom"===e.anchorOrigin.vertical&&"right"===e.anchorOrigin.horizontal&&"circular"===e.overlap,style:{bottom:"14%",right:"14%",transform:"scale(1) translate(50%, 50%)",transformOrigin:"100% 100%",[`&.${Ks.invisible}`]:{transform:"scale(0) translate(50%, 50%)"}}},{props:({ownerState:e})=>"top"===e.anchorOrigin.vertical&&"left"===e.anchorOrigin.horizontal&&"circular"===e.overlap,style:{top:"14%",left:"14%",transform:"scale(1) translate(-50%, -50%)",transformOrigin:"0% 0%",[`&.${Ks.invisible}`]:{transform:"scale(0) translate(-50%, -50%)"}}},{props:({ownerState:e})=>"bottom"===e.anchorOrigin.vertical&&"left"===e.anchorOrigin.horizontal&&"circular"===e.overlap,style:{bottom:"14%",left:"14%",transform:"scale(1) translate(-50%, 50%)",transformOrigin:"0% 100%",[`&.${Ks.invisible}`]:{transform:"scale(0) translate(-50%, 50%)"}}},{props:{invisible:!0},style:{transition:e.transitions.create("transform",{easing:e.transitions.easing.easeInOut,duration:e.transitions.duration.leavingScreen})}}]}})),Ys=e.forwardRef((function(e,t){var n,r,o,a,i,l;const s=(0,et.b)({props:e,name:"MuiBadge"}),{anchorOrigin:u={vertical:"top",horizontal:"right"},className:c,component:d,components:f={},componentsProps:p={},children:h,overlap:m="rectangular",color:v="default",invisible:y=!1,max:g=99,badgeContent:b,slots:w,slotProps:x,showZero:S=!1,variant:k="standard"}=s,A=(0,Ne.A)(s,qs),{badgeContent:E,invisible:C,max:P,displayValue:O}=function(e){const{badgeContent:t,invisible:n=!1,max:r=99,showZero:o=!1}=e,a=Vs({badgeContent:t,max:r});let i=n;!1!==n||0!==t||o||(i=!0);const{badgeContent:l,max:s=r}=i?a:e;return{badgeContent:l,invisible:i,max:s,displayValue:l&&Number(l)>s?`${s}+`:l}}({max:g,invisible:y,badgeContent:b,showZero:S}),_=Vs({anchorOrigin:u,color:v,overlap:m,variant:k,badgeContent:b}),R=C||null==E&&"dot"!==k,{color:T=v,overlap:M=m,anchorOrigin:N=u,variant:L=k}=R?_:s,z="dot"!==L?O:void 0,I=(0,Me.A)({},s,{badgeContent:E,invisible:R,max:P,displayValue:z,showZero:S,anchorOrigin:N,color:T,overlap:M,variant:L}),j=(e=>{const{color:t,anchorOrigin:n,invisible:r,overlap:o,variant:a,classes:i={}}=e,l={root:["root"],badge:["badge",a,r&&"invisible",`anchorOrigin${(0,tt.A)(n.vertical)}${(0,tt.A)(n.horizontal)}`,`anchorOrigin${(0,tt.A)(n.vertical)}${(0,tt.A)(n.horizontal)}${(0,tt.A)(o)}`,`overlap${(0,tt.A)(o)}`,"default"!==t&&`color${(0,tt.A)(t)}`]};return(0,Je.A)(l,Hs,i)})(I),F=null!=(n=null!=(r=null==w?void 0:w.root)?r:f.Root)?n:Xs,D=null!=(o=null!=(a=null==w?void 0:w.badge)?a:f.Badge)?o:Qs,$=null!=(i=null==x?void 0:x.root)?i:p.root,B=null!=(l=null==x?void 0:x.badge)?l:p.badge,W=Mo({elementType:F,externalSlotProps:$,externalForwardedProps:A,additionalProps:{ref:t,as:d},ownerState:I,className:(0,Le.A)(null==$?void 0:$.className,j.root,c)}),U=Mo({elementType:D,externalSlotProps:B,ownerState:I,className:(0,Le.A)(j.badge,null==B?void 0:B.className)});return(0,We.jsxs)(F,(0,Me.A)({},W,{children:[h,(0,We.jsx)(D,(0,Me.A)({},U,{children:z}))]}))})),Gs=(0,Gl.A)((0,We.jsx)("path",{d:"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 4-8 5-8-5V6l8 5 8-5z"}),"Mail"),Js=(0,Gl.A)((0,We.jsx)("path",{d:"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 14H4V8l8 5 8-5zm-8-7L4 6h16z"}),"MailOutline"),Zs=t=>{let{messages:n=[]}=t,r=n.filter((e=>!e.read)).length;const o=r>0;return e.createElement(ko,{onClick:()=>{},className:"iconButton"},o?e.createElement(Ys,{badgeContent:r,color:"error",className:"badgeContent"},e.createElement(Gs,null)):e.createElement(Js,null))},eu=e=>e.auth,tu=function(){const[t,n]=(0,e.useState)(null),[r,o]=(0,e.useState)(null),{user:a}=m(eu);return e.createElement("div",{className:"arooundDiv"},e.createElement(hr,{position:"static",className:"navbar"},e.createElement(Lr,{maxWidth:"xl"},e.createElement(Fr,{disableGutters:!0},e.createElement(Ge,{className:"left-side-box"},e.createElement(ko,{size:"large","aria-label":"account of current user","aria-controls":"menu-appbar","aria-haspopup":"true",onClick:e=>{n(e.currentTarget)},color:"inherit"},e.createElement(ss.A,null)),e.createElement(fi,{id:"menu-appbar",anchorEl:t,anchorOrigin:{vertical:"bottom",horizontal:"left"},keepMounted:!0,transformOrigin:{vertical:"top",horizontal:"left"},open:Boolean(t),onClose:()=>{n(null)},className:"menu"},e.createElement(Us,{nameOfClass:"navbar-tabs",text:["home","reports","statistics","profiles"],nav:["/home","/reports","/statistics","/profiles"]}))),e.createElement(st,{variant:"h5",noWrap:!0,component:"a",href:"#app-bar-with-responsive-menu",className:"logo"},"TimeOut"),e.createElement(Ge,{className:"middle-side-box"},e.createElement(Us,{nameOfClass:"navbar-tabs",text:["home","reports","statistics","profiles"],nav:["/home","/reports","/statistics","/profiles"]})),e.createElement(Ge,null,e.createElement(Yl,{title:"Open settings"},e.createElement(ko,{onClick:e=>{o(e.currentTarget)}},e.createElement(ls,null,a&&a.name?a.name.charAt(0).toUpperCase():""))),e.createElement(fi,{id:"menu-appbar",anchorEl:r,anchorOrigin:{vertical:"top",horizontal:"right"},keepMounted:!0,transformOrigin:{vertical:"top",horizontal:"right"},open:Boolean(r),onClose:()=>{o(null)}},e.createElement(Us,{nameOfClass:"navbar-tabs",text:["edit user profile","manage notifications"],nav:["/editUserProfile","/manageNotifications"]})),e.createElement(Zs,null))))))};function nu(){return e.createElement(e.Fragment,null,e.createElement("nav",null,e.createElement(tu,null)),e.createElement("main",null,e.createElement(ke,null)),e.createElement("footer",null))}const ru=function(){return e.createElement(x,{store:rr},e.createElement(_e,null,e.createElement(Ce,null,e.createElement(Ae,{path:"/",element:e.createElement(nu,null)},e.createElement(Ae,{index:!0,element:e.createElement("h1",null,"home")}),e.createElement(Ae,{path:"home",element:e.createElement("h1",null,"home")}),e.createElement(Ae,{path:"profiles",element:e.createElement("h1",null,"ProfileList")}),e.createElement(Ae,{path:"reports",element:e.createElement("h1",null,"reports")}),e.createElement(Ae,{path:"statistics",element:e.createElement("h1",null,"statistics")}),e.createElement(Ae,{path:"*",element:e.createElement("h1",null,"home")}))),e.createElement(ut,null)))};var ou;n.createRoot(document.getElementById("root")).render(e.createElement(e.StrictMode,null,e.createElement(ru,null))),ou&&ou instanceof Function&&i.e(364).then(i.bind(i,364)).then((e=>{let{getCLS:t,getFID:n,getFCP:r,getLCP:o,getTTFB:a}=e;t(ou),n(ou),r(ou),o(ou),a(ou)}))})()})();
\ No newline at end of file
diff --git a/client-side/package/dist/bundle.js.LICENSE.txt b/client-side/package/dist/bundle.js.LICENSE.txt
new file mode 100644
index 000000000..30ae31740
--- /dev/null
+++ b/client-side/package/dist/bundle.js.LICENSE.txt
@@ -0,0 +1,90 @@
+/**
+ * @license React
+ * react-dom.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react-jsx-runtime.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * scheduler.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @license React
+ * use-sync-external-store-with-selector.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * @remix-run/router v1.19.0
+ *
+ * Copyright (c) Remix Software Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE.md file in the root directory of this source tree.
+ *
+ * @license MIT
+ */
+
+/**
+ * React Router v6.26.0
+ *
+ * Copyright (c) Remix Software Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE.md file in the root directory of this source tree.
+ *
+ * @license MIT
+ */
+
+/** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
diff --git a/client-side/package/dist/index.html b/client-side/package/dist/index.html
new file mode 100644
index 000000000..882f6588e
--- /dev/null
+++ b/client-side/package/dist/index.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+ React App
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/client-side/package/dist/styles.css b/client-side/package/dist/styles.css
new file mode 100644
index 000000000..326fe8326
--- /dev/null
+++ b/client-side/package/dist/styles.css
@@ -0,0 +1,9 @@
+@import url(https://fonts.googleapis.com/css2?family=Nanum+Gothic&display=swap);
+@import url(https://fonts.googleapis.com/css2?family=Nanum+Gothic&display=swap);
+@import url(https://fonts.googleapis.com/css2?family=Nanum+Gothic&display=swap);
+.footer-wrapper{background-color:#000;color:#67fcd2;padding:20px;text-align:left;position:fixed;bottom:0;width:100%}.footer-text{font-size:14px;font-weight:300}.link-style{color:#67fcd2;font-family:"Nanum Gothic",sans-serif;font-optical-sizing:auto;font-style:normal}
+.div .every-tabs,.div .profile-tabs,.div .footer-tabs,.div .navbar-tabs{background-color:#000;color:#67fcd2;font-family:"Nanum Gothic",sans-serif;font-optical-sizing:auto;font-style:normal}.div .every-tabs.Mui-selected,.div .profile-tabs.Mui-selected,.div .footer-tabs.Mui-selected,.div .navbar-tabs.Mui-selected{color:#67fcd2}.div .tabs{background-color:#67fcd2}
+.iconButton{color:#67fcd2}.badgeContent{color:#67fcd2}
+.arooundDiv .navbar{background-color:#000;color:#67fcd2}.arooundDiv .logo{margin-right:2;font-family:"Nanum Gothic";color:#67fcd2;text-decoration:none}.arooundDiv .menu{display:"block";math-depth:"none"}.arooundDiv .left-side-box{flex-grow:1;display:flex}@media(min-width: 768px){.arooundDiv .left-side-box{display:none}}.arooundDiv .middle-side-box{margin-left:20vw;flex-grow:1;display:none}@media(min-width: 768px){.arooundDiv .middle-side-box{display:flex}}
+.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media(prefers-reduced-motion: no-preference){.App-logo{animation:App-logo-spin infinite 20s linear}}.App-header{background-color:#282c34;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:calc(10px + 2vmin);color:#fff}.App-link{color:#61dafb}@keyframes App-logo-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
+body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}
diff --git a/client-side/package/docker-compose.debug.yml b/client-side/package/docker-compose.debug.yml
new file mode 100644
index 000000000..8eb14ab60
--- /dev/null
+++ b/client-side/package/docker-compose.debug.yml
@@ -0,0 +1,14 @@
+version: '3.4'
+
+services:
+ clientside:
+ image: clientside
+ build:
+ context: .
+ dockerfile: ./Dockerfile
+ environment:
+ NODE_ENV: development
+ ports:
+ - 3000:3000
+ - 9229:9229
+ command: ["node", "--inspect=0.0.0.0:9229", "index.js"]
diff --git a/client-side/package/docker-compose.yml b/client-side/package/docker-compose.yml
new file mode 100644
index 000000000..1374092ce
--- /dev/null
+++ b/client-side/package/docker-compose.yml
@@ -0,0 +1,12 @@
+version: '3.4'
+
+services:
+ clientside:
+ image: clientside
+ build:
+ context: .
+ dockerfile: ./Dockerfile
+ environment:
+ NODE_ENV: production
+ ports:
+ - 3000:3000
diff --git a/client-side/package/eslint.config.mjs b/client-side/package/eslint.config.mjs
new file mode 100644
index 000000000..80f788454
--- /dev/null
+++ b/client-side/package/eslint.config.mjs
@@ -0,0 +1,20 @@
+import globals from "globals";
+import pluginJs from "@eslint/js";
+import pluginReactConfig from "eslint-plugin-react/configs/recommended.js";
+import { fixupConfigRules } from "@eslint/compat";
+
+
+export default [
+ {files: ["**/*.{js,mjs,cjs,jsx}"]},
+ { languageOptions: { parserOptions: { ecmaFeatures: { jsx: true } } } },
+ {languageOptions: { globals: globals.browser }},
+ pluginJs.configs.recommended,
+ ...fixupConfigRules(pluginReactConfig),
+ {
+ rules: {
+ 'semi': ['error', 'always'],
+ "node":true
+ //'indent': ['error', 2], // enforce 2 spaces for indentation
+ }
+ }
+];
\ No newline at end of file
diff --git a/client-side/package/node_modules/.bin/jest b/client-side/package/node_modules/.bin/jest
new file mode 100644
index 000000000..e6376e84e
--- /dev/null
+++ b/client-side/package/node_modules/.bin/jest
@@ -0,0 +1,12 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+ *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
+esac
+
+if [ -x "$basedir/node" ]; then
+ exec "$basedir/node" "$basedir/../jest/bin/jest.js" "$@"
+else
+ exec node "$basedir/../jest/bin/jest.js" "$@"
+fi
diff --git a/node_modules/.bin/husky.cmd b/client-side/package/node_modules/.bin/jest.cmd
similarity index 88%
rename from node_modules/.bin/husky.cmd
rename to client-side/package/node_modules/.bin/jest.cmd
index c7b89a9e9..67a602ac5 100644
--- a/node_modules/.bin/husky.cmd
+++ b/client-side/package/node_modules/.bin/jest.cmd
@@ -14,4 +14,4 @@ IF EXIST "%dp0%\node.exe" (
SET PATHEXT=%PATHEXT:;.JS;=;%
)
-endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\husky\lib\bin.js" %*
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\jest\bin\jest.js" %*
diff --git a/node_modules/.bin/husky.ps1 b/client-side/package/node_modules/.bin/jest.ps1
similarity index 68%
rename from node_modules/.bin/husky.ps1
rename to client-side/package/node_modules/.bin/jest.ps1
index d3f34ba18..78a25637f 100644
--- a/node_modules/.bin/husky.ps1
+++ b/client-side/package/node_modules/.bin/jest.ps1
@@ -11,17 +11,17 @@ $ret=0
if (Test-Path "$basedir/node$exe") {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
- $input | & "$basedir/node$exe" "$basedir/../husky/lib/bin.js" $args
+ $input | & "$basedir/node$exe" "$basedir/../jest/bin/jest.js" $args
} else {
- & "$basedir/node$exe" "$basedir/../husky/lib/bin.js" $args
+ & "$basedir/node$exe" "$basedir/../jest/bin/jest.js" $args
}
$ret=$LASTEXITCODE
} else {
# Support pipeline input
if ($MyInvocation.ExpectingInput) {
- $input | & "node$exe" "$basedir/../husky/lib/bin.js" $args
+ $input | & "node$exe" "$basedir/../jest/bin/jest.js" $args
} else {
- & "node$exe" "$basedir/../husky/lib/bin.js" $args
+ & "node$exe" "$basedir/../jest/bin/jest.js" $args
}
$ret=$LASTEXITCODE
}
diff --git a/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/LICENSE b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/LICENSE
new file mode 100644
index 000000000..f31575ec7
--- /dev/null
+++ b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/README.md b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/README.md
new file mode 100644
index 000000000..25f53cc10
--- /dev/null
+++ b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/README.md
@@ -0,0 +1,19 @@
+# @babel/plugin-proposal-private-property-in-object
+
+> This plugin transforms checks for a private property in an object
+
+See our website [@babel/plugin-proposal-private-property-in-object](https://babeljs.io/docs/en/babel-plugin-proposal-private-property-in-object) for more information.
+
+## Install
+
+Using npm:
+
+```sh
+npm install --save-dev @babel/plugin-proposal-private-property-in-object
+```
+
+or using yarn:
+
+```sh
+yarn add @babel/plugin-proposal-private-property-in-object --dev
+```
diff --git a/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/lib/index.js b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/lib/index.js
new file mode 100644
index 000000000..07d4080dd
--- /dev/null
+++ b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/lib/index.js
@@ -0,0 +1,128 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+var _helperPluginUtils = require("@babel/helper-plugin-utils");
+var _pluginSyntaxPrivatePropertyInObject = require("@babel/plugin-syntax-private-property-in-object");
+var _helperCreateClassFeaturesPlugin = require("@babel/helper-create-class-features-plugin");
+var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure");
+var _default = (0, _helperPluginUtils.declare)((api, opt) => {
+ api.assertVersion(7);
+ const {
+ types: t,
+ template
+ } = api;
+ const {
+ loose
+ } = opt;
+ const classWeakSets = new WeakMap();
+ const fieldsWeakSets = new WeakMap();
+ function unshadow(name, targetScope, scope) {
+ while (scope !== targetScope) {
+ if (scope.hasOwnBinding(name)) scope.rename(name);
+ scope = scope.parent;
+ }
+ }
+ function injectToFieldInit(fieldPath, expr, before = false) {
+ if (fieldPath.node.value) {
+ const value = fieldPath.get("value");
+ if (before) {
+ value.insertBefore(expr);
+ } else {
+ value.insertAfter(expr);
+ }
+ } else {
+ fieldPath.set("value", t.unaryExpression("void", expr));
+ }
+ }
+ function injectInitialization(classPath, init) {
+ let firstFieldPath;
+ let constructorPath;
+ for (const el of classPath.get("body.body")) {
+ if ((el.isClassProperty() || el.isClassPrivateProperty()) && !el.node.static) {
+ firstFieldPath = el;
+ break;
+ }
+ if (!constructorPath && el.isClassMethod({
+ kind: "constructor"
+ })) {
+ constructorPath = el;
+ }
+ }
+ if (firstFieldPath) {
+ injectToFieldInit(firstFieldPath, init, true);
+ } else {
+ (0, _helperCreateClassFeaturesPlugin.injectInitialization)(classPath, constructorPath, [t.expressionStatement(init)]);
+ }
+ }
+ function getWeakSetId(weakSets, outerClass, reference, name = "", inject) {
+ let id = weakSets.get(reference.node);
+ if (!id) {
+ id = outerClass.scope.generateUidIdentifier(`${name || ""} brandCheck`);
+ weakSets.set(reference.node, id);
+ inject(reference, template.expression.ast`${t.cloneNode(id)}.add(this)`);
+ const newExpr = t.newExpression(t.identifier("WeakSet"), []);
+ (0, _helperAnnotateAsPure.default)(newExpr);
+ outerClass.insertBefore(template.ast`var ${id} = ${newExpr}`);
+ }
+ return t.cloneNode(id);
+ }
+ return {
+ name: "proposal-private-property-in-object",
+ inherits: _pluginSyntaxPrivatePropertyInObject.default,
+ pre() {
+ (0, _helperCreateClassFeaturesPlugin.enableFeature)(this.file, _helperCreateClassFeaturesPlugin.FEATURES.privateIn, loose);
+ },
+ visitor: {
+ BinaryExpression(path, state) {
+ const {
+ node
+ } = path;
+ const {
+ file
+ } = state;
+ if (node.operator !== "in") return;
+ if (!t.isPrivateName(node.left)) return;
+ const {
+ name
+ } = node.left.id;
+ let privateElement;
+ const outerClass = path.findParent(path => {
+ if (!path.isClass()) return false;
+ privateElement = path.get("body.body").find(({
+ node
+ }) => t.isPrivate(node) && node.key.id.name === name);
+ return !!privateElement;
+ });
+ if (outerClass.parentPath.scope.path.isPattern()) {
+ outerClass.replaceWith(template.ast`(() => ${outerClass.node})()`);
+ return;
+ }
+ if (privateElement.node.type === "ClassPrivateMethod") {
+ if (privateElement.node.static) {
+ if (outerClass.node.id) {
+ unshadow(outerClass.node.id.name, outerClass.scope, path.scope);
+ } else {
+ outerClass.set("id", path.scope.generateUidIdentifier("class"));
+ }
+ path.replaceWith(template.expression.ast`
+ ${t.cloneNode(outerClass.node.id)} === ${(0, _helperCreateClassFeaturesPlugin.buildCheckInRHS)(node.right, file)}
+ `);
+ } else {
+ var _outerClass$node$id;
+ const id = getWeakSetId(classWeakSets, outerClass, outerClass, (_outerClass$node$id = outerClass.node.id) == null ? void 0 : _outerClass$node$id.name, injectInitialization);
+ path.replaceWith(template.expression.ast`${id}.has(${(0, _helperCreateClassFeaturesPlugin.buildCheckInRHS)(node.right, file)})`);
+ }
+ } else {
+ const id = getWeakSetId(fieldsWeakSets, outerClass, privateElement, privateElement.node.key.id.name, injectToFieldInit);
+ path.replaceWith(template.expression.ast`${id}.has(${(0, _helperCreateClassFeaturesPlugin.buildCheckInRHS)(node.right, file)})`);
+ }
+ }
+ }
+ };
+});
+exports.default = _default;
+
+//# sourceMappingURL=index.js.map
diff --git a/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/lib/index.js.map b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/lib/index.js.map
new file mode 100644
index 000000000..6350829b5
--- /dev/null
+++ b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/lib/index.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["declare","api","opt","assertVersion","types","t","template","loose","classWeakSets","WeakMap","fieldsWeakSets","unshadow","name","targetScope","scope","hasOwnBinding","rename","parent","injectToFieldInit","fieldPath","expr","before","node","value","get","insertBefore","insertAfter","set","unaryExpression","injectInitialization","classPath","init","firstFieldPath","constructorPath","el","isClassProperty","isClassPrivateProperty","static","isClassMethod","kind","injectConstructorInit","expressionStatement","getWeakSetId","weakSets","outerClass","reference","inject","id","generateUidIdentifier","expression","ast","cloneNode","newExpr","newExpression","identifier","annotateAsPure","inherits","syntaxPlugin","default","pre","enableFeature","file","FEATURES","privateIn","visitor","BinaryExpression","path","state","operator","isPrivateName","left","privateElement","findParent","isClass","find","isPrivate","key","parentPath","isPattern","replaceWith","type","buildCheckInRHS","right"],"sources":["../src/index.ts"],"sourcesContent":["import { declare } from \"@babel/helper-plugin-utils\";\nimport syntaxPlugin from \"@babel/plugin-syntax-private-property-in-object\";\nimport {\n enableFeature,\n FEATURES,\n injectInitialization as injectConstructorInit,\n buildCheckInRHS,\n} from \"@babel/helper-create-class-features-plugin\";\nimport annotateAsPure from \"@babel/helper-annotate-as-pure\";\nimport type * as t from \"@babel/types\";\nimport type { NodePath, Scope } from \"@babel/traverse\";\n\nexport interface Options {\n loose?: boolean;\n}\nexport default declare((api, opt: Options) => {\n api.assertVersion(7);\n const { types: t, template } = api;\n const { loose } = opt;\n\n // NOTE: When using the class fields or private methods plugins,\n // they will also take care of '#priv in obj' checks when visiting\n // the ClassExpression or ClassDeclaration nodes.\n // The visitor of this plugin is only effective when not compiling\n // private fields and methods.\n\n const classWeakSets: WeakMap = new WeakMap();\n const fieldsWeakSets: WeakMap<\n t.ClassPrivateProperty | t.ClassPrivateMethod,\n t.Identifier\n > = new WeakMap();\n\n function unshadow(name: string, targetScope: Scope, scope: Scope) {\n while (scope !== targetScope) {\n if (scope.hasOwnBinding(name)) scope.rename(name);\n scope = scope.parent;\n }\n }\n\n function injectToFieldInit(\n fieldPath: NodePath,\n expr: t.Expression,\n before = false,\n ) {\n if (fieldPath.node.value) {\n const value = fieldPath.get(\"value\");\n if (before) {\n value.insertBefore(expr);\n } else {\n value.insertAfter(expr);\n }\n } else {\n fieldPath.set(\"value\", t.unaryExpression(\"void\", expr));\n }\n }\n\n function injectInitialization(\n classPath: NodePath,\n init: t.Expression,\n ) {\n let firstFieldPath;\n let constructorPath;\n\n for (const el of classPath.get(\"body.body\")) {\n if (\n (el.isClassProperty() || el.isClassPrivateProperty()) &&\n !el.node.static\n ) {\n firstFieldPath = el;\n break;\n }\n if (!constructorPath && el.isClassMethod({ kind: \"constructor\" })) {\n constructorPath = el;\n }\n }\n\n if (firstFieldPath) {\n injectToFieldInit(firstFieldPath, init, true);\n } else {\n injectConstructorInit(classPath, constructorPath, [\n t.expressionStatement(init),\n ]);\n }\n }\n\n function getWeakSetId[(\n weakSets: WeakMap][,\n outerClass: NodePath,\n reference: NodePath][,\n name = \"\",\n inject: (\n reference: NodePath][,\n expression: t.Expression,\n before?: boolean,\n ) => void,\n ) {\n let id = weakSets.get(reference.node);\n\n if (!id) {\n id = outerClass.scope.generateUidIdentifier(`${name || \"\"} brandCheck`);\n weakSets.set(reference.node, id);\n\n inject(reference, template.expression.ast`${t.cloneNode(id)}.add(this)`);\n\n const newExpr = t.newExpression(t.identifier(\"WeakSet\"), []);\n annotateAsPure(newExpr);\n\n outerClass.insertBefore(template.ast`var ${id} = ${newExpr}`);\n }\n\n return t.cloneNode(id);\n }\n\n return {\n name: \"proposal-private-property-in-object\",\n inherits: syntaxPlugin.default,\n pre() {\n // Enable this in @babel/helper-create-class-features-plugin, so that it\n // can be handled by the private fields and methods transform.\n enableFeature(this.file, FEATURES.privateIn, loose);\n },\n visitor: {\n BinaryExpression(path, state) {\n const { node } = path;\n const { file } = state;\n if (node.operator !== \"in\") return;\n if (!t.isPrivateName(node.left)) return;\n\n const { name } = node.left.id;\n\n let privateElement: NodePath<\n t.ClassPrivateMethod | t.ClassPrivateProperty\n >;\n const outerClass = path.findParent(path => {\n if (!path.isClass()) return false;\n\n privateElement = path.get(\"body.body\").find(\n ({ node }) =>\n // fixme: Support class accessor property\n t.isPrivate(node) && node.key.id.name === name,\n ) as NodePath;\n\n return !!privateElement;\n }) as NodePath;\n\n if (outerClass.parentPath.scope.path.isPattern()) {\n outerClass.replaceWith(\n template.ast`(() => ${outerClass.node})()` as t.Statement,\n );\n // The injected class will be queued and eventually transformed when visited\n return;\n }\n\n if (privateElement.node.type === \"ClassPrivateMethod\") {\n if (privateElement.node.static) {\n if (outerClass.node.id) {\n unshadow(outerClass.node.id.name, outerClass.scope, path.scope);\n } else {\n outerClass.set(\"id\", path.scope.generateUidIdentifier(\"class\"));\n }\n path.replaceWith(\n template.expression.ast`\n ${t.cloneNode(outerClass.node.id)} === ${buildCheckInRHS(\n node.right,\n file,\n )}\n `,\n );\n } else {\n const id = getWeakSetId(\n classWeakSets,\n outerClass,\n outerClass,\n outerClass.node.id?.name,\n injectInitialization,\n );\n\n path.replaceWith(\n template.expression.ast`${id}.has(${buildCheckInRHS(\n node.right,\n file,\n )})`,\n );\n }\n } else {\n // Private fields might not all be initialized: see the 'halfConstructed'\n // example at https://v8.dev/features/private-brand-checks.\n\n const id = getWeakSetId(\n fieldsWeakSets,\n outerClass,\n privateElement as NodePath,\n privateElement.node.key.id.name,\n injectToFieldInit,\n );\n\n path.replaceWith(\n template.expression.ast`${id}.has(${buildCheckInRHS(\n node.right,\n file,\n )})`,\n );\n }\n },\n },\n };\n});\n"],"mappings":";;;;;;AAAA;AACA;AACA;AAMA;AAA4D,eAO7C,IAAAA,0BAAO,EAAC,CAACC,GAAG,EAAEC,GAAY,KAAK;EAC5CD,GAAG,CAACE,aAAa,CAAC,CAAC,CAAC;EACpB,MAAM;IAAEC,KAAK,EAAEC,CAAC;IAAEC;EAAS,CAAC,GAAGL,GAAG;EAClC,MAAM;IAAEM;EAAM,CAAC,GAAGL,GAAG;EAQrB,MAAMM,aAA6C,GAAG,IAAIC,OAAO,EAAE;EACnE,MAAMC,cAGL,GAAG,IAAID,OAAO,EAAE;EAEjB,SAASE,QAAQ,CAACC,IAAY,EAAEC,WAAkB,EAAEC,KAAY,EAAE;IAChE,OAAOA,KAAK,KAAKD,WAAW,EAAE;MAC5B,IAAIC,KAAK,CAACC,aAAa,CAACH,IAAI,CAAC,EAAEE,KAAK,CAACE,MAAM,CAACJ,IAAI,CAAC;MACjDE,KAAK,GAAGA,KAAK,CAACG,MAAM;IACtB;EACF;EAEA,SAASC,iBAAiB,CACxBC,SAA6D,EAC7DC,IAAkB,EAClBC,MAAM,GAAG,KAAK,EACd;IACA,IAAIF,SAAS,CAACG,IAAI,CAACC,KAAK,EAAE;MACxB,MAAMA,KAAK,GAAGJ,SAAS,CAACK,GAAG,CAAC,OAAO,CAAC;MACpC,IAAIH,MAAM,EAAE;QACVE,KAAK,CAACE,YAAY,CAACL,IAAI,CAAC;MAC1B,CAAC,MAAM;QACLG,KAAK,CAACG,WAAW,CAACN,IAAI,CAAC;MACzB;IACF,CAAC,MAAM;MACLD,SAAS,CAACQ,GAAG,CAAC,OAAO,EAAEtB,CAAC,CAACuB,eAAe,CAAC,MAAM,EAAER,IAAI,CAAC,CAAC;IACzD;EACF;EAEA,SAASS,oBAAoB,CAC3BC,SAA4B,EAC5BC,IAAkB,EAClB;IACA,IAAIC,cAAc;IAClB,IAAIC,eAAe;IAEnB,KAAK,MAAMC,EAAE,IAAIJ,SAAS,CAACN,GAAG,CAAC,WAAW,CAAC,EAAE;MAC3C,IACE,CAACU,EAAE,CAACC,eAAe,EAAE,IAAID,EAAE,CAACE,sBAAsB,EAAE,KACpD,CAACF,EAAE,CAACZ,IAAI,CAACe,MAAM,EACf;QACAL,cAAc,GAAGE,EAAE;QACnB;MACF;MACA,IAAI,CAACD,eAAe,IAAIC,EAAE,CAACI,aAAa,CAAC;QAAEC,IAAI,EAAE;MAAc,CAAC,CAAC,EAAE;QACjEN,eAAe,GAAGC,EAAE;MACtB;IACF;IAEA,IAAIF,cAAc,EAAE;MAClBd,iBAAiB,CAACc,cAAc,EAAED,IAAI,EAAE,IAAI,CAAC;IAC/C,CAAC,MAAM;MACL,IAAAS,qDAAqB,EAACV,SAAS,EAAEG,eAAe,EAAE,CAChD5B,CAAC,CAACoC,mBAAmB,CAACV,IAAI,CAAC,CAC5B,CAAC;IACJ;EACF;EAEA,SAASW,YAAY,CACnBC,QAAoC,EACpCC,UAA6B,EAC7BC,SAAwB,EACxBjC,IAAI,GAAG,EAAE,EACTkC,MAIS,EACT;IACA,IAAIC,EAAE,GAAGJ,QAAQ,CAACnB,GAAG,CAACqB,SAAS,CAACvB,IAAI,CAAC;IAErC,IAAI,CAACyB,EAAE,EAAE;MACPA,EAAE,GAAGH,UAAU,CAAC9B,KAAK,CAACkC,qBAAqB,CAAE,GAAEpC,IAAI,IAAI,EAAG,aAAY,CAAC;MACvE+B,QAAQ,CAAChB,GAAG,CAACkB,SAAS,CAACvB,IAAI,EAAEyB,EAAE,CAAC;MAEhCD,MAAM,CAACD,SAAS,EAAEvC,QAAQ,CAAC2C,UAAU,CAACC,GAAI,GAAE7C,CAAC,CAAC8C,SAAS,CAACJ,EAAE,CAAE,YAAW,CAAC;MAExE,MAAMK,OAAO,GAAG/C,CAAC,CAACgD,aAAa,CAAChD,CAAC,CAACiD,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;MAC5D,IAAAC,6BAAc,EAACH,OAAO,CAAC;MAEvBR,UAAU,CAACnB,YAAY,CAACnB,QAAQ,CAAC4C,GAAI,OAAMH,EAAG,MAAKK,OAAQ,EAAC,CAAC;IAC/D;IAEA,OAAO/C,CAAC,CAAC8C,SAAS,CAACJ,EAAE,CAAC;EACxB;EAEA,OAAO;IACLnC,IAAI,EAAE,qCAAqC;IAC3C4C,QAAQ,EAAEC,oCAAY,CAACC,OAAO;IAC9BC,GAAG,GAAG;MAGJ,IAAAC,8CAAa,EAAC,IAAI,CAACC,IAAI,EAAEC,yCAAQ,CAACC,SAAS,EAAExD,KAAK,CAAC;IACrD,CAAC;IACDyD,OAAO,EAAE;MACPC,gBAAgB,CAACC,IAAI,EAAEC,KAAK,EAAE;QAC5B,MAAM;UAAE7C;QAAK,CAAC,GAAG4C,IAAI;QACrB,MAAM;UAAEL;QAAK,CAAC,GAAGM,KAAK;QACtB,IAAI7C,IAAI,CAAC8C,QAAQ,KAAK,IAAI,EAAE;QAC5B,IAAI,CAAC/D,CAAC,CAACgE,aAAa,CAAC/C,IAAI,CAACgD,IAAI,CAAC,EAAE;QAEjC,MAAM;UAAE1D;QAAK,CAAC,GAAGU,IAAI,CAACgD,IAAI,CAACvB,EAAE;QAE7B,IAAIwB,cAEH;QACD,MAAM3B,UAAU,GAAGsB,IAAI,CAACM,UAAU,CAACN,IAAI,IAAI;UACzC,IAAI,CAACA,IAAI,CAACO,OAAO,EAAE,EAAE,OAAO,KAAK;UAEjCF,cAAc,GAAGL,IAAI,CAAC1C,GAAG,CAAC,WAAW,CAAC,CAACkD,IAAI,CACzC,CAAC;YAAEpD;UAAK,CAAC,KAEPjB,CAAC,CAACsE,SAAS,CAACrD,IAAI,CAAC,IAAIA,IAAI,CAACsD,GAAG,CAAC7B,EAAE,CAACnC,IAAI,KAAKA,IAAI,CACU;UAE5D,OAAO,CAAC,CAAC2D,cAAc;QACzB,CAAC,CAAsB;QAEvB,IAAI3B,UAAU,CAACiC,UAAU,CAAC/D,KAAK,CAACoD,IAAI,CAACY,SAAS,EAAE,EAAE;UAChDlC,UAAU,CAACmC,WAAW,CACpBzE,QAAQ,CAAC4C,GAAI,UAASN,UAAU,CAACtB,IAAK,KAAI,CAC3C;UAED;QACF;QAEA,IAAIiD,cAAc,CAACjD,IAAI,CAAC0D,IAAI,KAAK,oBAAoB,EAAE;UACrD,IAAIT,cAAc,CAACjD,IAAI,CAACe,MAAM,EAAE;YAC9B,IAAIO,UAAU,CAACtB,IAAI,CAACyB,EAAE,EAAE;cACtBpC,QAAQ,CAACiC,UAAU,CAACtB,IAAI,CAACyB,EAAE,CAACnC,IAAI,EAAEgC,UAAU,CAAC9B,KAAK,EAAEoD,IAAI,CAACpD,KAAK,CAAC;YACjE,CAAC,MAAM;cACL8B,UAAU,CAACjB,GAAG,CAAC,IAAI,EAAEuC,IAAI,CAACpD,KAAK,CAACkC,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACjE;YACAkB,IAAI,CAACa,WAAW,CACdzE,QAAQ,CAAC2C,UAAU,CAACC,GAAI;AACtC,kBAAkB7C,CAAC,CAAC8C,SAAS,CAACP,UAAU,CAACtB,IAAI,CAACyB,EAAE,CAAE,QAAO,IAAAkC,gDAAe,EACxD3D,IAAI,CAAC4D,KAAK,EACVrB,IAAI,CACJ;AAChB,eAAe,CACF;UACH,CAAC,MAAM;YAAA;YACL,MAAMd,EAAE,GAAGL,YAAY,CACrBlC,aAAa,EACboC,UAAU,EACVA,UAAU,yBACVA,UAAU,CAACtB,IAAI,CAACyB,EAAE,qBAAlB,oBAAoBnC,IAAI,EACxBiB,oBAAoB,CACrB;YAEDqC,IAAI,CAACa,WAAW,CACdzE,QAAQ,CAAC2C,UAAU,CAACC,GAAI,GAAEH,EAAG,QAAO,IAAAkC,gDAAe,EACjD3D,IAAI,CAAC4D,KAAK,EACVrB,IAAI,CACJ,GAAE,CACL;UACH;QACF,CAAC,MAAM;UAIL,MAAMd,EAAE,GAAGL,YAAY,CACrBhC,cAAc,EACdkC,UAAU,EACV2B,cAAc,EACdA,cAAc,CAACjD,IAAI,CAACsD,GAAG,CAAC7B,EAAE,CAACnC,IAAI,EAC/BM,iBAAiB,CAClB;UAEDgD,IAAI,CAACa,WAAW,CACdzE,QAAQ,CAAC2C,UAAU,CAACC,GAAI,GAAEH,EAAG,QAAO,IAAAkC,gDAAe,EACjD3D,IAAI,CAAC4D,KAAK,EACVrB,IAAI,CACJ,GAAE,CACL;QACH;MACF;IACF;EACF,CAAC;AACH,CAAC,CAAC;AAAA"}
\ No newline at end of file
diff --git a/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/package.json b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/package.json
new file mode 100644
index 000000000..4099ad6aa
--- /dev/null
+++ b/client-side/package/node_modules/@babel/plugin-proposal-private-property-in-object/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "@babel/plugin-proposal-private-property-in-object",
+ "version": "7.21.11",
+ "description": "This plugin transforms checks for a private property in an object",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-plugin-proposal-private-property-in-object"
+ },
+ "homepage": "https://babel.dev/docs/en/next/babel-plugin-proposal-private-property-in-object",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "main": "./lib/index.js",
+ "keywords": [
+ "babel-plugin"
+ ],
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-create-class-features-plugin": "^7.21.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.21.0",
+ "@babel/helper-plugin-test-runner": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "author": "The Babel Team (https://babel.dev/team)",
+ "type": "commonjs"
+}
diff --git a/client-side/package/node_modules/@eslint/js/LICENSE b/client-side/package/node_modules/@eslint/js/LICENSE
new file mode 100644
index 000000000..b607bb36e
--- /dev/null
+++ b/client-side/package/node_modules/@eslint/js/LICENSE
@@ -0,0 +1,19 @@
+Copyright OpenJS Foundation and other contributors,
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/client-side/package/node_modules/@eslint/js/README.md b/client-side/package/node_modules/@eslint/js/README.md
new file mode 100644
index 000000000..a8121c3a7
--- /dev/null
+++ b/client-side/package/node_modules/@eslint/js/README.md
@@ -0,0 +1,57 @@
+[](https://www.npmjs.com/package/@eslint/js)
+
+# ESLint JavaScript Plugin
+
+[Website](https://eslint.org) | [Configure ESLint](https://eslint.org/docs/latest/use/configure) | [Rules](https://eslint.org/docs/rules/) | [Contributing](https://eslint.org/docs/latest/contribute) | [Twitter](https://twitter.com/geteslint) | [Chatroom](https://eslint.org/chat)
+
+The beginnings of separating out JavaScript-specific functionality from ESLint.
+
+Right now, this plugin contains two configurations:
+
+* `recommended` - enables the rules recommended by the ESLint team (the replacement for `"eslint:recommended"`)
+* `all` - enables all ESLint rules (the replacement for `"eslint:all"`)
+
+## Installation
+
+```shell
+npm install @eslint/js -D
+```
+
+## Usage
+
+Use in your `eslint.config.js` file anytime you want to extend one of the configs:
+
+```js
+import js from "@eslint/js";
+
+export default [
+
+ // apply recommended rules to JS files
+ {
+ files: ["**/*.js"],
+ rules: js.configs.recommended.rules
+ },
+
+ // apply recommended rules to JS files with an override
+ {
+ files: ["**/*.js"],
+ rules: {
+ ...js.configs.recommended.rules,
+ "no-unused-vars": "warn"
+ }
+ },
+
+ // apply all rules to JS files
+ {
+ files: ["**/*.js"],
+ rules: {
+ ...js.configs.all.rules,
+ "no-unused-vars": "warn"
+ }
+ }
+]
+```
+
+## License
+
+MIT
diff --git a/client-side/package/node_modules/@eslint/js/package.json b/client-side/package/node_modules/@eslint/js/package.json
new file mode 100644
index 000000000..9889d7a96
--- /dev/null
+++ b/client-side/package/node_modules/@eslint/js/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "@eslint/js",
+ "version": "9.10.0",
+ "description": "ESLint JavaScript language implementation",
+ "main": "./src/index.js",
+ "scripts": {},
+ "files": [
+ "LICENSE",
+ "README.md",
+ "src"
+ ],
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/eslint/eslint.git",
+ "directory": "packages/js"
+ },
+ "homepage": "https://eslint.org",
+ "bugs": "https://github.com/eslint/eslint/issues/",
+ "keywords": [
+ "javascript",
+ "eslint-plugin",
+ "eslint"
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+}
diff --git a/client-side/package/node_modules/@eslint/js/src/configs/eslint-all.js b/client-side/package/node_modules/@eslint/js/src/configs/eslint-all.js
new file mode 100644
index 000000000..e7f4e0e3a
--- /dev/null
+++ b/client-side/package/node_modules/@eslint/js/src/configs/eslint-all.js
@@ -0,0 +1,217 @@
+/*
+ * WARNING: This file is autogenerated using the tools/update-eslint-all.js
+ * script. Do not edit manually.
+ */
+"use strict";
+
+/* eslint quote-props: off -- autogenerated so don't lint */
+
+/*
+ * IMPORTANT!
+ *
+ * We cannot add a "name" property to this object because it's still used in eslintrc
+ * which doesn't support the "name" property. If we add a "name" property, it will
+ * cause an error.
+ */
+
+module.exports = Object.freeze({
+ "rules": {
+ "accessor-pairs": "error",
+ "array-callback-return": "error",
+ "arrow-body-style": "error",
+ "block-scoped-var": "error",
+ "camelcase": "error",
+ "capitalized-comments": "error",
+ "class-methods-use-this": "error",
+ "complexity": "error",
+ "consistent-return": "error",
+ "consistent-this": "error",
+ "constructor-super": "error",
+ "curly": "error",
+ "default-case": "error",
+ "default-case-last": "error",
+ "default-param-last": "error",
+ "dot-notation": "error",
+ "eqeqeq": "error",
+ "for-direction": "error",
+ "func-name-matching": "error",
+ "func-names": "error",
+ "func-style": "error",
+ "getter-return": "error",
+ "grouped-accessor-pairs": "error",
+ "guard-for-in": "error",
+ "id-denylist": "error",
+ "id-length": "error",
+ "id-match": "error",
+ "init-declarations": "error",
+ "logical-assignment-operators": "error",
+ "max-classes-per-file": "error",
+ "max-depth": "error",
+ "max-lines": "error",
+ "max-lines-per-function": "error",
+ "max-nested-callbacks": "error",
+ "max-params": "error",
+ "max-statements": "error",
+ "new-cap": "error",
+ "no-alert": "error",
+ "no-array-constructor": "error",
+ "no-async-promise-executor": "error",
+ "no-await-in-loop": "error",
+ "no-bitwise": "error",
+ "no-caller": "error",
+ "no-case-declarations": "error",
+ "no-class-assign": "error",
+ "no-compare-neg-zero": "error",
+ "no-cond-assign": "error",
+ "no-console": "error",
+ "no-const-assign": "error",
+ "no-constant-binary-expression": "error",
+ "no-constant-condition": "error",
+ "no-constructor-return": "error",
+ "no-continue": "error",
+ "no-control-regex": "error",
+ "no-debugger": "error",
+ "no-delete-var": "error",
+ "no-div-regex": "error",
+ "no-dupe-args": "error",
+ "no-dupe-class-members": "error",
+ "no-dupe-else-if": "error",
+ "no-dupe-keys": "error",
+ "no-duplicate-case": "error",
+ "no-duplicate-imports": "error",
+ "no-else-return": "error",
+ "no-empty": "error",
+ "no-empty-character-class": "error",
+ "no-empty-function": "error",
+ "no-empty-pattern": "error",
+ "no-empty-static-block": "error",
+ "no-eq-null": "error",
+ "no-eval": "error",
+ "no-ex-assign": "error",
+ "no-extend-native": "error",
+ "no-extra-bind": "error",
+ "no-extra-boolean-cast": "error",
+ "no-extra-label": "error",
+ "no-fallthrough": "error",
+ "no-func-assign": "error",
+ "no-global-assign": "error",
+ "no-implicit-coercion": "error",
+ "no-implicit-globals": "error",
+ "no-implied-eval": "error",
+ "no-import-assign": "error",
+ "no-inline-comments": "error",
+ "no-inner-declarations": "error",
+ "no-invalid-regexp": "error",
+ "no-invalid-this": "error",
+ "no-irregular-whitespace": "error",
+ "no-iterator": "error",
+ "no-label-var": "error",
+ "no-labels": "error",
+ "no-lone-blocks": "error",
+ "no-lonely-if": "error",
+ "no-loop-func": "error",
+ "no-loss-of-precision": "error",
+ "no-magic-numbers": "error",
+ "no-misleading-character-class": "error",
+ "no-multi-assign": "error",
+ "no-multi-str": "error",
+ "no-negated-condition": "error",
+ "no-nested-ternary": "error",
+ "no-new": "error",
+ "no-new-func": "error",
+ "no-new-native-nonconstructor": "error",
+ "no-new-wrappers": "error",
+ "no-nonoctal-decimal-escape": "error",
+ "no-obj-calls": "error",
+ "no-object-constructor": "error",
+ "no-octal": "error",
+ "no-octal-escape": "error",
+ "no-param-reassign": "error",
+ "no-plusplus": "error",
+ "no-promise-executor-return": "error",
+ "no-proto": "error",
+ "no-prototype-builtins": "error",
+ "no-redeclare": "error",
+ "no-regex-spaces": "error",
+ "no-restricted-exports": "error",
+ "no-restricted-globals": "error",
+ "no-restricted-imports": "error",
+ "no-restricted-properties": "error",
+ "no-restricted-syntax": "error",
+ "no-return-assign": "error",
+ "no-script-url": "error",
+ "no-self-assign": "error",
+ "no-self-compare": "error",
+ "no-sequences": "error",
+ "no-setter-return": "error",
+ "no-shadow": "error",
+ "no-shadow-restricted-names": "error",
+ "no-sparse-arrays": "error",
+ "no-template-curly-in-string": "error",
+ "no-ternary": "error",
+ "no-this-before-super": "error",
+ "no-throw-literal": "error",
+ "no-undef": "error",
+ "no-undef-init": "error",
+ "no-undefined": "error",
+ "no-underscore-dangle": "error",
+ "no-unexpected-multiline": "error",
+ "no-unmodified-loop-condition": "error",
+ "no-unneeded-ternary": "error",
+ "no-unreachable": "error",
+ "no-unreachable-loop": "error",
+ "no-unsafe-finally": "error",
+ "no-unsafe-negation": "error",
+ "no-unsafe-optional-chaining": "error",
+ "no-unused-expressions": "error",
+ "no-unused-labels": "error",
+ "no-unused-private-class-members": "error",
+ "no-unused-vars": "error",
+ "no-use-before-define": "error",
+ "no-useless-assignment": "error",
+ "no-useless-backreference": "error",
+ "no-useless-call": "error",
+ "no-useless-catch": "error",
+ "no-useless-computed-key": "error",
+ "no-useless-concat": "error",
+ "no-useless-constructor": "error",
+ "no-useless-escape": "error",
+ "no-useless-rename": "error",
+ "no-useless-return": "error",
+ "no-var": "error",
+ "no-void": "error",
+ "no-warning-comments": "error",
+ "no-with": "error",
+ "object-shorthand": "error",
+ "one-var": "error",
+ "operator-assignment": "error",
+ "prefer-arrow-callback": "error",
+ "prefer-const": "error",
+ "prefer-destructuring": "error",
+ "prefer-exponentiation-operator": "error",
+ "prefer-named-capture-group": "error",
+ "prefer-numeric-literals": "error",
+ "prefer-object-has-own": "error",
+ "prefer-object-spread": "error",
+ "prefer-promise-reject-errors": "error",
+ "prefer-regex-literals": "error",
+ "prefer-rest-params": "error",
+ "prefer-spread": "error",
+ "prefer-template": "error",
+ "radix": "error",
+ "require-atomic-updates": "error",
+ "require-await": "error",
+ "require-unicode-regexp": "error",
+ "require-yield": "error",
+ "sort-imports": "error",
+ "sort-keys": "error",
+ "sort-vars": "error",
+ "strict": "error",
+ "symbol-description": "error",
+ "unicode-bom": "error",
+ "use-isnan": "error",
+ "valid-typeof": "error",
+ "vars-on-top": "error",
+ "yoda": "error"
+ }
+});
diff --git a/client-side/package/node_modules/@eslint/js/src/configs/eslint-recommended.js b/client-side/package/node_modules/@eslint/js/src/configs/eslint-recommended.js
new file mode 100644
index 000000000..3559267ef
--- /dev/null
+++ b/client-side/package/node_modules/@eslint/js/src/configs/eslint-recommended.js
@@ -0,0 +1,83 @@
+/**
+ * @fileoverview Configuration applied when a user configuration extends from
+ * eslint:recommended.
+ * @author Nicholas C. Zakas
+ */
+
+"use strict";
+
+/* eslint sort-keys: ["error", "asc"] -- Long, so make more readable */
+
+/*
+ * IMPORTANT!
+ *
+ * We cannot add a "name" property to this object because it's still used in eslintrc
+ * which doesn't support the "name" property. If we add a "name" property, it will
+ * cause an error.
+ */
+
+module.exports = Object.freeze({
+ rules: Object.freeze({
+ "constructor-super": "error",
+ "for-direction": "error",
+ "getter-return": "error",
+ "no-async-promise-executor": "error",
+ "no-case-declarations": "error",
+ "no-class-assign": "error",
+ "no-compare-neg-zero": "error",
+ "no-cond-assign": "error",
+ "no-const-assign": "error",
+ "no-constant-binary-expression": "error",
+ "no-constant-condition": "error",
+ "no-control-regex": "error",
+ "no-debugger": "error",
+ "no-delete-var": "error",
+ "no-dupe-args": "error",
+ "no-dupe-class-members": "error",
+ "no-dupe-else-if": "error",
+ "no-dupe-keys": "error",
+ "no-duplicate-case": "error",
+ "no-empty": "error",
+ "no-empty-character-class": "error",
+ "no-empty-pattern": "error",
+ "no-empty-static-block": "error",
+ "no-ex-assign": "error",
+ "no-extra-boolean-cast": "error",
+ "no-fallthrough": "error",
+ "no-func-assign": "error",
+ "no-global-assign": "error",
+ "no-import-assign": "error",
+ "no-invalid-regexp": "error",
+ "no-irregular-whitespace": "error",
+ "no-loss-of-precision": "error",
+ "no-misleading-character-class": "error",
+ "no-new-native-nonconstructor": "error",
+ "no-nonoctal-decimal-escape": "error",
+ "no-obj-calls": "error",
+ "no-octal": "error",
+ "no-prototype-builtins": "error",
+ "no-redeclare": "error",
+ "no-regex-spaces": "error",
+ "no-self-assign": "error",
+ "no-setter-return": "error",
+ "no-shadow-restricted-names": "error",
+ "no-sparse-arrays": "error",
+ "no-this-before-super": "error",
+ "no-undef": "error",
+ "no-unexpected-multiline": "error",
+ "no-unreachable": "error",
+ "no-unsafe-finally": "error",
+ "no-unsafe-negation": "error",
+ "no-unsafe-optional-chaining": "error",
+ "no-unused-labels": "error",
+ "no-unused-private-class-members": "error",
+ "no-unused-vars": "error",
+ "no-useless-backreference": "error",
+ "no-useless-catch": "error",
+ "no-useless-escape": "error",
+ "no-with": "error",
+ "require-yield": "error",
+ "use-isnan": "error",
+ "valid-typeof": "error"
+ })
+});
diff --git a/client-side/package/node_modules/@eslint/js/src/index.js b/client-side/package/node_modules/@eslint/js/src/index.js
new file mode 100644
index 000000000..0d4be486a
--- /dev/null
+++ b/client-side/package/node_modules/@eslint/js/src/index.js
@@ -0,0 +1,17 @@
+/**
+ * @fileoverview Main package entrypoint.
+ * @author Nicholas C. Zakas
+ */
+
+"use strict";
+
+//------------------------------------------------------------------------------
+// Public Interface
+//------------------------------------------------------------------------------
+
+module.exports = {
+ configs: {
+ all: require("./configs/eslint-all"),
+ recommended: require("./configs/eslint-recommended")
+ }
+};
diff --git a/client-side/package/node_modules/@jest/console/LICENSE b/client-side/package/node_modules/@jest/console/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/console/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/console/build/BufferedConsole.js b/client-side/package/node_modules/@jest/console/build/BufferedConsole.js
new file mode 100644
index 000000000..a6f411816
--- /dev/null
+++ b/client-side/package/node_modules/@jest/console/build/BufferedConsole.js
@@ -0,0 +1,197 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _assert() {
+ const data = require('assert');
+ _assert = function () {
+ return data;
+ };
+ return data;
+}
+function _console() {
+ const data = require('console');
+ _console = function () {
+ return data;
+ };
+ return data;
+}
+function _util() {
+ const data = require('util');
+ _util = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class BufferedConsole extends _console().Console {
+ _buffer = [];
+ _counters = {};
+ _timers = {};
+ _groupDepth = 0;
+ Console = _console().Console;
+ constructor() {
+ super({
+ write: message => {
+ BufferedConsole.write(this._buffer, 'log', message, null);
+ return true;
+ }
+ });
+ }
+ static write(buffer, type, message, level) {
+ const stackLevel = level != null ? level : 2;
+ const rawStack = new (_jestUtil().ErrorWithStack)(
+ undefined,
+ BufferedConsole.write
+ ).stack;
+ (0, _jestUtil().invariant)(rawStack != null, 'always have a stack trace');
+ const origin = rawStack
+ .split('\n')
+ .slice(stackLevel)
+ .filter(Boolean)
+ .join('\n');
+ buffer.push({
+ message,
+ origin,
+ type
+ });
+ return buffer;
+ }
+ _log(type, message) {
+ BufferedConsole.write(
+ this._buffer,
+ type,
+ ' '.repeat(this._groupDepth) + message,
+ 3
+ );
+ }
+ assert(value, message) {
+ try {
+ (0, _assert().strict)(value, message);
+ } catch (error) {
+ if (!(error instanceof _assert().AssertionError)) {
+ throw error;
+ }
+ // https://github.com/jestjs/jest/pull/13422#issuecomment-1273396392
+ this._log('assert', error.toString().replace(/:\n\n.*\n/gs, ''));
+ }
+ }
+ count(label = 'default') {
+ if (!this._counters[label]) {
+ this._counters[label] = 0;
+ }
+ this._log(
+ 'count',
+ (0, _util().format)(`${label}: ${++this._counters[label]}`)
+ );
+ }
+ countReset(label = 'default') {
+ this._counters[label] = 0;
+ }
+ debug(firstArg, ...rest) {
+ this._log('debug', (0, _util().format)(firstArg, ...rest));
+ }
+ dir(firstArg, options = {}) {
+ const representation = (0, _util().inspect)(firstArg, options);
+ this._log('dir', (0, _util().formatWithOptions)(options, representation));
+ }
+ dirxml(firstArg, ...rest) {
+ this._log('dirxml', (0, _util().format)(firstArg, ...rest));
+ }
+ error(firstArg, ...rest) {
+ this._log('error', (0, _util().format)(firstArg, ...rest));
+ }
+ group(title, ...rest) {
+ this._groupDepth++;
+ if (title != null || rest.length > 0) {
+ this._log(
+ 'group',
+ _chalk().default.bold((0, _util().format)(title, ...rest))
+ );
+ }
+ }
+ groupCollapsed(title, ...rest) {
+ this._groupDepth++;
+ if (title != null || rest.length > 0) {
+ this._log(
+ 'groupCollapsed',
+ _chalk().default.bold((0, _util().format)(title, ...rest))
+ );
+ }
+ }
+ groupEnd() {
+ if (this._groupDepth > 0) {
+ this._groupDepth--;
+ }
+ }
+ info(firstArg, ...rest) {
+ this._log('info', (0, _util().format)(firstArg, ...rest));
+ }
+ log(firstArg, ...rest) {
+ this._log('log', (0, _util().format)(firstArg, ...rest));
+ }
+ time(label = 'default') {
+ if (this._timers[label] != null) {
+ return;
+ }
+ this._timers[label] = new Date();
+ }
+ timeEnd(label = 'default') {
+ const startTime = this._timers[label];
+ if (startTime != null) {
+ const endTime = new Date();
+ const time = endTime.getTime() - startTime.getTime();
+ this._log(
+ 'time',
+ (0, _util().format)(`${label}: ${(0, _jestUtil().formatTime)(time)}`)
+ );
+ delete this._timers[label];
+ }
+ }
+ timeLog(label = 'default', ...data) {
+ const startTime = this._timers[label];
+ if (startTime != null) {
+ const endTime = new Date();
+ const time = endTime.getTime() - startTime.getTime();
+ this._log(
+ 'time',
+ (0, _util().format)(
+ `${label}: ${(0, _jestUtil().formatTime)(time)}`,
+ ...data
+ )
+ );
+ }
+ }
+ warn(firstArg, ...rest) {
+ this._log('warn', (0, _util().format)(firstArg, ...rest));
+ }
+ getBuffer() {
+ return this._buffer.length ? this._buffer : undefined;
+ }
+}
+exports.default = BufferedConsole;
diff --git a/client-side/package/node_modules/@jest/console/build/CustomConsole.js b/client-side/package/node_modules/@jest/console/build/CustomConsole.js
new file mode 100644
index 000000000..61846d867
--- /dev/null
+++ b/client-side/package/node_modules/@jest/console/build/CustomConsole.js
@@ -0,0 +1,182 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _assert() {
+ const data = require('assert');
+ _assert = function () {
+ return data;
+ };
+ return data;
+}
+function _console() {
+ const data = require('console');
+ _console = function () {
+ return data;
+ };
+ return data;
+}
+function _util() {
+ const data = require('util');
+ _util = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class CustomConsole extends _console().Console {
+ _stdout;
+ _stderr;
+ _formatBuffer;
+ _counters = {};
+ _timers = {};
+ _groupDepth = 0;
+ Console = _console().Console;
+ constructor(stdout, stderr, formatBuffer = (_type, message) => message) {
+ super(stdout, stderr);
+ this._stdout = stdout;
+ this._stderr = stderr;
+ this._formatBuffer = formatBuffer;
+ }
+ _log(type, message) {
+ (0, _jestUtil().clearLine)(this._stdout);
+ super.log(
+ this._formatBuffer(type, ' '.repeat(this._groupDepth) + message)
+ );
+ }
+ _logError(type, message) {
+ (0, _jestUtil().clearLine)(this._stderr);
+ super.error(
+ this._formatBuffer(type, ' '.repeat(this._groupDepth) + message)
+ );
+ }
+ assert(value, message) {
+ try {
+ (0, _assert().strict)(value, message);
+ } catch (error) {
+ if (!(error instanceof _assert().AssertionError)) {
+ throw error;
+ }
+ // https://github.com/jestjs/jest/pull/13422#issuecomment-1273396392
+ this._logError('assert', error.toString().replace(/:\n\n.*\n/gs, ''));
+ }
+ }
+ count(label = 'default') {
+ if (!this._counters[label]) {
+ this._counters[label] = 0;
+ }
+ this._log(
+ 'count',
+ (0, _util().format)(`${label}: ${++this._counters[label]}`)
+ );
+ }
+ countReset(label = 'default') {
+ this._counters[label] = 0;
+ }
+ debug(firstArg, ...args) {
+ this._log('debug', (0, _util().format)(firstArg, ...args));
+ }
+ dir(firstArg, options = {}) {
+ const representation = (0, _util().inspect)(firstArg, options);
+ this._log('dir', (0, _util().formatWithOptions)(options, representation));
+ }
+ dirxml(firstArg, ...args) {
+ this._log('dirxml', (0, _util().format)(firstArg, ...args));
+ }
+ error(firstArg, ...args) {
+ this._logError('error', (0, _util().format)(firstArg, ...args));
+ }
+ group(title, ...args) {
+ this._groupDepth++;
+ if (title != null || args.length > 0) {
+ this._log(
+ 'group',
+ _chalk().default.bold((0, _util().format)(title, ...args))
+ );
+ }
+ }
+ groupCollapsed(title, ...args) {
+ this._groupDepth++;
+ if (title != null || args.length > 0) {
+ this._log(
+ 'groupCollapsed',
+ _chalk().default.bold((0, _util().format)(title, ...args))
+ );
+ }
+ }
+ groupEnd() {
+ if (this._groupDepth > 0) {
+ this._groupDepth--;
+ }
+ }
+ info(firstArg, ...args) {
+ this._log('info', (0, _util().format)(firstArg, ...args));
+ }
+ log(firstArg, ...args) {
+ this._log('log', (0, _util().format)(firstArg, ...args));
+ }
+ time(label = 'default') {
+ if (this._timers[label] != null) {
+ return;
+ }
+ this._timers[label] = new Date();
+ }
+ timeEnd(label = 'default') {
+ const startTime = this._timers[label];
+ if (startTime != null) {
+ const endTime = new Date().getTime();
+ const time = endTime - startTime.getTime();
+ this._log(
+ 'time',
+ (0, _util().format)(`${label}: ${(0, _jestUtil().formatTime)(time)}`)
+ );
+ delete this._timers[label];
+ }
+ }
+ timeLog(label = 'default', ...data) {
+ const startTime = this._timers[label];
+ if (startTime != null) {
+ const endTime = new Date();
+ const time = endTime.getTime() - startTime.getTime();
+ this._log(
+ 'time',
+ (0, _util().format)(
+ `${label}: ${(0, _jestUtil().formatTime)(time)}`,
+ ...data
+ )
+ );
+ }
+ }
+ warn(firstArg, ...args) {
+ this._logError('warn', (0, _util().format)(firstArg, ...args));
+ }
+ getBuffer() {
+ return undefined;
+ }
+}
+exports.default = CustomConsole;
diff --git a/client-side/package/node_modules/@jest/console/build/NullConsole.js b/client-side/package/node_modules/@jest/console/build/NullConsole.js
new file mode 100644
index 000000000..3a396a2d5
--- /dev/null
+++ b/client-side/package/node_modules/@jest/console/build/NullConsole.js
@@ -0,0 +1,35 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+var _CustomConsole = _interopRequireDefault(require('./CustomConsole'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/* eslint-disable @typescript-eslint/no-empty-function */
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class NullConsole extends _CustomConsole.default {
+ assert() {}
+ debug() {}
+ dir() {}
+ error() {}
+ info() {}
+ log() {}
+ time() {}
+ timeEnd() {}
+ timeLog() {}
+ trace() {}
+ warn() {}
+ group() {}
+ groupCollapsed() {}
+ groupEnd() {}
+}
+exports.default = NullConsole;
diff --git a/client-side/package/node_modules/@jest/console/build/getConsoleOutput.js b/client-side/package/node_modules/@jest/console/build/getConsoleOutput.js
new file mode 100644
index 000000000..a38f85c67
--- /dev/null
+++ b/client-side/package/node_modules/@jest/console/build/getConsoleOutput.js
@@ -0,0 +1,70 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getConsoleOutput;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+ _jestMessageUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getConsoleOutput(buffer, config, globalConfig) {
+ const TITLE_INDENT =
+ globalConfig.verbose === true ? ' '.repeat(2) : ' '.repeat(4);
+ const CONSOLE_INDENT = TITLE_INDENT + ' '.repeat(2);
+ const logEntries = buffer.reduce((output, {type, message, origin}) => {
+ message = message
+ .split(/\n/)
+ .map(line => CONSOLE_INDENT + line)
+ .join('\n');
+ let typeMessage = `console.${type}`;
+ let noStackTrace = true;
+ let noCodeFrame = true;
+ if (type === 'warn') {
+ message = _chalk().default.yellow(message);
+ typeMessage = _chalk().default.yellow(typeMessage);
+ noStackTrace = globalConfig?.noStackTrace ?? false;
+ noCodeFrame = false;
+ } else if (type === 'error') {
+ message = _chalk().default.red(message);
+ typeMessage = _chalk().default.red(typeMessage);
+ noStackTrace = globalConfig?.noStackTrace ?? false;
+ noCodeFrame = false;
+ }
+ const options = {
+ noCodeFrame,
+ noStackTrace
+ };
+ const formattedStackTrace = (0, _jestMessageUtil().formatStackTrace)(
+ origin,
+ config,
+ options
+ );
+ return `${
+ output + TITLE_INDENT + _chalk().default.dim(typeMessage)
+ }\n${message.trimRight()}\n${_chalk().default.dim(
+ formattedStackTrace.trimRight()
+ )}\n\n`;
+ }, '');
+ return `${logEntries.trimRight()}\n`;
+}
diff --git a/client-side/package/node_modules/@jest/console/build/index.d.ts b/client-side/package/node_modules/@jest/console/build/index.d.ts
new file mode 100644
index 000000000..d4dcd2eb4
--- /dev/null
+++ b/client-side/package/node_modules/@jest/console/build/index.d.ts
@@ -0,0 +1,131 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+///
+
+import type {Config} from '@jest/types';
+import {Console as Console_2} from 'console';
+import {InspectOptions} from 'util';
+import {StackTraceConfig} from 'jest-message-util';
+
+export declare class BufferedConsole extends Console_2 {
+ private readonly _buffer;
+ private _counters;
+ private _timers;
+ private _groupDepth;
+ Console: typeof Console_2;
+ constructor();
+ static write(
+ this: void,
+ buffer: ConsoleBuffer,
+ type: LogType,
+ message: LogMessage,
+ level?: number | null,
+ ): ConsoleBuffer;
+ private _log;
+ assert(value: unknown, message?: string | Error): void;
+ count(label?: string): void;
+ countReset(label?: string): void;
+ debug(firstArg: unknown, ...rest: Array): void;
+ dir(firstArg: unknown, options?: InspectOptions): void;
+ dirxml(firstArg: unknown, ...rest: Array): void;
+ error(firstArg: unknown, ...rest: Array): void;
+ group(title?: string, ...rest: Array): void;
+ groupCollapsed(title?: string, ...rest: Array): void;
+ groupEnd(): void;
+ info(firstArg: unknown, ...rest: Array): void;
+ log(firstArg: unknown, ...rest: Array): void;
+ time(label?: string): void;
+ timeEnd(label?: string): void;
+ timeLog(label?: string, ...data: Array): void;
+ warn(firstArg: unknown, ...rest: Array): void;
+ getBuffer(): ConsoleBuffer | undefined;
+}
+
+export declare type ConsoleBuffer = Array;
+
+export declare class CustomConsole extends Console_2 {
+ private readonly _stdout;
+ private readonly _stderr;
+ private readonly _formatBuffer;
+ private _counters;
+ private _timers;
+ private _groupDepth;
+ Console: typeof Console_2;
+ constructor(
+ stdout: NodeJS.WriteStream,
+ stderr: NodeJS.WriteStream,
+ formatBuffer?: Formatter,
+ );
+ private _log;
+ private _logError;
+ assert(value: unknown, message?: string | Error): asserts value;
+ count(label?: string): void;
+ countReset(label?: string): void;
+ debug(firstArg: unknown, ...args: Array): void;
+ dir(firstArg: unknown, options?: InspectOptions): void;
+ dirxml(firstArg: unknown, ...args: Array): void;
+ error(firstArg: unknown, ...args: Array): void;
+ group(title?: string, ...args: Array): void;
+ groupCollapsed(title?: string, ...args: Array): void;
+ groupEnd(): void;
+ info(firstArg: unknown, ...args: Array): void;
+ log(firstArg: unknown, ...args: Array): void;
+ time(label?: string): void;
+ timeEnd(label?: string): void;
+ timeLog(label?: string, ...data: Array): void;
+ warn(firstArg: unknown, ...args: Array): void;
+ getBuffer(): undefined;
+}
+
+declare type Formatter = (type: LogType, message: LogMessage) => string;
+
+export declare function getConsoleOutput(
+ buffer: ConsoleBuffer,
+ config: StackTraceConfig,
+ globalConfig: Config.GlobalConfig,
+): string;
+
+export declare type LogEntry = {
+ message: LogMessage;
+ origin: string;
+ type: LogType;
+};
+
+export declare type LogMessage = string;
+
+export declare type LogType =
+ | 'assert'
+ | 'count'
+ | 'debug'
+ | 'dir'
+ | 'dirxml'
+ | 'error'
+ | 'group'
+ | 'groupCollapsed'
+ | 'info'
+ | 'log'
+ | 'time'
+ | 'warn';
+
+export declare class NullConsole extends CustomConsole {
+ assert(): void;
+ debug(): void;
+ dir(): void;
+ error(): void;
+ info(): void;
+ log(): void;
+ time(): void;
+ timeEnd(): void;
+ timeLog(): void;
+ trace(): void;
+ warn(): void;
+ group(): void;
+ groupCollapsed(): void;
+ groupEnd(): void;
+}
+
+export {};
diff --git a/client-side/package/node_modules/@jest/console/build/index.js b/client-side/package/node_modules/@jest/console/build/index.js
new file mode 100644
index 000000000..6383b61d5
--- /dev/null
+++ b/client-side/package/node_modules/@jest/console/build/index.js
@@ -0,0 +1,36 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'BufferedConsole', {
+ enumerable: true,
+ get: function () {
+ return _BufferedConsole.default;
+ }
+});
+Object.defineProperty(exports, 'CustomConsole', {
+ enumerable: true,
+ get: function () {
+ return _CustomConsole.default;
+ }
+});
+Object.defineProperty(exports, 'NullConsole', {
+ enumerable: true,
+ get: function () {
+ return _NullConsole.default;
+ }
+});
+Object.defineProperty(exports, 'getConsoleOutput', {
+ enumerable: true,
+ get: function () {
+ return _getConsoleOutput.default;
+ }
+});
+var _BufferedConsole = _interopRequireDefault(require('./BufferedConsole'));
+var _CustomConsole = _interopRequireDefault(require('./CustomConsole'));
+var _NullConsole = _interopRequireDefault(require('./NullConsole'));
+var _getConsoleOutput = _interopRequireDefault(require('./getConsoleOutput'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/client-side/package/node_modules/@jest/console/build/types.js b/client-side/package/node_modules/@jest/console/build/types.js
new file mode 100644
index 000000000..ad9a93a7c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/console/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/client-side/package/node_modules/@jest/console/package.json b/client-side/package/node_modules/@jest/console/package.json
new file mode 100644
index 000000000..4d08f3099
--- /dev/null
+++ b/client-side/package/node_modules/@jest/console/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "@jest/console",
+ "version": "29.7.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jestjs/jest.git",
+ "directory": "packages/jest-console"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "devDependencies": {
+ "@jest/test-utils": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630"
+}
diff --git a/client-side/package/node_modules/@jest/core/LICENSE b/client-side/package/node_modules/@jest/core/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/core/README.md b/client-side/package/node_modules/@jest/core/README.md
new file mode 100644
index 000000000..e5852b602
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/README.md
@@ -0,0 +1,3 @@
+# @jest/core
+
+Jest is currently working on providing a programmatic API. This is under development, and usage of this package directly is currently not supported.
diff --git a/client-side/package/node_modules/@jest/core/build/FailedTestsCache.js b/client-side/package/node_modules/@jest/core/build/FailedTestsCache.js
new file mode 100644
index 000000000..59fcb06b9
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/FailedTestsCache.js
@@ -0,0 +1,46 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class FailedTestsCache {
+ _enabledTestsMap;
+ filterTests(tests) {
+ const enabledTestsMap = this._enabledTestsMap;
+ if (!enabledTestsMap) {
+ return tests;
+ }
+ return tests.filter(testResult => enabledTestsMap[testResult.path]);
+ }
+ setTestResults(testResults) {
+ this._enabledTestsMap = (testResults || []).reduce(
+ (suiteMap, testResult) => {
+ if (!testResult.numFailingTests) {
+ return suiteMap;
+ }
+ suiteMap[testResult.testFilePath] = testResult.testResults.reduce(
+ (testMap, test) => {
+ if (test.status !== 'failed') {
+ return testMap;
+ }
+ testMap[test.fullName] = true;
+ return testMap;
+ },
+ {}
+ );
+ return suiteMap;
+ },
+ {}
+ );
+ this._enabledTestsMap = Object.freeze(this._enabledTestsMap);
+ }
+}
+exports.default = FailedTestsCache;
diff --git a/client-side/package/node_modules/@jest/core/build/FailedTestsInteractiveMode.js b/client-side/package/node_modules/@jest/core/build/FailedTestsInteractiveMode.js
new file mode 100644
index 000000000..d64177fb0
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/FailedTestsInteractiveMode.js
@@ -0,0 +1,195 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _ansiEscapes() {
+ const data = _interopRequireDefault(require('ansi-escapes'));
+ _ansiEscapes = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const {ARROW, CLEAR} = _jestUtil().specialChars;
+function describeKey(key, description) {
+ return `${_chalk().default.dim(
+ `${ARROW}Press`
+ )} ${key} ${_chalk().default.dim(description)}`;
+}
+const TestProgressLabel = _chalk().default.bold('Interactive Test Progress');
+class FailedTestsInteractiveMode {
+ _isActive = false;
+ _countPaths = 0;
+ _skippedNum = 0;
+ _testAssertions = [];
+ _updateTestRunnerConfig;
+ constructor(_pipe) {
+ this._pipe = _pipe;
+ }
+ isActive() {
+ return this._isActive;
+ }
+ put(key) {
+ switch (key) {
+ case 's':
+ if (this._skippedNum === this._testAssertions.length) {
+ break;
+ }
+ this._skippedNum += 1;
+ // move skipped test to the end
+ this._testAssertions.push(this._testAssertions.shift());
+ if (this._testAssertions.length - this._skippedNum > 0) {
+ this._run();
+ } else {
+ this._drawUIDoneWithSkipped();
+ }
+ break;
+ case 'q':
+ case _jestWatcher().KEYS.ESCAPE:
+ this.abort();
+ break;
+ case 'r':
+ this.restart();
+ break;
+ case _jestWatcher().KEYS.ENTER:
+ if (this._testAssertions.length === 0) {
+ this.abort();
+ } else {
+ this._run();
+ }
+ break;
+ default:
+ }
+ }
+ run(failedTestAssertions, updateConfig) {
+ if (failedTestAssertions.length === 0) return;
+ this._testAssertions = [...failedTestAssertions];
+ this._countPaths = this._testAssertions.length;
+ this._updateTestRunnerConfig = updateConfig;
+ this._isActive = true;
+ this._run();
+ }
+ updateWithResults(results) {
+ if (!results.snapshot.failure && results.numFailedTests > 0) {
+ return this._drawUIOverlay();
+ }
+ this._testAssertions.shift();
+ if (this._testAssertions.length === 0) {
+ return this._drawUIOverlay();
+ }
+
+ // Go to the next test
+ return this._run();
+ }
+ _clearTestSummary() {
+ this._pipe.write(_ansiEscapes().default.cursorUp(6));
+ this._pipe.write(_ansiEscapes().default.eraseDown);
+ }
+ _drawUIDone() {
+ this._pipe.write(CLEAR);
+ const messages = [
+ _chalk().default.bold('Watch Usage'),
+ describeKey('Enter', 'to return to watch mode.')
+ ];
+ this._pipe.write(`${messages.join('\n')}\n`);
+ }
+ _drawUIDoneWithSkipped() {
+ this._pipe.write(CLEAR);
+ let stats = `${(0, _jestUtil().pluralize)(
+ 'test',
+ this._countPaths
+ )} reviewed`;
+ if (this._skippedNum > 0) {
+ const skippedText = _chalk().default.bold.yellow(
+ `${(0, _jestUtil().pluralize)('test', this._skippedNum)} skipped`
+ );
+ stats = `${stats}, ${skippedText}`;
+ }
+ const message = [
+ TestProgressLabel,
+ `${ARROW}${stats}`,
+ '\n',
+ _chalk().default.bold('Watch Usage'),
+ describeKey('r', 'to restart Interactive Mode.'),
+ describeKey('q', 'to quit Interactive Mode.'),
+ describeKey('Enter', 'to return to watch mode.')
+ ];
+ this._pipe.write(`\n${message.join('\n')}`);
+ }
+ _drawUIProgress() {
+ this._clearTestSummary();
+ const numPass = this._countPaths - this._testAssertions.length;
+ const numRemaining = this._countPaths - numPass - this._skippedNum;
+ let stats = `${(0, _jestUtil().pluralize)('test', numRemaining)} remaining`;
+ if (this._skippedNum > 0) {
+ const skippedText = _chalk().default.bold.yellow(
+ `${(0, _jestUtil().pluralize)('test', this._skippedNum)} skipped`
+ );
+ stats = `${stats}, ${skippedText}`;
+ }
+ const message = [
+ TestProgressLabel,
+ `${ARROW}${stats}`,
+ '\n',
+ _chalk().default.bold('Watch Usage'),
+ describeKey('s', 'to skip the current test.'),
+ describeKey('q', 'to quit Interactive Mode.'),
+ describeKey('Enter', 'to return to watch mode.')
+ ];
+ this._pipe.write(`\n${message.join('\n')}`);
+ }
+ _drawUIOverlay() {
+ if (this._testAssertions.length === 0) return this._drawUIDone();
+ return this._drawUIProgress();
+ }
+ _run() {
+ if (this._updateTestRunnerConfig) {
+ this._updateTestRunnerConfig(this._testAssertions[0]);
+ }
+ }
+ abort() {
+ this._isActive = false;
+ this._skippedNum = 0;
+ if (this._updateTestRunnerConfig) {
+ this._updateTestRunnerConfig();
+ }
+ }
+ restart() {
+ this._skippedNum = 0;
+ this._countPaths = this._testAssertions.length;
+ this._run();
+ }
+}
+exports.default = FailedTestsInteractiveMode;
diff --git a/client-side/package/node_modules/@jest/core/build/ReporterDispatcher.js b/client-side/package/node_modules/@jest/core/build/ReporterDispatcher.js
new file mode 100644
index 000000000..5666cbc20
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/ReporterDispatcher.js
@@ -0,0 +1,87 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class ReporterDispatcher {
+ _reporters;
+ constructor() {
+ this._reporters = [];
+ }
+ register(reporter) {
+ this._reporters.push(reporter);
+ }
+ unregister(reporterConstructor) {
+ this._reporters = this._reporters.filter(
+ reporter => !(reporter instanceof reporterConstructor)
+ );
+ }
+ async onTestFileResult(test, testResult, results) {
+ for (const reporter of this._reporters) {
+ if (reporter.onTestFileResult) {
+ await reporter.onTestFileResult(test, testResult, results);
+ } else if (reporter.onTestResult) {
+ await reporter.onTestResult(test, testResult, results);
+ }
+ }
+
+ // Release memory if unused later.
+ testResult.coverage = undefined;
+ testResult.console = undefined;
+ }
+ async onTestFileStart(test) {
+ for (const reporter of this._reporters) {
+ if (reporter.onTestFileStart) {
+ await reporter.onTestFileStart(test);
+ } else if (reporter.onTestStart) {
+ await reporter.onTestStart(test);
+ }
+ }
+ }
+ async onRunStart(results, options) {
+ for (const reporter of this._reporters) {
+ reporter.onRunStart && (await reporter.onRunStart(results, options));
+ }
+ }
+ async onTestCaseStart(test, testCaseStartInfo) {
+ for (const reporter of this._reporters) {
+ if (reporter.onTestCaseStart) {
+ await reporter.onTestCaseStart(test, testCaseStartInfo);
+ }
+ }
+ }
+ async onTestCaseResult(test, testCaseResult) {
+ for (const reporter of this._reporters) {
+ if (reporter.onTestCaseResult) {
+ await reporter.onTestCaseResult(test, testCaseResult);
+ }
+ }
+ }
+ async onRunComplete(testContexts, results) {
+ for (const reporter of this._reporters) {
+ if (reporter.onRunComplete) {
+ await reporter.onRunComplete(testContexts, results);
+ }
+ }
+ }
+
+ // Return a list of last errors for every reporter
+ getErrors() {
+ return this._reporters.reduce((list, reporter) => {
+ const error = reporter.getLastError && reporter.getLastError();
+ return error ? list.concat(error) : list;
+ }, []);
+ }
+ hasErrors() {
+ return this.getErrors().length !== 0;
+ }
+}
+exports.default = ReporterDispatcher;
diff --git a/client-side/package/node_modules/@jest/core/build/SearchSource.js b/client-side/package/node_modules/@jest/core/build/SearchSource.js
new file mode 100644
index 000000000..a81ef96af
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/SearchSource.js
@@ -0,0 +1,408 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function os() {
+ const data = _interopRequireWildcard(require('os'));
+ os = function () {
+ return data;
+ };
+ return data;
+}
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function _micromatch() {
+ const data = _interopRequireDefault(require('micromatch'));
+ _micromatch = function () {
+ return data;
+ };
+ return data;
+}
+function _jestConfig() {
+ const data = require('jest-config');
+ _jestConfig = function () {
+ return data;
+ };
+ return data;
+}
+function _jestRegexUtil() {
+ const data = require('jest-regex-util');
+ _jestRegexUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestResolveDependencies() {
+ const data = require('jest-resolve-dependencies');
+ _jestResolveDependencies = function () {
+ return data;
+ };
+ return data;
+}
+function _jestSnapshot() {
+ const data = require('jest-snapshot');
+ _jestSnapshot = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const regexToMatcher = testRegex => {
+ const regexes = testRegex.map(testRegex => new RegExp(testRegex));
+ return path =>
+ regexes.some(regex => {
+ const result = regex.test(path);
+
+ // prevent stateful regexes from breaking, just in case
+ regex.lastIndex = 0;
+ return result;
+ });
+};
+const toTests = (context, tests) =>
+ tests.map(path => ({
+ context,
+ duration: undefined,
+ path
+ }));
+const hasSCM = changedFilesInfo => {
+ const {repos} = changedFilesInfo;
+ // no SCM (git/hg/...) is found in any of the roots.
+ const noSCM = Object.values(repos).every(scm => scm.size === 0);
+ return !noSCM;
+};
+class SearchSource {
+ _context;
+ _dependencyResolver;
+ _testPathCases = [];
+ constructor(context) {
+ const {config} = context;
+ this._context = context;
+ this._dependencyResolver = null;
+ const rootPattern = new RegExp(
+ config.roots
+ .map(dir => (0, _jestRegexUtil().escapePathForRegex)(dir + path().sep))
+ .join('|')
+ );
+ this._testPathCases.push({
+ isMatch: path => rootPattern.test(path),
+ stat: 'roots'
+ });
+ if (config.testMatch.length) {
+ this._testPathCases.push({
+ isMatch: (0, _jestUtil().globsToMatcher)(config.testMatch),
+ stat: 'testMatch'
+ });
+ }
+ if (config.testPathIgnorePatterns.length) {
+ const testIgnorePatternsRegex = new RegExp(
+ config.testPathIgnorePatterns.join('|')
+ );
+ this._testPathCases.push({
+ isMatch: path => !testIgnorePatternsRegex.test(path),
+ stat: 'testPathIgnorePatterns'
+ });
+ }
+ if (config.testRegex.length) {
+ this._testPathCases.push({
+ isMatch: regexToMatcher(config.testRegex),
+ stat: 'testRegex'
+ });
+ }
+ }
+ async _getOrBuildDependencyResolver() {
+ if (!this._dependencyResolver) {
+ this._dependencyResolver =
+ new (_jestResolveDependencies().DependencyResolver)(
+ this._context.resolver,
+ this._context.hasteFS,
+ await (0, _jestSnapshot().buildSnapshotResolver)(this._context.config)
+ );
+ }
+ return this._dependencyResolver;
+ }
+ _filterTestPathsWithStats(allPaths, testPathPattern) {
+ const data = {
+ stats: {
+ roots: 0,
+ testMatch: 0,
+ testPathIgnorePatterns: 0,
+ testRegex: 0
+ },
+ tests: [],
+ total: allPaths.length
+ };
+ const testCases = Array.from(this._testPathCases); // clone
+ if (testPathPattern) {
+ const regex = (0, _jestUtil().testPathPatternToRegExp)(testPathPattern);
+ testCases.push({
+ isMatch: path => regex.test(path),
+ stat: 'testPathPattern'
+ });
+ data.stats.testPathPattern = 0;
+ }
+ data.tests = allPaths.filter(test => {
+ let filterResult = true;
+ for (const {isMatch, stat} of testCases) {
+ if (isMatch(test.path)) {
+ data.stats[stat]++;
+ } else {
+ filterResult = false;
+ }
+ }
+ return filterResult;
+ });
+ return data;
+ }
+ _getAllTestPaths(testPathPattern) {
+ return this._filterTestPathsWithStats(
+ toTests(this._context, this._context.hasteFS.getAllFiles()),
+ testPathPattern
+ );
+ }
+ isTestFilePath(path) {
+ return this._testPathCases.every(testCase => testCase.isMatch(path));
+ }
+ findMatchingTests(testPathPattern) {
+ return this._getAllTestPaths(testPathPattern);
+ }
+ async findRelatedTests(allPaths, collectCoverage) {
+ const dependencyResolver = await this._getOrBuildDependencyResolver();
+ if (!collectCoverage) {
+ return {
+ tests: toTests(
+ this._context,
+ dependencyResolver.resolveInverse(
+ allPaths,
+ this.isTestFilePath.bind(this),
+ {
+ skipNodeResolution: this._context.config.skipNodeResolution
+ }
+ )
+ )
+ };
+ }
+ const testModulesMap = dependencyResolver.resolveInverseModuleMap(
+ allPaths,
+ this.isTestFilePath.bind(this),
+ {
+ skipNodeResolution: this._context.config.skipNodeResolution
+ }
+ );
+ const allPathsAbsolute = Array.from(allPaths).map(p => path().resolve(p));
+ const collectCoverageFrom = new Set();
+ testModulesMap.forEach(testModule => {
+ if (!testModule.dependencies) {
+ return;
+ }
+ testModule.dependencies.forEach(p => {
+ if (!allPathsAbsolute.includes(p)) {
+ return;
+ }
+ const filename = (0, _jestConfig().replaceRootDirInPath)(
+ this._context.config.rootDir,
+ p
+ );
+ collectCoverageFrom.add(
+ path().isAbsolute(filename)
+ ? path().relative(this._context.config.rootDir, filename)
+ : filename
+ );
+ });
+ });
+ return {
+ collectCoverageFrom,
+ tests: toTests(
+ this._context,
+ testModulesMap.map(testModule => testModule.file)
+ )
+ };
+ }
+ findTestsByPaths(paths) {
+ return {
+ tests: toTests(
+ this._context,
+ paths
+ .map(p => path().resolve(this._context.config.cwd, p))
+ .filter(this.isTestFilePath.bind(this))
+ )
+ };
+ }
+ async findRelatedTestsFromPattern(paths, collectCoverage) {
+ if (Array.isArray(paths) && paths.length) {
+ const resolvedPaths = paths.map(p =>
+ path().resolve(this._context.config.cwd, p)
+ );
+ return this.findRelatedTests(new Set(resolvedPaths), collectCoverage);
+ }
+ return {
+ tests: []
+ };
+ }
+ async findTestRelatedToChangedFiles(changedFilesInfo, collectCoverage) {
+ if (!hasSCM(changedFilesInfo)) {
+ return {
+ noSCM: true,
+ tests: []
+ };
+ }
+ const {changedFiles} = changedFilesInfo;
+ return this.findRelatedTests(changedFiles, collectCoverage);
+ }
+ async _getTestPaths(globalConfig, changedFiles) {
+ if (globalConfig.onlyChanged) {
+ if (!changedFiles) {
+ throw new Error('Changed files must be set when running with -o.');
+ }
+ return this.findTestRelatedToChangedFiles(
+ changedFiles,
+ globalConfig.collectCoverage
+ );
+ }
+ let paths = globalConfig.nonFlagArgs;
+ if (globalConfig.findRelatedTests && 'win32' === os().platform()) {
+ paths = this.filterPathsWin32(paths);
+ }
+ if (globalConfig.runTestsByPath && paths && paths.length) {
+ return this.findTestsByPaths(paths);
+ } else if (globalConfig.findRelatedTests && paths && paths.length) {
+ return this.findRelatedTestsFromPattern(
+ paths,
+ globalConfig.collectCoverage
+ );
+ } else if (globalConfig.testPathPattern != null) {
+ return this.findMatchingTests(globalConfig.testPathPattern);
+ } else {
+ return {
+ tests: []
+ };
+ }
+ }
+ filterPathsWin32(paths) {
+ const allFiles = this._context.hasteFS.getAllFiles();
+ const options = {
+ nocase: true,
+ windows: false
+ };
+ function normalizePosix(filePath) {
+ return filePath.replace(/\\/g, '/');
+ }
+ paths = paths
+ .map(p => {
+ // micromatch works with forward slashes: https://github.com/micromatch/micromatch#backslashes
+ const normalizedPath = normalizePosix(
+ path().resolve(this._context.config.cwd, p)
+ );
+ const match = (0, _micromatch().default)(
+ allFiles.map(normalizePosix),
+ normalizedPath,
+ options
+ );
+ return match[0];
+ })
+ .filter(Boolean)
+ .map(p => path().resolve(p));
+ return paths;
+ }
+ async getTestPaths(globalConfig, changedFiles, filter) {
+ const searchResult = await this._getTestPaths(globalConfig, changedFiles);
+ const filterPath = globalConfig.filter;
+ if (filter) {
+ const tests = searchResult.tests;
+ const filterResult = await filter(tests.map(test => test.path));
+ if (!Array.isArray(filterResult.filtered)) {
+ throw new Error(
+ `Filter ${filterPath} did not return a valid test list`
+ );
+ }
+ const filteredSet = new Set(
+ filterResult.filtered.map(result => result.test)
+ );
+ return {
+ ...searchResult,
+ tests: tests.filter(test => filteredSet.has(test.path))
+ };
+ }
+ return searchResult;
+ }
+ async findRelatedSourcesFromTestsInChangedFiles(changedFilesInfo) {
+ if (!hasSCM(changedFilesInfo)) {
+ return [];
+ }
+ const {changedFiles} = changedFilesInfo;
+ const dependencyResolver = await this._getOrBuildDependencyResolver();
+ const relatedSourcesSet = new Set();
+ changedFiles.forEach(filePath => {
+ if (this.isTestFilePath(filePath)) {
+ const sourcePaths = dependencyResolver.resolve(filePath, {
+ skipNodeResolution: this._context.config.skipNodeResolution
+ });
+ sourcePaths.forEach(sourcePath => relatedSourcesSet.add(sourcePath));
+ }
+ });
+ return Array.from(relatedSourcesSet);
+ }
+}
+exports.default = SearchSource;
diff --git a/client-side/package/node_modules/@jest/core/build/SnapshotInteractiveMode.js b/client-side/package/node_modules/@jest/core/build/SnapshotInteractiveMode.js
new file mode 100644
index 000000000..40a4b547d
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/SnapshotInteractiveMode.js
@@ -0,0 +1,238 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _ansiEscapes() {
+ const data = _interopRequireDefault(require('ansi-escapes'));
+ _ansiEscapes = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const {ARROW, CLEAR} = _jestUtil().specialChars;
+class SnapshotInteractiveMode {
+ _pipe;
+ _isActive;
+ _updateTestRunnerConfig;
+ _testAssertions;
+ _countPaths;
+ _skippedNum;
+ constructor(pipe) {
+ this._pipe = pipe;
+ this._isActive = false;
+ this._skippedNum = 0;
+ }
+ isActive() {
+ return this._isActive;
+ }
+ getSkippedNum() {
+ return this._skippedNum;
+ }
+ _clearTestSummary() {
+ this._pipe.write(_ansiEscapes().default.cursorUp(6));
+ this._pipe.write(_ansiEscapes().default.eraseDown);
+ }
+ _drawUIProgress() {
+ this._clearTestSummary();
+ const numPass = this._countPaths - this._testAssertions.length;
+ const numRemaining = this._countPaths - numPass - this._skippedNum;
+ let stats = _chalk().default.bold.dim(
+ `${(0, _jestUtil().pluralize)('snapshot', numRemaining)} remaining`
+ );
+ if (numPass) {
+ stats += `, ${_chalk().default.bold.green(
+ `${(0, _jestUtil().pluralize)('snapshot', numPass)} updated`
+ )}`;
+ }
+ if (this._skippedNum) {
+ stats += `, ${_chalk().default.bold.yellow(
+ `${(0, _jestUtil().pluralize)('snapshot', this._skippedNum)} skipped`
+ )}`;
+ }
+ const messages = [
+ `\n${_chalk().default.bold('Interactive Snapshot Progress')}`,
+ ARROW + stats,
+ `\n${_chalk().default.bold('Watch Usage')}`,
+ `${_chalk().default.dim(`${ARROW}Press `)}u${_chalk().default.dim(
+ ' to update failing snapshots for this test.'
+ )}`,
+ `${_chalk().default.dim(`${ARROW}Press `)}s${_chalk().default.dim(
+ ' to skip the current test.'
+ )}`,
+ `${_chalk().default.dim(`${ARROW}Press `)}q${_chalk().default.dim(
+ ' to quit Interactive Snapshot Mode.'
+ )}`,
+ `${_chalk().default.dim(`${ARROW}Press `)}Enter${_chalk().default.dim(
+ ' to trigger a test run.'
+ )}`
+ ];
+ this._pipe.write(`${messages.filter(Boolean).join('\n')}\n`);
+ }
+ _drawUIDoneWithSkipped() {
+ this._pipe.write(CLEAR);
+ const numPass = this._countPaths - this._testAssertions.length;
+ let stats = _chalk().default.bold.dim(
+ `${(0, _jestUtil().pluralize)('snapshot', this._countPaths)} reviewed`
+ );
+ if (numPass) {
+ stats += `, ${_chalk().default.bold.green(
+ `${(0, _jestUtil().pluralize)('snapshot', numPass)} updated`
+ )}`;
+ }
+ if (this._skippedNum) {
+ stats += `, ${_chalk().default.bold.yellow(
+ `${(0, _jestUtil().pluralize)('snapshot', this._skippedNum)} skipped`
+ )}`;
+ }
+ const messages = [
+ `\n${_chalk().default.bold('Interactive Snapshot Result')}`,
+ ARROW + stats,
+ `\n${_chalk().default.bold('Watch Usage')}`,
+ `${_chalk().default.dim(`${ARROW}Press `)}r${_chalk().default.dim(
+ ' to restart Interactive Snapshot Mode.'
+ )}`,
+ `${_chalk().default.dim(`${ARROW}Press `)}q${_chalk().default.dim(
+ ' to quit Interactive Snapshot Mode.'
+ )}`
+ ];
+ this._pipe.write(`${messages.filter(Boolean).join('\n')}\n`);
+ }
+ _drawUIDone() {
+ this._pipe.write(CLEAR);
+ const numPass = this._countPaths - this._testAssertions.length;
+ let stats = _chalk().default.bold.dim(
+ `${(0, _jestUtil().pluralize)('snapshot', this._countPaths)} reviewed`
+ );
+ if (numPass) {
+ stats += `, ${_chalk().default.bold.green(
+ `${(0, _jestUtil().pluralize)('snapshot', numPass)} updated`
+ )}`;
+ }
+ const messages = [
+ `\n${_chalk().default.bold('Interactive Snapshot Result')}`,
+ ARROW + stats,
+ `\n${_chalk().default.bold('Watch Usage')}`,
+ `${_chalk().default.dim(`${ARROW}Press `)}Enter${_chalk().default.dim(
+ ' to return to watch mode.'
+ )}`
+ ];
+ this._pipe.write(`${messages.filter(Boolean).join('\n')}\n`);
+ }
+ _drawUIOverlay() {
+ if (this._testAssertions.length === 0) {
+ return this._drawUIDone();
+ }
+ if (this._testAssertions.length - this._skippedNum === 0) {
+ return this._drawUIDoneWithSkipped();
+ }
+ return this._drawUIProgress();
+ }
+ put(key) {
+ switch (key) {
+ case 's':
+ if (this._skippedNum === this._testAssertions.length) break;
+ this._skippedNum += 1;
+
+ // move skipped test to the end
+ this._testAssertions.push(this._testAssertions.shift());
+ if (this._testAssertions.length - this._skippedNum > 0) {
+ this._run(false);
+ } else {
+ this._drawUIDoneWithSkipped();
+ }
+ break;
+ case 'u':
+ this._run(true);
+ break;
+ case 'q':
+ case _jestWatcher().KEYS.ESCAPE:
+ this.abort();
+ break;
+ case 'r':
+ this.restart();
+ break;
+ case _jestWatcher().KEYS.ENTER:
+ if (this._testAssertions.length === 0) {
+ this.abort();
+ } else {
+ this._run(false);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ abort() {
+ this._isActive = false;
+ this._skippedNum = 0;
+ this._updateTestRunnerConfig(null, false);
+ }
+ restart() {
+ this._skippedNum = 0;
+ this._countPaths = this._testAssertions.length;
+ this._run(false);
+ }
+ updateWithResults(results) {
+ const hasSnapshotFailure = !!results.snapshot.failure;
+ if (hasSnapshotFailure) {
+ this._drawUIOverlay();
+ return;
+ }
+ this._testAssertions.shift();
+ if (this._testAssertions.length - this._skippedNum === 0) {
+ this._drawUIOverlay();
+ return;
+ }
+
+ // Go to the next test
+ this._run(false);
+ }
+ _run(shouldUpdateSnapshot) {
+ const testAssertion = this._testAssertions[0];
+ this._updateTestRunnerConfig(testAssertion, shouldUpdateSnapshot);
+ }
+ run(failedSnapshotTestAssertions, onConfigChange) {
+ if (!failedSnapshotTestAssertions.length) {
+ return;
+ }
+ this._testAssertions = [...failedSnapshotTestAssertions];
+ this._countPaths = this._testAssertions.length;
+ this._updateTestRunnerConfig = onConfigChange;
+ this._isActive = true;
+ this._run(false);
+ }
+}
+exports.default = SnapshotInteractiveMode;
diff --git a/client-side/package/node_modules/@jest/core/build/TestNamePatternPrompt.js b/client-side/package/node_modules/@jest/core/build/TestNamePatternPrompt.js
new file mode 100644
index 000000000..be495ad6f
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/TestNamePatternPrompt.js
@@ -0,0 +1,39 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class TestNamePatternPrompt extends _jestWatcher().PatternPrompt {
+ constructor(pipe, prompt) {
+ super(pipe, prompt, 'tests');
+ }
+ _onChange(pattern, options) {
+ super._onChange(pattern, options);
+ this._printPrompt(pattern);
+ }
+ _printPrompt(pattern) {
+ const pipe = this._pipe;
+ (0, _jestWatcher().printPatternCaret)(pattern, pipe);
+ (0, _jestWatcher().printRestoredPatternCaret)(
+ pattern,
+ this._currentUsageRows,
+ pipe
+ );
+ }
+}
+exports.default = TestNamePatternPrompt;
diff --git a/client-side/package/node_modules/@jest/core/build/TestPathPatternPrompt.js b/client-side/package/node_modules/@jest/core/build/TestPathPatternPrompt.js
new file mode 100644
index 000000000..648cef0a0
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/TestPathPatternPrompt.js
@@ -0,0 +1,39 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class TestPathPatternPrompt extends _jestWatcher().PatternPrompt {
+ constructor(pipe, prompt) {
+ super(pipe, prompt, 'filenames');
+ }
+ _onChange(pattern, options) {
+ super._onChange(pattern, options);
+ this._printPrompt(pattern);
+ }
+ _printPrompt(pattern) {
+ const pipe = this._pipe;
+ (0, _jestWatcher().printPatternCaret)(pattern, pipe);
+ (0, _jestWatcher().printRestoredPatternCaret)(
+ pattern,
+ this._currentUsageRows,
+ pipe
+ );
+ }
+}
+exports.default = TestPathPatternPrompt;
diff --git a/client-side/package/node_modules/@jest/core/build/TestScheduler.js b/client-side/package/node_modules/@jest/core/build/TestScheduler.js
new file mode 100644
index 000000000..26504fe52
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/TestScheduler.js
@@ -0,0 +1,463 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.createTestScheduler = createTestScheduler;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _ciInfo() {
+ const data = require('ci-info');
+ _ciInfo = function () {
+ return data;
+ };
+ return data;
+}
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+ _exit = function () {
+ return data;
+ };
+ return data;
+}
+function _reporters() {
+ const data = require('@jest/reporters');
+ _reporters = function () {
+ return data;
+ };
+ return data;
+}
+function _testResult() {
+ const data = require('@jest/test-result');
+ _testResult = function () {
+ return data;
+ };
+ return data;
+}
+function _transform() {
+ const data = require('@jest/transform');
+ _transform = function () {
+ return data;
+ };
+ return data;
+}
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+ _jestMessageUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestSnapshot() {
+ const data = require('jest-snapshot');
+ _jestSnapshot = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+var _ReporterDispatcher = _interopRequireDefault(
+ require('./ReporterDispatcher')
+);
+var _testSchedulerHelper = require('./testSchedulerHelper');
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+async function createTestScheduler(globalConfig, context) {
+ const scheduler = new TestScheduler(globalConfig, context);
+ await scheduler._setupReporters();
+ return scheduler;
+}
+class TestScheduler {
+ _context;
+ _dispatcher;
+ _globalConfig;
+ constructor(globalConfig, context) {
+ this._context = context;
+ this._dispatcher = new _ReporterDispatcher.default();
+ this._globalConfig = globalConfig;
+ }
+ addReporter(reporter) {
+ this._dispatcher.register(reporter);
+ }
+ removeReporter(reporterConstructor) {
+ this._dispatcher.unregister(reporterConstructor);
+ }
+ async scheduleTests(tests, watcher) {
+ const onTestFileStart = this._dispatcher.onTestFileStart.bind(
+ this._dispatcher
+ );
+ const timings = [];
+ const testContexts = new Set();
+ tests.forEach(test => {
+ testContexts.add(test.context);
+ if (test.duration) {
+ timings.push(test.duration);
+ }
+ });
+ const aggregatedResults = createAggregatedResults(tests.length);
+ const estimatedTime = Math.ceil(
+ getEstimatedTime(timings, this._globalConfig.maxWorkers) / 1000
+ );
+ const runInBand = (0, _testSchedulerHelper.shouldRunInBand)(
+ tests,
+ timings,
+ this._globalConfig
+ );
+ const onResult = async (test, testResult) => {
+ if (watcher.isInterrupted()) {
+ return Promise.resolve();
+ }
+ if (testResult.testResults.length === 0) {
+ const message = 'Your test suite must contain at least one test.';
+ return onFailure(test, {
+ message,
+ stack: new Error(message).stack
+ });
+ }
+
+ // Throws when the context is leaked after executing a test.
+ if (testResult.leaks) {
+ const message =
+ `${_chalk().default.red.bold(
+ 'EXPERIMENTAL FEATURE!\n'
+ )}Your test suite is leaking memory. Please ensure all references are cleaned.\n` +
+ '\n' +
+ 'There is a number of things that can leak memory:\n' +
+ ' - Async operations that have not finished (e.g. fs.readFile).\n' +
+ ' - Timers not properly mocked (e.g. setInterval, setTimeout).\n' +
+ ' - Keeping references to the global scope.';
+ return onFailure(test, {
+ message,
+ stack: new Error(message).stack
+ });
+ }
+ (0, _testResult().addResult)(aggregatedResults, testResult);
+ await this._dispatcher.onTestFileResult(
+ test,
+ testResult,
+ aggregatedResults
+ );
+ return this._bailIfNeeded(testContexts, aggregatedResults, watcher);
+ };
+ const onFailure = async (test, error) => {
+ if (watcher.isInterrupted()) {
+ return;
+ }
+ const testResult = (0, _testResult().buildFailureTestResult)(
+ test.path,
+ error
+ );
+ testResult.failureMessage = (0, _jestMessageUtil().formatExecError)(
+ testResult.testExecError,
+ test.context.config,
+ this._globalConfig,
+ test.path
+ );
+ (0, _testResult().addResult)(aggregatedResults, testResult);
+ await this._dispatcher.onTestFileResult(
+ test,
+ testResult,
+ aggregatedResults
+ );
+ };
+ const updateSnapshotState = async () => {
+ const contextsWithSnapshotResolvers = await Promise.all(
+ Array.from(testContexts).map(async context => [
+ context,
+ await (0, _jestSnapshot().buildSnapshotResolver)(context.config)
+ ])
+ );
+ contextsWithSnapshotResolvers.forEach(([context, snapshotResolver]) => {
+ const status = (0, _jestSnapshot().cleanup)(
+ context.hasteFS,
+ this._globalConfig.updateSnapshot,
+ snapshotResolver,
+ context.config.testPathIgnorePatterns
+ );
+ aggregatedResults.snapshot.filesRemoved += status.filesRemoved;
+ aggregatedResults.snapshot.filesRemovedList = (
+ aggregatedResults.snapshot.filesRemovedList || []
+ ).concat(status.filesRemovedList);
+ });
+ const updateAll = this._globalConfig.updateSnapshot === 'all';
+ aggregatedResults.snapshot.didUpdate = updateAll;
+ aggregatedResults.snapshot.failure = !!(
+ !updateAll &&
+ (aggregatedResults.snapshot.unchecked ||
+ aggregatedResults.snapshot.unmatched ||
+ aggregatedResults.snapshot.filesRemoved)
+ );
+ };
+ await this._dispatcher.onRunStart(aggregatedResults, {
+ estimatedTime,
+ showStatus: !runInBand
+ });
+ const testRunners = Object.create(null);
+ const contextsByTestRunner = new WeakMap();
+ try {
+ await Promise.all(
+ Array.from(testContexts).map(async context => {
+ const {config} = context;
+ if (!testRunners[config.runner]) {
+ const transformer = await (0, _transform().createScriptTransformer)(
+ config
+ );
+ const Runner = await transformer.requireAndTranspileModule(
+ config.runner
+ );
+ const runner = new Runner(this._globalConfig, {
+ changedFiles: this._context.changedFiles,
+ sourcesRelatedToTestsInChangedFiles:
+ this._context.sourcesRelatedToTestsInChangedFiles
+ });
+ testRunners[config.runner] = runner;
+ contextsByTestRunner.set(runner, context);
+ }
+ })
+ );
+ const testsByRunner = this._partitionTests(testRunners, tests);
+ if (testsByRunner) {
+ try {
+ for (const runner of Object.keys(testRunners)) {
+ const testRunner = testRunners[runner];
+ const context = contextsByTestRunner.get(testRunner);
+ (0, _jestUtil().invariant)(context);
+ const tests = testsByRunner[runner];
+ const testRunnerOptions = {
+ serial: runInBand || Boolean(testRunner.isSerial)
+ };
+ if (testRunner.supportsEventEmitters) {
+ const unsubscribes = [
+ testRunner.on('test-file-start', ([test]) =>
+ onTestFileStart(test)
+ ),
+ testRunner.on('test-file-success', ([test, testResult]) =>
+ onResult(test, testResult)
+ ),
+ testRunner.on('test-file-failure', ([test, error]) =>
+ onFailure(test, error)
+ ),
+ testRunner.on(
+ 'test-case-start',
+ ([testPath, testCaseStartInfo]) => {
+ const test = {
+ context,
+ path: testPath
+ };
+ this._dispatcher.onTestCaseStart(test, testCaseStartInfo);
+ }
+ ),
+ testRunner.on(
+ 'test-case-result',
+ ([testPath, testCaseResult]) => {
+ const test = {
+ context,
+ path: testPath
+ };
+ this._dispatcher.onTestCaseResult(test, testCaseResult);
+ }
+ )
+ ];
+ await testRunner.runTests(tests, watcher, testRunnerOptions);
+ unsubscribes.forEach(sub => sub());
+ } else {
+ await testRunner.runTests(
+ tests,
+ watcher,
+ onTestFileStart,
+ onResult,
+ onFailure,
+ testRunnerOptions
+ );
+ }
+ }
+ } catch (error) {
+ if (!watcher.isInterrupted()) {
+ throw error;
+ }
+ }
+ }
+ } catch (error) {
+ aggregatedResults.runExecError = buildExecError(error);
+ await this._dispatcher.onRunComplete(testContexts, aggregatedResults);
+ throw error;
+ }
+ await updateSnapshotState();
+ aggregatedResults.wasInterrupted = watcher.isInterrupted();
+ await this._dispatcher.onRunComplete(testContexts, aggregatedResults);
+ const anyTestFailures = !(
+ aggregatedResults.numFailedTests === 0 &&
+ aggregatedResults.numRuntimeErrorTestSuites === 0
+ );
+ const anyReporterErrors = this._dispatcher.hasErrors();
+ aggregatedResults.success = !(
+ anyTestFailures ||
+ aggregatedResults.snapshot.failure ||
+ anyReporterErrors
+ );
+ return aggregatedResults;
+ }
+ _partitionTests(testRunners, tests) {
+ if (Object.keys(testRunners).length > 1) {
+ return tests.reduce((testRuns, test) => {
+ const runner = test.context.config.runner;
+ if (!testRuns[runner]) {
+ testRuns[runner] = [];
+ }
+ testRuns[runner].push(test);
+ return testRuns;
+ }, Object.create(null));
+ } else if (tests.length > 0 && tests[0] != null) {
+ // If there is only one runner, don't partition the tests.
+ return Object.assign(Object.create(null), {
+ [tests[0].context.config.runner]: tests
+ });
+ } else {
+ return null;
+ }
+ }
+ async _setupReporters() {
+ const {collectCoverage: coverage, notify, verbose} = this._globalConfig;
+ const reporters = this._globalConfig.reporters || [['default', {}]];
+ let summaryOptions = null;
+ for (const [reporter, options] of reporters) {
+ switch (reporter) {
+ case 'default':
+ summaryOptions = options;
+ verbose
+ ? this.addReporter(
+ new (_reporters().VerboseReporter)(this._globalConfig)
+ )
+ : this.addReporter(
+ new (_reporters().DefaultReporter)(this._globalConfig)
+ );
+ break;
+ case 'github-actions':
+ _ciInfo().GITHUB_ACTIONS &&
+ this.addReporter(
+ new (_reporters().GitHubActionsReporter)(
+ this._globalConfig,
+ options
+ )
+ );
+ break;
+ case 'summary':
+ summaryOptions = options;
+ break;
+ default:
+ await this._addCustomReporter(reporter, options);
+ }
+ }
+ if (notify) {
+ this.addReporter(
+ new (_reporters().NotifyReporter)(this._globalConfig, this._context)
+ );
+ }
+ if (coverage) {
+ this.addReporter(
+ new (_reporters().CoverageReporter)(this._globalConfig, this._context)
+ );
+ }
+ if (summaryOptions != null) {
+ this.addReporter(
+ new (_reporters().SummaryReporter)(this._globalConfig, summaryOptions)
+ );
+ }
+ }
+ async _addCustomReporter(reporter, options) {
+ try {
+ const Reporter = await (0, _jestUtil().requireOrImportModule)(reporter);
+ this.addReporter(
+ new Reporter(this._globalConfig, options, this._context)
+ );
+ } catch (error) {
+ error.message = `An error occurred while adding the reporter at path "${_chalk().default.bold(
+ reporter
+ )}".\n${error instanceof Error ? error.message : ''}`;
+ throw error;
+ }
+ }
+ async _bailIfNeeded(testContexts, aggregatedResults, watcher) {
+ if (
+ this._globalConfig.bail !== 0 &&
+ aggregatedResults.numFailedTests >= this._globalConfig.bail
+ ) {
+ if (watcher.isWatchMode()) {
+ await watcher.setState({
+ interrupted: true
+ });
+ return;
+ }
+ try {
+ await this._dispatcher.onRunComplete(testContexts, aggregatedResults);
+ } finally {
+ const exitCode = this._globalConfig.testFailureExitCode;
+ (0, _exit().default)(exitCode);
+ }
+ }
+ }
+}
+const createAggregatedResults = numTotalTestSuites => {
+ const result = (0, _testResult().makeEmptyAggregatedTestResult)();
+ result.numTotalTestSuites = numTotalTestSuites;
+ result.startTime = Date.now();
+ result.success = false;
+ return result;
+};
+const getEstimatedTime = (timings, workers) => {
+ if (timings.length === 0) {
+ return 0;
+ }
+ const max = Math.max(...timings);
+ return timings.length <= workers
+ ? max
+ : Math.max(timings.reduce((sum, time) => sum + time) / workers, max);
+};
+const strToError = errString => {
+ const {message, stack} = (0, _jestMessageUtil().separateMessageFromStack)(
+ errString
+ );
+ if (stack.length > 0) {
+ return {
+ message,
+ stack
+ };
+ }
+ const error = new (_jestUtil().ErrorWithStack)(message, buildExecError);
+ return {
+ message,
+ stack: error.stack || ''
+ };
+};
+const buildExecError = err => {
+ if (typeof err === 'string' || err == null) {
+ return strToError(err || 'Error');
+ }
+ const anyErr = err;
+ if (typeof anyErr.message === 'string') {
+ if (typeof anyErr.stack === 'string' && anyErr.stack.length > 0) {
+ return anyErr;
+ }
+ return strToError(anyErr.message);
+ }
+ return strToError(JSON.stringify(err));
+};
diff --git a/client-side/package/node_modules/@jest/core/build/cli/index.js b/client-side/package/node_modules/@jest/core/build/cli/index.js
new file mode 100644
index 000000000..2a81dac0b
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/cli/index.js
@@ -0,0 +1,417 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.runCLI = runCLI;
+function _perf_hooks() {
+ const data = require('perf_hooks');
+ _perf_hooks = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+ _exit = function () {
+ return data;
+ };
+ return data;
+}
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+ fs = function () {
+ return data;
+ };
+ return data;
+}
+function _console() {
+ const data = require('@jest/console');
+ _console = function () {
+ return data;
+ };
+ return data;
+}
+function _jestConfig() {
+ const data = require('jest-config');
+ _jestConfig = function () {
+ return data;
+ };
+ return data;
+}
+function _jestRuntime() {
+ const data = _interopRequireDefault(require('jest-runtime'));
+ _jestRuntime = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+var _collectHandles = require('../collectHandles');
+var _getChangedFilesPromise = _interopRequireDefault(
+ require('../getChangedFilesPromise')
+);
+var _getConfigsOfProjectsToRun = _interopRequireDefault(
+ require('../getConfigsOfProjectsToRun')
+);
+var _getProjectNamesMissingWarning = _interopRequireDefault(
+ require('../getProjectNamesMissingWarning')
+);
+var _getSelectProjectsMessage = _interopRequireDefault(
+ require('../getSelectProjectsMessage')
+);
+var _createContext = _interopRequireDefault(require('../lib/createContext'));
+var _handleDeprecationWarnings = _interopRequireDefault(
+ require('../lib/handleDeprecationWarnings')
+);
+var _logDebugMessages = _interopRequireDefault(
+ require('../lib/logDebugMessages')
+);
+var _runJest = _interopRequireDefault(require('../runJest'));
+var _watch = _interopRequireDefault(require('../watch'));
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const {print: preRunMessagePrint} = _jestUtil().preRunMessage;
+async function runCLI(argv, projects) {
+ _perf_hooks().performance.mark('jest/runCLI:start');
+ let results;
+
+ // If we output a JSON object, we can't write anything to stdout, since
+ // it'll break the JSON structure and it won't be valid.
+ const outputStream =
+ argv.json || argv.useStderr ? process.stderr : process.stdout;
+ const {globalConfig, configs, hasDeprecationWarnings} = await (0,
+ _jestConfig().readConfigs)(argv, projects);
+ if (argv.debug) {
+ (0, _logDebugMessages.default)(globalConfig, configs, outputStream);
+ }
+ if (argv.showConfig) {
+ (0, _logDebugMessages.default)(globalConfig, configs, process.stdout);
+ (0, _exit().default)(0);
+ }
+ if (argv.clearCache) {
+ // stick in a Set to dedupe the deletions
+ new Set(configs.map(config => config.cacheDirectory)).forEach(
+ cacheDirectory => {
+ fs().rmSync(cacheDirectory, {
+ force: true,
+ recursive: true
+ });
+ process.stdout.write(`Cleared ${cacheDirectory}\n`);
+ }
+ );
+ (0, _exit().default)(0);
+ }
+ const configsOfProjectsToRun = (0, _getConfigsOfProjectsToRun.default)(
+ configs,
+ {
+ ignoreProjects: argv.ignoreProjects,
+ selectProjects: argv.selectProjects
+ }
+ );
+ if (argv.selectProjects || argv.ignoreProjects) {
+ const namesMissingWarning = (0, _getProjectNamesMissingWarning.default)(
+ configs,
+ {
+ ignoreProjects: argv.ignoreProjects,
+ selectProjects: argv.selectProjects
+ }
+ );
+ if (namesMissingWarning) {
+ outputStream.write(namesMissingWarning);
+ }
+ outputStream.write(
+ (0, _getSelectProjectsMessage.default)(configsOfProjectsToRun, {
+ ignoreProjects: argv.ignoreProjects,
+ selectProjects: argv.selectProjects
+ })
+ );
+ }
+ await _run10000(
+ globalConfig,
+ configsOfProjectsToRun,
+ hasDeprecationWarnings,
+ outputStream,
+ r => {
+ results = r;
+ }
+ );
+ if (argv.watch || argv.watchAll) {
+ // If in watch mode, return the promise that will never resolve.
+ // If the watch mode is interrupted, watch should handle the process
+ // shutdown.
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ return new Promise(() => {});
+ }
+ if (!results) {
+ throw new Error(
+ 'AggregatedResult must be present after test run is complete'
+ );
+ }
+ const {openHandles} = results;
+ if (openHandles && openHandles.length) {
+ const formatted = (0, _collectHandles.formatHandleErrors)(
+ openHandles,
+ configs[0]
+ );
+ const openHandlesString = (0, _jestUtil().pluralize)(
+ 'open handle',
+ formatted.length,
+ 's'
+ );
+ const message =
+ _chalk().default.red(
+ `\nJest has detected the following ${openHandlesString} potentially keeping Jest from exiting:\n\n`
+ ) + formatted.join('\n\n');
+ console.error(message);
+ }
+ _perf_hooks().performance.mark('jest/runCLI:end');
+ return {
+ globalConfig,
+ results
+ };
+}
+const buildContextsAndHasteMaps = async (
+ configs,
+ globalConfig,
+ outputStream
+) => {
+ const hasteMapInstances = Array(configs.length);
+ const contexts = await Promise.all(
+ configs.map(async (config, index) => {
+ (0, _jestUtil().createDirectory)(config.cacheDirectory);
+ const hasteMapInstance = await _jestRuntime().default.createHasteMap(
+ config,
+ {
+ console: new (_console().CustomConsole)(outputStream, outputStream),
+ maxWorkers: Math.max(
+ 1,
+ Math.floor(globalConfig.maxWorkers / configs.length)
+ ),
+ resetCache: !config.cache,
+ watch: globalConfig.watch || globalConfig.watchAll,
+ watchman: globalConfig.watchman,
+ workerThreads: globalConfig.workerThreads
+ }
+ );
+ hasteMapInstances[index] = hasteMapInstance;
+ return (0, _createContext.default)(
+ config,
+ await hasteMapInstance.build()
+ );
+ })
+ );
+ return {
+ contexts,
+ hasteMapInstances
+ };
+};
+const _run10000 = async (
+ globalConfig,
+ configs,
+ hasDeprecationWarnings,
+ outputStream,
+ onComplete
+) => {
+ // Queries to hg/git can take a while, so we need to start the process
+ // as soon as possible, so by the time we need the result it's already there.
+ const changedFilesPromise = (0, _getChangedFilesPromise.default)(
+ globalConfig,
+ configs
+ );
+ if (changedFilesPromise) {
+ _perf_hooks().performance.mark('jest/getChangedFiles:start');
+ changedFilesPromise.finally(() => {
+ _perf_hooks().performance.mark('jest/getChangedFiles:end');
+ });
+ }
+
+ // Filter may need to do an HTTP call or something similar to setup.
+ // We will wait on an async response from this before using the filter.
+ let filter;
+ if (globalConfig.filter && !globalConfig.skipFilter) {
+ const rawFilter = require(globalConfig.filter);
+ let filterSetupPromise;
+ if (rawFilter.setup) {
+ // Wrap filter setup Promise to avoid "uncaught Promise" error.
+ // If an error is returned, we surface it in the return value.
+ filterSetupPromise = (async () => {
+ try {
+ await rawFilter.setup();
+ } catch (err) {
+ return err;
+ }
+ return undefined;
+ })();
+ }
+ filter = async testPaths => {
+ if (filterSetupPromise) {
+ // Expect an undefined return value unless there was an error.
+ const err = await filterSetupPromise;
+ if (err) {
+ throw err;
+ }
+ }
+ return rawFilter(testPaths);
+ };
+ }
+ _perf_hooks().performance.mark('jest/buildContextsAndHasteMaps:start');
+ const {contexts, hasteMapInstances} = await buildContextsAndHasteMaps(
+ configs,
+ globalConfig,
+ outputStream
+ );
+ _perf_hooks().performance.mark('jest/buildContextsAndHasteMaps:end');
+ globalConfig.watch || globalConfig.watchAll
+ ? await runWatch(
+ contexts,
+ configs,
+ hasDeprecationWarnings,
+ globalConfig,
+ outputStream,
+ hasteMapInstances,
+ filter
+ )
+ : await runWithoutWatch(
+ globalConfig,
+ contexts,
+ outputStream,
+ onComplete,
+ changedFilesPromise,
+ filter
+ );
+};
+const runWatch = async (
+ contexts,
+ _configs,
+ hasDeprecationWarnings,
+ globalConfig,
+ outputStream,
+ hasteMapInstances,
+ filter
+) => {
+ if (hasDeprecationWarnings) {
+ try {
+ await (0, _handleDeprecationWarnings.default)(
+ outputStream,
+ process.stdin
+ );
+ return await (0, _watch.default)(
+ globalConfig,
+ contexts,
+ outputStream,
+ hasteMapInstances,
+ undefined,
+ undefined,
+ filter
+ );
+ } catch {
+ (0, _exit().default)(0);
+ }
+ }
+ return (0, _watch.default)(
+ globalConfig,
+ contexts,
+ outputStream,
+ hasteMapInstances,
+ undefined,
+ undefined,
+ filter
+ );
+};
+const runWithoutWatch = async (
+ globalConfig,
+ contexts,
+ outputStream,
+ onComplete,
+ changedFilesPromise,
+ filter
+) => {
+ const startRun = async () => {
+ if (!globalConfig.listTests) {
+ preRunMessagePrint(outputStream);
+ }
+ return (0, _runJest.default)({
+ changedFilesPromise,
+ contexts,
+ failedTestsCache: undefined,
+ filter,
+ globalConfig,
+ onComplete,
+ outputStream,
+ startRun,
+ testWatcher: new (_jestWatcher().TestWatcher)({
+ isWatchMode: false
+ })
+ });
+ };
+ return startRun();
+};
diff --git a/client-side/package/node_modules/@jest/core/build/collectHandles.js b/client-side/package/node_modules/@jest/core/build/collectHandles.js
new file mode 100644
index 000000000..ab371b6f2
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/collectHandles.js
@@ -0,0 +1,266 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = collectHandles;
+exports.formatHandleErrors = formatHandleErrors;
+function asyncHooks() {
+ const data = _interopRequireWildcard(require('async_hooks'));
+ asyncHooks = function () {
+ return data;
+ };
+ return data;
+}
+function _util() {
+ const data = require('util');
+ _util = function () {
+ return data;
+ };
+ return data;
+}
+function v8() {
+ const data = _interopRequireWildcard(require('v8'));
+ v8 = function () {
+ return data;
+ };
+ return data;
+}
+function vm() {
+ const data = _interopRequireWildcard(require('vm'));
+ vm = function () {
+ return data;
+ };
+ return data;
+}
+function _stripAnsi() {
+ const data = _interopRequireDefault(require('strip-ansi'));
+ _stripAnsi = function () {
+ return data;
+ };
+ return data;
+}
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+ _jestMessageUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* eslint-disable local/ban-types-eventually */
+
+function stackIsFromUser(stack) {
+ // Either the test file, or something required by it
+ if (stack.includes('Runtime.requireModule')) {
+ return true;
+ }
+
+ // jest-jasmine it or describe call
+ if (stack.includes('asyncJestTest') || stack.includes('asyncJestLifecycle')) {
+ return true;
+ }
+
+ // An async function call from within circus
+ if (stack.includes('callAsyncCircusFn')) {
+ // jest-circus it or describe call
+ return (
+ stack.includes('_callCircusTest') || stack.includes('_callCircusHook')
+ );
+ }
+ return false;
+}
+const alwaysActive = () => true;
+
+// @ts-expect-error: doesn't exist in v12 typings
+const hasWeakRef = typeof WeakRef === 'function';
+const asyncSleep = (0, _util().promisify)(setTimeout);
+let gcFunc = globalThis.gc;
+function runGC() {
+ if (!gcFunc) {
+ v8().setFlagsFromString('--expose-gc');
+ gcFunc = vm().runInNewContext('gc');
+ v8().setFlagsFromString('--no-expose-gc');
+ if (!gcFunc) {
+ throw new Error(
+ 'Cannot find `global.gc` function. Please run node with `--expose-gc` and report this issue in jest repo.'
+ );
+ }
+ }
+ gcFunc();
+}
+
+// Inspired by https://github.com/mafintosh/why-is-node-running/blob/master/index.js
+// Extracted as we want to format the result ourselves
+function collectHandles() {
+ const activeHandles = new Map();
+ const hook = asyncHooks().createHook({
+ destroy(asyncId) {
+ activeHandles.delete(asyncId);
+ },
+ init: function initHook(asyncId, type, triggerAsyncId, resource) {
+ // Skip resources that should not generally prevent the process from
+ // exiting, not last a meaningfully long time, or otherwise shouldn't be
+ // tracked.
+ if (
+ type === 'PROMISE' ||
+ type === 'TIMERWRAP' ||
+ type === 'ELDHISTOGRAM' ||
+ type === 'PerformanceObserver' ||
+ type === 'RANDOMBYTESREQUEST' ||
+ type === 'DNSCHANNEL' ||
+ type === 'ZLIB' ||
+ type === 'SIGNREQUEST'
+ ) {
+ return;
+ }
+ const error = new (_jestUtil().ErrorWithStack)(type, initHook, 100);
+ let fromUser = stackIsFromUser(error.stack || '');
+
+ // If the async resource was not directly created by user code, but was
+ // triggered by another async resource from user code, track it and use
+ // the original triggering resource's stack.
+ if (!fromUser) {
+ const triggeringHandle = activeHandles.get(triggerAsyncId);
+ if (triggeringHandle) {
+ fromUser = true;
+ error.stack = triggeringHandle.error.stack;
+ }
+ }
+ if (fromUser) {
+ let isActive;
+
+ // Handle that supports hasRef
+ if ('hasRef' in resource) {
+ if (hasWeakRef) {
+ // @ts-expect-error: doesn't exist in v12 typings
+ const ref = new WeakRef(resource);
+ isActive = () => {
+ return ref.deref()?.hasRef() ?? false;
+ };
+ } else {
+ isActive = resource.hasRef.bind(resource);
+ }
+ } else {
+ // Handle that doesn't support hasRef
+ isActive = alwaysActive;
+ }
+ activeHandles.set(asyncId, {
+ error,
+ isActive
+ });
+ }
+ }
+ });
+ hook.enable();
+ return async () => {
+ // Wait briefly for any async resources that have been queued for
+ // destruction to actually be destroyed.
+ // For example, Node.js TCP Servers are not destroyed until *after* their
+ // `close` callback runs. If someone finishes a test from the `close`
+ // callback, we will not yet have seen the resource be destroyed here.
+ await asyncSleep(100);
+ if (activeHandles.size > 0) {
+ // For some special objects such as `TLSWRAP`.
+ // Ref: https://github.com/jestjs/jest/issues/11665
+ runGC();
+ await asyncSleep(0);
+ }
+ hook.disable();
+
+ // Get errors for every async resource still referenced at this moment
+ const result = Array.from(activeHandles.values())
+ .filter(({isActive}) => isActive())
+ .map(({error}) => error);
+ activeHandles.clear();
+ return result;
+ };
+}
+function formatHandleErrors(errors, config) {
+ const stacks = new Set();
+ return (
+ errors
+ .map(err =>
+ (0, _jestMessageUtil().formatExecError)(
+ err,
+ config,
+ {
+ noStackTrace: false
+ },
+ undefined,
+ true
+ )
+ )
+ // E.g. timeouts might give multiple traces to the same line of code
+ // This hairy filtering tries to remove entries with duplicate stack traces
+ .filter(handle => {
+ const ansiFree = (0, _stripAnsi().default)(handle);
+ const match = ansiFree.match(/\s+at(.*)/);
+ if (!match || match.length < 2) {
+ return true;
+ }
+ const stack = ansiFree.substr(ansiFree.indexOf(match[1])).trim();
+ if (stacks.has(stack)) {
+ return false;
+ }
+ stacks.add(stack);
+ return true;
+ })
+ );
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getChangedFilesPromise.js b/client-side/package/node_modules/@jest/core/build/getChangedFilesPromise.js
new file mode 100644
index 000000000..aed28f569
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getChangedFilesPromise.js
@@ -0,0 +1,65 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getChangedFilesPromise;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestChangedFiles() {
+ const data = require('jest-changed-files');
+ _jestChangedFiles = function () {
+ return data;
+ };
+ return data;
+}
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+ _jestMessageUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getChangedFilesPromise(globalConfig, configs) {
+ if (globalConfig.onlyChanged) {
+ const allRootsForAllProjects = configs.reduce((roots, config) => {
+ if (config.roots) {
+ roots.push(...config.roots);
+ }
+ return roots;
+ }, []);
+ return (0, _jestChangedFiles().getChangedFilesForRoots)(
+ allRootsForAllProjects,
+ {
+ changedSince: globalConfig.changedSince,
+ lastCommit: globalConfig.lastCommit,
+ withAncestor: globalConfig.changedFilesWithAncestor
+ }
+ ).catch(e => {
+ const message = (0, _jestMessageUtil().formatExecError)(e, configs[0], {
+ noStackTrace: true
+ })
+ .split('\n')
+ .filter(line => !line.includes('Command failed:'))
+ .join('\n');
+ console.error(_chalk().default.red(`\n\n${message}`));
+ process.exit(1);
+ });
+ }
+ return undefined;
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getConfigsOfProjectsToRun.js b/client-side/package/node_modules/@jest/core/build/getConfigsOfProjectsToRun.js
new file mode 100644
index 000000000..c07702ecc
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getConfigsOfProjectsToRun.js
@@ -0,0 +1,40 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getConfigsOfProjectsToRun;
+var _getProjectDisplayName = _interopRequireDefault(
+ require('./getProjectDisplayName')
+);
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getConfigsOfProjectsToRun(projectConfigs, opts) {
+ const projectFilter = createProjectFilter(opts);
+ return projectConfigs.filter(config => {
+ const name = (0, _getProjectDisplayName.default)(config);
+ return projectFilter(name);
+ });
+}
+function createProjectFilter(opts) {
+ const {selectProjects, ignoreProjects} = opts;
+ const always = () => true;
+ const selected = selectProjects
+ ? name => name && selectProjects.includes(name)
+ : always;
+ const notIgnore = ignoreProjects
+ ? name => !(name && ignoreProjects.includes(name))
+ : always;
+ function test(name) {
+ return selected(name) && notIgnore(name);
+ }
+ return test;
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getNoTestFound.js b/client-side/package/node_modules/@jest/core/build/getNoTestFound.js
new file mode 100644
index 000000000..b84c23c4e
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getNoTestFound.js
@@ -0,0 +1,80 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFound;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getNoTestFound(testRunData, globalConfig, willExitWith0) {
+ const testFiles = testRunData.reduce(
+ (current, testRun) => current + (testRun.matches.total || 0),
+ 0
+ );
+ let dataMessage;
+ if (globalConfig.runTestsByPath) {
+ dataMessage = `Files: ${globalConfig.nonFlagArgs
+ .map(p => `"${p}"`)
+ .join(', ')}`;
+ } else {
+ dataMessage = `Pattern: ${_chalk().default.yellow(
+ globalConfig.testPathPattern
+ )} - 0 matches`;
+ }
+ if (willExitWith0) {
+ return (
+ `${_chalk().default.bold('No tests found, exiting with code 0')}\n` +
+ `In ${_chalk().default.bold(globalConfig.rootDir)}` +
+ '\n' +
+ ` ${(0, _jestUtil().pluralize)(
+ 'file',
+ testFiles,
+ 's'
+ )} checked across ${(0, _jestUtil().pluralize)(
+ 'project',
+ testRunData.length,
+ 's'
+ )}. Run with \`--verbose\` for more details.` +
+ `\n${dataMessage}`
+ );
+ }
+ return (
+ `${_chalk().default.bold('No tests found, exiting with code 1')}\n` +
+ 'Run with `--passWithNoTests` to exit with code 0' +
+ '\n' +
+ `In ${_chalk().default.bold(globalConfig.rootDir)}` +
+ '\n' +
+ ` ${(0, _jestUtil().pluralize)(
+ 'file',
+ testFiles,
+ 's'
+ )} checked across ${(0, _jestUtil().pluralize)(
+ 'project',
+ testRunData.length,
+ 's'
+ )}. Run with \`--verbose\` for more details.` +
+ `\n${dataMessage}`
+ );
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getNoTestFoundFailed.js b/client-side/package/node_modules/@jest/core/build/getNoTestFoundFailed.js
new file mode 100644
index 000000000..1c8cc61c0
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getNoTestFoundFailed.js
@@ -0,0 +1,43 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFoundFailed;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getNoTestFoundFailed(globalConfig) {
+ let msg = _chalk().default.bold('No failed test found.');
+ if (_jestUtil().isInteractive) {
+ msg += _chalk().default.dim(
+ `\n${
+ globalConfig.watch
+ ? 'Press `f` to quit "only failed tests" mode.'
+ : 'Run Jest without `--onlyFailures` or with `--all` to run all tests.'
+ }`
+ );
+ }
+ return msg;
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.js b/client-side/package/node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.js
new file mode 100644
index 000000000..b0c36287d
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getNoTestFoundPassWithNoTests.js
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFoundPassWithNoTests;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getNoTestFoundPassWithNoTests() {
+ return _chalk().default.bold('No tests found, exiting with code 0');
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.js b/client-side/package/node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.js
new file mode 100644
index 000000000..334561f14
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getNoTestFoundRelatedToChangedFiles.js
@@ -0,0 +1,48 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFoundRelatedToChangedFiles;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getNoTestFoundRelatedToChangedFiles(globalConfig) {
+ const ref = globalConfig.changedSince
+ ? `"${globalConfig.changedSince}"`
+ : 'last commit';
+ let msg = _chalk().default.bold(
+ `No tests found related to files changed since ${ref}.`
+ );
+ if (_jestUtil().isInteractive) {
+ msg += _chalk().default.dim(
+ `\n${
+ globalConfig.watch
+ ? 'Press `a` to run all tests, or run Jest with `--watchAll`.'
+ : 'Run Jest without `-o` or with `--all` to run all tests.'
+ }`
+ );
+ }
+ return msg;
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getNoTestFoundVerbose.js b/client-side/package/node_modules/@jest/core/build/getNoTestFoundVerbose.js
new file mode 100644
index 000000000..414602ceb
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getNoTestFoundVerbose.js
@@ -0,0 +1,91 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestFoundVerbose;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getNoTestFoundVerbose(testRunData, globalConfig, willExitWith0) {
+ const individualResults = testRunData.map(testRun => {
+ const stats = testRun.matches.stats || {};
+ const config = testRun.context.config;
+ const statsMessage = Object.keys(stats)
+ .map(key => {
+ if (key === 'roots' && config.roots.length === 1) {
+ return null;
+ }
+ const value = config[key];
+ if (value) {
+ const valueAsString = Array.isArray(value)
+ ? value.join(', ')
+ : String(value);
+ const matches = (0, _jestUtil().pluralize)(
+ 'match',
+ stats[key] || 0,
+ 'es'
+ );
+ return ` ${key}: ${_chalk().default.yellow(
+ valueAsString
+ )} - ${matches}`;
+ }
+ return null;
+ })
+ .filter(line => line)
+ .join('\n');
+ return testRun.matches.total
+ ? `In ${_chalk().default.bold(config.rootDir)}\n` +
+ ` ${(0, _jestUtil().pluralize)(
+ 'file',
+ testRun.matches.total || 0,
+ 's'
+ )} checked.\n${statsMessage}`
+ : `No files found in ${config.rootDir}.\n` +
+ "Make sure Jest's configuration does not exclude this directory." +
+ '\nTo set up Jest, make sure a package.json file exists.\n' +
+ 'Jest Documentation: ' +
+ 'https://jestjs.io/docs/configuration';
+ });
+ let dataMessage;
+ if (globalConfig.runTestsByPath) {
+ dataMessage = `Files: ${globalConfig.nonFlagArgs
+ .map(p => `"${p}"`)
+ .join(', ')}`;
+ } else {
+ dataMessage = `Pattern: ${_chalk().default.yellow(
+ globalConfig.testPathPattern
+ )} - 0 matches`;
+ }
+ if (willExitWith0) {
+ return `${_chalk().default.bold(
+ 'No tests found, exiting with code 0'
+ )}\n${individualResults.join('\n')}\n${dataMessage}`;
+ }
+ return (
+ `${_chalk().default.bold('No tests found, exiting with code 1')}\n` +
+ 'Run with `--passWithNoTests` to exit with code 0' +
+ `\n${individualResults.join('\n')}\n${dataMessage}`
+ );
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getNoTestsFoundMessage.js b/client-side/package/node_modules/@jest/core/build/getNoTestsFoundMessage.js
new file mode 100644
index 000000000..60f09a215
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getNoTestsFoundMessage.js
@@ -0,0 +1,64 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getNoTestsFoundMessage;
+var _getNoTestFound = _interopRequireDefault(require('./getNoTestFound'));
+var _getNoTestFoundFailed = _interopRequireDefault(
+ require('./getNoTestFoundFailed')
+);
+var _getNoTestFoundPassWithNoTests = _interopRequireDefault(
+ require('./getNoTestFoundPassWithNoTests')
+);
+var _getNoTestFoundRelatedToChangedFiles = _interopRequireDefault(
+ require('./getNoTestFoundRelatedToChangedFiles')
+);
+var _getNoTestFoundVerbose = _interopRequireDefault(
+ require('./getNoTestFoundVerbose')
+);
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getNoTestsFoundMessage(testRunData, globalConfig) {
+ const exitWith0 =
+ globalConfig.passWithNoTests ||
+ globalConfig.lastCommit ||
+ globalConfig.onlyChanged;
+ if (globalConfig.onlyFailures) {
+ return {
+ exitWith0,
+ message: (0, _getNoTestFoundFailed.default)(globalConfig)
+ };
+ }
+ if (globalConfig.onlyChanged) {
+ return {
+ exitWith0,
+ message: (0, _getNoTestFoundRelatedToChangedFiles.default)(globalConfig)
+ };
+ }
+ if (globalConfig.passWithNoTests) {
+ return {
+ exitWith0,
+ message: (0, _getNoTestFoundPassWithNoTests.default)()
+ };
+ }
+ return {
+ exitWith0,
+ message:
+ testRunData.length === 1 || globalConfig.verbose
+ ? (0, _getNoTestFoundVerbose.default)(
+ testRunData,
+ globalConfig,
+ exitWith0
+ )
+ : (0, _getNoTestFound.default)(testRunData, globalConfig, exitWith0)
+ };
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getProjectDisplayName.js b/client-side/package/node_modules/@jest/core/build/getProjectDisplayName.js
new file mode 100644
index 000000000..b5857033e
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getProjectDisplayName.js
@@ -0,0 +1,16 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getProjectDisplayName;
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getProjectDisplayName(projectConfig) {
+ return projectConfig.displayName?.name || undefined;
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getProjectNamesMissingWarning.js b/client-side/package/node_modules/@jest/core/build/getProjectNamesMissingWarning.js
new file mode 100644
index 000000000..6efed6377
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getProjectNamesMissingWarning.js
@@ -0,0 +1,49 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getProjectNamesMissingWarning;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+var _getProjectDisplayName = _interopRequireDefault(
+ require('./getProjectDisplayName')
+);
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getProjectNamesMissingWarning(projectConfigs, opts) {
+ const numberOfProjectsWithoutAName = projectConfigs.filter(
+ config => !(0, _getProjectDisplayName.default)(config)
+ ).length;
+ if (numberOfProjectsWithoutAName === 0) {
+ return undefined;
+ }
+ const args = [];
+ if (opts.selectProjects) {
+ args.push('--selectProjects');
+ }
+ if (opts.ignoreProjects) {
+ args.push('--ignoreProjects');
+ }
+ return _chalk().default.yellow(
+ `You provided values for ${args.join(' and ')} but ${
+ numberOfProjectsWithoutAName === 1
+ ? 'a project does not have a name'
+ : `${numberOfProjectsWithoutAName} projects do not have a name`
+ }.\n` +
+ 'Set displayName in the config of all projects in order to disable this warning.\n'
+ );
+}
diff --git a/client-side/package/node_modules/@jest/core/build/getSelectProjectsMessage.js b/client-side/package/node_modules/@jest/core/build/getSelectProjectsMessage.js
new file mode 100644
index 000000000..5f3f0ad85
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/getSelectProjectsMessage.js
@@ -0,0 +1,71 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getSelectProjectsMessage;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+var _getProjectDisplayName = _interopRequireDefault(
+ require('./getProjectDisplayName')
+);
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getSelectProjectsMessage(projectConfigs, opts) {
+ if (projectConfigs.length === 0) {
+ return getNoSelectionWarning(opts);
+ }
+ return getProjectsRunningMessage(projectConfigs);
+}
+function getNoSelectionWarning(opts) {
+ if (opts.ignoreProjects && opts.selectProjects) {
+ return _chalk().default.yellow(
+ 'You provided values for --selectProjects and --ignoreProjects, but no projects were found matching the selection.\n' +
+ 'Are you ignoring all the selected projects?\n'
+ );
+ } else if (opts.ignoreProjects) {
+ return _chalk().default.yellow(
+ 'You provided values for --ignoreProjects, but no projects were found matching the selection.\n' +
+ 'Are you ignoring all projects?\n'
+ );
+ } else if (opts.selectProjects) {
+ return _chalk().default.yellow(
+ 'You provided values for --selectProjects but no projects were found matching the selection.\n'
+ );
+ } else {
+ return _chalk().default.yellow('No projects were found.\n');
+ }
+}
+function getProjectsRunningMessage(projectConfigs) {
+ if (projectConfigs.length === 1) {
+ const name =
+ (0, _getProjectDisplayName.default)(projectConfigs[0]) ??
+ '';
+ return `Running one project: ${_chalk().default.bold(name)}\n`;
+ }
+ const projectsList = projectConfigs
+ .map(getProjectNameListElement)
+ .sort()
+ .join('\n');
+ return `Running ${projectConfigs.length} projects:\n${projectsList}\n`;
+}
+function getProjectNameListElement(projectConfig) {
+ const name = (0, _getProjectDisplayName.default)(projectConfig);
+ const elementContent = name
+ ? _chalk().default.bold(name)
+ : '';
+ return `- ${elementContent}`;
+}
diff --git a/client-side/package/node_modules/@jest/core/build/index.d.ts b/client-side/package/node_modules/@jest/core/build/index.d.ts
new file mode 100644
index 000000000..19d9ba34d
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/index.d.ts
@@ -0,0 +1,118 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import {AggregatedResult} from '@jest/test-result';
+import {BaseReporter} from '@jest/reporters';
+import type {ChangedFiles} from 'jest-changed-files';
+import type {Config} from '@jest/types';
+import {Reporter} from '@jest/reporters';
+import {ReporterContext} from '@jest/reporters';
+import {Test} from '@jest/test-result';
+import type {TestContext} from '@jest/test-result';
+import type {TestRunnerContext} from 'jest-runner';
+import type {TestWatcher} from 'jest-watcher';
+
+export declare function createTestScheduler(
+ globalConfig: Config.GlobalConfig,
+ context: TestSchedulerContext,
+): Promise;
+
+declare type Filter = (testPaths: Array) => Promise<{
+ filtered: Array;
+}>;
+
+declare type FilterResult = {
+ test: string;
+ message: string;
+};
+
+export declare function getVersion(): string;
+
+declare type ReporterConstructor = new (
+ globalConfig: Config.GlobalConfig,
+ reporterConfig: Record,
+ reporterContext: ReporterContext,
+) => BaseReporter;
+
+export declare function runCLI(
+ argv: Config.Argv,
+ projects: Array,
+): Promise<{
+ results: AggregatedResult;
+ globalConfig: Config.GlobalConfig;
+}>;
+
+declare type SearchResult = {
+ noSCM?: boolean;
+ stats?: Stats;
+ collectCoverageFrom?: Set;
+ tests: Array;
+ total?: number;
+};
+
+export declare class SearchSource {
+ private readonly _context;
+ private _dependencyResolver;
+ private readonly _testPathCases;
+ constructor(context: TestContext);
+ private _getOrBuildDependencyResolver;
+ private _filterTestPathsWithStats;
+ private _getAllTestPaths;
+ isTestFilePath(path: string): boolean;
+ findMatchingTests(testPathPattern: string): SearchResult;
+ findRelatedTests(
+ allPaths: Set,
+ collectCoverage: boolean,
+ ): Promise;
+ findTestsByPaths(paths: Array): SearchResult;
+ findRelatedTestsFromPattern(
+ paths: Array,
+ collectCoverage: boolean,
+ ): Promise;
+ findTestRelatedToChangedFiles(
+ changedFilesInfo: ChangedFiles,
+ collectCoverage: boolean,
+ ): Promise;
+ private _getTestPaths;
+ filterPathsWin32(paths: Array): Array;
+ getTestPaths(
+ globalConfig: Config.GlobalConfig,
+ changedFiles?: ChangedFiles,
+ filter?: Filter,
+ ): Promise;
+ findRelatedSourcesFromTestsInChangedFiles(
+ changedFilesInfo: ChangedFiles,
+ ): Promise>;
+}
+
+declare type Stats = {
+ roots: number;
+ testMatch: number;
+ testPathIgnorePatterns: number;
+ testRegex: number;
+ testPathPattern?: number;
+};
+
+declare class TestScheduler {
+ private readonly _context;
+ private readonly _dispatcher;
+ private readonly _globalConfig;
+ constructor(globalConfig: Config.GlobalConfig, context: TestSchedulerContext);
+ addReporter(reporter: Reporter): void;
+ removeReporter(reporterConstructor: ReporterConstructor): void;
+ scheduleTests(
+ tests: Array,
+ watcher: TestWatcher,
+ ): Promise;
+ private _partitionTests;
+ _setupReporters(): Promise;
+ private _addCustomReporter;
+ private _bailIfNeeded;
+}
+
+declare type TestSchedulerContext = ReporterContext & TestRunnerContext;
+
+export {};
diff --git a/client-side/package/node_modules/@jest/core/build/index.js b/client-side/package/node_modules/@jest/core/build/index.js
new file mode 100644
index 000000000..e6a0fe59c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/index.js
@@ -0,0 +1,36 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'SearchSource', {
+ enumerable: true,
+ get: function () {
+ return _SearchSource.default;
+ }
+});
+Object.defineProperty(exports, 'createTestScheduler', {
+ enumerable: true,
+ get: function () {
+ return _TestScheduler.createTestScheduler;
+ }
+});
+Object.defineProperty(exports, 'getVersion', {
+ enumerable: true,
+ get: function () {
+ return _version.default;
+ }
+});
+Object.defineProperty(exports, 'runCLI', {
+ enumerable: true,
+ get: function () {
+ return _cli.runCLI;
+ }
+});
+var _SearchSource = _interopRequireDefault(require('./SearchSource'));
+var _TestScheduler = require('./TestScheduler');
+var _cli = require('./cli');
+var _version = _interopRequireDefault(require('./version'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/client-side/package/node_modules/@jest/core/build/lib/activeFiltersMessage.js b/client-side/package/node_modules/@jest/core/build/lib/activeFiltersMessage.js
new file mode 100644
index 000000000..2984f0916
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/lib/activeFiltersMessage.js
@@ -0,0 +1,52 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const activeFilters = globalConfig => {
+ const {testNamePattern, testPathPattern} = globalConfig;
+ if (testNamePattern || testPathPattern) {
+ const filters = [
+ testPathPattern
+ ? _chalk().default.dim('filename ') +
+ _chalk().default.yellow(`/${testPathPattern}/`)
+ : null,
+ testNamePattern
+ ? _chalk().default.dim('test name ') +
+ _chalk().default.yellow(`/${testNamePattern}/`)
+ : null
+ ]
+ .filter(_jestUtil().isNonNullable)
+ .join(', ');
+ const messages = `\n${_chalk().default.bold('Active Filters: ')}${filters}`;
+ return messages;
+ }
+ return '';
+};
+var _default = activeFilters;
+exports.default = _default;
diff --git a/client-side/package/node_modules/@jest/core/build/lib/createContext.js b/client-side/package/node_modules/@jest/core/build/lib/createContext.js
new file mode 100644
index 000000000..67d416d5a
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/lib/createContext.js
@@ -0,0 +1,31 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = createContext;
+function _jestRuntime() {
+ const data = _interopRequireDefault(require('jest-runtime'));
+ _jestRuntime = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function createContext(config, {hasteFS, moduleMap}) {
+ return {
+ config,
+ hasteFS,
+ moduleMap,
+ resolver: _jestRuntime().default.createResolver(config, moduleMap)
+ };
+}
diff --git a/client-side/package/node_modules/@jest/core/build/lib/handleDeprecationWarnings.js b/client-side/package/node_modules/@jest/core/build/lib/handleDeprecationWarnings.js
new file mode 100644
index 000000000..7d4dc1b7b
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/lib/handleDeprecationWarnings.js
@@ -0,0 +1,65 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = handleDeprecationWarnings;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function handleDeprecationWarnings(pipe, stdin = process.stdin) {
+ return new Promise((resolve, reject) => {
+ if (typeof stdin.setRawMode === 'function') {
+ const messages = [
+ _chalk().default.red('There are deprecation warnings.\n'),
+ `${_chalk().default.dim(' \u203A Press ')}Enter${_chalk().default.dim(
+ ' to continue.'
+ )}`,
+ `${_chalk().default.dim(' \u203A Press ')}Esc${_chalk().default.dim(
+ ' to exit.'
+ )}`
+ ];
+ pipe.write(messages.join('\n'));
+ stdin.setRawMode(true);
+ stdin.resume();
+ stdin.setEncoding('utf8');
+ // this is a string since we set encoding above
+ stdin.on('data', key => {
+ if (key === _jestWatcher().KEYS.ENTER) {
+ resolve();
+ } else if (
+ [
+ _jestWatcher().KEYS.ESCAPE,
+ _jestWatcher().KEYS.CONTROL_C,
+ _jestWatcher().KEYS.CONTROL_D
+ ].indexOf(key) !== -1
+ ) {
+ reject();
+ }
+ });
+ } else {
+ resolve();
+ }
+ });
+}
diff --git a/client-side/package/node_modules/@jest/core/build/lib/isValidPath.js b/client-side/package/node_modules/@jest/core/build/lib/isValidPath.js
new file mode 100644
index 000000000..fd2f91ca7
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/lib/isValidPath.js
@@ -0,0 +1,26 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = isValidPath;
+function _jestSnapshot() {
+ const data = require('jest-snapshot');
+ _jestSnapshot = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function isValidPath(globalConfig, filePath) {
+ return (
+ !filePath.includes(globalConfig.coverageDirectory) &&
+ !(0, _jestSnapshot().isSnapshotPath)(filePath)
+ );
+}
diff --git a/client-side/package/node_modules/@jest/core/build/lib/logDebugMessages.js b/client-side/package/node_modules/@jest/core/build/lib/logDebugMessages.js
new file mode 100644
index 000000000..ab8fd0fd8
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/lib/logDebugMessages.js
@@ -0,0 +1,24 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = logDebugMessages;
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const VERSION = require('../../package.json').version;
+
+// if the output here changes, update `getConfig` in e2e/runJest.ts
+function logDebugMessages(globalConfig, configs, outputStream) {
+ const output = {
+ configs,
+ globalConfig,
+ version: VERSION
+ };
+ outputStream.write(`${JSON.stringify(output, null, ' ')}\n`);
+}
diff --git a/client-side/package/node_modules/@jest/core/build/lib/updateGlobalConfig.js b/client-side/package/node_modules/@jest/core/build/lib/updateGlobalConfig.js
new file mode 100644
index 000000000..38bdc4fa8
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/lib/updateGlobalConfig.js
@@ -0,0 +1,95 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = updateGlobalConfig;
+function _jestRegexUtil() {
+ const data = require('jest-regex-util');
+ _jestRegexUtil = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function updateGlobalConfig(globalConfig, options = {}) {
+ const newConfig = {
+ ...globalConfig
+ };
+ if (options.mode === 'watch') {
+ newConfig.watch = true;
+ newConfig.watchAll = false;
+ } else if (options.mode === 'watchAll') {
+ newConfig.watch = false;
+ newConfig.watchAll = true;
+ }
+ if (options.testNamePattern !== undefined) {
+ newConfig.testNamePattern = options.testNamePattern || '';
+ }
+ if (options.testPathPattern !== undefined) {
+ newConfig.testPathPattern =
+ (0, _jestRegexUtil().replacePathSepForRegex)(options.testPathPattern) ||
+ '';
+ }
+ newConfig.onlyChanged =
+ !newConfig.watchAll &&
+ !newConfig.testNamePattern &&
+ !newConfig.testPathPattern;
+ if (typeof options.bail === 'boolean') {
+ newConfig.bail = options.bail ? 1 : 0;
+ } else if (options.bail !== undefined) {
+ newConfig.bail = options.bail;
+ }
+ if (options.changedSince !== undefined) {
+ newConfig.changedSince = options.changedSince;
+ }
+ if (options.collectCoverage !== undefined) {
+ newConfig.collectCoverage = options.collectCoverage || false;
+ }
+ if (options.collectCoverageFrom !== undefined) {
+ newConfig.collectCoverageFrom = options.collectCoverageFrom;
+ }
+ if (options.coverageDirectory !== undefined) {
+ newConfig.coverageDirectory = options.coverageDirectory;
+ }
+ if (options.coverageReporters !== undefined) {
+ newConfig.coverageReporters = options.coverageReporters;
+ }
+ if (options.findRelatedTests !== undefined) {
+ newConfig.findRelatedTests = options.findRelatedTests;
+ }
+ if (options.nonFlagArgs !== undefined) {
+ newConfig.nonFlagArgs = options.nonFlagArgs;
+ }
+ if (options.noSCM) {
+ newConfig.noSCM = true;
+ }
+ if (options.notify !== undefined) {
+ newConfig.notify = options.notify || false;
+ }
+ if (options.notifyMode !== undefined) {
+ newConfig.notifyMode = options.notifyMode;
+ }
+ if (options.onlyFailures !== undefined) {
+ newConfig.onlyFailures = options.onlyFailures || false;
+ }
+ if (options.passWithNoTests !== undefined) {
+ newConfig.passWithNoTests = true;
+ }
+ if (options.reporters !== undefined) {
+ newConfig.reporters = options.reporters;
+ }
+ if (options.updateSnapshot !== undefined) {
+ newConfig.updateSnapshot = options.updateSnapshot;
+ }
+ if (options.verbose !== undefined) {
+ newConfig.verbose = options.verbose || false;
+ }
+ return Object.freeze(newConfig);
+}
diff --git a/client-side/package/node_modules/@jest/core/build/lib/watchPluginsHelpers.js b/client-side/package/node_modules/@jest/core/build/lib/watchPluginsHelpers.js
new file mode 100644
index 000000000..db8454cd0
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/lib/watchPluginsHelpers.js
@@ -0,0 +1,56 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.getSortedUsageRows = exports.filterInteractivePlugins = void 0;
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const filterInteractivePlugins = (watchPlugins, globalConfig) => {
+ const usageInfos = watchPlugins.map(
+ p => p.getUsageInfo && p.getUsageInfo(globalConfig)
+ );
+ return watchPlugins.filter((_plugin, i) => {
+ const usageInfo = usageInfos[i];
+ if (usageInfo) {
+ const {key} = usageInfo;
+ return !usageInfos.slice(i + 1).some(u => !!u && key === u.key);
+ }
+ return false;
+ });
+};
+exports.filterInteractivePlugins = filterInteractivePlugins;
+const getSortedUsageRows = (watchPlugins, globalConfig) =>
+ filterInteractivePlugins(watchPlugins, globalConfig)
+ .sort((a, b) => {
+ if (a.isInternal && b.isInternal) {
+ // internal plugins in the order we specify them
+ return 0;
+ }
+ if (a.isInternal !== b.isInternal) {
+ // external plugins afterwards
+ return a.isInternal ? -1 : 1;
+ }
+ const usageInfoA = a.getUsageInfo && a.getUsageInfo(globalConfig);
+ const usageInfoB = b.getUsageInfo && b.getUsageInfo(globalConfig);
+ if (usageInfoA && usageInfoB) {
+ // external plugins in alphabetical order
+ return usageInfoA.key.localeCompare(usageInfoB.key);
+ }
+ return 0;
+ })
+ .map(p => p.getUsageInfo && p.getUsageInfo(globalConfig))
+ .filter(_jestUtil().isNonNullable);
+exports.getSortedUsageRows = getSortedUsageRows;
diff --git a/client-side/package/node_modules/@jest/core/build/plugins/FailedTestsInteractive.js b/client-side/package/node_modules/@jest/core/build/plugins/FailedTestsInteractive.js
new file mode 100644
index 000000000..8e71740a1
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/plugins/FailedTestsInteractive.js
@@ -0,0 +1,96 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+var _FailedTestsInteractiveMode = _interopRequireDefault(
+ require('../FailedTestsInteractiveMode')
+);
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class FailedTestsInteractivePlugin extends _jestWatcher().BaseWatchPlugin {
+ _failedTestAssertions;
+ _manager = new _FailedTestsInteractiveMode.default(this._stdout);
+ apply(hooks) {
+ hooks.onTestRunComplete(results => {
+ this._failedTestAssertions = this.getFailedTestAssertions(results);
+ if (this._manager.isActive()) this._manager.updateWithResults(results);
+ });
+ }
+ getUsageInfo() {
+ if (this._failedTestAssertions?.length) {
+ return {
+ key: 'i',
+ prompt: 'run failing tests interactively'
+ };
+ }
+ return null;
+ }
+ onKey(key) {
+ if (this._manager.isActive()) {
+ this._manager.put(key);
+ }
+ }
+ run(_, updateConfigAndRun) {
+ return new Promise(resolve => {
+ if (
+ !this._failedTestAssertions ||
+ this._failedTestAssertions.length === 0
+ ) {
+ resolve();
+ return;
+ }
+ this._manager.run(this._failedTestAssertions, failure => {
+ updateConfigAndRun({
+ mode: 'watch',
+ testNamePattern: failure ? `^${failure.fullName}$` : '',
+ testPathPattern: failure?.path || ''
+ });
+ if (!this._manager.isActive()) {
+ resolve();
+ }
+ });
+ });
+ }
+ getFailedTestAssertions(results) {
+ const failedTestPaths = [];
+ if (
+ // skip if no failed tests
+ results.numFailedTests === 0 ||
+ // skip if missing test results
+ !results.testResults ||
+ // skip if unmatched snapshots are present
+ results.snapshot.unmatched
+ ) {
+ return failedTestPaths;
+ }
+ results.testResults.forEach(testResult => {
+ testResult.testResults.forEach(result => {
+ if (result.status === 'failed') {
+ failedTestPaths.push({
+ fullName: result.fullName,
+ path: testResult.testFilePath
+ });
+ }
+ });
+ });
+ return failedTestPaths;
+ }
+}
+exports.default = FailedTestsInteractivePlugin;
diff --git a/client-side/package/node_modules/@jest/core/build/plugins/Quit.js b/client-side/package/node_modules/@jest/core/build/plugins/Quit.js
new file mode 100644
index 000000000..d417abc7c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/plugins/Quit.js
@@ -0,0 +1,42 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class QuitPlugin extends _jestWatcher().BaseWatchPlugin {
+ isInternal;
+ constructor(options) {
+ super(options);
+ this.isInternal = true;
+ }
+ async run() {
+ if (typeof this._stdin.setRawMode === 'function') {
+ this._stdin.setRawMode(false);
+ }
+ this._stdout.write('\n');
+ process.exit(0);
+ }
+ getUsageInfo() {
+ return {
+ key: 'q',
+ prompt: 'quit watch mode'
+ };
+ }
+}
+var _default = QuitPlugin;
+exports.default = _default;
diff --git a/client-side/package/node_modules/@jest/core/build/plugins/TestNamePattern.js b/client-side/package/node_modules/@jest/core/build/plugins/TestNamePattern.js
new file mode 100644
index 000000000..f959b5668
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/plugins/TestNamePattern.js
@@ -0,0 +1,70 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+var _TestNamePatternPrompt = _interopRequireDefault(
+ require('../TestNamePatternPrompt')
+);
+var _activeFiltersMessage = _interopRequireDefault(
+ require('../lib/activeFiltersMessage')
+);
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class TestNamePatternPlugin extends _jestWatcher().BaseWatchPlugin {
+ _prompt;
+ isInternal;
+ constructor(options) {
+ super(options);
+ this._prompt = new (_jestWatcher().Prompt)();
+ this.isInternal = true;
+ }
+ getUsageInfo() {
+ return {
+ key: 't',
+ prompt: 'filter by a test name regex pattern'
+ };
+ }
+ onKey(key) {
+ this._prompt.put(key);
+ }
+ run(globalConfig, updateConfigAndRun) {
+ return new Promise((res, rej) => {
+ const testNamePatternPrompt = new _TestNamePatternPrompt.default(
+ this._stdout,
+ this._prompt
+ );
+ testNamePatternPrompt.run(
+ value => {
+ updateConfigAndRun({
+ mode: 'watch',
+ testNamePattern: value
+ });
+ res();
+ },
+ rej,
+ {
+ header: (0, _activeFiltersMessage.default)(globalConfig)
+ }
+ );
+ });
+ }
+}
+var _default = TestNamePatternPlugin;
+exports.default = _default;
diff --git a/client-side/package/node_modules/@jest/core/build/plugins/TestPathPattern.js b/client-side/package/node_modules/@jest/core/build/plugins/TestPathPattern.js
new file mode 100644
index 000000000..10c4ccfe7
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/plugins/TestPathPattern.js
@@ -0,0 +1,70 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+var _TestPathPatternPrompt = _interopRequireDefault(
+ require('../TestPathPatternPrompt')
+);
+var _activeFiltersMessage = _interopRequireDefault(
+ require('../lib/activeFiltersMessage')
+);
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class TestPathPatternPlugin extends _jestWatcher().BaseWatchPlugin {
+ _prompt;
+ isInternal;
+ constructor(options) {
+ super(options);
+ this._prompt = new (_jestWatcher().Prompt)();
+ this.isInternal = true;
+ }
+ getUsageInfo() {
+ return {
+ key: 'p',
+ prompt: 'filter by a filename regex pattern'
+ };
+ }
+ onKey(key) {
+ this._prompt.put(key);
+ }
+ run(globalConfig, updateConfigAndRun) {
+ return new Promise((res, rej) => {
+ const testPathPatternPrompt = new _TestPathPatternPrompt.default(
+ this._stdout,
+ this._prompt
+ );
+ testPathPatternPrompt.run(
+ value => {
+ updateConfigAndRun({
+ mode: 'watch',
+ testPathPattern: value
+ });
+ res();
+ },
+ rej,
+ {
+ header: (0, _activeFiltersMessage.default)(globalConfig)
+ }
+ );
+ });
+ }
+}
+var _default = TestPathPatternPlugin;
+exports.default = _default;
diff --git a/client-side/package/node_modules/@jest/core/build/plugins/UpdateSnapshots.js b/client-side/package/node_modules/@jest/core/build/plugins/UpdateSnapshots.js
new file mode 100644
index 000000000..17a8d15be
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/plugins/UpdateSnapshots.js
@@ -0,0 +1,51 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class UpdateSnapshotsPlugin extends _jestWatcher().BaseWatchPlugin {
+ _hasSnapshotFailure;
+ isInternal;
+ constructor(options) {
+ super(options);
+ this.isInternal = true;
+ this._hasSnapshotFailure = false;
+ }
+ run(_globalConfig, updateConfigAndRun) {
+ updateConfigAndRun({
+ updateSnapshot: 'all'
+ });
+ return Promise.resolve(false);
+ }
+ apply(hooks) {
+ hooks.onTestRunComplete(results => {
+ this._hasSnapshotFailure = results.snapshot.failure;
+ });
+ }
+ getUsageInfo() {
+ if (this._hasSnapshotFailure) {
+ return {
+ key: 'u',
+ prompt: 'update failing snapshots'
+ };
+ }
+ return null;
+ }
+}
+var _default = UpdateSnapshotsPlugin;
+exports.default = _default;
diff --git a/client-side/package/node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.js b/client-side/package/node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.js
new file mode 100644
index 000000000..d21821e36
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/plugins/UpdateSnapshotsInteractive.js
@@ -0,0 +1,99 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+var _SnapshotInteractiveMode = _interopRequireDefault(
+ require('../SnapshotInteractiveMode')
+);
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* eslint-disable local/ban-types-eventually */
+
+class UpdateSnapshotInteractivePlugin extends _jestWatcher().BaseWatchPlugin {
+ _snapshotInteractiveMode = new _SnapshotInteractiveMode.default(this._stdout);
+ _failedSnapshotTestAssertions = [];
+ isInternal = true;
+ getFailedSnapshotTestAssertions(testResults) {
+ const failedTestPaths = [];
+ if (testResults.numFailedTests === 0 || !testResults.testResults) {
+ return failedTestPaths;
+ }
+ testResults.testResults.forEach(testResult => {
+ if (testResult.snapshot && testResult.snapshot.unmatched) {
+ testResult.testResults.forEach(result => {
+ if (result.status === 'failed') {
+ failedTestPaths.push({
+ fullName: result.fullName,
+ path: testResult.testFilePath
+ });
+ }
+ });
+ }
+ });
+ return failedTestPaths;
+ }
+ apply(hooks) {
+ hooks.onTestRunComplete(results => {
+ this._failedSnapshotTestAssertions =
+ this.getFailedSnapshotTestAssertions(results);
+ if (this._snapshotInteractiveMode.isActive()) {
+ this._snapshotInteractiveMode.updateWithResults(results);
+ }
+ });
+ }
+ onKey(key) {
+ if (this._snapshotInteractiveMode.isActive()) {
+ this._snapshotInteractiveMode.put(key);
+ }
+ }
+ run(_globalConfig, updateConfigAndRun) {
+ if (this._failedSnapshotTestAssertions.length) {
+ return new Promise(res => {
+ this._snapshotInteractiveMode.run(
+ this._failedSnapshotTestAssertions,
+ (assertion, shouldUpdateSnapshot) => {
+ updateConfigAndRun({
+ mode: 'watch',
+ testNamePattern: assertion ? `^${assertion.fullName}$` : '',
+ testPathPattern: assertion ? assertion.path : '',
+ updateSnapshot: shouldUpdateSnapshot ? 'all' : 'none'
+ });
+ if (!this._snapshotInteractiveMode.isActive()) {
+ res();
+ }
+ }
+ );
+ });
+ } else {
+ return Promise.resolve();
+ }
+ }
+ getUsageInfo() {
+ if (this._failedSnapshotTestAssertions?.length > 0) {
+ return {
+ key: 'i',
+ prompt: 'update failing snapshots interactively'
+ };
+ }
+ return null;
+ }
+}
+var _default = UpdateSnapshotInteractivePlugin;
+exports.default = _default;
diff --git a/client-side/package/node_modules/@jest/core/build/runGlobalHook.js b/client-side/package/node_modules/@jest/core/build/runGlobalHook.js
new file mode 100644
index 000000000..dfba1bb9d
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/runGlobalHook.js
@@ -0,0 +1,133 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = runGlobalHook;
+function util() {
+ const data = _interopRequireWildcard(require('util'));
+ util = function () {
+ return data;
+ };
+ return data;
+}
+function _transform() {
+ const data = require('@jest/transform');
+ _transform = function () {
+ return data;
+ };
+ return data;
+}
+function _prettyFormat() {
+ const data = _interopRequireDefault(require('pretty-format'));
+ _prettyFormat = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+async function runGlobalHook({allTests, globalConfig, moduleName}) {
+ const globalModulePaths = new Set(
+ allTests.map(test => test.context.config[moduleName])
+ );
+ if (globalConfig[moduleName]) {
+ globalModulePaths.add(globalConfig[moduleName]);
+ }
+ if (globalModulePaths.size > 0) {
+ for (const modulePath of globalModulePaths) {
+ if (!modulePath) {
+ continue;
+ }
+ const correctConfig = allTests.find(
+ t => t.context.config[moduleName] === modulePath
+ );
+ const projectConfig = correctConfig
+ ? correctConfig.context.config
+ : // Fallback to first config
+ allTests[0].context.config;
+ const transformer = await (0, _transform().createScriptTransformer)(
+ projectConfig
+ );
+ try {
+ await transformer.requireAndTranspileModule(
+ modulePath,
+ async globalModule => {
+ if (typeof globalModule !== 'function') {
+ throw new TypeError(
+ `${moduleName} file must export a function at ${modulePath}`
+ );
+ }
+ await globalModule(globalConfig, projectConfig);
+ }
+ );
+ } catch (error) {
+ if (
+ util().types.isNativeError(error) &&
+ (Object.getOwnPropertyDescriptor(error, 'message')?.writable ||
+ Object.getOwnPropertyDescriptor(
+ Object.getPrototypeOf(error),
+ 'message'
+ )?.writable)
+ ) {
+ error.message = `Jest: Got error running ${moduleName} - ${modulePath}, reason: ${error.message}`;
+ throw error;
+ }
+ throw new Error(
+ `Jest: Got error running ${moduleName} - ${modulePath}, reason: ${(0,
+ _prettyFormat().default)(error, {
+ maxDepth: 3
+ })}`
+ );
+ }
+ }
+ }
+}
diff --git a/client-side/package/node_modules/@jest/core/build/runJest.js b/client-side/package/node_modules/@jest/core/build/runJest.js
new file mode 100644
index 000000000..87cc30d18
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/runJest.js
@@ -0,0 +1,391 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = runJest;
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function _perf_hooks() {
+ const data = require('perf_hooks');
+ _perf_hooks = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+ _exit = function () {
+ return data;
+ };
+ return data;
+}
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+ fs = function () {
+ return data;
+ };
+ return data;
+}
+function _console() {
+ const data = require('@jest/console');
+ _console = function () {
+ return data;
+ };
+ return data;
+}
+function _testResult() {
+ const data = require('@jest/test-result');
+ _testResult = function () {
+ return data;
+ };
+ return data;
+}
+function _jestResolve() {
+ const data = _interopRequireDefault(require('jest-resolve'));
+ _jestResolve = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+var _SearchSource = _interopRequireDefault(require('./SearchSource'));
+var _TestScheduler = require('./TestScheduler');
+var _collectHandles = _interopRequireDefault(require('./collectHandles'));
+var _getNoTestsFoundMessage = _interopRequireDefault(
+ require('./getNoTestsFoundMessage')
+);
+var _runGlobalHook = _interopRequireDefault(require('./runGlobalHook'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const getTestPaths = async (
+ globalConfig,
+ source,
+ outputStream,
+ changedFiles,
+ jestHooks,
+ filter
+) => {
+ const data = await source.getTestPaths(globalConfig, changedFiles, filter);
+ if (!data.tests.length && globalConfig.onlyChanged && data.noSCM) {
+ new (_console().CustomConsole)(outputStream, outputStream).log(
+ 'Jest can only find uncommitted changed files in a git or hg ' +
+ 'repository. If you make your project a git or hg ' +
+ 'repository (`git init` or `hg init`), Jest will be able ' +
+ 'to only run tests related to files changed since the last ' +
+ 'commit.'
+ );
+ }
+ const shouldTestArray = await Promise.all(
+ data.tests.map(test =>
+ jestHooks.shouldRunTestSuite({
+ config: test.context.config,
+ duration: test.duration,
+ testPath: test.path
+ })
+ )
+ );
+ const filteredTests = data.tests.filter((_test, i) => shouldTestArray[i]);
+ return {
+ ...data,
+ allTests: filteredTests.length,
+ tests: filteredTests
+ };
+};
+const processResults = async (runResults, options) => {
+ const {
+ outputFile,
+ json: isJSON,
+ onComplete,
+ outputStream,
+ testResultsProcessor,
+ collectHandles
+ } = options;
+ if (collectHandles) {
+ runResults.openHandles = await collectHandles();
+ } else {
+ runResults.openHandles = [];
+ }
+ if (testResultsProcessor) {
+ const processor = await (0, _jestUtil().requireOrImportModule)(
+ testResultsProcessor
+ );
+ runResults = await processor(runResults);
+ }
+ if (isJSON) {
+ if (outputFile) {
+ const cwd = (0, _jestUtil().tryRealpath)(process.cwd());
+ const filePath = path().resolve(cwd, outputFile);
+ fs().writeFileSync(
+ filePath,
+ `${JSON.stringify((0, _testResult().formatTestResults)(runResults))}\n`
+ );
+ outputStream.write(
+ `Test results written to: ${path().relative(cwd, filePath)}\n`
+ );
+ } else {
+ process.stdout.write(
+ `${JSON.stringify((0, _testResult().formatTestResults)(runResults))}\n`
+ );
+ }
+ }
+ onComplete?.(runResults);
+};
+const testSchedulerContext = {
+ firstRun: true,
+ previousSuccess: true
+};
+async function runJest({
+ contexts,
+ globalConfig,
+ outputStream,
+ testWatcher,
+ jestHooks = new (_jestWatcher().JestHook)().getEmitter(),
+ startRun,
+ changedFilesPromise,
+ onComplete,
+ failedTestsCache,
+ filter
+}) {
+ // Clear cache for required modules - there might be different resolutions
+ // from Jest's config loading to running the tests
+ _jestResolve().default.clearDefaultResolverCache();
+ const Sequencer = await (0, _jestUtil().requireOrImportModule)(
+ globalConfig.testSequencer
+ );
+ const sequencer = new Sequencer();
+ let allTests = [];
+ if (changedFilesPromise && globalConfig.watch) {
+ const {repos} = await changedFilesPromise;
+ const noSCM = Object.keys(repos).every(scm => repos[scm].size === 0);
+ if (noSCM) {
+ process.stderr.write(
+ `\n${_chalk().default.bold(
+ '--watch'
+ )} is not supported without git/hg, please use --watchAll\n`
+ );
+ (0, _exit().default)(1);
+ }
+ }
+ const searchSources = contexts.map(
+ context => new _SearchSource.default(context)
+ );
+ _perf_hooks().performance.mark('jest/getTestPaths:start');
+ const testRunData = await Promise.all(
+ contexts.map(async (context, index) => {
+ const searchSource = searchSources[index];
+ const matches = await getTestPaths(
+ globalConfig,
+ searchSource,
+ outputStream,
+ changedFilesPromise && (await changedFilesPromise),
+ jestHooks,
+ filter
+ );
+ allTests = allTests.concat(matches.tests);
+ return {
+ context,
+ matches
+ };
+ })
+ );
+ _perf_hooks().performance.mark('jest/getTestPaths:end');
+ if (globalConfig.shard) {
+ if (typeof sequencer.shard !== 'function') {
+ throw new Error(
+ `Shard ${globalConfig.shard.shardIndex}/${globalConfig.shard.shardCount} requested, but test sequencer ${Sequencer.name} in ${globalConfig.testSequencer} has no shard method.`
+ );
+ }
+ allTests = await sequencer.shard(allTests, globalConfig.shard);
+ }
+ allTests = await sequencer.sort(allTests);
+ if (globalConfig.listTests) {
+ const testsPaths = Array.from(new Set(allTests.map(test => test.path)));
+ /* eslint-disable no-console */
+ if (globalConfig.json) {
+ console.log(JSON.stringify(testsPaths));
+ } else {
+ console.log(testsPaths.join('\n'));
+ }
+ /* eslint-enable */
+
+ onComplete &&
+ onComplete((0, _testResult().makeEmptyAggregatedTestResult)());
+ return;
+ }
+ if (globalConfig.onlyFailures) {
+ if (failedTestsCache) {
+ allTests = failedTestsCache.filterTests(allTests);
+ } else {
+ allTests = await sequencer.allFailedTests(allTests);
+ }
+ }
+ const hasTests = allTests.length > 0;
+ if (!hasTests) {
+ const {exitWith0, message: noTestsFoundMessage} = (0,
+ _getNoTestsFoundMessage.default)(testRunData, globalConfig);
+ if (exitWith0) {
+ new (_console().CustomConsole)(outputStream, outputStream).log(
+ noTestsFoundMessage
+ );
+ } else {
+ new (_console().CustomConsole)(outputStream, outputStream).error(
+ noTestsFoundMessage
+ );
+ (0, _exit().default)(1);
+ }
+ } else if (
+ allTests.length === 1 &&
+ globalConfig.silent !== true &&
+ globalConfig.verbose !== false
+ ) {
+ const newConfig = {
+ ...globalConfig,
+ verbose: true
+ };
+ globalConfig = Object.freeze(newConfig);
+ }
+ let collectHandles;
+ if (globalConfig.detectOpenHandles) {
+ collectHandles = (0, _collectHandles.default)();
+ }
+ if (hasTests) {
+ _perf_hooks().performance.mark('jest/globalSetup:start');
+ await (0, _runGlobalHook.default)({
+ allTests,
+ globalConfig,
+ moduleName: 'globalSetup'
+ });
+ _perf_hooks().performance.mark('jest/globalSetup:end');
+ }
+ if (changedFilesPromise) {
+ const changedFilesInfo = await changedFilesPromise;
+ if (changedFilesInfo.changedFiles) {
+ testSchedulerContext.changedFiles = changedFilesInfo.changedFiles;
+ const sourcesRelatedToTestsInChangedFilesArray = (
+ await Promise.all(
+ contexts.map(async (_, index) => {
+ const searchSource = searchSources[index];
+ return searchSource.findRelatedSourcesFromTestsInChangedFiles(
+ changedFilesInfo
+ );
+ })
+ )
+ ).reduce((total, paths) => total.concat(paths), []);
+ testSchedulerContext.sourcesRelatedToTestsInChangedFiles = new Set(
+ sourcesRelatedToTestsInChangedFilesArray
+ );
+ }
+ }
+ const scheduler = await (0, _TestScheduler.createTestScheduler)(
+ globalConfig,
+ {
+ startRun,
+ ...testSchedulerContext
+ }
+ );
+
+ // @ts-expect-error - second arg is unsupported (but harmless) in Node 14
+ _perf_hooks().performance.mark('jest/scheduleAndRun:start', {
+ detail: {
+ numTests: allTests.length
+ }
+ });
+ const results = await scheduler.scheduleTests(allTests, testWatcher);
+ _perf_hooks().performance.mark('jest/scheduleAndRun:end');
+ _perf_hooks().performance.mark('jest/cacheResults:start');
+ sequencer.cacheResults(allTests, results);
+ _perf_hooks().performance.mark('jest/cacheResults:end');
+ if (hasTests) {
+ _perf_hooks().performance.mark('jest/globalTeardown:start');
+ await (0, _runGlobalHook.default)({
+ allTests,
+ globalConfig,
+ moduleName: 'globalTeardown'
+ });
+ _perf_hooks().performance.mark('jest/globalTeardown:end');
+ }
+ _perf_hooks().performance.mark('jest/processResults:start');
+ await processResults(results, {
+ collectHandles,
+ json: globalConfig.json,
+ onComplete,
+ outputFile: globalConfig.outputFile,
+ outputStream,
+ testResultsProcessor: globalConfig.testResultsProcessor
+ });
+ _perf_hooks().performance.mark('jest/processResults:end');
+}
diff --git a/client-side/package/node_modules/@jest/core/build/testSchedulerHelper.js b/client-side/package/node_modules/@jest/core/build/testSchedulerHelper.js
new file mode 100644
index 000000000..86a283f3e
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/testSchedulerHelper.js
@@ -0,0 +1,57 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.shouldRunInBand = shouldRunInBand;
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const SLOW_TEST_TIME = 1000;
+function shouldRunInBand(
+ tests,
+ timings,
+ {
+ detectOpenHandles,
+ maxWorkers,
+ runInBand,
+ watch,
+ watchAll,
+ workerIdleMemoryLimit
+ }
+) {
+ // If user asked for run in band, respect that.
+ // detectOpenHandles makes no sense without runInBand, because it cannot detect leaks in workers
+ if (runInBand || detectOpenHandles) {
+ return true;
+ }
+
+ /*
+ * If we are using watch/watchAll mode, don't schedule anything in the main
+ * thread to keep the TTY responsive and to prevent watch mode crashes caused
+ * by leaks (improper test teardown).
+ */
+ if (watch || watchAll) {
+ return false;
+ }
+
+ /*
+ * Otherwise, run in band if we only have one test or one worker available.
+ * Also, if we are confident from previous runs that the tests will finish
+ * quickly we also run in band to reduce the overhead of spawning workers.
+ */
+ const areFastTests = timings.every(timing => timing < SLOW_TEST_TIME);
+ const oneWorkerOrLess = maxWorkers <= 1;
+ const oneTestOrLess = tests.length <= 1;
+ return (
+ // When specifying a memory limit, workers should be used
+ !workerIdleMemoryLimit &&
+ (oneWorkerOrLess ||
+ oneTestOrLess ||
+ (tests.length <= 20 && timings.length > 0 && areFastTests))
+ );
+}
diff --git a/client-side/package/node_modules/@jest/core/build/types.js b/client-side/package/node_modules/@jest/core/build/types.js
new file mode 100644
index 000000000..ad9a93a7c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/client-side/package/node_modules/@jest/core/build/version.js b/client-side/package/node_modules/@jest/core/build/version.js
new file mode 100644
index 000000000..cb06e7fa8
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/version.js
@@ -0,0 +1,18 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getVersion;
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+// Cannot be `import` as it's not under TS root dir
+const {version: VERSION} = require('../package.json');
+function getVersion() {
+ return VERSION;
+}
diff --git a/client-side/package/node_modules/@jest/core/build/watch.js b/client-side/package/node_modules/@jest/core/build/watch.js
new file mode 100644
index 000000000..a61af3ea0
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/build/watch.js
@@ -0,0 +1,666 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = watch;
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function _ansiEscapes() {
+ const data = _interopRequireDefault(require('ansi-escapes'));
+ _ansiEscapes = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+ _exit = function () {
+ return data;
+ };
+ return data;
+}
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+ _slash = function () {
+ return data;
+ };
+ return data;
+}
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+ _jestMessageUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestValidate() {
+ const data = require('jest-validate');
+ _jestValidate = function () {
+ return data;
+ };
+ return data;
+}
+function _jestWatcher() {
+ const data = require('jest-watcher');
+ _jestWatcher = function () {
+ return data;
+ };
+ return data;
+}
+var _FailedTestsCache = _interopRequireDefault(require('./FailedTestsCache'));
+var _SearchSource = _interopRequireDefault(require('./SearchSource'));
+var _getChangedFilesPromise = _interopRequireDefault(
+ require('./getChangedFilesPromise')
+);
+var _activeFiltersMessage = _interopRequireDefault(
+ require('./lib/activeFiltersMessage')
+);
+var _createContext = _interopRequireDefault(require('./lib/createContext'));
+var _isValidPath = _interopRequireDefault(require('./lib/isValidPath'));
+var _updateGlobalConfig = _interopRequireDefault(
+ require('./lib/updateGlobalConfig')
+);
+var _watchPluginsHelpers = require('./lib/watchPluginsHelpers');
+var _FailedTestsInteractive = _interopRequireDefault(
+ require('./plugins/FailedTestsInteractive')
+);
+var _Quit = _interopRequireDefault(require('./plugins/Quit'));
+var _TestNamePattern = _interopRequireDefault(
+ require('./plugins/TestNamePattern')
+);
+var _TestPathPattern = _interopRequireDefault(
+ require('./plugins/TestPathPattern')
+);
+var _UpdateSnapshots = _interopRequireDefault(
+ require('./plugins/UpdateSnapshots')
+);
+var _UpdateSnapshotsInteractive = _interopRequireDefault(
+ require('./plugins/UpdateSnapshotsInteractive')
+);
+var _runJest = _interopRequireDefault(require('./runJest'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const {print: preRunMessagePrint} = _jestUtil().preRunMessage;
+let hasExitListener = false;
+const INTERNAL_PLUGINS = [
+ _FailedTestsInteractive.default,
+ _TestPathPattern.default,
+ _TestNamePattern.default,
+ _UpdateSnapshots.default,
+ _UpdateSnapshotsInteractive.default,
+ _Quit.default
+];
+const RESERVED_KEY_PLUGINS = new Map([
+ [
+ _UpdateSnapshots.default,
+ {
+ forbiddenOverwriteMessage: 'updating snapshots',
+ key: 'u'
+ }
+ ],
+ [
+ _UpdateSnapshotsInteractive.default,
+ {
+ forbiddenOverwriteMessage: 'updating snapshots interactively',
+ key: 'i'
+ }
+ ],
+ [
+ _Quit.default,
+ {
+ forbiddenOverwriteMessage: 'quitting watch mode'
+ }
+ ]
+]);
+async function watch(
+ initialGlobalConfig,
+ contexts,
+ outputStream,
+ hasteMapInstances,
+ stdin = process.stdin,
+ hooks = new (_jestWatcher().JestHook)(),
+ filter
+) {
+ // `globalConfig` will be constantly updated and reassigned as a result of
+ // watch mode interactions.
+ let globalConfig = initialGlobalConfig;
+ let activePlugin;
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ mode: globalConfig.watch ? 'watch' : 'watchAll',
+ passWithNoTests: true
+ });
+ const updateConfigAndRun = ({
+ bail,
+ changedSince,
+ collectCoverage,
+ collectCoverageFrom,
+ coverageDirectory,
+ coverageReporters,
+ findRelatedTests,
+ mode,
+ nonFlagArgs,
+ notify,
+ notifyMode,
+ onlyFailures,
+ reporters,
+ testNamePattern,
+ testPathPattern,
+ updateSnapshot,
+ verbose
+ } = {}) => {
+ const previousUpdateSnapshot = globalConfig.updateSnapshot;
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ bail,
+ changedSince,
+ collectCoverage,
+ collectCoverageFrom,
+ coverageDirectory,
+ coverageReporters,
+ findRelatedTests,
+ mode,
+ nonFlagArgs,
+ notify,
+ notifyMode,
+ onlyFailures,
+ reporters,
+ testNamePattern,
+ testPathPattern,
+ updateSnapshot,
+ verbose
+ });
+ startRun(globalConfig);
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ // updateSnapshot is not sticky after a run.
+ updateSnapshot:
+ previousUpdateSnapshot === 'all' ? 'none' : previousUpdateSnapshot
+ });
+ };
+ const watchPlugins = INTERNAL_PLUGINS.map(
+ InternalPlugin =>
+ new InternalPlugin({
+ stdin,
+ stdout: outputStream
+ })
+ );
+ watchPlugins.forEach(plugin => {
+ const hookSubscriber = hooks.getSubscriber();
+ if (plugin.apply) {
+ plugin.apply(hookSubscriber);
+ }
+ });
+ if (globalConfig.watchPlugins != null) {
+ const watchPluginKeys = new Map();
+ for (const plugin of watchPlugins) {
+ const reservedInfo = RESERVED_KEY_PLUGINS.get(plugin.constructor) || {};
+ const key = reservedInfo.key || getPluginKey(plugin, globalConfig);
+ if (!key) {
+ continue;
+ }
+ const {forbiddenOverwriteMessage} = reservedInfo;
+ watchPluginKeys.set(key, {
+ forbiddenOverwriteMessage,
+ overwritable: forbiddenOverwriteMessage == null,
+ plugin
+ });
+ }
+ for (const pluginWithConfig of globalConfig.watchPlugins) {
+ let plugin;
+ try {
+ const ThirdPartyPlugin = await (0, _jestUtil().requireOrImportModule)(
+ pluginWithConfig.path
+ );
+ plugin = new ThirdPartyPlugin({
+ config: pluginWithConfig.config,
+ stdin,
+ stdout: outputStream
+ });
+ } catch (error) {
+ const errorWithContext = new Error(
+ `Failed to initialize watch plugin "${_chalk().default.bold(
+ (0, _slash().default)(
+ path().relative(process.cwd(), pluginWithConfig.path)
+ )
+ )}":\n\n${(0, _jestMessageUtil().formatExecError)(
+ error,
+ contexts[0].config,
+ {
+ noStackTrace: false
+ }
+ )}`
+ );
+ delete errorWithContext.stack;
+ return Promise.reject(errorWithContext);
+ }
+ checkForConflicts(watchPluginKeys, plugin, globalConfig);
+ const hookSubscriber = hooks.getSubscriber();
+ if (plugin.apply) {
+ plugin.apply(hookSubscriber);
+ }
+ watchPlugins.push(plugin);
+ }
+ }
+ const failedTestsCache = new _FailedTestsCache.default();
+ let searchSources = contexts.map(context => ({
+ context,
+ searchSource: new _SearchSource.default(context)
+ }));
+ let isRunning = false;
+ let testWatcher;
+ let shouldDisplayWatchUsage = true;
+ let isWatchUsageDisplayed = false;
+ const emitFileChange = () => {
+ if (hooks.isUsed('onFileChange')) {
+ const projects = searchSources.map(({context, searchSource}) => ({
+ config: context.config,
+ testPaths: searchSource.findMatchingTests('').tests.map(t => t.path)
+ }));
+ hooks.getEmitter().onFileChange({
+ projects
+ });
+ }
+ };
+ emitFileChange();
+ hasteMapInstances.forEach((hasteMapInstance, index) => {
+ hasteMapInstance.on('change', ({eventsQueue, hasteFS, moduleMap}) => {
+ const validPaths = eventsQueue.filter(({filePath}) =>
+ (0, _isValidPath.default)(globalConfig, filePath)
+ );
+ if (validPaths.length) {
+ const context = (contexts[index] = (0, _createContext.default)(
+ contexts[index].config,
+ {
+ hasteFS,
+ moduleMap
+ }
+ ));
+ activePlugin = null;
+ searchSources = searchSources.slice();
+ searchSources[index] = {
+ context,
+ searchSource: new _SearchSource.default(context)
+ };
+ emitFileChange();
+ startRun(globalConfig);
+ }
+ });
+ });
+ if (!hasExitListener) {
+ hasExitListener = true;
+ process.on('exit', () => {
+ if (activePlugin) {
+ outputStream.write(_ansiEscapes().default.cursorDown());
+ outputStream.write(_ansiEscapes().default.eraseDown);
+ }
+ });
+ }
+ const startRun = globalConfig => {
+ if (isRunning) {
+ return Promise.resolve(null);
+ }
+ testWatcher = new (_jestWatcher().TestWatcher)({
+ isWatchMode: true
+ });
+ _jestUtil().isInteractive &&
+ outputStream.write(_jestUtil().specialChars.CLEAR);
+ preRunMessagePrint(outputStream);
+ isRunning = true;
+ const configs = contexts.map(context => context.config);
+ const changedFilesPromise = (0, _getChangedFilesPromise.default)(
+ globalConfig,
+ configs
+ );
+ return (0, _runJest.default)({
+ changedFilesPromise,
+ contexts,
+ failedTestsCache,
+ filter,
+ globalConfig,
+ jestHooks: hooks.getEmitter(),
+ onComplete: results => {
+ isRunning = false;
+ hooks.getEmitter().onTestRunComplete(results);
+
+ // Create a new testWatcher instance so that re-runs won't be blocked.
+ // The old instance that was passed to Jest will still be interrupted
+ // and prevent test runs from the previous run.
+ testWatcher = new (_jestWatcher().TestWatcher)({
+ isWatchMode: true
+ });
+
+ // Do not show any Watch Usage related stuff when running in a
+ // non-interactive environment
+ if (_jestUtil().isInteractive) {
+ if (shouldDisplayWatchUsage) {
+ outputStream.write(usage(globalConfig, watchPlugins));
+ shouldDisplayWatchUsage = false; // hide Watch Usage after first run
+ isWatchUsageDisplayed = true;
+ } else {
+ outputStream.write(showToggleUsagePrompt());
+ shouldDisplayWatchUsage = false;
+ isWatchUsageDisplayed = false;
+ }
+ } else {
+ outputStream.write('\n');
+ }
+ failedTestsCache.setTestResults(results.testResults);
+ },
+ outputStream,
+ startRun,
+ testWatcher
+ }).catch(error =>
+ // Errors thrown inside `runJest`, e.g. by resolvers, are caught here for
+ // continuous watch mode execution. We need to reprint them to the
+ // terminal and give just a little bit of extra space so they fit below
+ // `preRunMessagePrint` message nicely.
+ console.error(
+ `\n\n${(0, _jestMessageUtil().formatExecError)(
+ error,
+ contexts[0].config,
+ {
+ noStackTrace: false
+ }
+ )}`
+ )
+ );
+ };
+ const onKeypress = key => {
+ if (
+ key === _jestWatcher().KEYS.CONTROL_C ||
+ key === _jestWatcher().KEYS.CONTROL_D
+ ) {
+ if (typeof stdin.setRawMode === 'function') {
+ stdin.setRawMode(false);
+ }
+ outputStream.write('\n');
+ (0, _exit().default)(0);
+ return;
+ }
+ if (activePlugin != null && activePlugin.onKey) {
+ // if a plugin is activate, Jest should let it handle keystrokes, so ignore
+ // them here
+ activePlugin.onKey(key);
+ return;
+ }
+
+ // Abort test run
+ const pluginKeys = (0, _watchPluginsHelpers.getSortedUsageRows)(
+ watchPlugins,
+ globalConfig
+ ).map(usage => Number(usage.key).toString(16));
+ if (
+ isRunning &&
+ testWatcher &&
+ ['q', _jestWatcher().KEYS.ENTER, 'a', 'o', 'f']
+ .concat(pluginKeys)
+ .includes(key)
+ ) {
+ testWatcher.setState({
+ interrupted: true
+ });
+ return;
+ }
+ const matchingWatchPlugin = (0,
+ _watchPluginsHelpers.filterInteractivePlugins)(
+ watchPlugins,
+ globalConfig
+ ).find(plugin => getPluginKey(plugin, globalConfig) === key);
+ if (matchingWatchPlugin != null) {
+ if (isRunning) {
+ testWatcher.setState({
+ interrupted: true
+ });
+ return;
+ }
+ // "activate" the plugin, which has jest ignore keystrokes so the plugin
+ // can handle them
+ activePlugin = matchingWatchPlugin;
+ if (activePlugin.run) {
+ activePlugin.run(globalConfig, updateConfigAndRun).then(
+ shouldRerun => {
+ activePlugin = null;
+ if (shouldRerun) {
+ updateConfigAndRun();
+ }
+ },
+ () => {
+ activePlugin = null;
+ onCancelPatternPrompt();
+ }
+ );
+ } else {
+ activePlugin = null;
+ }
+ }
+ switch (key) {
+ case _jestWatcher().KEYS.ENTER:
+ startRun(globalConfig);
+ break;
+ case 'a':
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ mode: 'watchAll',
+ testNamePattern: '',
+ testPathPattern: ''
+ });
+ startRun(globalConfig);
+ break;
+ case 'c':
+ updateConfigAndRun({
+ mode: 'watch',
+ testNamePattern: '',
+ testPathPattern: ''
+ });
+ break;
+ case 'f':
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ onlyFailures: !globalConfig.onlyFailures
+ });
+ startRun(globalConfig);
+ break;
+ case 'o':
+ globalConfig = (0, _updateGlobalConfig.default)(globalConfig, {
+ mode: 'watch',
+ testNamePattern: '',
+ testPathPattern: ''
+ });
+ startRun(globalConfig);
+ break;
+ case '?':
+ break;
+ case 'w':
+ if (!shouldDisplayWatchUsage && !isWatchUsageDisplayed) {
+ outputStream.write(_ansiEscapes().default.cursorUp());
+ outputStream.write(_ansiEscapes().default.eraseDown);
+ outputStream.write(usage(globalConfig, watchPlugins));
+ isWatchUsageDisplayed = true;
+ shouldDisplayWatchUsage = false;
+ }
+ break;
+ }
+ };
+ const onCancelPatternPrompt = () => {
+ outputStream.write(_ansiEscapes().default.cursorHide);
+ outputStream.write(_jestUtil().specialChars.CLEAR);
+ outputStream.write(usage(globalConfig, watchPlugins));
+ outputStream.write(_ansiEscapes().default.cursorShow);
+ };
+ if (typeof stdin.setRawMode === 'function') {
+ stdin.setRawMode(true);
+ stdin.resume();
+ stdin.setEncoding('utf8');
+ stdin.on('data', onKeypress);
+ }
+ startRun(globalConfig);
+ return Promise.resolve();
+}
+const checkForConflicts = (watchPluginKeys, plugin, globalConfig) => {
+ const key = getPluginKey(plugin, globalConfig);
+ if (!key) {
+ return;
+ }
+ const conflictor = watchPluginKeys.get(key);
+ if (!conflictor || conflictor.overwritable) {
+ watchPluginKeys.set(key, {
+ overwritable: false,
+ plugin
+ });
+ return;
+ }
+ let error;
+ if (conflictor.forbiddenOverwriteMessage) {
+ error = `
+ Watch plugin ${_chalk().default.bold.red(
+ getPluginIdentifier(plugin)
+ )} attempted to register key ${_chalk().default.bold.red(`<${key}>`)},
+ that is reserved internally for ${_chalk().default.bold.red(
+ conflictor.forbiddenOverwriteMessage
+ )}.
+ Please change the configuration key for this plugin.`.trim();
+ } else {
+ const plugins = [conflictor.plugin, plugin]
+ .map(p => _chalk().default.bold.red(getPluginIdentifier(p)))
+ .join(' and ');
+ error = `
+ Watch plugins ${plugins} both attempted to register key ${_chalk().default.bold.red(
+ `<${key}>`
+ )}.
+ Please change the key configuration for one of the conflicting plugins to avoid overlap.`.trim();
+ }
+ throw new (_jestValidate().ValidationError)(
+ 'Watch plugin configuration error',
+ error
+ );
+};
+const getPluginIdentifier = plugin =>
+ // This breaks as `displayName` is not defined as a static, but since
+ // WatchPlugin is an interface, and it is my understanding interface
+ // static fields are not definable anymore, no idea how to circumvent
+ // this :-(
+ // @ts-expect-error: leave `displayName` be.
+ plugin.constructor.displayName || plugin.constructor.name;
+const getPluginKey = (plugin, globalConfig) => {
+ if (typeof plugin.getUsageInfo === 'function') {
+ return (
+ plugin.getUsageInfo(globalConfig) || {
+ key: null
+ }
+ ).key;
+ }
+ return null;
+};
+const usage = (globalConfig, watchPlugins, delimiter = '\n') => {
+ const messages = [
+ (0, _activeFiltersMessage.default)(globalConfig),
+ globalConfig.testPathPattern || globalConfig.testNamePattern
+ ? `${_chalk().default.dim(' \u203A Press ')}c${_chalk().default.dim(
+ ' to clear filters.'
+ )}`
+ : null,
+ `\n${_chalk().default.bold('Watch Usage')}`,
+ globalConfig.watch
+ ? `${_chalk().default.dim(' \u203A Press ')}a${_chalk().default.dim(
+ ' to run all tests.'
+ )}`
+ : null,
+ globalConfig.onlyFailures
+ ? `${_chalk().default.dim(' \u203A Press ')}f${_chalk().default.dim(
+ ' to quit "only failed tests" mode.'
+ )}`
+ : `${_chalk().default.dim(' \u203A Press ')}f${_chalk().default.dim(
+ ' to run only failed tests.'
+ )}`,
+ (globalConfig.watchAll ||
+ globalConfig.testPathPattern ||
+ globalConfig.testNamePattern) &&
+ !globalConfig.noSCM
+ ? `${_chalk().default.dim(' \u203A Press ')}o${_chalk().default.dim(
+ ' to only run tests related to changed files.'
+ )}`
+ : null,
+ ...(0, _watchPluginsHelpers.getSortedUsageRows)(
+ watchPlugins,
+ globalConfig
+ ).map(
+ plugin =>
+ `${_chalk().default.dim(' \u203A Press')} ${
+ plugin.key
+ } ${_chalk().default.dim(`to ${plugin.prompt}.`)}`
+ ),
+ `${_chalk().default.dim(' \u203A Press ')}Enter${_chalk().default.dim(
+ ' to trigger a test run.'
+ )}`
+ ];
+ return `${messages.filter(message => !!message).join(delimiter)}\n`;
+};
+const showToggleUsagePrompt = () =>
+ '\n' +
+ `${_chalk().default.bold('Watch Usage: ')}${_chalk().default.dim(
+ 'Press '
+ )}w${_chalk().default.dim(' to show more.')}`;
diff --git a/client-side/package/node_modules/@jest/core/package.json b/client-side/package/node_modules/@jest/core/package.json
new file mode 100644
index 000000000..5e5410ef7
--- /dev/null
+++ b/client-side/package/node_modules/@jest/core/package.json
@@ -0,0 +1,102 @@
+{
+ "name": "@jest/core",
+ "description": "Delightful JavaScript Testing.",
+ "version": "29.7.0",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^29.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "devDependencies": {
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/test-utils": "^29.7.0",
+ "@types/exit": "^0.1.30",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/micromatch": "^4.0.1"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jestjs/jest.git",
+ "directory": "packages/jest-core"
+ },
+ "bugs": {
+ "url": "https://github.com/jestjs/jest/issues"
+ },
+ "homepage": "https://jestjs.io/",
+ "license": "MIT",
+ "keywords": [
+ "ava",
+ "babel",
+ "coverage",
+ "easy",
+ "expect",
+ "facebook",
+ "immersive",
+ "instant",
+ "jasmine",
+ "jest",
+ "jsdom",
+ "mocha",
+ "mocking",
+ "painless",
+ "qunit",
+ "runner",
+ "sandboxed",
+ "snapshot",
+ "tap",
+ "tape",
+ "test",
+ "testing",
+ "typescript",
+ "watch"
+ ],
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630"
+}
diff --git a/client-side/package/node_modules/@jest/environment/LICENSE b/client-side/package/node_modules/@jest/environment/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/environment/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/environment/build/index.d.ts b/client-side/package/node_modules/@jest/environment/build/index.d.ts
new file mode 100644
index 000000000..1837e6ac0
--- /dev/null
+++ b/client-side/package/node_modules/@jest/environment/build/index.d.ts
@@ -0,0 +1,418 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+///
+
+import type {Circus} from '@jest/types';
+import type {Config} from '@jest/types';
+import type {Context} from 'vm';
+import type {Global} from '@jest/types';
+import type {LegacyFakeTimers} from '@jest/fake-timers';
+import type {Mocked} from 'jest-mock';
+import type {ModernFakeTimers} from '@jest/fake-timers';
+import type {ModuleMocker} from 'jest-mock';
+
+export declare type EnvironmentContext = {
+ console: Console;
+ docblockPragmas: Record>;
+ testPath: string;
+};
+
+export declare interface Jest {
+ /**
+ * Advances all timers by `msToRun` milliseconds. All pending "macro-tasks"
+ * that have been queued via `setTimeout()` or `setInterval()`, and would be
+ * executed within this time frame will be executed.
+ */
+ advanceTimersByTime(msToRun: number): void;
+ /**
+ * Advances all timers by `msToRun` milliseconds, firing callbacks if necessary.
+ *
+ * @remarks
+ * Not available when using legacy fake timers implementation.
+ */
+ advanceTimersByTimeAsync(msToRun: number): Promise;
+ /**
+ * Advances all timers by the needed milliseconds so that only the next
+ * timeouts/intervals will run. Optionally, you can provide steps, so it will
+ * run steps amount of next timeouts/intervals.
+ */
+ advanceTimersToNextTimer(steps?: number): void;
+ /**
+ * Advances the clock to the the moment of the first scheduled timer, firing it.
+ * Optionally, you can provide steps, so it will run steps amount of
+ * next timeouts/intervals.
+ *
+ * @remarks
+ * Not available when using legacy fake timers implementation.
+ */
+ advanceTimersToNextTimerAsync(steps?: number): Promise;
+ /**
+ * Disables automatic mocking in the module loader.
+ */
+ autoMockOff(): Jest;
+ /**
+ * Enables automatic mocking in the module loader.
+ */
+ autoMockOn(): Jest;
+ /**
+ * Clears the `mock.calls`, `mock.instances`, `mock.contexts` and `mock.results` properties of
+ * all mocks. Equivalent to calling `.mockClear()` on every mocked function.
+ */
+ clearAllMocks(): Jest;
+ /**
+ * Removes any pending timers from the timer system. If any timers have been
+ * scheduled, they will be cleared and will never have the opportunity to
+ * execute in the future.
+ */
+ clearAllTimers(): void;
+ /**
+ * Given the name of a module, use the automatic mocking system to generate a
+ * mocked version of the module for you.
+ *
+ * This is useful when you want to create a manual mock that extends the
+ * automatic mock's behavior.
+ */
+ createMockFromModule(moduleName: string): Mocked;
+ /**
+ * Indicates that the module system should never return a mocked version of
+ * the specified module and its dependencies.
+ */
+ deepUnmock(moduleName: string): Jest;
+ /**
+ * Disables automatic mocking in the module loader.
+ *
+ * After this method is called, all `require()`s will return the real
+ * versions of each module (rather than a mocked version).
+ */
+ disableAutomock(): Jest;
+ /**
+ * When using `babel-jest`, calls to `jest.mock()` will automatically be hoisted
+ * to the top of the code block. Use this method if you want to explicitly
+ * avoid this behavior.
+ */
+ doMock(
+ moduleName: string,
+ moduleFactory?: () => T,
+ options?: {
+ virtual?: boolean;
+ },
+ ): Jest;
+ /**
+ * When using `babel-jest`, calls to `jest.unmock()` will automatically be hoisted
+ * to the top of the code block. Use this method if you want to explicitly
+ * avoid this behavior.
+ */
+ dontMock(moduleName: string): Jest;
+ /**
+ * Enables automatic mocking in the module loader.
+ */
+ enableAutomock(): Jest;
+ /**
+ * Creates a mock function. Optionally takes a mock implementation.
+ */
+ fn: ModuleMocker['fn'];
+ /**
+ * Given the name of a module, use the automatic mocking system to generate a
+ * mocked version of the module for you.
+ *
+ * This is useful when you want to create a manual mock that extends the
+ * automatic mock's behavior.
+ *
+ * @deprecated Use `jest.createMockFromModule()` instead
+ */
+ genMockFromModule(moduleName: string): Mocked;
+ /**
+ * When mocking time, `Date.now()` will also be mocked. If you for some reason
+ * need access to the real current time, you can invoke this function.
+ *
+ * @remarks
+ * Not available when using legacy fake timers implementation.
+ */
+ getRealSystemTime(): number;
+ /**
+ * Retrieves the seed value. It will be randomly generated for each test run
+ * or can be manually set via the `--seed` CLI argument.
+ */
+ getSeed(): number;
+ /**
+ * Returns the number of fake timers still left to run.
+ */
+ getTimerCount(): number;
+ /**
+ * Returns `true` if test environment has been torn down.
+ *
+ * @example
+ * ```js
+ * if (jest.isEnvironmentTornDown()) {
+ * // The Jest environment has been torn down, so stop doing work
+ * return;
+ * }
+ * ```
+ */
+ isEnvironmentTornDown(): boolean;
+ /**
+ * Determines if the given function is a mocked function.
+ */
+ isMockFunction: ModuleMocker['isMockFunction'];
+ /**
+ * `jest.isolateModules()` goes a step further than `jest.resetModules()` and
+ * creates a sandbox registry for the modules that are loaded inside the callback
+ * function. This is useful to isolate specific modules for every test so that
+ * local module state doesn't conflict between tests.
+ */
+ isolateModules(fn: () => void): Jest;
+ /**
+ * `jest.isolateModulesAsync()` is the equivalent of `jest.isolateModules()`, but for
+ * async functions to be wrapped. The caller is expected to `await` the completion of
+ * `isolateModulesAsync`.
+ */
+ isolateModulesAsync(fn: () => Promise): Promise;
+ /**
+ * Mocks a module with an auto-mocked version when it is being required.
+ */
+ mock(
+ moduleName: string,
+ moduleFactory?: () => T,
+ options?: {
+ virtual?: boolean;
+ },
+ ): Jest;
+ /**
+ * Mocks a module with the provided module factory when it is being imported.
+ */
+ unstable_mockModule(
+ moduleName: string,
+ moduleFactory: () => T | Promise,
+ options?: {
+ virtual?: boolean;
+ },
+ ): Jest;
+ /**
+ * Wraps types of the `source` object and its deep members with type definitions
+ * of Jest mock function. Pass `{shallow: true}` option to disable the deeply
+ * mocked behavior.
+ */
+ mocked: ModuleMocker['mocked'];
+ /**
+ * Returns the current time in ms of the fake timer clock.
+ */
+ now(): number;
+ /**
+ * Replaces property on an object with another value.
+ *
+ * @remarks
+ * For mocking functions or 'get' or 'set' accessors, use `jest.spyOn()` instead.
+ */
+ replaceProperty: ModuleMocker['replaceProperty'];
+ /**
+ * Returns the actual module instead of a mock, bypassing all checks on
+ * whether the module should receive a mock implementation or not.
+ *
+ * @example
+ * ```js
+ * jest.mock('../myModule', () => {
+ * // Require the original module to not be mocked...
+ * const originalModule = jest.requireActual('../myModule');
+ *
+ * return {
+ * __esModule: true, // Use it when dealing with esModules
+ * ...originalModule,
+ * getRandom: jest.fn().mockReturnValue(10),
+ * };
+ * });
+ *
+ * const getRandom = require('../myModule').getRandom;
+ *
+ * getRandom(); // Always returns 10
+ * ```
+ */
+ requireActual(moduleName: string): T;
+ /**
+ * Returns a mock module instead of the actual module, bypassing all checks
+ * on whether the module should be required normally or not.
+ */
+ requireMock(moduleName: string): T;
+ /**
+ * Resets the state of all mocks. Equivalent to calling `.mockReset()` on
+ * every mocked function.
+ */
+ resetAllMocks(): Jest;
+ /**
+ * Resets the module registry - the cache of all required modules. This is
+ * useful to isolate modules where local state might conflict between tests.
+ */
+ resetModules(): Jest;
+ /**
+ * Restores all mocks and replaced properties back to their original value.
+ * Equivalent to calling `.mockRestore()` on every mocked function
+ * and `.restore()` on every replaced property.
+ *
+ * Beware that `jest.restoreAllMocks()` only works when the mock was created
+ * with `jest.spyOn()`; other mocks will require you to manually restore them.
+ */
+ restoreAllMocks(): Jest;
+ /**
+ * Runs failed tests n-times until they pass or until the max number of
+ * retries is exhausted.
+ *
+ * If `logErrorsBeforeRetry` is enabled, Jest will log the error(s) that caused
+ * the test to fail to the console, providing visibility on why a retry occurred.
+ * retries is exhausted.
+ *
+ * @remarks
+ * Only available with `jest-circus` runner.
+ */
+ retryTimes(
+ numRetries: number,
+ options?: {
+ logErrorsBeforeRetry?: boolean;
+ },
+ ): Jest;
+ /**
+ * Exhausts tasks queued by `setImmediate()`.
+ *
+ * @remarks
+ * Only available when using legacy fake timers implementation.
+ */
+ runAllImmediates(): void;
+ /**
+ * Exhausts the micro-task queue (usually interfaced in node via
+ * `process.nextTick()`).
+ */
+ runAllTicks(): void;
+ /**
+ * Exhausts the macro-task queue (i.e., all tasks queued by `setTimeout()`
+ * and `setInterval()`).
+ */
+ runAllTimers(): void;
+ /**
+ * Exhausts the macro-task queue (i.e., all tasks queued by `setTimeout()`
+ * and `setInterval()`).
+ *
+ * @remarks
+ * If new timers are added while it is executing they will be run as well.
+ * @remarks
+ * Not available when using legacy fake timers implementation.
+ */
+ runAllTimersAsync(): Promise;
+ /**
+ * Executes only the macro-tasks that are currently pending (i.e., only the
+ * tasks that have been queued by `setTimeout()` or `setInterval()` up to this
+ * point). If any of the currently pending macro-tasks schedule new
+ * macro-tasks, those new tasks will not be executed by this call.
+ */
+ runOnlyPendingTimers(): void;
+ /**
+ * Executes only the macro-tasks that are currently pending (i.e., only the
+ * tasks that have been queued by `setTimeout()` or `setInterval()` up to this
+ * point). If any of the currently pending macro-tasks schedule new
+ * macro-tasks, those new tasks will not be executed by this call.
+ *
+ * @remarks
+ * Not available when using legacy fake timers implementation.
+ */
+ runOnlyPendingTimersAsync(): Promise;
+ /**
+ * Explicitly supplies the mock object that the module system should return
+ * for the specified module.
+ *
+ * @remarks
+ * It is recommended to use `jest.mock()` instead. The `jest.mock()` API's second
+ * argument is a module factory instead of the expected exported module object.
+ */
+ setMock(moduleName: string, moduleExports: unknown): Jest;
+ /**
+ * Set the current system time used by fake timers. Simulates a user changing
+ * the system clock while your program is running. It affects the current time,
+ * but it does not in itself cause e.g. timers to fire; they will fire exactly
+ * as they would have done without the call to `jest.setSystemTime()`.
+ *
+ * @remarks
+ * Not available when using legacy fake timers implementation.
+ */
+ setSystemTime(now?: number | Date): void;
+ /**
+ * Set the default timeout interval for tests and before/after hooks in
+ * milliseconds.
+ *
+ * @remarks
+ * The default timeout interval is 5 seconds if this method is not called.
+ */
+ setTimeout(timeout: number): Jest;
+ /**
+ * Creates a mock function similar to `jest.fn()` but also tracks calls to
+ * `object[methodName]`.
+ *
+ * Optional third argument of `accessType` can be either 'get' or 'set', which
+ * proves to be useful when you want to spy on a getter or a setter, respectively.
+ *
+ * @remarks
+ * By default, `jest.spyOn()` also calls the spied method. This is different
+ * behavior from most other test libraries.
+ */
+ spyOn: ModuleMocker['spyOn'];
+ /**
+ * Indicates that the module system should never return a mocked version of
+ * the specified module from `require()` (e.g. that it should always return the
+ * real module).
+ */
+ unmock(moduleName: string): Jest;
+ /**
+ * Instructs Jest to use fake versions of the global date, performance,
+ * time and timer APIs. Fake timers implementation is backed by
+ * [`@sinonjs/fake-timers`](https://github.com/sinonjs/fake-timers).
+ *
+ * @remarks
+ * Calling `jest.useFakeTimers()` once again in the same test file would reinstall
+ * fake timers using the provided options.
+ */
+ useFakeTimers(
+ fakeTimersConfig?: Config.FakeTimersConfig | Config.LegacyFakeTimersConfig,
+ ): Jest;
+ /**
+ * Instructs Jest to restore the original implementations of the global date,
+ * performance, time and timer APIs.
+ */
+ useRealTimers(): Jest;
+}
+
+export declare class JestEnvironment {
+ constructor(config: JestEnvironmentConfig, context: EnvironmentContext);
+ global: Global.Global;
+ fakeTimers: LegacyFakeTimers | null;
+ fakeTimersModern: ModernFakeTimers | null;
+ moduleMocker: ModuleMocker | null;
+ getVmContext(): Context | null;
+ setup(): Promise;
+ teardown(): Promise;
+ handleTestEvent?: Circus.EventHandler;
+ exportConditions?: () => Array;
+}
+
+export declare interface JestEnvironmentConfig {
+ projectConfig: Config.ProjectConfig;
+ globalConfig: Config.GlobalConfig;
+}
+
+export declare interface JestImportMeta extends ImportMeta {
+ jest: Jest;
+}
+
+export declare type Module = NodeModule;
+
+export declare type ModuleWrapper = (
+ this: Module['exports'],
+ module: Module,
+ exports: Module['exports'],
+ require: Module['require'],
+ __dirname: string,
+ __filename: Module['filename'],
+ jest?: Jest,
+ ...sandboxInjectedGlobals: Array
+) => unknown;
+
+export {};
diff --git a/client-side/package/node_modules/@jest/environment/build/index.js b/client-side/package/node_modules/@jest/environment/build/index.js
new file mode 100644
index 000000000..ad9a93a7c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/environment/build/index.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/client-side/package/node_modules/@jest/environment/package.json b/client-side/package/node_modules/@jest/environment/package.json
new file mode 100644
index 000000000..293360300
--- /dev/null
+++ b/client-side/package/node_modules/@jest/environment/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "@jest/environment",
+ "version": "29.7.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jestjs/jest.git",
+ "directory": "packages/jest-environment"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630"
+}
diff --git a/client-side/package/node_modules/@jest/fake-timers/LICENSE b/client-side/package/node_modules/@jest/fake-timers/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/fake-timers/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/fake-timers/build/index.d.ts b/client-side/package/node_modules/@jest/fake-timers/build/index.d.ts
new file mode 100644
index 000000000..5a2b4c98f
--- /dev/null
+++ b/client-side/package/node_modules/@jest/fake-timers/build/index.d.ts
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type {Config} from '@jest/types';
+import type {ModuleMocker} from 'jest-mock';
+import {StackTraceConfig} from 'jest-message-util';
+
+declare type Callback = (...args: Array) => void;
+
+export declare class LegacyFakeTimers {
+ private _cancelledTicks;
+ private readonly _config;
+ private _disposed;
+ private _fakeTimerAPIs;
+ private _fakingTime;
+ private _global;
+ private _immediates;
+ private readonly _maxLoops;
+ private readonly _moduleMocker;
+ private _now;
+ private _ticks;
+ private readonly _timerAPIs;
+ private _timers;
+ private _uuidCounter;
+ private readonly _timerConfig;
+ constructor({
+ global,
+ moduleMocker,
+ timerConfig,
+ config,
+ maxLoops,
+ }: {
+ global: typeof globalThis;
+ moduleMocker: ModuleMocker;
+ timerConfig: TimerConfig;
+ config: StackTraceConfig;
+ maxLoops?: number;
+ });
+ clearAllTimers(): void;
+ dispose(): void;
+ reset(): void;
+ now(): number;
+ runAllTicks(): void;
+ runAllImmediates(): void;
+ private _runImmediate;
+ runAllTimers(): void;
+ runOnlyPendingTimers(): void;
+ advanceTimersToNextTimer(steps?: number): void;
+ advanceTimersByTime(msToRun: number): void;
+ runWithRealTimers(cb: Callback): void;
+ useRealTimers(): void;
+ useFakeTimers(): void;
+ getTimerCount(): number;
+ private _checkFakeTimers;
+ private _createMocks;
+ private _fakeClearTimer;
+ private _fakeClearImmediate;
+ private _fakeNextTick;
+ private _fakeRequestAnimationFrame;
+ private _fakeSetImmediate;
+ private _fakeSetInterval;
+ private _fakeSetTimeout;
+ private _getNextTimerHandleAndExpiry;
+ private _runTimerHandle;
+}
+
+export declare class ModernFakeTimers {
+ private _clock;
+ private readonly _config;
+ private _fakingTime;
+ private readonly _global;
+ private readonly _fakeTimers;
+ constructor({
+ global,
+ config,
+ }: {
+ global: typeof globalThis;
+ config: Config.ProjectConfig;
+ });
+ clearAllTimers(): void;
+ dispose(): void;
+ runAllTimers(): void;
+ runAllTimersAsync(): Promise;
+ runOnlyPendingTimers(): void;
+ runOnlyPendingTimersAsync(): Promise;
+ advanceTimersToNextTimer(steps?: number): void;
+ advanceTimersToNextTimerAsync(steps?: number): Promise;
+ advanceTimersByTime(msToRun: number): void;
+ advanceTimersByTimeAsync(msToRun: number): Promise;
+ runAllTicks(): void;
+ useRealTimers(): void;
+ useFakeTimers(fakeTimersConfig?: Config.FakeTimersConfig): void;
+ reset(): void;
+ setSystemTime(now?: number | Date): void;
+ getRealSystemTime(): number;
+ now(): number;
+ getTimerCount(): number;
+ private _checkFakeTimers;
+ private _toSinonFakeTimersConfig;
+}
+
+declare type TimerConfig][ = {
+ idToRef: (id: number) => Ref;
+ refToId: (ref: Ref) => number | void;
+};
+
+export {};
diff --git a/client-side/package/node_modules/@jest/fake-timers/build/index.js b/client-side/package/node_modules/@jest/fake-timers/build/index.js
new file mode 100644
index 000000000..776d3e535
--- /dev/null
+++ b/client-side/package/node_modules/@jest/fake-timers/build/index.js
@@ -0,0 +1,22 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'LegacyFakeTimers', {
+ enumerable: true,
+ get: function () {
+ return _legacyFakeTimers.default;
+ }
+});
+Object.defineProperty(exports, 'ModernFakeTimers', {
+ enumerable: true,
+ get: function () {
+ return _modernFakeTimers.default;
+ }
+});
+var _legacyFakeTimers = _interopRequireDefault(require('./legacyFakeTimers'));
+var _modernFakeTimers = _interopRequireDefault(require('./modernFakeTimers'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/client-side/package/node_modules/@jest/fake-timers/build/legacyFakeTimers.js b/client-side/package/node_modules/@jest/fake-timers/build/legacyFakeTimers.js
new file mode 100644
index 000000000..3bbf36c91
--- /dev/null
+++ b/client-side/package/node_modules/@jest/fake-timers/build/legacyFakeTimers.js
@@ -0,0 +1,545 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _util() {
+ const data = require('util');
+ _util = function () {
+ return data;
+ };
+ return data;
+}
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+ _jestMessageUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/* eslint-disable local/prefer-spread-eventually */
+
+const MS_IN_A_YEAR = 31536000000;
+class FakeTimers {
+ _cancelledTicks;
+ _config;
+ _disposed;
+ _fakeTimerAPIs;
+ _fakingTime = false;
+ _global;
+ _immediates;
+ _maxLoops;
+ _moduleMocker;
+ _now;
+ _ticks;
+ _timerAPIs;
+ _timers;
+ _uuidCounter;
+ _timerConfig;
+ constructor({global, moduleMocker, timerConfig, config, maxLoops}) {
+ this._global = global;
+ this._timerConfig = timerConfig;
+ this._config = config;
+ this._maxLoops = maxLoops || 100000;
+ this._uuidCounter = 1;
+ this._moduleMocker = moduleMocker;
+
+ // Store original timer APIs for future reference
+ this._timerAPIs = {
+ cancelAnimationFrame: global.cancelAnimationFrame,
+ clearImmediate: global.clearImmediate,
+ clearInterval: global.clearInterval,
+ clearTimeout: global.clearTimeout,
+ nextTick: global.process && global.process.nextTick,
+ requestAnimationFrame: global.requestAnimationFrame,
+ setImmediate: global.setImmediate,
+ setInterval: global.setInterval,
+ setTimeout: global.setTimeout
+ };
+ this._disposed = false;
+ this.reset();
+ }
+ clearAllTimers() {
+ this._immediates = [];
+ this._timers.clear();
+ }
+ dispose() {
+ this._disposed = true;
+ this.clearAllTimers();
+ }
+ reset() {
+ this._cancelledTicks = {};
+ this._now = 0;
+ this._ticks = [];
+ this._immediates = [];
+ this._timers = new Map();
+ }
+ now() {
+ if (this._fakingTime) {
+ return this._now;
+ }
+ return Date.now();
+ }
+ runAllTicks() {
+ this._checkFakeTimers();
+ // Only run a generous number of ticks and then bail.
+ // This is just to help avoid recursive loops
+ let i;
+ for (i = 0; i < this._maxLoops; i++) {
+ const tick = this._ticks.shift();
+ if (tick === undefined) {
+ break;
+ }
+ if (
+ !Object.prototype.hasOwnProperty.call(this._cancelledTicks, tick.uuid)
+ ) {
+ // Callback may throw, so update the map prior calling.
+ this._cancelledTicks[tick.uuid] = true;
+ tick.callback();
+ }
+ }
+ if (i === this._maxLoops) {
+ throw new Error(
+ `Ran ${this._maxLoops} ticks, and there are still more! ` +
+ "Assuming we've hit an infinite recursion and bailing out..."
+ );
+ }
+ }
+ runAllImmediates() {
+ this._checkFakeTimers();
+ // Only run a generous number of immediates and then bail.
+ let i;
+ for (i = 0; i < this._maxLoops; i++) {
+ const immediate = this._immediates.shift();
+ if (immediate === undefined) {
+ break;
+ }
+ this._runImmediate(immediate);
+ }
+ if (i === this._maxLoops) {
+ throw new Error(
+ `Ran ${this._maxLoops} immediates, and there are still more! Assuming ` +
+ "we've hit an infinite recursion and bailing out..."
+ );
+ }
+ }
+ _runImmediate(immediate) {
+ try {
+ immediate.callback();
+ } finally {
+ this._fakeClearImmediate(immediate.uuid);
+ }
+ }
+ runAllTimers() {
+ this._checkFakeTimers();
+ this.runAllTicks();
+ this.runAllImmediates();
+
+ // Only run a generous number of timers and then bail.
+ // This is just to help avoid recursive loops
+ let i;
+ for (i = 0; i < this._maxLoops; i++) {
+ const nextTimerHandleAndExpiry = this._getNextTimerHandleAndExpiry();
+
+ // If there are no more timer handles, stop!
+ if (nextTimerHandleAndExpiry === null) {
+ break;
+ }
+ const [nextTimerHandle, expiry] = nextTimerHandleAndExpiry;
+ this._now = expiry;
+ this._runTimerHandle(nextTimerHandle);
+
+ // Some of the immediate calls could be enqueued
+ // during the previous handling of the timers, we should
+ // run them as well.
+ if (this._immediates.length) {
+ this.runAllImmediates();
+ }
+ if (this._ticks.length) {
+ this.runAllTicks();
+ }
+ }
+ if (i === this._maxLoops) {
+ throw new Error(
+ `Ran ${this._maxLoops} timers, and there are still more! ` +
+ "Assuming we've hit an infinite recursion and bailing out..."
+ );
+ }
+ }
+ runOnlyPendingTimers() {
+ // We need to hold the current shape of `this._timers` because existing
+ // timers can add new ones to the map and hence would run more than necessary.
+ // See https://github.com/jestjs/jest/pull/4608 for details
+ const timerEntries = Array.from(this._timers.entries());
+ this._checkFakeTimers();
+ this._immediates.forEach(this._runImmediate, this);
+ timerEntries
+ .sort(([, left], [, right]) => left.expiry - right.expiry)
+ .forEach(([timerHandle, timer]) => {
+ this._now = timer.expiry;
+ this._runTimerHandle(timerHandle);
+ });
+ }
+ advanceTimersToNextTimer(steps = 1) {
+ if (steps < 1) {
+ return;
+ }
+ const nextExpiry = Array.from(this._timers.values()).reduce(
+ (minExpiry, timer) => {
+ if (minExpiry === null || timer.expiry < minExpiry) return timer.expiry;
+ return minExpiry;
+ },
+ null
+ );
+ if (nextExpiry !== null) {
+ this.advanceTimersByTime(nextExpiry - this._now);
+ this.advanceTimersToNextTimer(steps - 1);
+ }
+ }
+ advanceTimersByTime(msToRun) {
+ this._checkFakeTimers();
+ // Only run a generous number of timers and then bail.
+ // This is just to help avoid recursive loops
+ let i;
+ for (i = 0; i < this._maxLoops; i++) {
+ const timerHandleAndExpiry = this._getNextTimerHandleAndExpiry();
+
+ // If there are no more timer handles, stop!
+ if (timerHandleAndExpiry === null) {
+ break;
+ }
+ const [timerHandle, nextTimerExpiry] = timerHandleAndExpiry;
+ if (this._now + msToRun < nextTimerExpiry) {
+ // There are no timers between now and the target we're running to
+ break;
+ } else {
+ msToRun -= nextTimerExpiry - this._now;
+ this._now = nextTimerExpiry;
+ this._runTimerHandle(timerHandle);
+ }
+ }
+
+ // Advance the clock by whatever time we still have left to run
+ this._now += msToRun;
+ if (i === this._maxLoops) {
+ throw new Error(
+ `Ran ${this._maxLoops} timers, and there are still more! ` +
+ "Assuming we've hit an infinite recursion and bailing out..."
+ );
+ }
+ }
+ runWithRealTimers(cb) {
+ const prevClearImmediate = this._global.clearImmediate;
+ const prevClearInterval = this._global.clearInterval;
+ const prevClearTimeout = this._global.clearTimeout;
+ const prevNextTick = this._global.process.nextTick;
+ const prevSetImmediate = this._global.setImmediate;
+ const prevSetInterval = this._global.setInterval;
+ const prevSetTimeout = this._global.setTimeout;
+ this.useRealTimers();
+ let cbErr = null;
+ let errThrown = false;
+ try {
+ cb();
+ } catch (e) {
+ errThrown = true;
+ cbErr = e;
+ }
+ this._global.clearImmediate = prevClearImmediate;
+ this._global.clearInterval = prevClearInterval;
+ this._global.clearTimeout = prevClearTimeout;
+ this._global.process.nextTick = prevNextTick;
+ this._global.setImmediate = prevSetImmediate;
+ this._global.setInterval = prevSetInterval;
+ this._global.setTimeout = prevSetTimeout;
+ if (errThrown) {
+ throw cbErr;
+ }
+ }
+ useRealTimers() {
+ const global = this._global;
+ if (typeof global.cancelAnimationFrame === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'cancelAnimationFrame',
+ this._timerAPIs.cancelAnimationFrame
+ );
+ }
+ if (typeof global.clearImmediate === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearImmediate',
+ this._timerAPIs.clearImmediate
+ );
+ }
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearInterval',
+ this._timerAPIs.clearInterval
+ );
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearTimeout',
+ this._timerAPIs.clearTimeout
+ );
+ if (typeof global.requestAnimationFrame === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'requestAnimationFrame',
+ this._timerAPIs.requestAnimationFrame
+ );
+ }
+ if (typeof global.setImmediate === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setImmediate',
+ this._timerAPIs.setImmediate
+ );
+ }
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setInterval',
+ this._timerAPIs.setInterval
+ );
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setTimeout',
+ this._timerAPIs.setTimeout
+ );
+ global.process.nextTick = this._timerAPIs.nextTick;
+ this._fakingTime = false;
+ }
+ useFakeTimers() {
+ this._createMocks();
+ const global = this._global;
+ if (typeof global.cancelAnimationFrame === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'cancelAnimationFrame',
+ this._fakeTimerAPIs.cancelAnimationFrame
+ );
+ }
+ if (typeof global.clearImmediate === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearImmediate',
+ this._fakeTimerAPIs.clearImmediate
+ );
+ }
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearInterval',
+ this._fakeTimerAPIs.clearInterval
+ );
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'clearTimeout',
+ this._fakeTimerAPIs.clearTimeout
+ );
+ if (typeof global.requestAnimationFrame === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'requestAnimationFrame',
+ this._fakeTimerAPIs.requestAnimationFrame
+ );
+ }
+ if (typeof global.setImmediate === 'function') {
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setImmediate',
+ this._fakeTimerAPIs.setImmediate
+ );
+ }
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setInterval',
+ this._fakeTimerAPIs.setInterval
+ );
+ (0, _jestUtil().setGlobal)(
+ global,
+ 'setTimeout',
+ this._fakeTimerAPIs.setTimeout
+ );
+ global.process.nextTick = this._fakeTimerAPIs.nextTick;
+ this._fakingTime = true;
+ }
+ getTimerCount() {
+ this._checkFakeTimers();
+ return this._timers.size + this._immediates.length + this._ticks.length;
+ }
+ _checkFakeTimers() {
+ if (!this._fakingTime) {
+ this._global.console.warn(
+ 'A function to advance timers was called but the timers APIs are not mocked ' +
+ 'with fake timers. Call `jest.useFakeTimers({legacyFakeTimers: true})` ' +
+ 'in this test file or enable fake timers for all tests by setting ' +
+ "{'enableGlobally': true, 'legacyFakeTimers': true} in " +
+ `Jest configuration file.\nStack Trace:\n${(0,
+ _jestMessageUtil().formatStackTrace)(
+ new Error().stack,
+ this._config,
+ {
+ noStackTrace: false
+ }
+ )}`
+ );
+ }
+ }
+ _createMocks() {
+ const fn = implementation => this._moduleMocker.fn(implementation);
+ const promisifiableFakeSetTimeout = fn(this._fakeSetTimeout.bind(this));
+ // @ts-expect-error: no index
+ promisifiableFakeSetTimeout[_util().promisify.custom] = (delay, arg) =>
+ new Promise(resolve => promisifiableFakeSetTimeout(resolve, delay, arg));
+ this._fakeTimerAPIs = {
+ cancelAnimationFrame: fn(this._fakeClearTimer.bind(this)),
+ clearImmediate: fn(this._fakeClearImmediate.bind(this)),
+ clearInterval: fn(this._fakeClearTimer.bind(this)),
+ clearTimeout: fn(this._fakeClearTimer.bind(this)),
+ nextTick: fn(this._fakeNextTick.bind(this)),
+ requestAnimationFrame: fn(this._fakeRequestAnimationFrame.bind(this)),
+ setImmediate: fn(this._fakeSetImmediate.bind(this)),
+ setInterval: fn(this._fakeSetInterval.bind(this)),
+ setTimeout: promisifiableFakeSetTimeout
+ };
+ }
+ _fakeClearTimer(timerRef) {
+ const uuid = this._timerConfig.refToId(timerRef);
+ if (uuid) {
+ this._timers.delete(String(uuid));
+ }
+ }
+ _fakeClearImmediate(uuid) {
+ this._immediates = this._immediates.filter(
+ immediate => immediate.uuid !== uuid
+ );
+ }
+ _fakeNextTick(callback, ...args) {
+ if (this._disposed) {
+ return;
+ }
+ const uuid = String(this._uuidCounter++);
+ this._ticks.push({
+ callback: () => callback.apply(null, args),
+ uuid
+ });
+ const cancelledTicks = this._cancelledTicks;
+ this._timerAPIs.nextTick(() => {
+ if (!Object.prototype.hasOwnProperty.call(cancelledTicks, uuid)) {
+ // Callback may throw, so update the map prior calling.
+ cancelledTicks[uuid] = true;
+ callback.apply(null, args);
+ }
+ });
+ }
+ _fakeRequestAnimationFrame(callback) {
+ return this._fakeSetTimeout(() => {
+ // TODO: Use performance.now() once it's mocked
+ callback(this._now);
+ }, 1000 / 60);
+ }
+ _fakeSetImmediate(callback, ...args) {
+ if (this._disposed) {
+ return null;
+ }
+ const uuid = String(this._uuidCounter++);
+ this._immediates.push({
+ callback: () => callback.apply(null, args),
+ uuid
+ });
+ this._timerAPIs.setImmediate(() => {
+ if (!this._disposed) {
+ if (this._immediates.find(x => x.uuid === uuid)) {
+ try {
+ callback.apply(null, args);
+ } finally {
+ this._fakeClearImmediate(uuid);
+ }
+ }
+ }
+ });
+ return uuid;
+ }
+ _fakeSetInterval(callback, intervalDelay, ...args) {
+ if (this._disposed) {
+ return null;
+ }
+ if (intervalDelay == null) {
+ intervalDelay = 0;
+ }
+ const uuid = this._uuidCounter++;
+ this._timers.set(String(uuid), {
+ callback: () => callback.apply(null, args),
+ expiry: this._now + intervalDelay,
+ interval: intervalDelay,
+ type: 'interval'
+ });
+ return this._timerConfig.idToRef(uuid);
+ }
+ _fakeSetTimeout(callback, delay, ...args) {
+ if (this._disposed) {
+ return null;
+ }
+
+ // eslint-disable-next-line no-bitwise
+ delay = Number(delay) | 0;
+ const uuid = this._uuidCounter++;
+ this._timers.set(String(uuid), {
+ callback: () => callback.apply(null, args),
+ expiry: this._now + delay,
+ interval: undefined,
+ type: 'timeout'
+ });
+ return this._timerConfig.idToRef(uuid);
+ }
+ _getNextTimerHandleAndExpiry() {
+ let nextTimerHandle = null;
+ let soonestTime = MS_IN_A_YEAR;
+ this._timers.forEach((timer, uuid) => {
+ if (timer.expiry < soonestTime) {
+ soonestTime = timer.expiry;
+ nextTimerHandle = uuid;
+ }
+ });
+ if (nextTimerHandle === null) {
+ return null;
+ }
+ return [nextTimerHandle, soonestTime];
+ }
+ _runTimerHandle(timerHandle) {
+ const timer = this._timers.get(timerHandle);
+ if (!timer) {
+ // Timer has been cleared - we'll hit this when a timer is cleared within
+ // another timer in runOnlyPendingTimers
+ return;
+ }
+ switch (timer.type) {
+ case 'timeout':
+ this._timers.delete(timerHandle);
+ timer.callback();
+ break;
+ case 'interval':
+ timer.expiry = this._now + (timer.interval || 0);
+ timer.callback();
+ break;
+ default:
+ throw new Error(`Unexpected timer type: ${timer.type}`);
+ }
+ }
+}
+exports.default = FakeTimers;
diff --git a/client-side/package/node_modules/@jest/fake-timers/build/modernFakeTimers.js b/client-side/package/node_modules/@jest/fake-timers/build/modernFakeTimers.js
new file mode 100644
index 000000000..d9518a91d
--- /dev/null
+++ b/client-side/package/node_modules/@jest/fake-timers/build/modernFakeTimers.js
@@ -0,0 +1,191 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _fakeTimers() {
+ const data = require('@sinonjs/fake-timers');
+ _fakeTimers = function () {
+ return data;
+ };
+ return data;
+}
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+ _jestMessageUtil = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+class FakeTimers {
+ _clock;
+ _config;
+ _fakingTime;
+ _global;
+ _fakeTimers;
+ constructor({global, config}) {
+ this._global = global;
+ this._config = config;
+ this._fakingTime = false;
+ this._fakeTimers = (0, _fakeTimers().withGlobal)(global);
+ }
+ clearAllTimers() {
+ if (this._fakingTime) {
+ this._clock.reset();
+ }
+ }
+ dispose() {
+ this.useRealTimers();
+ }
+ runAllTimers() {
+ if (this._checkFakeTimers()) {
+ this._clock.runAll();
+ }
+ }
+ async runAllTimersAsync() {
+ if (this._checkFakeTimers()) {
+ await this._clock.runAllAsync();
+ }
+ }
+ runOnlyPendingTimers() {
+ if (this._checkFakeTimers()) {
+ this._clock.runToLast();
+ }
+ }
+ async runOnlyPendingTimersAsync() {
+ if (this._checkFakeTimers()) {
+ await this._clock.runToLastAsync();
+ }
+ }
+ advanceTimersToNextTimer(steps = 1) {
+ if (this._checkFakeTimers()) {
+ for (let i = steps; i > 0; i--) {
+ this._clock.next();
+ // Fire all timers at this point: https://github.com/sinonjs/fake-timers/issues/250
+ this._clock.tick(0);
+ if (this._clock.countTimers() === 0) {
+ break;
+ }
+ }
+ }
+ }
+ async advanceTimersToNextTimerAsync(steps = 1) {
+ if (this._checkFakeTimers()) {
+ for (let i = steps; i > 0; i--) {
+ await this._clock.nextAsync();
+ // Fire all timers at this point: https://github.com/sinonjs/fake-timers/issues/250
+ await this._clock.tickAsync(0);
+ if (this._clock.countTimers() === 0) {
+ break;
+ }
+ }
+ }
+ }
+ advanceTimersByTime(msToRun) {
+ if (this._checkFakeTimers()) {
+ this._clock.tick(msToRun);
+ }
+ }
+ async advanceTimersByTimeAsync(msToRun) {
+ if (this._checkFakeTimers()) {
+ await this._clock.tickAsync(msToRun);
+ }
+ }
+ runAllTicks() {
+ if (this._checkFakeTimers()) {
+ // @ts-expect-error - doesn't exist?
+ this._clock.runMicrotasks();
+ }
+ }
+ useRealTimers() {
+ if (this._fakingTime) {
+ this._clock.uninstall();
+ this._fakingTime = false;
+ }
+ }
+ useFakeTimers(fakeTimersConfig) {
+ if (this._fakingTime) {
+ this._clock.uninstall();
+ }
+ this._clock = this._fakeTimers.install(
+ this._toSinonFakeTimersConfig(fakeTimersConfig)
+ );
+ this._fakingTime = true;
+ }
+ reset() {
+ if (this._checkFakeTimers()) {
+ const {now} = this._clock;
+ this._clock.reset();
+ this._clock.setSystemTime(now);
+ }
+ }
+ setSystemTime(now) {
+ if (this._checkFakeTimers()) {
+ this._clock.setSystemTime(now);
+ }
+ }
+ getRealSystemTime() {
+ return Date.now();
+ }
+ now() {
+ if (this._fakingTime) {
+ return this._clock.now;
+ }
+ return Date.now();
+ }
+ getTimerCount() {
+ if (this._checkFakeTimers()) {
+ return this._clock.countTimers();
+ }
+ return 0;
+ }
+ _checkFakeTimers() {
+ if (!this._fakingTime) {
+ this._global.console.warn(
+ 'A function to advance timers was called but the timers APIs are not replaced ' +
+ 'with fake timers. Call `jest.useFakeTimers()` in this test file or enable ' +
+ "fake timers for all tests by setting 'fakeTimers': {'enableGlobally': true} " +
+ `in Jest configuration file.\nStack Trace:\n${(0,
+ _jestMessageUtil().formatStackTrace)(
+ new Error().stack,
+ this._config,
+ {
+ noStackTrace: false
+ }
+ )}`
+ );
+ }
+ return this._fakingTime;
+ }
+ _toSinonFakeTimersConfig(fakeTimersConfig = {}) {
+ fakeTimersConfig = {
+ ...this._config.fakeTimers,
+ ...fakeTimersConfig
+ };
+ const advanceTimeDelta =
+ typeof fakeTimersConfig.advanceTimers === 'number'
+ ? fakeTimersConfig.advanceTimers
+ : undefined;
+ const toFake = new Set(Object.keys(this._fakeTimers.timers));
+ fakeTimersConfig.doNotFake?.forEach(nameOfFakeableAPI => {
+ toFake.delete(nameOfFakeableAPI);
+ });
+ return {
+ advanceTimeDelta,
+ loopLimit: fakeTimersConfig.timerLimit || 100_000,
+ now: fakeTimersConfig.now ?? Date.now(),
+ shouldAdvanceTime: Boolean(fakeTimersConfig.advanceTimers),
+ shouldClearNativeTimers: true,
+ toFake: Array.from(toFake)
+ };
+ }
+}
+exports.default = FakeTimers;
diff --git a/client-side/package/node_modules/@jest/fake-timers/package.json b/client-side/package/node_modules/@jest/fake-timers/package.json
new file mode 100644
index 000000000..989045475
--- /dev/null
+++ b/client-side/package/node_modules/@jest/fake-timers/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "@jest/fake-timers",
+ "version": "29.7.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jestjs/jest.git",
+ "directory": "packages/jest-fake-timers"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "devDependencies": {
+ "@jest/test-utils": "^29.7.0",
+ "@types/sinonjs__fake-timers": "^8.1.2"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630"
+}
diff --git a/client-side/package/node_modules/@jest/globals/LICENSE b/client-side/package/node_modules/@jest/globals/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/globals/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/globals/build/index.d.ts b/client-side/package/node_modules/@jest/globals/build/index.d.ts
new file mode 100644
index 000000000..456044cee
--- /dev/null
+++ b/client-side/package/node_modules/@jest/globals/build/index.d.ts
@@ -0,0 +1,71 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type { Jest } from '@jest/environment';
+import type { JestExpect } from '@jest/expect';
+import type { Global } from '@jest/types';
+import type { ClassLike, FunctionLike, Mock as JestMock, Mocked as JestMocked, MockedClass as JestMockedClass, MockedFunction as JestMockedFunction, MockedObject as JestMockedObject, Replaced as JestReplaced, Spied as JestSpied, SpiedClass as JestSpiedClass, SpiedFunction as JestSpiedFunction, SpiedGetter as JestSpiedGetter, SpiedSetter as JestSpiedSetter, UnknownFunction } from 'jest-mock';
+export declare const expect: JestExpect;
+export declare const it: Global.GlobalAdditions['it'];
+export declare const test: Global.GlobalAdditions['test'];
+export declare const fit: Global.GlobalAdditions['fit'];
+export declare const xit: Global.GlobalAdditions['xit'];
+export declare const xtest: Global.GlobalAdditions['xtest'];
+export declare const describe: Global.GlobalAdditions['describe'];
+export declare const xdescribe: Global.GlobalAdditions['xdescribe'];
+export declare const fdescribe: Global.GlobalAdditions['fdescribe'];
+export declare const beforeAll: Global.GlobalAdditions['beforeAll'];
+export declare const beforeEach: Global.GlobalAdditions['beforeEach'];
+export declare const afterEach: Global.GlobalAdditions['afterEach'];
+export declare const afterAll: Global.GlobalAdditions['afterAll'];
+declare const jest: Jest;
+declare namespace jest {
+ /**
+ * Constructs the type of a mock function, e.g. the return type of `jest.fn()`.
+ */
+ type Mock = JestMock;
+ /**
+ * Wraps a class, function or object type with Jest mock type definitions.
+ */
+ type Mocked = JestMocked;
+ /**
+ * Wraps a class type with Jest mock type definitions.
+ */
+ type MockedClass = JestMockedClass;
+ /**
+ * Wraps a function type with Jest mock type definitions.
+ */
+ type MockedFunction = JestMockedFunction;
+ /**
+ * Wraps an object type with Jest mock type definitions.
+ */
+ type MockedObject = JestMockedObject;
+ /**
+ * Constructs the type of a replaced property.
+ */
+ type Replaced = JestReplaced;
+ /**
+ * Constructs the type of a spied class or function.
+ */
+ type Spied = JestSpied;
+ /**
+ * Constructs the type of a spied class.
+ */
+ type SpiedClass = JestSpiedClass;
+ /**
+ * Constructs the type of a spied function.
+ */
+ type SpiedFunction = JestSpiedFunction;
+ /**
+ * Constructs the type of a spied getter.
+ */
+ type SpiedGetter = JestSpiedGetter;
+ /**
+ * Constructs the type of a spied setter.
+ */
+ type SpiedSetter = JestSpiedSetter;
+}
+export { jest };
diff --git a/client-side/package/node_modules/@jest/globals/build/index.js b/client-side/package/node_modules/@jest/globals/build/index.js
new file mode 100644
index 000000000..ebd57915b
--- /dev/null
+++ b/client-side/package/node_modules/@jest/globals/build/index.js
@@ -0,0 +1,14 @@
+'use strict';
+
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+// eslint-disable-next-line @typescript-eslint/no-namespace
+
+throw new Error(
+ 'Do not import `@jest/globals` outside of the Jest test environment'
+);
diff --git a/client-side/package/node_modules/@jest/globals/package.json b/client-side/package/node_modules/@jest/globals/package.json
new file mode 100644
index 000000000..0cd7d62e2
--- /dev/null
+++ b/client-side/package/node_modules/@jest/globals/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "@jest/globals",
+ "version": "29.7.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jestjs/jest.git",
+ "directory": "packages/jest-globals"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630"
+}
diff --git a/client-side/package/node_modules/@jest/reporters/LICENSE b/client-side/package/node_modules/@jest/reporters/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/reporters/assets/jest_logo.png b/client-side/package/node_modules/@jest/reporters/assets/jest_logo.png
new file mode 100644
index 000000000..1e8274df8
Binary files /dev/null and b/client-side/package/node_modules/@jest/reporters/assets/jest_logo.png differ
diff --git a/client-side/package/node_modules/@jest/reporters/build/BaseReporter.js b/client-side/package/node_modules/@jest/reporters/build/BaseReporter.js
new file mode 100644
index 000000000..83ce850a1
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/BaseReporter.js
@@ -0,0 +1,48 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const {remove: preRunMessageRemove} = _jestUtil().preRunMessage;
+class BaseReporter {
+ _error;
+ log(message) {
+ process.stderr.write(`${message}\n`);
+ }
+ onRunStart(_results, _options) {
+ preRunMessageRemove(process.stderr);
+ }
+
+ /* eslint-disable @typescript-eslint/no-empty-function */
+ onTestCaseResult(_test, _testCaseResult) {}
+ onTestResult(_test, _testResult, _results) {}
+ onTestStart(_test) {}
+ onRunComplete(_testContexts, _aggregatedResults) {}
+ /* eslint-enable */
+
+ _setError(error) {
+ this._error = error;
+ }
+
+ // Return an error that occurred during reporting. This error will
+ // define whether the test run was successful or failed.
+ getLastError() {
+ return this._error;
+ }
+}
+exports.default = BaseReporter;
diff --git a/client-side/package/node_modules/@jest/reporters/build/CoverageReporter.js b/client-side/package/node_modules/@jest/reporters/build/CoverageReporter.js
new file mode 100644
index 000000000..48ba4feb3
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/CoverageReporter.js
@@ -0,0 +1,561 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function _v8Coverage() {
+ const data = require('@bcoe/v8-coverage');
+ _v8Coverage = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _glob() {
+ const data = _interopRequireDefault(require('glob'));
+ _glob = function () {
+ return data;
+ };
+ return data;
+}
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+ fs = function () {
+ return data;
+ };
+ return data;
+}
+function _istanbulLibCoverage() {
+ const data = _interopRequireDefault(require('istanbul-lib-coverage'));
+ _istanbulLibCoverage = function () {
+ return data;
+ };
+ return data;
+}
+function _istanbulLibReport() {
+ const data = _interopRequireDefault(require('istanbul-lib-report'));
+ _istanbulLibReport = function () {
+ return data;
+ };
+ return data;
+}
+function _istanbulLibSourceMaps() {
+ const data = _interopRequireDefault(require('istanbul-lib-source-maps'));
+ _istanbulLibSourceMaps = function () {
+ return data;
+ };
+ return data;
+}
+function _istanbulReports() {
+ const data = _interopRequireDefault(require('istanbul-reports'));
+ _istanbulReports = function () {
+ return data;
+ };
+ return data;
+}
+function _v8ToIstanbul() {
+ const data = _interopRequireDefault(require('v8-to-istanbul'));
+ _v8ToIstanbul = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestWorker() {
+ const data = require('jest-worker');
+ _jestWorker = function () {
+ return data;
+ };
+ return data;
+}
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+var _getWatermarks = _interopRequireDefault(require('./getWatermarks'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const FAIL_COLOR = _chalk().default.bold.red;
+const RUNNING_TEST_COLOR = _chalk().default.bold.dim;
+class CoverageReporter extends _BaseReporter.default {
+ _context;
+ _coverageMap;
+ _globalConfig;
+ _sourceMapStore;
+ _v8CoverageResults;
+ static filename = __filename;
+ constructor(globalConfig, context) {
+ super();
+ this._context = context;
+ this._coverageMap = _istanbulLibCoverage().default.createCoverageMap({});
+ this._globalConfig = globalConfig;
+ this._sourceMapStore =
+ _istanbulLibSourceMaps().default.createSourceMapStore();
+ this._v8CoverageResults = [];
+ }
+ onTestResult(_test, testResult) {
+ if (testResult.v8Coverage) {
+ this._v8CoverageResults.push(testResult.v8Coverage);
+ return;
+ }
+ if (testResult.coverage) {
+ this._coverageMap.merge(testResult.coverage);
+ }
+ }
+ async onRunComplete(testContexts, aggregatedResults) {
+ await this._addUntestedFiles(testContexts);
+ const {map, reportContext} = await this._getCoverageResult();
+ try {
+ const coverageReporters = this._globalConfig.coverageReporters || [];
+ if (!this._globalConfig.useStderr && coverageReporters.length < 1) {
+ coverageReporters.push('text-summary');
+ }
+ coverageReporters.forEach(reporter => {
+ let additionalOptions = {};
+ if (Array.isArray(reporter)) {
+ [reporter, additionalOptions] = reporter;
+ }
+ _istanbulReports()
+ .default.create(reporter, {
+ maxCols: process.stdout.columns || Infinity,
+ ...additionalOptions
+ })
+ .execute(reportContext);
+ });
+ aggregatedResults.coverageMap = map;
+ } catch (e) {
+ console.error(
+ _chalk().default.red(`
+ Failed to write coverage reports:
+ ERROR: ${e.toString()}
+ STACK: ${e.stack}
+ `)
+ );
+ }
+ this._checkThreshold(map);
+ }
+ async _addUntestedFiles(testContexts) {
+ const files = [];
+ testContexts.forEach(context => {
+ const config = context.config;
+ if (
+ this._globalConfig.collectCoverageFrom &&
+ this._globalConfig.collectCoverageFrom.length
+ ) {
+ context.hasteFS
+ .matchFilesWithGlob(
+ this._globalConfig.collectCoverageFrom,
+ config.rootDir
+ )
+ .forEach(filePath =>
+ files.push({
+ config,
+ path: filePath
+ })
+ );
+ }
+ });
+ if (!files.length) {
+ return;
+ }
+ if (_jestUtil().isInteractive) {
+ process.stderr.write(
+ RUNNING_TEST_COLOR('Running coverage on untested files...')
+ );
+ }
+ let worker;
+ if (this._globalConfig.maxWorkers <= 1) {
+ worker = require('./CoverageWorker');
+ } else {
+ worker = new (_jestWorker().Worker)(require.resolve('./CoverageWorker'), {
+ enableWorkerThreads: this._globalConfig.workerThreads,
+ exposedMethods: ['worker'],
+ forkOptions: {
+ serialization: 'json'
+ },
+ maxRetries: 2,
+ numWorkers: this._globalConfig.maxWorkers
+ });
+ }
+ const instrumentation = files.map(async fileObj => {
+ const filename = fileObj.path;
+ const config = fileObj.config;
+ const hasCoverageData = this._v8CoverageResults.some(v8Res =>
+ v8Res.some(innerRes => innerRes.result.url === filename)
+ );
+ if (
+ !hasCoverageData &&
+ !this._coverageMap.data[filename] &&
+ 'worker' in worker
+ ) {
+ try {
+ const result = await worker.worker({
+ config,
+ context: {
+ changedFiles:
+ this._context.changedFiles &&
+ Array.from(this._context.changedFiles),
+ sourcesRelatedToTestsInChangedFiles:
+ this._context.sourcesRelatedToTestsInChangedFiles &&
+ Array.from(this._context.sourcesRelatedToTestsInChangedFiles)
+ },
+ globalConfig: this._globalConfig,
+ path: filename
+ });
+ if (result) {
+ if (result.kind === 'V8Coverage') {
+ this._v8CoverageResults.push([
+ {
+ codeTransformResult: undefined,
+ result: result.result
+ }
+ ]);
+ } else {
+ this._coverageMap.addFileCoverage(result.coverage);
+ }
+ }
+ } catch (error) {
+ console.error(
+ _chalk().default.red(
+ [
+ `Failed to collect coverage from ${filename}`,
+ `ERROR: ${error.message}`,
+ `STACK: ${error.stack}`
+ ].join('\n')
+ )
+ );
+ }
+ }
+ });
+ try {
+ await Promise.all(instrumentation);
+ } catch {
+ // Do nothing; errors were reported earlier to the console.
+ }
+ if (_jestUtil().isInteractive) {
+ (0, _jestUtil().clearLine)(process.stderr);
+ }
+ if (worker && 'end' in worker && typeof worker.end === 'function') {
+ await worker.end();
+ }
+ }
+ _checkThreshold(map) {
+ const {coverageThreshold} = this._globalConfig;
+ if (coverageThreshold) {
+ function check(name, thresholds, actuals) {
+ return ['statements', 'branches', 'lines', 'functions'].reduce(
+ (errors, key) => {
+ const actual = actuals[key].pct;
+ const actualUncovered = actuals[key].total - actuals[key].covered;
+ const threshold = thresholds[key];
+ if (threshold !== undefined) {
+ if (threshold < 0) {
+ if (threshold * -1 < actualUncovered) {
+ errors.push(
+ `Jest: Uncovered count for ${key} (${actualUncovered}) ` +
+ `exceeds ${name} threshold (${-1 * threshold})`
+ );
+ }
+ } else if (actual < threshold) {
+ errors.push(
+ `Jest: "${name}" coverage threshold for ${key} (${threshold}%) not met: ${actual}%`
+ );
+ }
+ }
+ return errors;
+ },
+ []
+ );
+ }
+ const THRESHOLD_GROUP_TYPES = {
+ GLOB: 'glob',
+ GLOBAL: 'global',
+ PATH: 'path'
+ };
+ const coveredFiles = map.files();
+ const thresholdGroups = Object.keys(coverageThreshold);
+ const groupTypeByThresholdGroup = {};
+ const filesByGlob = {};
+ const coveredFilesSortedIntoThresholdGroup = coveredFiles.reduce(
+ (files, file) => {
+ const pathOrGlobMatches = thresholdGroups.reduce(
+ (agg, thresholdGroup) => {
+ // Preserve trailing slash, but not required if root dir
+ // See https://github.com/jestjs/jest/issues/12703
+ const resolvedThresholdGroup = path().resolve(thresholdGroup);
+ const suffix =
+ (thresholdGroup.endsWith(path().sep) ||
+ (process.platform === 'win32' &&
+ thresholdGroup.endsWith('/'))) &&
+ !resolvedThresholdGroup.endsWith(path().sep)
+ ? path().sep
+ : '';
+ const absoluteThresholdGroup = `${resolvedThresholdGroup}${suffix}`;
+
+ // The threshold group might be a path:
+
+ if (file.indexOf(absoluteThresholdGroup) === 0) {
+ groupTypeByThresholdGroup[thresholdGroup] =
+ THRESHOLD_GROUP_TYPES.PATH;
+ return agg.concat([[file, thresholdGroup]]);
+ }
+
+ // If the threshold group is not a path it might be a glob:
+
+ // Note: glob.sync is slow. By memoizing the files matching each glob
+ // (rather than recalculating it for each covered file) we save a tonne
+ // of execution time.
+ if (filesByGlob[absoluteThresholdGroup] === undefined) {
+ filesByGlob[absoluteThresholdGroup] = _glob()
+ .default.sync(absoluteThresholdGroup)
+ .map(filePath => path().resolve(filePath));
+ }
+ if (filesByGlob[absoluteThresholdGroup].indexOf(file) > -1) {
+ groupTypeByThresholdGroup[thresholdGroup] =
+ THRESHOLD_GROUP_TYPES.GLOB;
+ return agg.concat([[file, thresholdGroup]]);
+ }
+ return agg;
+ },
+ []
+ );
+ if (pathOrGlobMatches.length > 0) {
+ return files.concat(pathOrGlobMatches);
+ }
+
+ // Neither a glob or a path? Toss it in global if there's a global threshold:
+ if (thresholdGroups.indexOf(THRESHOLD_GROUP_TYPES.GLOBAL) > -1) {
+ groupTypeByThresholdGroup[THRESHOLD_GROUP_TYPES.GLOBAL] =
+ THRESHOLD_GROUP_TYPES.GLOBAL;
+ return files.concat([[file, THRESHOLD_GROUP_TYPES.GLOBAL]]);
+ }
+
+ // A covered file that doesn't have a threshold:
+ return files.concat([[file, undefined]]);
+ },
+ []
+ );
+ const getFilesInThresholdGroup = thresholdGroup =>
+ coveredFilesSortedIntoThresholdGroup
+ .filter(fileAndGroup => fileAndGroup[1] === thresholdGroup)
+ .map(fileAndGroup => fileAndGroup[0]);
+ function combineCoverage(filePaths) {
+ return filePaths
+ .map(filePath => map.fileCoverageFor(filePath))
+ .reduce((combinedCoverage, nextFileCoverage) => {
+ if (combinedCoverage === undefined || combinedCoverage === null) {
+ return nextFileCoverage.toSummary();
+ }
+ return combinedCoverage.merge(nextFileCoverage.toSummary());
+ }, undefined);
+ }
+ let errors = [];
+ thresholdGroups.forEach(thresholdGroup => {
+ switch (groupTypeByThresholdGroup[thresholdGroup]) {
+ case THRESHOLD_GROUP_TYPES.GLOBAL: {
+ const coverage = combineCoverage(
+ getFilesInThresholdGroup(THRESHOLD_GROUP_TYPES.GLOBAL)
+ );
+ if (coverage) {
+ errors = errors.concat(
+ check(
+ thresholdGroup,
+ coverageThreshold[thresholdGroup],
+ coverage
+ )
+ );
+ }
+ break;
+ }
+ case THRESHOLD_GROUP_TYPES.PATH: {
+ const coverage = combineCoverage(
+ getFilesInThresholdGroup(thresholdGroup)
+ );
+ if (coverage) {
+ errors = errors.concat(
+ check(
+ thresholdGroup,
+ coverageThreshold[thresholdGroup],
+ coverage
+ )
+ );
+ }
+ break;
+ }
+ case THRESHOLD_GROUP_TYPES.GLOB:
+ getFilesInThresholdGroup(thresholdGroup).forEach(
+ fileMatchingGlob => {
+ errors = errors.concat(
+ check(
+ fileMatchingGlob,
+ coverageThreshold[thresholdGroup],
+ map.fileCoverageFor(fileMatchingGlob).toSummary()
+ )
+ );
+ }
+ );
+ break;
+ default:
+ // If the file specified by path is not found, error is returned.
+ if (thresholdGroup !== THRESHOLD_GROUP_TYPES.GLOBAL) {
+ errors = errors.concat(
+ `Jest: Coverage data for ${thresholdGroup} was not found.`
+ );
+ }
+ // Sometimes all files in the coverage data are matched by
+ // PATH and GLOB threshold groups in which case, don't error when
+ // the global threshold group doesn't match any files.
+ }
+ });
+
+ errors = errors.filter(
+ err => err !== undefined && err !== null && err.length > 0
+ );
+ if (errors.length > 0) {
+ this.log(`${FAIL_COLOR(errors.join('\n'))}`);
+ this._setError(new Error(errors.join('\n')));
+ }
+ }
+ }
+ async _getCoverageResult() {
+ if (this._globalConfig.coverageProvider === 'v8') {
+ const mergedCoverages = (0, _v8Coverage().mergeProcessCovs)(
+ this._v8CoverageResults.map(cov => ({
+ result: cov.map(r => r.result)
+ }))
+ );
+ const fileTransforms = new Map();
+ this._v8CoverageResults.forEach(res =>
+ res.forEach(r => {
+ if (r.codeTransformResult && !fileTransforms.has(r.result.url)) {
+ fileTransforms.set(r.result.url, r.codeTransformResult);
+ }
+ })
+ );
+ const transformedCoverage = await Promise.all(
+ mergedCoverages.result.map(async res => {
+ const fileTransform = fileTransforms.get(res.url);
+ let sourcemapContent = undefined;
+ if (
+ fileTransform?.sourceMapPath &&
+ fs().existsSync(fileTransform.sourceMapPath)
+ ) {
+ sourcemapContent = JSON.parse(
+ fs().readFileSync(fileTransform.sourceMapPath, 'utf8')
+ );
+ }
+ const converter = (0, _v8ToIstanbul().default)(
+ res.url,
+ fileTransform?.wrapperLength ?? 0,
+ fileTransform && sourcemapContent
+ ? {
+ originalSource: fileTransform.originalCode,
+ source: fileTransform.code,
+ sourceMap: {
+ sourcemap: {
+ file: res.url,
+ ...sourcemapContent
+ }
+ }
+ }
+ : {
+ source: fs().readFileSync(res.url, 'utf8')
+ }
+ );
+ await converter.load();
+ converter.applyCoverage(res.functions);
+ const istanbulData = converter.toIstanbul();
+ return istanbulData;
+ })
+ );
+ const map = _istanbulLibCoverage().default.createCoverageMap({});
+ transformedCoverage.forEach(res => map.merge(res));
+ const reportContext = _istanbulLibReport().default.createContext({
+ coverageMap: map,
+ dir: this._globalConfig.coverageDirectory,
+ watermarks: (0, _getWatermarks.default)(this._globalConfig)
+ });
+ return {
+ map,
+ reportContext
+ };
+ }
+ const map = await this._sourceMapStore.transformCoverage(this._coverageMap);
+ const reportContext = _istanbulLibReport().default.createContext({
+ coverageMap: map,
+ dir: this._globalConfig.coverageDirectory,
+ sourceFinder: this._sourceMapStore.sourceFinder,
+ watermarks: (0, _getWatermarks.default)(this._globalConfig)
+ });
+ return {
+ map,
+ reportContext
+ };
+ }
+}
+exports.default = CoverageReporter;
diff --git a/client-side/package/node_modules/@jest/reporters/build/CoverageWorker.js b/client-side/package/node_modules/@jest/reporters/build/CoverageWorker.js
new file mode 100644
index 000000000..685fcfacb
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/CoverageWorker.js
@@ -0,0 +1,89 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.worker = worker;
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+ _exit = function () {
+ return data;
+ };
+ return data;
+}
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+ fs = function () {
+ return data;
+ };
+ return data;
+}
+var _generateEmptyCoverage = _interopRequireDefault(
+ require('./generateEmptyCoverage')
+);
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+// Make sure uncaught errors are logged before we exit.
+process.on('uncaughtException', err => {
+ console.error(err.stack);
+ (0, _exit().default)(1);
+});
+function worker({config, globalConfig, path, context}) {
+ return (0, _generateEmptyCoverage.default)(
+ fs().readFileSync(path, 'utf8'),
+ path,
+ globalConfig,
+ config,
+ context.changedFiles && new Set(context.changedFiles),
+ context.sourcesRelatedToTestsInChangedFiles &&
+ new Set(context.sourcesRelatedToTestsInChangedFiles)
+ );
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/DefaultReporter.js b/client-side/package/node_modules/@jest/reporters/build/DefaultReporter.js
new file mode 100644
index 000000000..eb1c0e06c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/DefaultReporter.js
@@ -0,0 +1,229 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _console() {
+ const data = require('@jest/console');
+ _console = function () {
+ return data;
+ };
+ return data;
+}
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+ _jestMessageUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+var _Status = _interopRequireDefault(require('./Status'));
+var _getResultHeader = _interopRequireDefault(require('./getResultHeader'));
+var _getSnapshotStatus = _interopRequireDefault(require('./getSnapshotStatus'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const TITLE_BULLET = _chalk().default.bold('\u25cf ');
+class DefaultReporter extends _BaseReporter.default {
+ _clear; // ANSI clear sequence for the last printed status
+ _err;
+ _globalConfig;
+ _out;
+ _status;
+ _bufferedOutput;
+ static filename = __filename;
+ constructor(globalConfig) {
+ super();
+ this._globalConfig = globalConfig;
+ this._clear = '';
+ this._out = process.stdout.write.bind(process.stdout);
+ this._err = process.stderr.write.bind(process.stderr);
+ this._status = new _Status.default(globalConfig);
+ this._bufferedOutput = new Set();
+ this.__wrapStdio(process.stdout);
+ this.__wrapStdio(process.stderr);
+ this._status.onChange(() => {
+ this.__clearStatus();
+ this.__printStatus();
+ });
+ }
+ __wrapStdio(stream) {
+ const write = stream.write.bind(stream);
+ let buffer = [];
+ let timeout = null;
+ const flushBufferedOutput = () => {
+ const string = buffer.join('');
+ buffer = [];
+
+ // This is to avoid conflicts between random output and status text
+ this.__clearStatus();
+ if (string) {
+ write(string);
+ }
+ this.__printStatus();
+ this._bufferedOutput.delete(flushBufferedOutput);
+ };
+ this._bufferedOutput.add(flushBufferedOutput);
+ const debouncedFlush = () => {
+ // If the process blows up no errors would be printed.
+ // There should be a smart way to buffer stderr, but for now
+ // we just won't buffer it.
+ if (stream === process.stderr) {
+ flushBufferedOutput();
+ } else {
+ if (!timeout) {
+ timeout = setTimeout(() => {
+ flushBufferedOutput();
+ timeout = null;
+ }, 100);
+ }
+ }
+ };
+ stream.write = chunk => {
+ buffer.push(chunk);
+ debouncedFlush();
+ return true;
+ };
+ }
+
+ // Don't wait for the debounced call and flush all output immediately.
+ forceFlushBufferedOutput() {
+ for (const flushBufferedOutput of this._bufferedOutput) {
+ flushBufferedOutput();
+ }
+ }
+ __clearStatus() {
+ if (_jestUtil().isInteractive) {
+ if (this._globalConfig.useStderr) {
+ this._err(this._clear);
+ } else {
+ this._out(this._clear);
+ }
+ }
+ }
+ __printStatus() {
+ const {content, clear} = this._status.get();
+ this._clear = clear;
+ if (_jestUtil().isInteractive) {
+ if (this._globalConfig.useStderr) {
+ this._err(content);
+ } else {
+ this._out(content);
+ }
+ }
+ }
+ onRunStart(aggregatedResults, options) {
+ this._status.runStarted(aggregatedResults, options);
+ }
+ onTestStart(test) {
+ this._status.testStarted(test.path, test.context.config);
+ }
+ onTestCaseResult(test, testCaseResult) {
+ this._status.addTestCaseResult(test, testCaseResult);
+ }
+ onRunComplete() {
+ this.forceFlushBufferedOutput();
+ this._status.runFinished();
+ process.stdout.write = this._out;
+ process.stderr.write = this._err;
+ (0, _jestUtil().clearLine)(process.stderr);
+ }
+ onTestResult(test, testResult, aggregatedResults) {
+ this.testFinished(test.context.config, testResult, aggregatedResults);
+ if (!testResult.skipped) {
+ this.printTestFileHeader(
+ testResult.testFilePath,
+ test.context.config,
+ testResult
+ );
+ this.printTestFileFailureMessage(
+ testResult.testFilePath,
+ test.context.config,
+ testResult
+ );
+ }
+ this.forceFlushBufferedOutput();
+ }
+ testFinished(config, testResult, aggregatedResults) {
+ this._status.testFinished(config, testResult, aggregatedResults);
+ }
+ printTestFileHeader(testPath, config, result) {
+ // log retry errors if any exist
+ result.testResults.forEach(testResult => {
+ const testRetryReasons = testResult.retryReasons;
+ if (testRetryReasons && testRetryReasons.length > 0) {
+ this.log(
+ `${_chalk().default.reset.inverse.bold.yellow(
+ ' LOGGING RETRY ERRORS '
+ )} ${_chalk().default.bold(testResult.fullName)}`
+ );
+ testRetryReasons.forEach((retryReasons, index) => {
+ let {message, stack} = (0,
+ _jestMessageUtil().separateMessageFromStack)(retryReasons);
+ stack = this._globalConfig.noStackTrace
+ ? ''
+ : _chalk().default.dim(
+ (0, _jestMessageUtil().formatStackTrace)(
+ stack,
+ config,
+ this._globalConfig,
+ testPath
+ )
+ );
+ message = (0, _jestMessageUtil().indentAllLines)(message);
+ this.log(
+ `${_chalk().default.reset.inverse.bold.blueBright(
+ ` RETRY ${index + 1} `
+ )}\n`
+ );
+ this.log(`${message}\n${stack}\n`);
+ });
+ }
+ });
+ this.log((0, _getResultHeader.default)(result, this._globalConfig, config));
+ if (result.console) {
+ this.log(
+ ` ${TITLE_BULLET}Console\n\n${(0, _console().getConsoleOutput)(
+ result.console,
+ config,
+ this._globalConfig
+ )}`
+ );
+ }
+ }
+ printTestFileFailureMessage(_testPath, _config, result) {
+ if (result.failureMessage) {
+ this.log(result.failureMessage);
+ }
+ const didUpdate = this._globalConfig.updateSnapshot === 'all';
+ const snapshotStatuses = (0, _getSnapshotStatus.default)(
+ result.snapshot,
+ didUpdate
+ );
+ snapshotStatuses.forEach(this.log);
+ }
+}
+exports.default = DefaultReporter;
diff --git a/client-side/package/node_modules/@jest/reporters/build/GitHubActionsReporter.js b/client-side/package/node_modules/@jest/reporters/build/GitHubActionsReporter.js
new file mode 100644
index 000000000..1e99a7d38
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/GitHubActionsReporter.js
@@ -0,0 +1,381 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _stripAnsi() {
+ const data = _interopRequireDefault(require('strip-ansi'));
+ _stripAnsi = function () {
+ return data;
+ };
+ return data;
+}
+function _jestMessageUtil() {
+ const data = require('jest-message-util');
+ _jestMessageUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const titleSeparator = ' \u203A ';
+const ICONS = _jestUtil().specialChars.ICONS;
+class GitHubActionsReporter extends _BaseReporter.default {
+ static filename = __filename;
+ options;
+ constructor(
+ _globalConfig,
+ reporterOptions = {
+ silent: true
+ }
+ ) {
+ super();
+ this.options = {
+ silent:
+ typeof reporterOptions.silent === 'boolean'
+ ? reporterOptions.silent
+ : true
+ };
+ }
+ onTestResult(test, testResult, aggregatedResults) {
+ this.generateAnnotations(test, testResult);
+ if (!this.options.silent) {
+ this.printFullResult(test.context, testResult);
+ }
+ if (this.isLastTestSuite(aggregatedResults)) {
+ this.printFailedTestLogs(test, aggregatedResults);
+ }
+ }
+ generateAnnotations({context}, {testResults}) {
+ testResults.forEach(result => {
+ const title = [...result.ancestorTitles, result.title].join(
+ titleSeparator
+ );
+ result.retryReasons?.forEach((retryReason, index) => {
+ this.#createAnnotation({
+ ...this.#getMessageDetails(retryReason, context.config),
+ title: `RETRY ${index + 1}: ${title}`,
+ type: 'warning'
+ });
+ });
+ result.failureMessages.forEach(failureMessage => {
+ this.#createAnnotation({
+ ...this.#getMessageDetails(failureMessage, context.config),
+ title,
+ type: 'error'
+ });
+ });
+ });
+ }
+ #getMessageDetails(failureMessage, config) {
+ const {message, stack} = (0, _jestMessageUtil().separateMessageFromStack)(
+ failureMessage
+ );
+ const stackLines = (0, _jestMessageUtil().getStackTraceLines)(stack);
+ const topFrame = (0, _jestMessageUtil().getTopFrame)(stackLines);
+ const normalizedStackLines = stackLines.map(line =>
+ (0, _jestMessageUtil().formatPath)(line, config)
+ );
+ const messageText = [message, ...normalizedStackLines].join('\n');
+ return {
+ file: topFrame?.file,
+ line: topFrame?.line,
+ message: messageText
+ };
+ }
+ #createAnnotation({file, line, message, title, type}) {
+ message = (0, _stripAnsi().default)(
+ // copied from: https://github.com/actions/toolkit/blob/main/packages/core/src/command.ts
+ message.replace(/%/g, '%25').replace(/\r/g, '%0D').replace(/\n/g, '%0A')
+ );
+ this.log(
+ `\n::${type} file=${file},line=${line},title=${title}::${message}`
+ );
+ }
+ isLastTestSuite(results) {
+ const passedTestSuites = results.numPassedTestSuites;
+ const failedTestSuites = results.numFailedTestSuites;
+ const totalTestSuites = results.numTotalTestSuites;
+ const computedTotal = passedTestSuites + failedTestSuites;
+ if (computedTotal < totalTestSuites) {
+ return false;
+ } else if (computedTotal === totalTestSuites) {
+ return true;
+ } else {
+ throw new Error(
+ `Sum(${computedTotal}) of passed (${passedTestSuites}) and failed (${failedTestSuites}) test suites is greater than the total number of test suites (${totalTestSuites}). Please report the bug at https://github.com/jestjs/jest/issues`
+ );
+ }
+ }
+ printFullResult(context, results) {
+ const rootDir = context.config.rootDir;
+ let testDir = results.testFilePath.replace(rootDir, '');
+ testDir = testDir.slice(1, testDir.length);
+ const resultTree = this.getResultTree(
+ results.testResults,
+ testDir,
+ results.perfStats
+ );
+ this.printResultTree(resultTree);
+ }
+ arrayEqual(a1, a2) {
+ if (a1.length !== a2.length) {
+ return false;
+ }
+ for (let index = 0; index < a1.length; index++) {
+ const element = a1[index];
+ if (element !== a2[index]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ arrayChild(a1, a2) {
+ if (a1.length - a2.length !== 1) {
+ return false;
+ }
+ for (let index = 0; index < a2.length; index++) {
+ const element = a2[index];
+ if (element !== a1[index]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ getResultTree(suiteResult, testPath, suitePerf) {
+ const root = {
+ children: [],
+ name: testPath,
+ passed: true,
+ performanceInfo: suitePerf
+ };
+ const branches = [];
+ suiteResult.forEach(element => {
+ if (element.ancestorTitles.length === 0) {
+ if (element.status === 'failed') {
+ root.passed = false;
+ }
+ const duration = element.duration || 1;
+ root.children.push({
+ children: [],
+ duration,
+ name: element.title,
+ status: element.status
+ });
+ } else {
+ let alreadyInserted = false;
+ for (let index = 0; index < branches.length; index++) {
+ if (
+ this.arrayEqual(branches[index], element.ancestorTitles.slice(0, 1))
+ ) {
+ alreadyInserted = true;
+ break;
+ }
+ }
+ if (!alreadyInserted) {
+ branches.push(element.ancestorTitles.slice(0, 1));
+ }
+ }
+ });
+ branches.forEach(element => {
+ const newChild = this.getResultChildren(suiteResult, element);
+ if (!newChild.passed) {
+ root.passed = false;
+ }
+ root.children.push(newChild);
+ });
+ return root;
+ }
+ getResultChildren(suiteResult, ancestors) {
+ const node = {
+ children: [],
+ name: ancestors[ancestors.length - 1],
+ passed: true
+ };
+ const branches = [];
+ suiteResult.forEach(element => {
+ let duration = element.duration;
+ if (!duration || isNaN(duration)) {
+ duration = 1;
+ }
+ if (this.arrayEqual(element.ancestorTitles, ancestors)) {
+ if (element.status === 'failed') {
+ node.passed = false;
+ }
+ node.children.push({
+ children: [],
+ duration,
+ name: element.title,
+ status: element.status
+ });
+ } else if (
+ this.arrayChild(
+ element.ancestorTitles.slice(0, ancestors.length + 1),
+ ancestors
+ )
+ ) {
+ let alreadyInserted = false;
+ for (let index = 0; index < branches.length; index++) {
+ if (
+ this.arrayEqual(
+ branches[index],
+ element.ancestorTitles.slice(0, ancestors.length + 1)
+ )
+ ) {
+ alreadyInserted = true;
+ break;
+ }
+ }
+ if (!alreadyInserted) {
+ branches.push(element.ancestorTitles.slice(0, ancestors.length + 1));
+ }
+ }
+ });
+ branches.forEach(element => {
+ const newChild = this.getResultChildren(suiteResult, element);
+ if (!newChild.passed) {
+ node.passed = false;
+ }
+ node.children.push(newChild);
+ });
+ return node;
+ }
+ printResultTree(resultTree) {
+ let perfMs;
+ if (resultTree.performanceInfo.slow) {
+ perfMs = ` (${_chalk().default.red.inverse(
+ `${resultTree.performanceInfo.runtime} ms`
+ )})`;
+ } else {
+ perfMs = ` (${resultTree.performanceInfo.runtime} ms)`;
+ }
+ if (resultTree.passed) {
+ this.startGroup(
+ `${_chalk().default.bold.green.inverse('PASS')} ${
+ resultTree.name
+ }${perfMs}`
+ );
+ resultTree.children.forEach(child => {
+ this.recursivePrintResultTree(child, true, 1);
+ });
+ this.endGroup();
+ } else {
+ this.log(
+ ` ${_chalk().default.bold.red.inverse('FAIL')} ${
+ resultTree.name
+ }${perfMs}`
+ );
+ resultTree.children.forEach(child => {
+ this.recursivePrintResultTree(child, false, 1);
+ });
+ }
+ }
+ recursivePrintResultTree(resultTree, alreadyGrouped, depth) {
+ if (resultTree.children.length === 0) {
+ if (!('duration' in resultTree)) {
+ throw new Error('Expected a leaf. Got a node.');
+ }
+ let numberSpaces = depth;
+ if (!alreadyGrouped) {
+ numberSpaces++;
+ }
+ const spaces = ' '.repeat(numberSpaces);
+ let resultSymbol;
+ switch (resultTree.status) {
+ case 'passed':
+ resultSymbol = _chalk().default.green(ICONS.success);
+ break;
+ case 'failed':
+ resultSymbol = _chalk().default.red(ICONS.failed);
+ break;
+ case 'todo':
+ resultSymbol = _chalk().default.magenta(ICONS.todo);
+ break;
+ case 'pending':
+ case 'skipped':
+ resultSymbol = _chalk().default.yellow(ICONS.pending);
+ break;
+ }
+ this.log(
+ `${spaces + resultSymbol} ${resultTree.name} (${
+ resultTree.duration
+ } ms)`
+ );
+ } else {
+ if (!('passed' in resultTree)) {
+ throw new Error('Expected a node. Got a leaf');
+ }
+ if (resultTree.passed) {
+ if (alreadyGrouped) {
+ this.log(' '.repeat(depth) + resultTree.name);
+ resultTree.children.forEach(child => {
+ this.recursivePrintResultTree(child, true, depth + 1);
+ });
+ } else {
+ this.startGroup(' '.repeat(depth) + resultTree.name);
+ resultTree.children.forEach(child => {
+ this.recursivePrintResultTree(child, true, depth + 1);
+ });
+ this.endGroup();
+ }
+ } else {
+ this.log(' '.repeat(depth + 1) + resultTree.name);
+ resultTree.children.forEach(child => {
+ this.recursivePrintResultTree(child, false, depth + 1);
+ });
+ }
+ }
+ }
+ printFailedTestLogs(context, testResults) {
+ const rootDir = context.context.config.rootDir;
+ const results = testResults.testResults;
+ let written = false;
+ results.forEach(result => {
+ let testDir = result.testFilePath;
+ testDir = testDir.replace(rootDir, '');
+ testDir = testDir.slice(1, testDir.length);
+ if (result.failureMessage) {
+ if (!written) {
+ this.log('');
+ written = true;
+ }
+ this.startGroup(`Errors thrown in ${testDir}`);
+ this.log(result.failureMessage);
+ this.endGroup();
+ }
+ });
+ return written;
+ }
+ startGroup(title) {
+ this.log(`::group::${title}`);
+ }
+ endGroup() {
+ this.log('::endgroup::');
+ }
+}
+exports.default = GitHubActionsReporter;
diff --git a/client-side/package/node_modules/@jest/reporters/build/NotifyReporter.js b/client-side/package/node_modules/@jest/reporters/build/NotifyReporter.js
new file mode 100644
index 000000000..fec46abcb
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/NotifyReporter.js
@@ -0,0 +1,218 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function util() {
+ const data = _interopRequireWildcard(require('util'));
+ util = function () {
+ return data;
+ };
+ return data;
+}
+function _exit() {
+ const data = _interopRequireDefault(require('exit'));
+ _exit = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const isDarwin = process.platform === 'darwin';
+const icon = path().resolve(__dirname, '../assets/jest_logo.png');
+class NotifyReporter extends _BaseReporter.default {
+ _notifier = loadNotifier();
+ _globalConfig;
+ _context;
+ static filename = __filename;
+ constructor(globalConfig, context) {
+ super();
+ this._globalConfig = globalConfig;
+ this._context = context;
+ }
+ onRunComplete(testContexts, result) {
+ const success =
+ result.numFailedTests === 0 && result.numRuntimeErrorTestSuites === 0;
+ const firstContext = testContexts.values().next();
+ const hasteFS =
+ firstContext && firstContext.value && firstContext.value.hasteFS;
+ let packageName;
+ if (hasteFS != null) {
+ // assuming root package.json is the first one
+ const [filePath] = hasteFS.matchFiles('package.json');
+ packageName =
+ filePath != null
+ ? hasteFS.getModuleName(filePath)
+ : this._globalConfig.rootDir;
+ } else {
+ packageName = this._globalConfig.rootDir;
+ }
+ packageName = packageName != null ? `${packageName} - ` : '';
+ const notifyMode = this._globalConfig.notifyMode;
+ const statusChanged =
+ this._context.previousSuccess !== success || this._context.firstRun;
+ const testsHaveRun = result.numTotalTests !== 0;
+ if (
+ testsHaveRun &&
+ success &&
+ (notifyMode === 'always' ||
+ notifyMode === 'success' ||
+ notifyMode === 'success-change' ||
+ (notifyMode === 'change' && statusChanged) ||
+ (notifyMode === 'failure-change' && statusChanged))
+ ) {
+ const title = util().format('%s%d%% Passed', packageName, 100);
+ const message = `${isDarwin ? '\u2705 ' : ''}${(0, _jestUtil().pluralize)(
+ 'test',
+ result.numPassedTests
+ )} passed`;
+ this._notifier.notify({
+ hint: 'int:transient:1',
+ icon,
+ message,
+ timeout: false,
+ title
+ });
+ } else if (
+ testsHaveRun &&
+ !success &&
+ (notifyMode === 'always' ||
+ notifyMode === 'failure' ||
+ notifyMode === 'failure-change' ||
+ (notifyMode === 'change' && statusChanged) ||
+ (notifyMode === 'success-change' && statusChanged))
+ ) {
+ const failed = result.numFailedTests / result.numTotalTests;
+ const title = util().format(
+ '%s%d%% Failed',
+ packageName,
+ Math.ceil(Number.isNaN(failed) ? 0 : failed * 100)
+ );
+ const message = util().format(
+ `${isDarwin ? '\u26D4\uFE0F ' : ''}%d of %d tests failed`,
+ result.numFailedTests,
+ result.numTotalTests
+ );
+ const watchMode = this._globalConfig.watch || this._globalConfig.watchAll;
+ const restartAnswer = 'Run again';
+ const quitAnswer = 'Exit tests';
+ if (!watchMode) {
+ this._notifier.notify({
+ hint: 'int:transient:1',
+ icon,
+ message,
+ timeout: false,
+ title
+ });
+ } else {
+ this._notifier.notify(
+ {
+ // @ts-expect-error - not all options are supported by all systems (specifically `actions` and `hint`)
+ actions: [restartAnswer, quitAnswer],
+ closeLabel: 'Close',
+ hint: 'int:transient:1',
+ icon,
+ message,
+ timeout: false,
+ title
+ },
+ (err, _, metadata) => {
+ if (err || !metadata) {
+ return;
+ }
+ if (metadata.activationValue === quitAnswer) {
+ (0, _exit().default)(0);
+ return;
+ }
+ if (
+ metadata.activationValue === restartAnswer &&
+ this._context.startRun
+ ) {
+ this._context.startRun(this._globalConfig);
+ }
+ }
+ );
+ }
+ }
+ this._context.previousSuccess = success;
+ this._context.firstRun = false;
+ }
+}
+exports.default = NotifyReporter;
+function loadNotifier() {
+ try {
+ return require('node-notifier');
+ } catch (err) {
+ if (err.code !== 'MODULE_NOT_FOUND') {
+ throw err;
+ }
+ throw Error(
+ 'notify reporter requires optional peer dependency "node-notifier" but it was not found'
+ );
+ }
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/Status.js b/client-side/package/node_modules/@jest/reporters/build/Status.js
new file mode 100644
index 000000000..1e751df8b
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/Status.js
@@ -0,0 +1,214 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _stringLength() {
+ const data = _interopRequireDefault(require('string-length'));
+ _stringLength = function () {
+ return data;
+ };
+ return data;
+}
+var _getSummary = _interopRequireDefault(require('./getSummary'));
+var _printDisplayName = _interopRequireDefault(require('./printDisplayName'));
+var _trimAndFormatPath = _interopRequireDefault(require('./trimAndFormatPath'));
+var _wrapAnsiString = _interopRequireDefault(require('./wrapAnsiString'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const RUNNING_TEXT = ' RUNS ';
+const RUNNING = `${_chalk().default.reset.inverse.yellow.bold(RUNNING_TEXT)} `;
+
+/**
+ * This class is a perf optimization for sorting the list of currently
+ * running tests. It tries to keep tests in the same positions without
+ * shifting the whole list.
+ */
+class CurrentTestList {
+ _array;
+ constructor() {
+ this._array = [];
+ }
+ add(testPath, config) {
+ const index = this._array.indexOf(null);
+ const record = {
+ config,
+ testPath
+ };
+ if (index !== -1) {
+ this._array[index] = record;
+ } else {
+ this._array.push(record);
+ }
+ }
+ delete(testPath) {
+ const record = this._array.find(
+ record => record !== null && record.testPath === testPath
+ );
+ this._array[this._array.indexOf(record || null)] = null;
+ }
+ get() {
+ return this._array;
+ }
+}
+/**
+ * A class that generates the CLI status of currently running tests
+ * and also provides an ANSI escape sequence to remove status lines
+ * from the terminal.
+ */
+class Status {
+ _cache;
+ _callback;
+ _currentTests;
+ _currentTestCases;
+ _done;
+ _emitScheduled;
+ _estimatedTime;
+ _interval;
+ _aggregatedResults;
+ _showStatus;
+ constructor(_globalConfig) {
+ this._globalConfig = _globalConfig;
+ this._cache = null;
+ this._currentTests = new CurrentTestList();
+ this._currentTestCases = [];
+ this._done = false;
+ this._emitScheduled = false;
+ this._estimatedTime = 0;
+ this._showStatus = false;
+ }
+ onChange(callback) {
+ this._callback = callback;
+ }
+ runStarted(aggregatedResults, options) {
+ this._estimatedTime = (options && options.estimatedTime) || 0;
+ this._showStatus = options && options.showStatus;
+ this._interval = setInterval(() => this._tick(), 1000);
+ this._aggregatedResults = aggregatedResults;
+ this._debouncedEmit();
+ }
+ runFinished() {
+ this._done = true;
+ if (this._interval) clearInterval(this._interval);
+ this._emit();
+ }
+ addTestCaseResult(test, testCaseResult) {
+ this._currentTestCases.push({
+ test,
+ testCaseResult
+ });
+ if (!this._showStatus) {
+ this._emit();
+ } else {
+ this._debouncedEmit();
+ }
+ }
+ testStarted(testPath, config) {
+ this._currentTests.add(testPath, config);
+ if (!this._showStatus) {
+ this._emit();
+ } else {
+ this._debouncedEmit();
+ }
+ }
+ testFinished(_config, testResult, aggregatedResults) {
+ const {testFilePath} = testResult;
+ this._aggregatedResults = aggregatedResults;
+ this._currentTests.delete(testFilePath);
+ this._currentTestCases = this._currentTestCases.filter(({test}) => {
+ if (_config !== test.context.config) {
+ return true;
+ }
+ return test.path !== testFilePath;
+ });
+ this._debouncedEmit();
+ }
+ get() {
+ if (this._cache) {
+ return this._cache;
+ }
+ if (this._done) {
+ return {
+ clear: '',
+ content: ''
+ };
+ }
+ const width = process.stdout.columns;
+ let content = '\n';
+ this._currentTests.get().forEach(record => {
+ if (record) {
+ const {config, testPath} = record;
+ const projectDisplayName = config.displayName
+ ? `${(0, _printDisplayName.default)(config)} `
+ : '';
+ const prefix = RUNNING + projectDisplayName;
+ content += `${(0, _wrapAnsiString.default)(
+ prefix +
+ (0, _trimAndFormatPath.default)(
+ (0, _stringLength().default)(prefix),
+ config,
+ testPath,
+ width
+ ),
+ width
+ )}\n`;
+ }
+ });
+ if (this._showStatus && this._aggregatedResults) {
+ content += `\n${(0, _getSummary.default)(this._aggregatedResults, {
+ currentTestCases: this._currentTestCases,
+ estimatedTime: this._estimatedTime,
+ roundTime: true,
+ seed: this._globalConfig.seed,
+ showSeed: this._globalConfig.showSeed,
+ width
+ })}`;
+ }
+ let height = 0;
+ for (let i = 0; i < content.length; i++) {
+ if (content[i] === '\n') {
+ height++;
+ }
+ }
+ const clear = '\r\x1B[K\r\x1B[1A'.repeat(height);
+ return (this._cache = {
+ clear,
+ content
+ });
+ }
+ _emit() {
+ this._cache = null;
+ if (this._callback) this._callback();
+ }
+ _debouncedEmit() {
+ if (!this._emitScheduled) {
+ // Perf optimization to avoid two separate renders When
+ // one test finishes and another test starts executing.
+ this._emitScheduled = true;
+ setTimeout(() => {
+ this._emit();
+ this._emitScheduled = false;
+ }, 100);
+ }
+ }
+ _tick() {
+ this._debouncedEmit();
+ }
+}
+exports.default = Status;
diff --git a/client-side/package/node_modules/@jest/reporters/build/SummaryReporter.js b/client-side/package/node_modules/@jest/reporters/build/SummaryReporter.js
new file mode 100644
index 000000000..da1bffac9
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/SummaryReporter.js
@@ -0,0 +1,239 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+var _getResultHeader = _interopRequireDefault(require('./getResultHeader'));
+var _getSnapshotSummary = _interopRequireDefault(
+ require('./getSnapshotSummary')
+);
+var _getSummary = _interopRequireDefault(require('./getSummary'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const NPM_EVENTS = new Set([
+ 'prepublish',
+ 'publish',
+ 'postpublish',
+ 'preinstall',
+ 'install',
+ 'postinstall',
+ 'preuninstall',
+ 'uninstall',
+ 'postuninstall',
+ 'preversion',
+ 'version',
+ 'postversion',
+ 'pretest',
+ 'test',
+ 'posttest',
+ 'prestop',
+ 'stop',
+ 'poststop',
+ 'prestart',
+ 'start',
+ 'poststart',
+ 'prerestart',
+ 'restart',
+ 'postrestart'
+]);
+const {npm_config_user_agent, npm_lifecycle_event, npm_lifecycle_script} =
+ process.env;
+class SummaryReporter extends _BaseReporter.default {
+ _estimatedTime;
+ _globalConfig;
+ _summaryThreshold;
+ static filename = __filename;
+ constructor(globalConfig, options) {
+ super();
+ this._globalConfig = globalConfig;
+ this._estimatedTime = 0;
+ this._validateOptions(options);
+ this._summaryThreshold = options?.summaryThreshold ?? 20;
+ }
+ _validateOptions(options) {
+ if (
+ options?.summaryThreshold &&
+ typeof options.summaryThreshold !== 'number'
+ ) {
+ throw new TypeError('The option summaryThreshold should be a number');
+ }
+ }
+
+ // If we write more than one character at a time it is possible that
+ // Node.js exits in the middle of printing the result. This was first observed
+ // in Node.js 0.10 and still persists in Node.js 6.7+.
+ // Let's print the test failure summary character by character which is safer
+ // when hundreds of tests are failing.
+ _write(string) {
+ for (let i = 0; i < string.length; i++) {
+ process.stderr.write(string.charAt(i));
+ }
+ }
+ onRunStart(aggregatedResults, options) {
+ super.onRunStart(aggregatedResults, options);
+ this._estimatedTime = options.estimatedTime;
+ }
+ onRunComplete(testContexts, aggregatedResults) {
+ const {numTotalTestSuites, testResults, wasInterrupted} = aggregatedResults;
+ if (numTotalTestSuites) {
+ const lastResult = testResults[testResults.length - 1];
+ // Print a newline if the last test did not fail to line up newlines
+ // similar to when an error would have been thrown in the test.
+ if (
+ !this._globalConfig.verbose &&
+ lastResult &&
+ !lastResult.numFailingTests &&
+ !lastResult.testExecError
+ ) {
+ this.log('');
+ }
+ this._printSummary(aggregatedResults, this._globalConfig);
+ this._printSnapshotSummary(
+ aggregatedResults.snapshot,
+ this._globalConfig
+ );
+ let message = (0, _getSummary.default)(aggregatedResults, {
+ estimatedTime: this._estimatedTime,
+ seed: this._globalConfig.seed,
+ showSeed: this._globalConfig.showSeed
+ });
+ if (!this._globalConfig.silent) {
+ message += `\n${
+ wasInterrupted
+ ? _chalk().default.bold.red('Test run was interrupted.')
+ : this._getTestSummary(testContexts, this._globalConfig)
+ }`;
+ }
+ this.log(message);
+ }
+ }
+ _printSnapshotSummary(snapshots, globalConfig) {
+ if (
+ snapshots.added ||
+ snapshots.filesRemoved ||
+ snapshots.unchecked ||
+ snapshots.unmatched ||
+ snapshots.updated
+ ) {
+ let updateCommand;
+ const event = npm_lifecycle_event || '';
+ const prefix = NPM_EVENTS.has(event) ? '' : 'run ';
+ const isYarn =
+ typeof npm_config_user_agent === 'string' &&
+ npm_config_user_agent.includes('yarn');
+ const client = isYarn ? 'yarn' : 'npm';
+ const scriptUsesJest =
+ typeof npm_lifecycle_script === 'string' &&
+ npm_lifecycle_script.includes('jest');
+ if (globalConfig.watch || globalConfig.watchAll) {
+ updateCommand = 'press `u`';
+ } else if (event && scriptUsesJest) {
+ updateCommand = `run \`${`${client} ${prefix}${event}${
+ isYarn ? '' : ' --'
+ }`} -u\``;
+ } else {
+ updateCommand = 're-run jest with `-u`';
+ }
+ const snapshotSummary = (0, _getSnapshotSummary.default)(
+ snapshots,
+ globalConfig,
+ updateCommand
+ );
+ snapshotSummary.forEach(this.log);
+ this.log(''); // print empty line
+ }
+ }
+
+ _printSummary(aggregatedResults, globalConfig) {
+ // If there were any failing tests and there was a large number of tests
+ // executed, re-print the failing results at the end of execution output.
+ const failedTests = aggregatedResults.numFailedTests;
+ const runtimeErrors = aggregatedResults.numRuntimeErrorTestSuites;
+ if (
+ failedTests + runtimeErrors > 0 &&
+ aggregatedResults.numTotalTestSuites > this._summaryThreshold
+ ) {
+ this.log(_chalk().default.bold('Summary of all failing tests'));
+ aggregatedResults.testResults.forEach(testResult => {
+ const {failureMessage} = testResult;
+ if (failureMessage) {
+ this._write(
+ `${(0, _getResultHeader.default)(
+ testResult,
+ globalConfig
+ )}\n${failureMessage}\n`
+ );
+ }
+ });
+ this.log(''); // print empty line
+ }
+ }
+
+ _getTestSummary(testContexts, globalConfig) {
+ const getMatchingTestsInfo = () => {
+ const prefix = globalConfig.findRelatedTests
+ ? ' related to files matching '
+ : ' matching ';
+ return (
+ _chalk().default.dim(prefix) +
+ (0, _jestUtil().testPathPatternToRegExp)(
+ globalConfig.testPathPattern
+ ).toString()
+ );
+ };
+ let testInfo = '';
+ if (globalConfig.runTestsByPath) {
+ testInfo = _chalk().default.dim(' within paths');
+ } else if (globalConfig.onlyChanged) {
+ testInfo = _chalk().default.dim(' related to changed files');
+ } else if (globalConfig.testPathPattern) {
+ testInfo = getMatchingTestsInfo();
+ }
+ let nameInfo = '';
+ if (globalConfig.runTestsByPath) {
+ nameInfo = ` ${globalConfig.nonFlagArgs.map(p => `"${p}"`).join(', ')}`;
+ } else if (globalConfig.testNamePattern) {
+ nameInfo = `${_chalk().default.dim(' with tests matching ')}"${
+ globalConfig.testNamePattern
+ }"`;
+ }
+ const contextInfo =
+ testContexts.size > 1
+ ? _chalk().default.dim(' in ') +
+ testContexts.size +
+ _chalk().default.dim(' projects')
+ : '';
+ return (
+ _chalk().default.dim('Ran all test suites') +
+ testInfo +
+ nameInfo +
+ contextInfo +
+ _chalk().default.dim('.')
+ );
+ }
+}
+exports.default = SummaryReporter;
diff --git a/client-side/package/node_modules/@jest/reporters/build/VerboseReporter.js b/client-side/package/node_modules/@jest/reporters/build/VerboseReporter.js
new file mode 100644
index 000000000..09461c201
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/VerboseReporter.js
@@ -0,0 +1,175 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+var _DefaultReporter = _interopRequireDefault(require('./DefaultReporter'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const {ICONS} = _jestUtil().specialChars;
+class VerboseReporter extends _DefaultReporter.default {
+ _globalConfig;
+ static filename = __filename;
+ constructor(globalConfig) {
+ super(globalConfig);
+ this._globalConfig = globalConfig;
+ }
+
+ // Verbose mode is for debugging. Buffering of output is undesirable.
+ // See https://github.com/jestjs/jest/issues/8208
+ __wrapStdio(stream) {
+ const write = stream.write.bind(stream);
+ stream.write = chunk => {
+ this.__clearStatus();
+ write(chunk);
+ this.__printStatus();
+ return true;
+ };
+ }
+ static filterTestResults(testResults) {
+ return testResults.filter(({status}) => status !== 'pending');
+ }
+ static groupTestsBySuites(testResults) {
+ const root = {
+ suites: [],
+ tests: [],
+ title: ''
+ };
+ testResults.forEach(testResult => {
+ let targetSuite = root;
+
+ // Find the target suite for this test,
+ // creating nested suites as necessary.
+ for (const title of testResult.ancestorTitles) {
+ let matchingSuite = targetSuite.suites.find(s => s.title === title);
+ if (!matchingSuite) {
+ matchingSuite = {
+ suites: [],
+ tests: [],
+ title
+ };
+ targetSuite.suites.push(matchingSuite);
+ }
+ targetSuite = matchingSuite;
+ }
+ targetSuite.tests.push(testResult);
+ });
+ return root;
+ }
+ onTestResult(test, result, aggregatedResults) {
+ super.testFinished(test.context.config, result, aggregatedResults);
+ if (!result.skipped) {
+ this.printTestFileHeader(
+ result.testFilePath,
+ test.context.config,
+ result
+ );
+ if (!result.testExecError && !result.skipped) {
+ this._logTestResults(result.testResults);
+ }
+ this.printTestFileFailureMessage(
+ result.testFilePath,
+ test.context.config,
+ result
+ );
+ }
+ super.forceFlushBufferedOutput();
+ }
+ _logTestResults(testResults) {
+ this._logSuite(VerboseReporter.groupTestsBySuites(testResults), 0);
+ this._logLine();
+ }
+ _logSuite(suite, indentLevel) {
+ if (suite.title) {
+ this._logLine(suite.title, indentLevel);
+ }
+ this._logTests(suite.tests, indentLevel + 1);
+ suite.suites.forEach(suite => this._logSuite(suite, indentLevel + 1));
+ }
+ _getIcon(status) {
+ if (status === 'failed') {
+ return _chalk().default.red(ICONS.failed);
+ } else if (status === 'pending') {
+ return _chalk().default.yellow(ICONS.pending);
+ } else if (status === 'todo') {
+ return _chalk().default.magenta(ICONS.todo);
+ } else {
+ return _chalk().default.green(ICONS.success);
+ }
+ }
+ _logTest(test, indentLevel) {
+ const status = this._getIcon(test.status);
+ const time = test.duration
+ ? ` (${(0, _jestUtil().formatTime)(Math.round(test.duration))})`
+ : '';
+ this._logLine(
+ `${status} ${_chalk().default.dim(test.title + time)}`,
+ indentLevel
+ );
+ }
+ _logTests(tests, indentLevel) {
+ if (this._globalConfig.expand) {
+ tests.forEach(test => this._logTest(test, indentLevel));
+ } else {
+ const summedTests = tests.reduce(
+ (result, test) => {
+ if (test.status === 'pending') {
+ result.pending.push(test);
+ } else if (test.status === 'todo') {
+ result.todo.push(test);
+ } else {
+ this._logTest(test, indentLevel);
+ }
+ return result;
+ },
+ {
+ pending: [],
+ todo: []
+ }
+ );
+ if (summedTests.pending.length > 0) {
+ summedTests.pending.forEach(this._logTodoOrPendingTest(indentLevel));
+ }
+ if (summedTests.todo.length > 0) {
+ summedTests.todo.forEach(this._logTodoOrPendingTest(indentLevel));
+ }
+ }
+ }
+ _logTodoOrPendingTest(indentLevel) {
+ return test => {
+ const printedTestStatus =
+ test.status === 'pending' ? 'skipped' : test.status;
+ const icon = this._getIcon(test.status);
+ const text = _chalk().default.dim(`${printedTestStatus} ${test.title}`);
+ this._logLine(`${icon} ${text}`, indentLevel);
+ };
+ }
+ _logLine(str, indentLevel) {
+ const indentation = ' '.repeat(indentLevel || 0);
+ this.log(indentation + (str || ''));
+ }
+}
+exports.default = VerboseReporter;
diff --git a/client-side/package/node_modules/@jest/reporters/build/formatTestPath.js b/client-side/package/node_modules/@jest/reporters/build/formatTestPath.js
new file mode 100644
index 000000000..a7b53dea7
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/formatTestPath.js
@@ -0,0 +1,84 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = formatTestPath;
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+ _slash = function () {
+ return data;
+ };
+ return data;
+}
+var _relativePath = _interopRequireDefault(require('./relativePath'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function formatTestPath(config, testPath) {
+ const {dirname, basename} = (0, _relativePath.default)(config, testPath);
+ return (0, _slash().default)(
+ _chalk().default.dim(dirname + path().sep) + _chalk().default.bold(basename)
+ );
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/generateEmptyCoverage.js b/client-side/package/node_modules/@jest/reporters/build/generateEmptyCoverage.js
new file mode 100644
index 000000000..32d6a9e4a
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/generateEmptyCoverage.js
@@ -0,0 +1,151 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = generateEmptyCoverage;
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+ fs = function () {
+ return data;
+ };
+ return data;
+}
+function _istanbulLibCoverage() {
+ const data = require('istanbul-lib-coverage');
+ _istanbulLibCoverage = function () {
+ return data;
+ };
+ return data;
+}
+function _istanbulLibInstrument() {
+ const data = require('istanbul-lib-instrument');
+ _istanbulLibInstrument = function () {
+ return data;
+ };
+ return data;
+}
+function _transform() {
+ const data = require('@jest/transform');
+ _transform = function () {
+ return data;
+ };
+ return data;
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+async function generateEmptyCoverage(
+ source,
+ filename,
+ globalConfig,
+ config,
+ changedFiles,
+ sourcesRelatedToTestsInChangedFiles
+) {
+ const coverageOptions = {
+ changedFiles,
+ collectCoverage: globalConfig.collectCoverage,
+ collectCoverageFrom: globalConfig.collectCoverageFrom,
+ coverageProvider: globalConfig.coverageProvider,
+ sourcesRelatedToTestsInChangedFiles
+ };
+ let coverageWorkerResult = null;
+ if ((0, _transform().shouldInstrument)(filename, coverageOptions, config)) {
+ if (coverageOptions.coverageProvider === 'v8') {
+ const stat = fs().statSync(filename);
+ return {
+ kind: 'V8Coverage',
+ result: {
+ functions: [
+ {
+ functionName: '(empty-report)',
+ isBlockCoverage: true,
+ ranges: [
+ {
+ count: 0,
+ endOffset: stat.size,
+ startOffset: 0
+ }
+ ]
+ }
+ ],
+ scriptId: '0',
+ url: filename
+ }
+ };
+ }
+ const scriptTransformer = await (0, _transform().createScriptTransformer)(
+ config
+ );
+
+ // Transform file with instrumentation to make sure initial coverage data is well mapped to original code.
+ const {code} = await scriptTransformer.transformSourceAsync(
+ filename,
+ source,
+ {
+ instrument: true,
+ supportsDynamicImport: true,
+ supportsExportNamespaceFrom: true,
+ supportsStaticESM: true,
+ supportsTopLevelAwait: true
+ }
+ );
+ // TODO: consider passing AST
+ const extracted = (0, _istanbulLibInstrument().readInitialCoverage)(code);
+ // Check extracted initial coverage is not null, this can happen when using /* istanbul ignore file */
+ if (extracted) {
+ coverageWorkerResult = {
+ coverage: (0, _istanbulLibCoverage().createFileCoverage)(
+ extracted.coverageData
+ ),
+ kind: 'BabelCoverage'
+ };
+ }
+ }
+ return coverageWorkerResult;
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/getResultHeader.js b/client-side/package/node_modules/@jest/reporters/build/getResultHeader.js
new file mode 100644
index 000000000..4cb4d445d
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/getResultHeader.js
@@ -0,0 +1,65 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getResultHeader;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+var _formatTestPath = _interopRequireDefault(require('./formatTestPath'));
+var _printDisplayName = _interopRequireDefault(require('./printDisplayName'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const LONG_TEST_COLOR = _chalk().default.reset.bold.bgRed;
+// Explicitly reset for these messages since they can get written out in the
+// middle of error logging
+const FAIL_TEXT = 'FAIL';
+const PASS_TEXT = 'PASS';
+const FAIL = _chalk().default.supportsColor
+ ? _chalk().default.reset.inverse.bold.red(` ${FAIL_TEXT} `)
+ : FAIL_TEXT;
+const PASS = _chalk().default.supportsColor
+ ? _chalk().default.reset.inverse.bold.green(` ${PASS_TEXT} `)
+ : PASS_TEXT;
+function getResultHeader(result, globalConfig, projectConfig) {
+ const testPath = result.testFilePath;
+ const status =
+ result.numFailingTests > 0 || result.testExecError ? FAIL : PASS;
+ const testDetail = [];
+ if (result.perfStats?.slow) {
+ const runTime = result.perfStats.runtime / 1000;
+ testDetail.push(LONG_TEST_COLOR((0, _jestUtil().formatTime)(runTime, 0)));
+ }
+ if (result.memoryUsage) {
+ const toMB = bytes => Math.floor(bytes / 1024 / 1024);
+ testDetail.push(`${toMB(result.memoryUsage)} MB heap size`);
+ }
+ const projectDisplayName =
+ projectConfig && projectConfig.displayName
+ ? `${(0, _printDisplayName.default)(projectConfig)} `
+ : '';
+ return `${status} ${projectDisplayName}${(0, _formatTestPath.default)(
+ projectConfig ?? globalConfig,
+ testPath
+ )}${testDetail.length ? ` (${testDetail.join(', ')})` : ''}`;
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/getSnapshotStatus.js b/client-side/package/node_modules/@jest/reporters/build/getSnapshotStatus.js
new file mode 100644
index 000000000..411f664a1
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/getSnapshotStatus.js
@@ -0,0 +1,92 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getSnapshotStatus;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const ARROW = ' \u203A ';
+const DOT = ' \u2022 ';
+const FAIL_COLOR = _chalk().default.bold.red;
+const SNAPSHOT_ADDED = _chalk().default.bold.green;
+const SNAPSHOT_UPDATED = _chalk().default.bold.green;
+const SNAPSHOT_OUTDATED = _chalk().default.bold.yellow;
+function getSnapshotStatus(snapshot, afterUpdate) {
+ const statuses = [];
+ if (snapshot.added) {
+ statuses.push(
+ SNAPSHOT_ADDED(
+ `${
+ ARROW + (0, _jestUtil().pluralize)('snapshot', snapshot.added)
+ } written.`
+ )
+ );
+ }
+ if (snapshot.updated) {
+ statuses.push(
+ SNAPSHOT_UPDATED(
+ `${
+ ARROW + (0, _jestUtil().pluralize)('snapshot', snapshot.updated)
+ } updated.`
+ )
+ );
+ }
+ if (snapshot.unmatched) {
+ statuses.push(
+ FAIL_COLOR(
+ `${
+ ARROW + (0, _jestUtil().pluralize)('snapshot', snapshot.unmatched)
+ } failed.`
+ )
+ );
+ }
+ if (snapshot.unchecked) {
+ if (afterUpdate) {
+ statuses.push(
+ SNAPSHOT_UPDATED(
+ `${
+ ARROW + (0, _jestUtil().pluralize)('snapshot', snapshot.unchecked)
+ } removed.`
+ )
+ );
+ } else {
+ statuses.push(
+ `${SNAPSHOT_OUTDATED(
+ `${
+ ARROW + (0, _jestUtil().pluralize)('snapshot', snapshot.unchecked)
+ } obsolete`
+ )}.`
+ );
+ }
+ snapshot.uncheckedKeys.forEach(key => {
+ statuses.push(` ${DOT}${key}`);
+ });
+ }
+ if (snapshot.fileDeleted) {
+ statuses.push(SNAPSHOT_UPDATED(`${ARROW}snapshot file removed.`));
+ }
+ return statuses;
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/getSnapshotSummary.js b/client-side/package/node_modules/@jest/reporters/build/getSnapshotSummary.js
new file mode 100644
index 000000000..5d665056b
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/getSnapshotSummary.js
@@ -0,0 +1,169 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getSnapshotSummary;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+var _formatTestPath = _interopRequireDefault(require('./formatTestPath'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const ARROW = ' \u203A ';
+const DOWN_ARROW = ' \u21B3 ';
+const DOT = ' \u2022 ';
+const FAIL_COLOR = _chalk().default.bold.red;
+const OBSOLETE_COLOR = _chalk().default.bold.yellow;
+const SNAPSHOT_ADDED = _chalk().default.bold.green;
+const SNAPSHOT_NOTE = _chalk().default.dim;
+const SNAPSHOT_REMOVED = _chalk().default.bold.green;
+const SNAPSHOT_SUMMARY = _chalk().default.bold;
+const SNAPSHOT_UPDATED = _chalk().default.bold.green;
+function getSnapshotSummary(snapshots, globalConfig, updateCommand) {
+ const summary = [];
+ summary.push(SNAPSHOT_SUMMARY('Snapshot Summary'));
+ if (snapshots.added) {
+ summary.push(
+ `${SNAPSHOT_ADDED(
+ `${
+ ARROW + (0, _jestUtil().pluralize)('snapshot', snapshots.added)
+ } written `
+ )}from ${(0, _jestUtil().pluralize)('test suite', snapshots.filesAdded)}.`
+ );
+ }
+ if (snapshots.unmatched) {
+ summary.push(
+ `${FAIL_COLOR(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot',
+ snapshots.unmatched
+ )} failed`
+ )} from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.filesUnmatched
+ )}. ${SNAPSHOT_NOTE(
+ `Inspect your code changes or ${updateCommand} to update them.`
+ )}`
+ );
+ }
+ if (snapshots.updated) {
+ summary.push(
+ `${SNAPSHOT_UPDATED(
+ `${
+ ARROW + (0, _jestUtil().pluralize)('snapshot', snapshots.updated)
+ } updated `
+ )}from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.filesUpdated
+ )}.`
+ );
+ }
+ if (snapshots.filesRemoved) {
+ if (snapshots.didUpdate) {
+ summary.push(
+ `${SNAPSHOT_REMOVED(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot file',
+ snapshots.filesRemoved
+ )} removed `
+ )}from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.filesRemoved
+ )}.`
+ );
+ } else {
+ summary.push(
+ `${OBSOLETE_COLOR(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot file',
+ snapshots.filesRemoved
+ )} obsolete `
+ )}from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.filesRemoved
+ )}. ${SNAPSHOT_NOTE(
+ `To remove ${
+ snapshots.filesRemoved === 1 ? 'it' : 'them all'
+ }, ${updateCommand}.`
+ )}`
+ );
+ }
+ }
+ if (snapshots.filesRemovedList && snapshots.filesRemovedList.length) {
+ const [head, ...tail] = snapshots.filesRemovedList;
+ summary.push(
+ ` ${DOWN_ARROW} ${DOT}${(0, _formatTestPath.default)(
+ globalConfig,
+ head
+ )}`
+ );
+ tail.forEach(key => {
+ summary.push(
+ ` ${DOT}${(0, _formatTestPath.default)(globalConfig, key)}`
+ );
+ });
+ }
+ if (snapshots.unchecked) {
+ if (snapshots.didUpdate) {
+ summary.push(
+ `${SNAPSHOT_REMOVED(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot',
+ snapshots.unchecked
+ )} removed `
+ )}from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.uncheckedKeysByFile.length
+ )}.`
+ );
+ } else {
+ summary.push(
+ `${OBSOLETE_COLOR(
+ `${ARROW}${(0, _jestUtil().pluralize)(
+ 'snapshot',
+ snapshots.unchecked
+ )} obsolete `
+ )}from ${(0, _jestUtil().pluralize)(
+ 'test suite',
+ snapshots.uncheckedKeysByFile.length
+ )}. ${SNAPSHOT_NOTE(
+ `To remove ${
+ snapshots.unchecked === 1 ? 'it' : 'them all'
+ }, ${updateCommand}.`
+ )}`
+ );
+ }
+ snapshots.uncheckedKeysByFile.forEach(uncheckedFile => {
+ summary.push(
+ ` ${DOWN_ARROW}${(0, _formatTestPath.default)(
+ globalConfig,
+ uncheckedFile.filePath
+ )}`
+ );
+ uncheckedFile.keys.forEach(key => {
+ summary.push(` ${DOT}${key}`);
+ });
+ });
+ }
+ return summary;
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/getSummary.js b/client-side/package/node_modules/@jest/reporters/build/getSummary.js
new file mode 100644
index 000000000..aae461ed5
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/getSummary.js
@@ -0,0 +1,206 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.PROGRESS_BAR_WIDTH = void 0;
+exports.default = getSummary;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const PROGRESS_BAR_WIDTH = 40;
+exports.PROGRESS_BAR_WIDTH = PROGRESS_BAR_WIDTH;
+function getValuesCurrentTestCases(currentTestCases = []) {
+ let numFailingTests = 0;
+ let numPassingTests = 0;
+ let numPendingTests = 0;
+ let numTodoTests = 0;
+ let numTotalTests = 0;
+ currentTestCases.forEach(testCase => {
+ switch (testCase.testCaseResult.status) {
+ case 'failed': {
+ numFailingTests++;
+ break;
+ }
+ case 'passed': {
+ numPassingTests++;
+ break;
+ }
+ case 'skipped': {
+ numPendingTests++;
+ break;
+ }
+ case 'todo': {
+ numTodoTests++;
+ break;
+ }
+ }
+ numTotalTests++;
+ });
+ return {
+ numFailingTests,
+ numPassingTests,
+ numPendingTests,
+ numTodoTests,
+ numTotalTests
+ };
+}
+function renderTime(runTime, estimatedTime, width) {
+ // If we are more than one second over the estimated time, highlight it.
+ const renderedTime =
+ estimatedTime && runTime >= estimatedTime + 1
+ ? _chalk().default.bold.yellow((0, _jestUtil().formatTime)(runTime, 0))
+ : (0, _jestUtil().formatTime)(runTime, 0);
+ let time = `${_chalk().default.bold('Time:')} ${renderedTime}`;
+ if (runTime < estimatedTime) {
+ time += `, estimated ${(0, _jestUtil().formatTime)(estimatedTime, 0)}`;
+ }
+
+ // Only show a progress bar if the test run is actually going to take
+ // some time.
+ if (estimatedTime > 2 && runTime < estimatedTime && width) {
+ const availableWidth = Math.min(PROGRESS_BAR_WIDTH, width);
+ const length = Math.min(
+ Math.floor((runTime / estimatedTime) * availableWidth),
+ availableWidth
+ );
+ if (availableWidth >= 2) {
+ time += `\n${_chalk().default.green('█').repeat(length)}${_chalk()
+ .default.white('█')
+ .repeat(availableWidth - length)}`;
+ }
+ }
+ return time;
+}
+function getSummary(aggregatedResults, options) {
+ let runTime = (Date.now() - aggregatedResults.startTime) / 1000;
+ if (options && options.roundTime) {
+ runTime = Math.floor(runTime);
+ }
+ const valuesForCurrentTestCases = getValuesCurrentTestCases(
+ options?.currentTestCases
+ );
+ const estimatedTime = (options && options.estimatedTime) || 0;
+ const snapshotResults = aggregatedResults.snapshot;
+ const snapshotsAdded = snapshotResults.added;
+ const snapshotsFailed = snapshotResults.unmatched;
+ const snapshotsOutdated = snapshotResults.unchecked;
+ const snapshotsFilesRemoved = snapshotResults.filesRemoved;
+ const snapshotsDidUpdate = snapshotResults.didUpdate;
+ const snapshotsPassed = snapshotResults.matched;
+ const snapshotsTotal = snapshotResults.total;
+ const snapshotsUpdated = snapshotResults.updated;
+ const suitesFailed = aggregatedResults.numFailedTestSuites;
+ const suitesPassed = aggregatedResults.numPassedTestSuites;
+ const suitesPending = aggregatedResults.numPendingTestSuites;
+ const suitesRun = suitesFailed + suitesPassed;
+ const suitesTotal = aggregatedResults.numTotalTestSuites;
+ const testsFailed = aggregatedResults.numFailedTests;
+ const testsPassed = aggregatedResults.numPassedTests;
+ const testsPending = aggregatedResults.numPendingTests;
+ const testsTodo = aggregatedResults.numTodoTests;
+ const testsTotal = aggregatedResults.numTotalTests;
+ const width = (options && options.width) || 0;
+ const optionalLines = [];
+ if (options?.showSeed === true) {
+ const {seed} = options;
+ if (seed === undefined) {
+ throw new Error('Attempted to display seed but seed value is undefined');
+ }
+ optionalLines.push(`${_chalk().default.bold('Seed: ') + seed}`);
+ }
+ const suites = `${
+ _chalk().default.bold('Test Suites: ') +
+ (suitesFailed
+ ? `${_chalk().default.bold.red(`${suitesFailed} failed`)}, `
+ : '') +
+ (suitesPending
+ ? `${_chalk().default.bold.yellow(`${suitesPending} skipped`)}, `
+ : '') +
+ (suitesPassed
+ ? `${_chalk().default.bold.green(`${suitesPassed} passed`)}, `
+ : '') +
+ (suitesRun !== suitesTotal ? `${suitesRun} of ${suitesTotal}` : suitesTotal)
+ } total`;
+ const updatedTestsFailed =
+ testsFailed + valuesForCurrentTestCases.numFailingTests;
+ const updatedTestsPending =
+ testsPending + valuesForCurrentTestCases.numPendingTests;
+ const updatedTestsTodo = testsTodo + valuesForCurrentTestCases.numTodoTests;
+ const updatedTestsPassed =
+ testsPassed + valuesForCurrentTestCases.numPassingTests;
+ const updatedTestsTotal =
+ testsTotal + valuesForCurrentTestCases.numTotalTests;
+ const tests = `${
+ _chalk().default.bold('Tests: ') +
+ (updatedTestsFailed > 0
+ ? `${_chalk().default.bold.red(`${updatedTestsFailed} failed`)}, `
+ : '') +
+ (updatedTestsPending > 0
+ ? `${_chalk().default.bold.yellow(`${updatedTestsPending} skipped`)}, `
+ : '') +
+ (updatedTestsTodo > 0
+ ? `${_chalk().default.bold.magenta(`${updatedTestsTodo} todo`)}, `
+ : '') +
+ (updatedTestsPassed > 0
+ ? `${_chalk().default.bold.green(`${updatedTestsPassed} passed`)}, `
+ : '')
+ }${updatedTestsTotal} total`;
+ const snapshots = `${
+ _chalk().default.bold('Snapshots: ') +
+ (snapshotsFailed
+ ? `${_chalk().default.bold.red(`${snapshotsFailed} failed`)}, `
+ : '') +
+ (snapshotsOutdated && !snapshotsDidUpdate
+ ? `${_chalk().default.bold.yellow(`${snapshotsOutdated} obsolete`)}, `
+ : '') +
+ (snapshotsOutdated && snapshotsDidUpdate
+ ? `${_chalk().default.bold.green(`${snapshotsOutdated} removed`)}, `
+ : '') +
+ (snapshotsFilesRemoved && !snapshotsDidUpdate
+ ? `${_chalk().default.bold.yellow(
+ `${(0, _jestUtil().pluralize)(
+ 'file',
+ snapshotsFilesRemoved
+ )} obsolete`
+ )}, `
+ : '') +
+ (snapshotsFilesRemoved && snapshotsDidUpdate
+ ? `${_chalk().default.bold.green(
+ `${(0, _jestUtil().pluralize)('file', snapshotsFilesRemoved)} removed`
+ )}, `
+ : '') +
+ (snapshotsUpdated
+ ? `${_chalk().default.bold.green(`${snapshotsUpdated} updated`)}, `
+ : '') +
+ (snapshotsAdded
+ ? `${_chalk().default.bold.green(`${snapshotsAdded} written`)}, `
+ : '') +
+ (snapshotsPassed
+ ? `${_chalk().default.bold.green(`${snapshotsPassed} passed`)}, `
+ : '')
+ }${snapshotsTotal} total`;
+ const time = renderTime(runTime, estimatedTime, width);
+ return [...optionalLines, suites, tests, snapshots, time].join('\n');
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/getWatermarks.js b/client-side/package/node_modules/@jest/reporters/build/getWatermarks.js
new file mode 100644
index 000000000..2d8cdd79b
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/getWatermarks.js
@@ -0,0 +1,38 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getWatermarks;
+function _istanbulLibReport() {
+ const data = _interopRequireDefault(require('istanbul-lib-report'));
+ _istanbulLibReport = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function getWatermarks(config) {
+ const defaultWatermarks = _istanbulLibReport().default.getDefaultWatermarks();
+ const {coverageThreshold} = config;
+ if (!coverageThreshold || !coverageThreshold.global) {
+ return defaultWatermarks;
+ }
+ const keys = ['branches', 'functions', 'lines', 'statements'];
+ return keys.reduce((watermarks, key) => {
+ const value = coverageThreshold.global[key];
+ if (value !== undefined) {
+ watermarks[key][1] = value;
+ }
+ return watermarks;
+ }, defaultWatermarks);
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/index.d.ts b/client-side/package/node_modules/@jest/reporters/build/index.d.ts
new file mode 100644
index 000000000..e78fb54b6
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/index.d.ts
@@ -0,0 +1,325 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+///
+
+import {AggregatedResult} from '@jest/test-result';
+import type {AssertionResult} from '@jest/test-result';
+import type {Circus} from '@jest/types';
+import {Config} from '@jest/types';
+import {SnapshotSummary} from '@jest/test-result';
+import type {Suite} from '@jest/test-result';
+import {Test} from '@jest/test-result';
+import {TestCaseResult} from '@jest/test-result';
+import {TestContext} from '@jest/test-result';
+import {TestResult} from '@jest/test-result';
+
+export {AggregatedResult};
+
+export declare class BaseReporter implements Reporter {
+ private _error?;
+ log(message: string): void;
+ onRunStart(
+ _results?: AggregatedResult,
+ _options?: ReporterOnStartOptions,
+ ): void;
+ onTestCaseResult(_test: Test, _testCaseResult: TestCaseResult): void;
+ onTestResult(
+ _test?: Test,
+ _testResult?: TestResult,
+ _results?: AggregatedResult,
+ ): void;
+ onTestStart(_test?: Test): void;
+ onRunComplete(
+ _testContexts?: Set,
+ _aggregatedResults?: AggregatedResult,
+ ): Promise | void;
+ protected _setError(error: Error): void;
+ getLastError(): Error | undefined;
+}
+
+export {Config};
+
+export declare class CoverageReporter extends BaseReporter {
+ private readonly _context;
+ private readonly _coverageMap;
+ private readonly _globalConfig;
+ private readonly _sourceMapStore;
+ private readonly _v8CoverageResults;
+ static readonly filename: string;
+ constructor(globalConfig: Config.GlobalConfig, context: ReporterContext);
+ onTestResult(_test: Test, testResult: TestResult): void;
+ onRunComplete(
+ testContexts: Set,
+ aggregatedResults: AggregatedResult,
+ ): Promise;
+ private _addUntestedFiles;
+ private _checkThreshold;
+ private _getCoverageResult;
+}
+
+export declare class DefaultReporter extends BaseReporter {
+ private _clear;
+ private readonly _err;
+ protected _globalConfig: Config.GlobalConfig;
+ private readonly _out;
+ private readonly _status;
+ private readonly _bufferedOutput;
+ static readonly filename: string;
+ constructor(globalConfig: Config.GlobalConfig);
+ protected __wrapStdio(
+ stream: NodeJS.WritableStream | NodeJS.WriteStream,
+ ): void;
+ forceFlushBufferedOutput(): void;
+ protected __clearStatus(): void;
+ protected __printStatus(): void;
+ onRunStart(
+ aggregatedResults: AggregatedResult,
+ options: ReporterOnStartOptions,
+ ): void;
+ onTestStart(test: Test): void;
+ onTestCaseResult(test: Test, testCaseResult: TestCaseResult): void;
+ onRunComplete(): void;
+ onTestResult(
+ test: Test,
+ testResult: TestResult,
+ aggregatedResults: AggregatedResult,
+ ): void;
+ testFinished(
+ config: Config.ProjectConfig,
+ testResult: TestResult,
+ aggregatedResults: AggregatedResult,
+ ): void;
+ printTestFileHeader(
+ testPath: string,
+ config: Config.ProjectConfig,
+ result: TestResult,
+ ): void;
+ printTestFileFailureMessage(
+ _testPath: string,
+ _config: Config.ProjectConfig,
+ result: TestResult,
+ ): void;
+}
+
+declare function formatTestPath(
+ config: Config.GlobalConfig | Config.ProjectConfig,
+ testPath: string,
+): string;
+
+declare function getResultHeader(
+ result: TestResult,
+ globalConfig: Config.GlobalConfig,
+ projectConfig?: Config.ProjectConfig,
+): string;
+
+declare function getSnapshotStatus(
+ snapshot: TestResult['snapshot'],
+ afterUpdate: boolean,
+): Array;
+
+declare function getSnapshotSummary(
+ snapshots: SnapshotSummary,
+ globalConfig: Config.GlobalConfig,
+ updateCommand: string,
+): Array;
+
+declare function getSummary(
+ aggregatedResults: AggregatedResult,
+ options?: SummaryOptions,
+): string;
+
+export declare class GitHubActionsReporter extends BaseReporter {
+ #private;
+ static readonly filename: string;
+ private readonly options;
+ constructor(
+ _globalConfig: Config.GlobalConfig,
+ reporterOptions?: {
+ silent?: boolean;
+ },
+ );
+ onTestResult(
+ test: Test,
+ testResult: TestResult,
+ aggregatedResults: AggregatedResult,
+ ): void;
+ private generateAnnotations;
+ private isLastTestSuite;
+ private printFullResult;
+ private arrayEqual;
+ private arrayChild;
+ private getResultTree;
+ private getResultChildren;
+ private printResultTree;
+ private recursivePrintResultTree;
+ private printFailedTestLogs;
+ private startGroup;
+ private endGroup;
+}
+
+export declare class NotifyReporter extends BaseReporter {
+ private readonly _notifier;
+ private readonly _globalConfig;
+ private _context;
+ static readonly filename: string;
+ constructor(globalConfig: Config.GlobalConfig, context: ReporterContext);
+ onRunComplete(testContexts: Set, result: AggregatedResult): void;
+}
+
+declare function printDisplayName(config: Config.ProjectConfig): string;
+
+declare function relativePath(
+ config: Config.GlobalConfig | Config.ProjectConfig,
+ testPath: string,
+): {
+ basename: string;
+ dirname: string;
+};
+
+export declare interface Reporter {
+ readonly onTestResult?: (
+ test: Test,
+ testResult: TestResult,
+ aggregatedResult: AggregatedResult,
+ ) => Promise | void;
+ readonly onTestFileResult?: (
+ test: Test,
+ testResult: TestResult,
+ aggregatedResult: AggregatedResult,
+ ) => Promise | void;
+ /**
+ * Called before running a spec (prior to `before` hooks)
+ * Not called for `skipped` and `todo` specs
+ */
+ readonly onTestCaseStart?: (
+ test: Test,
+ testCaseStartInfo: Circus.TestCaseStartInfo,
+ ) => Promise | void;
+ readonly onTestCaseResult?: (
+ test: Test,
+ testCaseResult: TestCaseResult,
+ ) => Promise | void;
+ readonly onRunStart?: (
+ results: AggregatedResult,
+ options: ReporterOnStartOptions,
+ ) => Promise | void;
+ readonly onTestStart?: (test: Test) => Promise | void;
+ readonly onTestFileStart?: (test: Test) => Promise | void;
+ readonly onRunComplete?: (
+ testContexts: Set,
+ results: AggregatedResult,
+ ) => Promise | void;
+ readonly getLastError?: () => Error | void;
+}
+
+export declare type ReporterContext = {
+ firstRun: boolean;
+ previousSuccess: boolean;
+ changedFiles?: Set;
+ sourcesRelatedToTestsInChangedFiles?: Set;
+ startRun?: (globalConfig: Config.GlobalConfig) => unknown;
+};
+
+export declare type ReporterOnStartOptions = {
+ estimatedTime: number;
+ showStatus: boolean;
+};
+
+export {SnapshotSummary};
+
+export declare type SummaryOptions = {
+ currentTestCases?: Array<{
+ test: Test;
+ testCaseResult: TestCaseResult;
+ }>;
+ estimatedTime?: number;
+ roundTime?: boolean;
+ width?: number;
+ showSeed?: boolean;
+ seed?: number;
+};
+
+export declare class SummaryReporter extends BaseReporter {
+ private _estimatedTime;
+ private readonly _globalConfig;
+ private readonly _summaryThreshold;
+ static readonly filename: string;
+ constructor(
+ globalConfig: Config.GlobalConfig,
+ options?: SummaryReporterOptions,
+ );
+ private _validateOptions;
+ private _write;
+ onRunStart(
+ aggregatedResults: AggregatedResult,
+ options: ReporterOnStartOptions,
+ ): void;
+ onRunComplete(
+ testContexts: Set,
+ aggregatedResults: AggregatedResult,
+ ): void;
+ private _printSnapshotSummary;
+ private _printSummary;
+ private _getTestSummary;
+}
+
+export declare type SummaryReporterOptions = {
+ summaryThreshold?: number;
+};
+
+export {Test};
+
+export {TestCaseResult};
+
+export {TestContext};
+
+export {TestResult};
+
+declare function trimAndFormatPath(
+ pad: number,
+ config: Config.ProjectConfig | Config.GlobalConfig,
+ testPath: string,
+ columns: number,
+): string;
+
+export declare const utils: {
+ formatTestPath: typeof formatTestPath;
+ getResultHeader: typeof getResultHeader;
+ getSnapshotStatus: typeof getSnapshotStatus;
+ getSnapshotSummary: typeof getSnapshotSummary;
+ getSummary: typeof getSummary;
+ printDisplayName: typeof printDisplayName;
+ relativePath: typeof relativePath;
+ trimAndFormatPath: typeof trimAndFormatPath;
+};
+
+export declare class VerboseReporter extends DefaultReporter {
+ protected _globalConfig: Config.GlobalConfig;
+ static readonly filename: string;
+ constructor(globalConfig: Config.GlobalConfig);
+ protected __wrapStdio(
+ stream: NodeJS.WritableStream | NodeJS.WriteStream,
+ ): void;
+ static filterTestResults(
+ testResults: Array,
+ ): Array;
+ static groupTestsBySuites(testResults: Array): Suite;
+ onTestResult(
+ test: Test,
+ result: TestResult,
+ aggregatedResults: AggregatedResult,
+ ): void;
+ private _logTestResults;
+ private _logSuite;
+ private _getIcon;
+ private _logTest;
+ private _logTests;
+ private _logTodoOrPendingTest;
+ private _logLine;
+}
+
+export {};
diff --git a/client-side/package/node_modules/@jest/reporters/build/index.js b/client-side/package/node_modules/@jest/reporters/build/index.js
new file mode 100644
index 000000000..8da383a70
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/index.js
@@ -0,0 +1,88 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'BaseReporter', {
+ enumerable: true,
+ get: function () {
+ return _BaseReporter.default;
+ }
+});
+Object.defineProperty(exports, 'CoverageReporter', {
+ enumerable: true,
+ get: function () {
+ return _CoverageReporter.default;
+ }
+});
+Object.defineProperty(exports, 'DefaultReporter', {
+ enumerable: true,
+ get: function () {
+ return _DefaultReporter.default;
+ }
+});
+Object.defineProperty(exports, 'GitHubActionsReporter', {
+ enumerable: true,
+ get: function () {
+ return _GitHubActionsReporter.default;
+ }
+});
+Object.defineProperty(exports, 'NotifyReporter', {
+ enumerable: true,
+ get: function () {
+ return _NotifyReporter.default;
+ }
+});
+Object.defineProperty(exports, 'SummaryReporter', {
+ enumerable: true,
+ get: function () {
+ return _SummaryReporter.default;
+ }
+});
+Object.defineProperty(exports, 'VerboseReporter', {
+ enumerable: true,
+ get: function () {
+ return _VerboseReporter.default;
+ }
+});
+exports.utils = void 0;
+var _formatTestPath = _interopRequireDefault(require('./formatTestPath'));
+var _getResultHeader = _interopRequireDefault(require('./getResultHeader'));
+var _getSnapshotStatus = _interopRequireDefault(require('./getSnapshotStatus'));
+var _getSnapshotSummary = _interopRequireDefault(
+ require('./getSnapshotSummary')
+);
+var _getSummary = _interopRequireDefault(require('./getSummary'));
+var _printDisplayName = _interopRequireDefault(require('./printDisplayName'));
+var _relativePath = _interopRequireDefault(require('./relativePath'));
+var _trimAndFormatPath = _interopRequireDefault(require('./trimAndFormatPath'));
+var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
+var _CoverageReporter = _interopRequireDefault(require('./CoverageReporter'));
+var _DefaultReporter = _interopRequireDefault(require('./DefaultReporter'));
+var _GitHubActionsReporter = _interopRequireDefault(
+ require('./GitHubActionsReporter')
+);
+var _NotifyReporter = _interopRequireDefault(require('./NotifyReporter'));
+var _SummaryReporter = _interopRequireDefault(require('./SummaryReporter'));
+var _VerboseReporter = _interopRequireDefault(require('./VerboseReporter'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const utils = {
+ formatTestPath: _formatTestPath.default,
+ getResultHeader: _getResultHeader.default,
+ getSnapshotStatus: _getSnapshotStatus.default,
+ getSnapshotSummary: _getSnapshotSummary.default,
+ getSummary: _getSummary.default,
+ printDisplayName: _printDisplayName.default,
+ relativePath: _relativePath.default,
+ trimAndFormatPath: _trimAndFormatPath.default
+};
+exports.utils = utils;
diff --git a/client-side/package/node_modules/@jest/reporters/build/printDisplayName.js b/client-side/package/node_modules/@jest/reporters/build/printDisplayName.js
new file mode 100644
index 000000000..148cc0c0b
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/printDisplayName.js
@@ -0,0 +1,35 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = printDisplayName;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function printDisplayName(config) {
+ const {displayName} = config;
+ const white = _chalk().default.reset.inverse.white;
+ if (!displayName) {
+ return '';
+ }
+ const {name, color} = displayName;
+ const chosenColor = _chalk().default.reset.inverse[color]
+ ? _chalk().default.reset.inverse[color]
+ : white;
+ return _chalk().default.supportsColor ? chosenColor(` ${name} `) : name;
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/relativePath.js b/client-side/package/node_modules/@jest/reporters/build/relativePath.js
new file mode 100644
index 000000000..38c1b3812
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/relativePath.js
@@ -0,0 +1,72 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = relativePath;
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function relativePath(config, testPath) {
+ // this function can be called with ProjectConfigs or GlobalConfigs. GlobalConfigs
+ // do not have config.cwd, only config.rootDir. Try using config.cwd, fallback
+ // to config.rootDir. (Also, some unit just use config.rootDir, which is ok)
+ testPath = path().relative(config.cwd || config.rootDir, testPath);
+ const dirname = path().dirname(testPath);
+ const basename = path().basename(testPath);
+ return {
+ basename,
+ dirname
+ };
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/trimAndFormatPath.js b/client-side/package/node_modules/@jest/reporters/build/trimAndFormatPath.js
new file mode 100644
index 000000000..844410e81
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/trimAndFormatPath.js
@@ -0,0 +1,118 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = trimAndFormatPath;
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+ _slash = function () {
+ return data;
+ };
+ return data;
+}
+var _relativePath = _interopRequireDefault(require('./relativePath'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function trimAndFormatPath(pad, config, testPath, columns) {
+ const maxLength = columns - pad;
+ const relative = (0, _relativePath.default)(config, testPath);
+ const {basename} = relative;
+ let {dirname} = relative;
+
+ // length is ok
+ if ((dirname + path().sep + basename).length <= maxLength) {
+ return (0, _slash().default)(
+ _chalk().default.dim(dirname + path().sep) +
+ _chalk().default.bold(basename)
+ );
+ }
+
+ // we can fit trimmed dirname and full basename
+ const basenameLength = basename.length;
+ if (basenameLength + 4 < maxLength) {
+ const dirnameLength = maxLength - 4 - basenameLength;
+ dirname = `...${dirname.slice(
+ dirname.length - dirnameLength,
+ dirname.length
+ )}`;
+ return (0, _slash().default)(
+ _chalk().default.dim(dirname + path().sep) +
+ _chalk().default.bold(basename)
+ );
+ }
+ if (basenameLength + 4 === maxLength) {
+ return (0, _slash().default)(
+ _chalk().default.dim(`...${path().sep}`) + _chalk().default.bold(basename)
+ );
+ }
+
+ // can't fit dirname, but can fit trimmed basename
+ return (0, _slash().default)(
+ _chalk().default.bold(
+ `...${basename.slice(basename.length - maxLength - 4, basename.length)}`
+ )
+ );
+}
diff --git a/client-side/package/node_modules/@jest/reporters/build/types.js b/client-side/package/node_modules/@jest/reporters/build/types.js
new file mode 100644
index 000000000..ad9a93a7c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/client-side/package/node_modules/@jest/reporters/build/wrapAnsiString.js b/client-side/package/node_modules/@jest/reporters/build/wrapAnsiString.js
new file mode 100644
index 000000000..85f3cdf89
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/build/wrapAnsiString.js
@@ -0,0 +1,69 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = wrapAnsiString;
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+// word-wrap a string that contains ANSI escape sequences.
+// ANSI escape sequences do not add to the string length.
+function wrapAnsiString(string, terminalWidth) {
+ if (terminalWidth === 0) {
+ // if the terminal width is zero, don't bother word-wrapping
+ return string;
+ }
+ const ANSI_REGEXP = /[\u001b\u009b]\[\d{1,2}m/gu;
+ const tokens = [];
+ let lastIndex = 0;
+ let match;
+ while ((match = ANSI_REGEXP.exec(string))) {
+ const ansi = match[0];
+ const index = match.index;
+ if (index != lastIndex) {
+ tokens.push(['string', string.slice(lastIndex, index)]);
+ }
+ tokens.push(['ansi', ansi]);
+ lastIndex = index + ansi.length;
+ }
+ if (lastIndex != string.length - 1) {
+ tokens.push(['string', string.slice(lastIndex, string.length)]);
+ }
+ let lastLineLength = 0;
+ return tokens
+ .reduce(
+ (lines, [kind, token]) => {
+ if (kind === 'string') {
+ if (lastLineLength + token.length > terminalWidth) {
+ while (token.length) {
+ const chunk = token.slice(0, terminalWidth - lastLineLength);
+ const remaining = token.slice(
+ terminalWidth - lastLineLength,
+ token.length
+ );
+ lines[lines.length - 1] += chunk;
+ lastLineLength += chunk.length;
+ token = remaining;
+ if (token.length) {
+ lines.push('');
+ lastLineLength = 0;
+ }
+ }
+ } else {
+ lines[lines.length - 1] += token;
+ lastLineLength += token.length;
+ }
+ } else {
+ lines[lines.length - 1] += token;
+ }
+ return lines;
+ },
+ ['']
+ )
+ .join('\n');
+}
diff --git a/client-side/package/node_modules/@jest/reporters/package.json b/client-side/package/node_modules/@jest/reporters/package.json
new file mode 100644
index 000000000..d1f63b82f
--- /dev/null
+++ b/client-side/package/node_modules/@jest/reporters/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "@jest/reporters",
+ "description": "Jest's reporters",
+ "version": "29.7.0",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^6.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "devDependencies": {
+ "@jest/test-utils": "^29.7.0",
+ "@tsd/typescript": "^5.0.4",
+ "@types/exit": "^0.1.30",
+ "@types/glob": "^7.1.1",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-lib-instrument": "^1.7.2",
+ "@types/istanbul-lib-report": "^3.0.0",
+ "@types/istanbul-lib-source-maps": "^4.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node-notifier": "^8.0.0",
+ "jest-resolve": "^29.7.0",
+ "mock-fs": "^5.1.2",
+ "node-notifier": "^10.0.0",
+ "tsd-lite": "^0.7.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jestjs/jest.git",
+ "directory": "packages/jest-reporters"
+ },
+ "bugs": {
+ "url": "https://github.com/jestjs/jest/issues"
+ },
+ "homepage": "https://jestjs.io/",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630"
+}
diff --git a/client-side/package/node_modules/@jest/source-map/LICENSE b/client-side/package/node_modules/@jest/source-map/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/source-map/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/source-map/build/getCallsite.js b/client-side/package/node_modules/@jest/source-map/build/getCallsite.js
new file mode 100644
index 000000000..48f633aa1
--- /dev/null
+++ b/client-side/package/node_modules/@jest/source-map/build/getCallsite.js
@@ -0,0 +1,85 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = getCallsite;
+function _traceMapping() {
+ const data = require('@jridgewell/trace-mapping');
+ _traceMapping = function () {
+ return data;
+ };
+ return data;
+}
+function _callsites() {
+ const data = _interopRequireDefault(require('callsites'));
+ _callsites = function () {
+ return data;
+ };
+ return data;
+}
+function _gracefulFs() {
+ const data = require('graceful-fs');
+ _gracefulFs = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+// Copied from https://github.com/rexxars/sourcemap-decorate-callsites/blob/5b9735a156964973a75dc62fd2c7f0c1975458e8/lib/index.js#L113-L158
+const addSourceMapConsumer = (callsite, tracer) => {
+ const getLineNumber = callsite.getLineNumber.bind(callsite);
+ const getColumnNumber = callsite.getColumnNumber.bind(callsite);
+ let position = null;
+ function getPosition() {
+ if (!position) {
+ position = (0, _traceMapping().originalPositionFor)(tracer, {
+ column: getColumnNumber() ?? -1,
+ line: getLineNumber() ?? -1
+ });
+ }
+ return position;
+ }
+ Object.defineProperties(callsite, {
+ getColumnNumber: {
+ value() {
+ const value = getPosition().column;
+ return value == null || value === 0 ? getColumnNumber() : value;
+ },
+ writable: false
+ },
+ getLineNumber: {
+ value() {
+ const value = getPosition().line;
+ return value == null || value === 0 ? getLineNumber() : value;
+ },
+ writable: false
+ }
+ });
+};
+function getCallsite(level, sourceMaps) {
+ const levelAfterThisCall = level + 1;
+ const stack = (0, _callsites().default)()[levelAfterThisCall];
+ const sourceMapFileName = sourceMaps?.get(stack.getFileName() ?? '');
+ if (sourceMapFileName != null && sourceMapFileName !== '') {
+ try {
+ const sourceMap = (0, _gracefulFs().readFileSync)(
+ sourceMapFileName,
+ 'utf8'
+ );
+ addSourceMapConsumer(stack, new (_traceMapping().TraceMap)(sourceMap));
+ } catch {
+ // ignore
+ }
+ }
+ return stack;
+}
diff --git a/client-side/package/node_modules/@jest/source-map/build/index.d.ts b/client-side/package/node_modules/@jest/source-map/build/index.d.ts
new file mode 100644
index 000000000..7a421847a
--- /dev/null
+++ b/client-side/package/node_modules/@jest/source-map/build/index.d.ts
@@ -0,0 +1,16 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import callsites = require('callsites');
+
+export declare function getCallsite(
+ level: number,
+ sourceMaps?: SourceMapRegistry | null,
+): callsites.CallSite;
+
+export declare type SourceMapRegistry = Map;
+
+export {};
diff --git a/client-side/package/node_modules/@jest/source-map/build/index.js b/client-side/package/node_modules/@jest/source-map/build/index.js
new file mode 100644
index 000000000..c4f4cf9e7
--- /dev/null
+++ b/client-side/package/node_modules/@jest/source-map/build/index.js
@@ -0,0 +1,15 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'getCallsite', {
+ enumerable: true,
+ get: function () {
+ return _getCallsite.default;
+ }
+});
+var _getCallsite = _interopRequireDefault(require('./getCallsite'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/client-side/package/node_modules/@jest/source-map/build/types.js b/client-side/package/node_modules/@jest/source-map/build/types.js
new file mode 100644
index 000000000..ad9a93a7c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/source-map/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/client-side/package/node_modules/@jest/source-map/package.json b/client-side/package/node_modules/@jest/source-map/package.json
new file mode 100644
index 000000000..1d014d1d5
--- /dev/null
+++ b/client-side/package/node_modules/@jest/source-map/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "@jest/source-map",
+ "version": "29.6.3",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jestjs/jest.git",
+ "directory": "packages/jest-source-map"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ },
+ "devDependencies": {
+ "@types/graceful-fs": "^4.1.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "fb7d95c8af6e0d65a8b65348433d8a0ea0725b5b"
+}
diff --git a/client-side/package/node_modules/@jest/test-result/LICENSE b/client-side/package/node_modules/@jest/test-result/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-result/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/test-result/build/formatTestResults.js b/client-side/package/node_modules/@jest/test-result/build/formatTestResults.js
new file mode 100644
index 000000000..4d7be9b05
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-result/build/formatTestResults.js
@@ -0,0 +1,69 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = formatTestResults;
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const formatTestResult = (testResult, codeCoverageFormatter, reporter) => {
+ if (testResult.testExecError) {
+ const now = Date.now();
+ return {
+ assertionResults: testResult.testResults,
+ coverage: {},
+ endTime: now,
+ message: testResult.failureMessage ?? testResult.testExecError.message,
+ name: testResult.testFilePath,
+ startTime: now,
+ status: 'failed',
+ summary: ''
+ };
+ }
+ if (testResult.skipped) {
+ const now = Date.now();
+ return {
+ assertionResults: testResult.testResults,
+ coverage: {},
+ endTime: now,
+ message: testResult.failureMessage ?? '',
+ name: testResult.testFilePath,
+ startTime: now,
+ status: 'skipped',
+ summary: ''
+ };
+ }
+ const allTestsExecuted = testResult.numPendingTests === 0;
+ const allTestsPassed = testResult.numFailingTests === 0;
+ return {
+ assertionResults: testResult.testResults,
+ coverage:
+ codeCoverageFormatter != null
+ ? codeCoverageFormatter(testResult.coverage, reporter)
+ : testResult.coverage,
+ endTime: testResult.perfStats.end,
+ message: testResult.failureMessage ?? '',
+ name: testResult.testFilePath,
+ startTime: testResult.perfStats.start,
+ status: allTestsPassed
+ ? allTestsExecuted
+ ? 'passed'
+ : 'focused'
+ : 'failed',
+ summary: ''
+ };
+};
+function formatTestResults(results, codeCoverageFormatter, reporter) {
+ const testResults = results.testResults.map(testResult =>
+ formatTestResult(testResult, codeCoverageFormatter, reporter)
+ );
+ return {
+ ...results,
+ testResults
+ };
+}
diff --git a/client-side/package/node_modules/@jest/test-result/build/helpers.js b/client-side/package/node_modules/@jest/test-result/build/helpers.js
new file mode 100644
index 000000000..544763924
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-result/build/helpers.js
@@ -0,0 +1,175 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.makeEmptyAggregatedTestResult =
+ exports.createEmptyTestResult =
+ exports.buildFailureTestResult =
+ exports.addResult =
+ void 0;
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const makeEmptyAggregatedTestResult = () => ({
+ numFailedTestSuites: 0,
+ numFailedTests: 0,
+ numPassedTestSuites: 0,
+ numPassedTests: 0,
+ numPendingTestSuites: 0,
+ numPendingTests: 0,
+ numRuntimeErrorTestSuites: 0,
+ numTodoTests: 0,
+ numTotalTestSuites: 0,
+ numTotalTests: 0,
+ openHandles: [],
+ snapshot: {
+ added: 0,
+ didUpdate: false,
+ // is set only after the full run
+ failure: false,
+ filesAdded: 0,
+ // combines individual test results + removed files after the full run
+ filesRemoved: 0,
+ filesRemovedList: [],
+ filesUnmatched: 0,
+ filesUpdated: 0,
+ matched: 0,
+ total: 0,
+ unchecked: 0,
+ uncheckedKeysByFile: [],
+ unmatched: 0,
+ updated: 0
+ },
+ startTime: 0,
+ success: true,
+ testResults: [],
+ wasInterrupted: false
+});
+exports.makeEmptyAggregatedTestResult = makeEmptyAggregatedTestResult;
+const buildFailureTestResult = (testPath, err) => ({
+ console: undefined,
+ displayName: undefined,
+ failureMessage: null,
+ leaks: false,
+ numFailingTests: 0,
+ numPassingTests: 0,
+ numPendingTests: 0,
+ numTodoTests: 0,
+ openHandles: [],
+ perfStats: {
+ end: 0,
+ runtime: 0,
+ slow: false,
+ start: 0
+ },
+ skipped: false,
+ snapshot: {
+ added: 0,
+ fileDeleted: false,
+ matched: 0,
+ unchecked: 0,
+ uncheckedKeys: [],
+ unmatched: 0,
+ updated: 0
+ },
+ testExecError: err,
+ testFilePath: testPath,
+ testResults: []
+});
+
+// Add individual test result to an aggregated test result
+exports.buildFailureTestResult = buildFailureTestResult;
+const addResult = (aggregatedResults, testResult) => {
+ // `todos` are new as of Jest 24, and not all runners return it.
+ // Set it to `0` to avoid `NaN`
+ if (!testResult.numTodoTests) {
+ testResult.numTodoTests = 0;
+ }
+ aggregatedResults.testResults.push(testResult);
+ aggregatedResults.numTotalTests +=
+ testResult.numPassingTests +
+ testResult.numFailingTests +
+ testResult.numPendingTests +
+ testResult.numTodoTests;
+ aggregatedResults.numFailedTests += testResult.numFailingTests;
+ aggregatedResults.numPassedTests += testResult.numPassingTests;
+ aggregatedResults.numPendingTests += testResult.numPendingTests;
+ aggregatedResults.numTodoTests += testResult.numTodoTests;
+ if (testResult.testExecError) {
+ aggregatedResults.numRuntimeErrorTestSuites++;
+ }
+ if (testResult.skipped) {
+ aggregatedResults.numPendingTestSuites++;
+ } else if (testResult.numFailingTests > 0 || testResult.testExecError) {
+ aggregatedResults.numFailedTestSuites++;
+ } else {
+ aggregatedResults.numPassedTestSuites++;
+ }
+
+ // Snapshot data
+ if (testResult.snapshot.added) {
+ aggregatedResults.snapshot.filesAdded++;
+ }
+ if (testResult.snapshot.fileDeleted) {
+ aggregatedResults.snapshot.filesRemoved++;
+ }
+ if (testResult.snapshot.unmatched) {
+ aggregatedResults.snapshot.filesUnmatched++;
+ }
+ if (testResult.snapshot.updated) {
+ aggregatedResults.snapshot.filesUpdated++;
+ }
+ aggregatedResults.snapshot.added += testResult.snapshot.added;
+ aggregatedResults.snapshot.matched += testResult.snapshot.matched;
+ aggregatedResults.snapshot.unchecked += testResult.snapshot.unchecked;
+ if (
+ testResult.snapshot.uncheckedKeys != null &&
+ testResult.snapshot.uncheckedKeys.length > 0
+ ) {
+ aggregatedResults.snapshot.uncheckedKeysByFile.push({
+ filePath: testResult.testFilePath,
+ keys: testResult.snapshot.uncheckedKeys
+ });
+ }
+ aggregatedResults.snapshot.unmatched += testResult.snapshot.unmatched;
+ aggregatedResults.snapshot.updated += testResult.snapshot.updated;
+ aggregatedResults.snapshot.total +=
+ testResult.snapshot.added +
+ testResult.snapshot.matched +
+ testResult.snapshot.unmatched +
+ testResult.snapshot.updated;
+};
+exports.addResult = addResult;
+const createEmptyTestResult = () => ({
+ leaks: false,
+ // That's legacy code, just adding it as needed for typing
+ numFailingTests: 0,
+ numPassingTests: 0,
+ numPendingTests: 0,
+ numTodoTests: 0,
+ openHandles: [],
+ perfStats: {
+ end: 0,
+ runtime: 0,
+ slow: false,
+ start: 0
+ },
+ skipped: false,
+ snapshot: {
+ added: 0,
+ fileDeleted: false,
+ matched: 0,
+ unchecked: 0,
+ uncheckedKeys: [],
+ unmatched: 0,
+ updated: 0
+ },
+ testFilePath: '',
+ testResults: []
+});
+exports.createEmptyTestResult = createEmptyTestResult;
diff --git a/client-side/package/node_modules/@jest/test-result/build/index.d.ts b/client-side/package/node_modules/@jest/test-result/build/index.d.ts
new file mode 100644
index 000000000..0fc8cc5d3
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-result/build/index.d.ts
@@ -0,0 +1,232 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type {Circus} from '@jest/types';
+import type {Config} from '@jest/types';
+import type {ConsoleBuffer} from '@jest/console';
+import type {CoverageMap} from 'istanbul-lib-coverage';
+import type {CoverageMapData} from 'istanbul-lib-coverage';
+import type {IHasteFS} from 'jest-haste-map';
+import type {IModuleMap} from 'jest-haste-map';
+import type Resolver from 'jest-resolve';
+import type {TestResult as TestResult_2} from '@jest/types';
+import type {TransformTypes} from '@jest/types';
+import type {V8Coverage} from 'collect-v8-coverage';
+
+export declare const addResult: (
+ aggregatedResults: AggregatedResult,
+ testResult: TestResult,
+) => void;
+
+export declare type AggregatedResult = AggregatedResultWithoutCoverage & {
+ coverageMap?: CoverageMap | null;
+};
+
+declare type AggregatedResultWithoutCoverage = {
+ numFailedTests: number;
+ numFailedTestSuites: number;
+ numPassedTests: number;
+ numPassedTestSuites: number;
+ numPendingTests: number;
+ numTodoTests: number;
+ numPendingTestSuites: number;
+ numRuntimeErrorTestSuites: number;
+ numTotalTests: number;
+ numTotalTestSuites: number;
+ openHandles: Array;
+ snapshot: SnapshotSummary;
+ startTime: number;
+ success: boolean;
+ testResults: Array;
+ wasInterrupted: boolean;
+ runExecError?: SerializableError;
+};
+
+export declare type AssertionLocation = {
+ fullName: string;
+ path: string;
+};
+
+export declare type AssertionResult = TestResult_2.AssertionResult;
+
+export declare const buildFailureTestResult: (
+ testPath: string,
+ err: SerializableError,
+) => TestResult;
+
+declare type CodeCoverageFormatter = (
+ coverage: CoverageMapData | null | undefined,
+ reporter: CodeCoverageReporter,
+) => Record | null | undefined;
+
+declare type CodeCoverageReporter = unknown;
+
+export declare const createEmptyTestResult: () => TestResult;
+
+export declare type FailedAssertion = {
+ matcherName?: string;
+ message?: string;
+ actual?: unknown;
+ pass?: boolean;
+ passed?: boolean;
+ expected?: unknown;
+ isNot?: boolean;
+ stack?: string;
+ error?: unknown;
+};
+
+declare type FormattedAssertionResult = Pick<
+ AssertionResult,
+ 'ancestorTitles' | 'fullName' | 'location' | 'status' | 'title' | 'duration'
+> & {
+ failureMessages: AssertionResult['failureMessages'] | null;
+};
+
+declare type FormattedTestResult = {
+ message: string;
+ name: string;
+ summary: string;
+ status: 'failed' | 'passed' | 'skipped' | 'focused';
+ startTime: number;
+ endTime: number;
+ coverage: unknown;
+ assertionResults: Array;
+};
+
+export declare type FormattedTestResults = {
+ coverageMap?: CoverageMap | null | undefined;
+ numFailedTests: number;
+ numFailedTestSuites: number;
+ numPassedTests: number;
+ numPassedTestSuites: number;
+ numPendingTests: number;
+ numPendingTestSuites: number;
+ numRuntimeErrorTestSuites: number;
+ numTotalTests: number;
+ numTotalTestSuites: number;
+ snapshot: SnapshotSummary;
+ startTime: number;
+ success: boolean;
+ testResults: Array;
+ wasInterrupted: boolean;
+};
+
+export declare function formatTestResults(
+ results: AggregatedResult,
+ codeCoverageFormatter?: CodeCoverageFormatter,
+ reporter?: CodeCoverageReporter,
+): FormattedTestResults;
+
+export declare const makeEmptyAggregatedTestResult: () => AggregatedResult;
+
+export declare interface RuntimeTransformResult
+ extends TransformTypes.TransformResult {
+ wrapperLength: number;
+}
+
+export declare type SerializableError = TestResult_2.SerializableError;
+
+export declare type SnapshotSummary = {
+ added: number;
+ didUpdate: boolean;
+ failure: boolean;
+ filesAdded: number;
+ filesRemoved: number;
+ filesRemovedList: Array;
+ filesUnmatched: number;
+ filesUpdated: number;
+ matched: number;
+ total: number;
+ unchecked: number;
+ uncheckedKeysByFile: Array;
+ unmatched: number;
+ updated: number;
+};
+
+export declare type Status = AssertionResult['status'];
+
+export declare type Suite = {
+ title: string;
+ suites: Array;
+ tests: Array;
+};
+
+export declare type Test = {
+ context: TestContext;
+ duration?: number;
+ path: string;
+};
+
+export declare type TestCaseResult = AssertionResult;
+
+export declare type TestContext = {
+ config: Config.ProjectConfig;
+ hasteFS: IHasteFS;
+ moduleMap: IModuleMap;
+ resolver: Resolver;
+};
+
+export declare type TestEvents = {
+ 'test-file-start': [Test];
+ 'test-file-success': [Test, TestResult];
+ 'test-file-failure': [Test, SerializableError];
+ 'test-case-start': [string, Circus.TestCaseStartInfo];
+ 'test-case-result': [string, AssertionResult];
+};
+
+export declare type TestFileEvent<
+ T extends keyof TestEvents = keyof TestEvents,
+> = (eventName: T, args: TestEvents[T]) => unknown;
+
+export declare type TestResult = {
+ console?: ConsoleBuffer;
+ coverage?: CoverageMapData;
+ displayName?: Config.DisplayName;
+ failureMessage?: string | null;
+ leaks: boolean;
+ memoryUsage?: number;
+ numFailingTests: number;
+ numPassingTests: number;
+ numPendingTests: number;
+ numTodoTests: number;
+ openHandles: Array;
+ perfStats: {
+ end: number;
+ runtime: number;
+ slow: boolean;
+ start: number;
+ };
+ skipped: boolean;
+ snapshot: {
+ added: number;
+ fileDeleted: boolean;
+ matched: number;
+ unchecked: number;
+ uncheckedKeys: Array;
+ unmatched: number;
+ updated: number;
+ };
+ testExecError?: SerializableError;
+ testFilePath: string;
+ testResults: Array;
+ v8Coverage?: V8CoverageResult;
+};
+
+export declare type TestResultsProcessor = (
+ results: AggregatedResult,
+) => AggregatedResult | Promise;
+
+declare type UncheckedSnapshot = {
+ filePath: string;
+ keys: Array;
+};
+
+export declare type V8CoverageResult = Array<{
+ codeTransformResult: RuntimeTransformResult | undefined;
+ result: V8Coverage[number];
+}>;
+
+export {};
diff --git a/client-side/package/node_modules/@jest/test-result/build/index.js b/client-side/package/node_modules/@jest/test-result/build/index.js
new file mode 100644
index 000000000..2f7f67a5f
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-result/build/index.js
@@ -0,0 +1,40 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+Object.defineProperty(exports, 'addResult', {
+ enumerable: true,
+ get: function () {
+ return _helpers.addResult;
+ }
+});
+Object.defineProperty(exports, 'buildFailureTestResult', {
+ enumerable: true,
+ get: function () {
+ return _helpers.buildFailureTestResult;
+ }
+});
+Object.defineProperty(exports, 'createEmptyTestResult', {
+ enumerable: true,
+ get: function () {
+ return _helpers.createEmptyTestResult;
+ }
+});
+Object.defineProperty(exports, 'formatTestResults', {
+ enumerable: true,
+ get: function () {
+ return _formatTestResults.default;
+ }
+});
+Object.defineProperty(exports, 'makeEmptyAggregatedTestResult', {
+ enumerable: true,
+ get: function () {
+ return _helpers.makeEmptyAggregatedTestResult;
+ }
+});
+var _formatTestResults = _interopRequireDefault(require('./formatTestResults'));
+var _helpers = require('./helpers');
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
diff --git a/client-side/package/node_modules/@jest/test-result/build/types.js b/client-side/package/node_modules/@jest/test-result/build/types.js
new file mode 100644
index 000000000..ad9a93a7c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-result/build/types.js
@@ -0,0 +1 @@
+'use strict';
diff --git a/client-side/package/node_modules/@jest/test-result/package.json b/client-side/package/node_modules/@jest/test-result/package.json
new file mode 100644
index 000000000..ee103d1fb
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-result/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@jest/test-result",
+ "version": "29.7.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jestjs/jest.git",
+ "directory": "packages/jest-test-result"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "devDependencies": {
+ "jest-haste-map": "^29.7.0",
+ "jest-resolve": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630"
+}
diff --git a/client-side/package/node_modules/@jest/test-sequencer/LICENSE b/client-side/package/node_modules/@jest/test-sequencer/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-sequencer/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/test-sequencer/build/index.d.ts b/client-side/package/node_modules/@jest/test-sequencer/build/index.d.ts
new file mode 100644
index 000000000..665265c5c
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-sequencer/build/index.d.ts
@@ -0,0 +1,91 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type {AggregatedResult} from '@jest/test-result';
+import type {Test} from '@jest/test-result';
+import type {TestContext} from '@jest/test-result';
+
+declare type Cache_2 = {
+ [key: string]:
+ | [testStatus: typeof FAIL | typeof SUCCESS, testDuration: number]
+ | undefined;
+};
+
+declare const FAIL = 0;
+
+export declare type ShardOptions = {
+ shardIndex: number;
+ shardCount: number;
+};
+
+declare const SUCCESS = 1;
+
+/**
+ * The TestSequencer will ultimately decide which tests should run first.
+ * It is responsible for storing and reading from a local cache
+ * map that stores context information for a given test, such as how long it
+ * took to run during the last run and if it has failed or not.
+ * Such information is used on:
+ * TestSequencer.sort(tests: Array)
+ * to sort the order of the provided tests.
+ *
+ * After the results are collected,
+ * TestSequencer.cacheResults(tests: Array, results: AggregatedResult)
+ * is called to store/update this information on the cache map.
+ */
+declare class TestSequencer {
+ private readonly _cache;
+ _getCachePath(testContext: TestContext): string;
+ _getCache(test: Test): Cache_2;
+ private _shardPosition;
+ /**
+ * Select tests for shard requested via --shard=shardIndex/shardCount
+ * Sharding is applied before sorting
+ *
+ * @param tests All tests
+ * @param options shardIndex and shardIndex to select
+ *
+ * @example
+ * ```typescript
+ * class CustomSequencer extends Sequencer {
+ * shard(tests, { shardIndex, shardCount }) {
+ * const shardSize = Math.ceil(tests.length / options.shardCount);
+ * const shardStart = shardSize * (options.shardIndex - 1);
+ * const shardEnd = shardSize * options.shardIndex;
+ * return [...tests]
+ * .sort((a, b) => (a.path > b.path ? 1 : -1))
+ * .slice(shardStart, shardEnd);
+ * }
+ * }
+ * ```
+ */
+ shard(
+ tests: Array,
+ options: ShardOptions,
+ ): Array | Promise>;
+ /**
+ * Sort test to determine order of execution
+ * Sorting is applied after sharding
+ * @param tests
+ *
+ * ```typescript
+ * class CustomSequencer extends Sequencer {
+ * sort(tests) {
+ * const copyTests = Array.from(tests);
+ * return [...tests].sort((a, b) => (a.path > b.path ? 1 : -1));
+ * }
+ * }
+ * ```
+ */
+ sort(tests: Array): Array | Promise>;
+ allFailedTests(tests: Array): Array | Promise>;
+ cacheResults(tests: Array, results: AggregatedResult): void;
+ private hasFailed;
+ private time;
+}
+export default TestSequencer;
+
+export {};
diff --git a/client-side/package/node_modules/@jest/test-sequencer/build/index.js b/client-side/package/node_modules/@jest/test-sequencer/build/index.js
new file mode 100644
index 000000000..5da7e3dca
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-sequencer/build/index.js
@@ -0,0 +1,287 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = void 0;
+function crypto() {
+ const data = _interopRequireWildcard(require('crypto'));
+ crypto = function () {
+ return data;
+ };
+ return data;
+}
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+ fs = function () {
+ return data;
+ };
+ return data;
+}
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+ _slash = function () {
+ return data;
+ };
+ return data;
+}
+function _jestHasteMap() {
+ const data = _interopRequireDefault(require('jest-haste-map'));
+ _jestHasteMap = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const FAIL = 0;
+const SUCCESS = 1;
+/**
+ * The TestSequencer will ultimately decide which tests should run first.
+ * It is responsible for storing and reading from a local cache
+ * map that stores context information for a given test, such as how long it
+ * took to run during the last run and if it has failed or not.
+ * Such information is used on:
+ * TestSequencer.sort(tests: Array)
+ * to sort the order of the provided tests.
+ *
+ * After the results are collected,
+ * TestSequencer.cacheResults(tests: Array, results: AggregatedResult)
+ * is called to store/update this information on the cache map.
+ */
+class TestSequencer {
+ _cache = new Map();
+ _getCachePath(testContext) {
+ const {config} = testContext;
+ const HasteMapClass = _jestHasteMap().default.getStatic(config);
+ return HasteMapClass.getCacheFilePath(
+ config.cacheDirectory,
+ `perf-cache-${config.id}`
+ );
+ }
+ _getCache(test) {
+ const {context} = test;
+ if (!this._cache.has(context) && context.config.cache) {
+ const cachePath = this._getCachePath(context);
+ if (fs().existsSync(cachePath)) {
+ try {
+ this._cache.set(
+ context,
+ JSON.parse(fs().readFileSync(cachePath, 'utf8'))
+ );
+ } catch {}
+ }
+ }
+ let cache = this._cache.get(context);
+ if (!cache) {
+ cache = {};
+ this._cache.set(context, cache);
+ }
+ return cache;
+ }
+ _shardPosition(options) {
+ const shardRest = options.suiteLength % options.shardCount;
+ const ratio = options.suiteLength / options.shardCount;
+ return new Array(options.shardIndex)
+ .fill(true)
+ .reduce((acc, _, shardIndex) => {
+ const dangles = shardIndex < shardRest;
+ const shardSize = dangles ? Math.ceil(ratio) : Math.floor(ratio);
+ return acc + shardSize;
+ }, 0);
+ }
+
+ /**
+ * Select tests for shard requested via --shard=shardIndex/shardCount
+ * Sharding is applied before sorting
+ *
+ * @param tests All tests
+ * @param options shardIndex and shardIndex to select
+ *
+ * @example
+ * ```typescript
+ * class CustomSequencer extends Sequencer {
+ * shard(tests, { shardIndex, shardCount }) {
+ * const shardSize = Math.ceil(tests.length / options.shardCount);
+ * const shardStart = shardSize * (options.shardIndex - 1);
+ * const shardEnd = shardSize * options.shardIndex;
+ * return [...tests]
+ * .sort((a, b) => (a.path > b.path ? 1 : -1))
+ * .slice(shardStart, shardEnd);
+ * }
+ * }
+ * ```
+ */
+ shard(tests, options) {
+ const shardStart = this._shardPosition({
+ shardCount: options.shardCount,
+ shardIndex: options.shardIndex - 1,
+ suiteLength: tests.length
+ });
+ const shardEnd = this._shardPosition({
+ shardCount: options.shardCount,
+ shardIndex: options.shardIndex,
+ suiteLength: tests.length
+ });
+ return tests
+ .map(test => {
+ const relativeTestPath = path().posix.relative(
+ (0, _slash().default)(test.context.config.rootDir),
+ (0, _slash().default)(test.path)
+ );
+ return {
+ hash: crypto()
+ .createHash('sha1')
+ .update(relativeTestPath)
+ .digest('hex'),
+ test
+ };
+ })
+ .sort((a, b) => (a.hash < b.hash ? -1 : a.hash > b.hash ? 1 : 0))
+ .slice(shardStart, shardEnd)
+ .map(result => result.test);
+ }
+
+ /**
+ * Sort test to determine order of execution
+ * Sorting is applied after sharding
+ * @param tests
+ *
+ * ```typescript
+ * class CustomSequencer extends Sequencer {
+ * sort(tests) {
+ * const copyTests = Array.from(tests);
+ * return [...tests].sort((a, b) => (a.path > b.path ? 1 : -1));
+ * }
+ * }
+ * ```
+ */
+ sort(tests) {
+ /**
+ * Sorting tests is very important because it has a great impact on the
+ * user-perceived responsiveness and speed of the test run.
+ *
+ * If such information is on cache, tests are sorted based on:
+ * -> Has it failed during the last run ?
+ * Since it's important to provide the most expected feedback as quickly
+ * as possible.
+ * -> How long it took to run ?
+ * Because running long tests first is an effort to minimize worker idle
+ * time at the end of a long test run.
+ * And if that information is not available they are sorted based on file size
+ * since big test files usually take longer to complete.
+ *
+ * Note that a possible improvement would be to analyse other information
+ * from the file other than its size.
+ *
+ */
+ const stats = {};
+ const fileSize = ({path, context: {hasteFS}}) =>
+ stats[path] || (stats[path] = hasteFS.getSize(path) ?? 0);
+ tests.forEach(test => {
+ test.duration = this.time(test);
+ });
+ return tests.sort((testA, testB) => {
+ const failedA = this.hasFailed(testA);
+ const failedB = this.hasFailed(testB);
+ const hasTimeA = testA.duration != null;
+ if (failedA !== failedB) {
+ return failedA ? -1 : 1;
+ } else if (hasTimeA != (testB.duration != null)) {
+ // If only one of two tests has timing information, run it last
+ return hasTimeA ? 1 : -1;
+ } else if (testA.duration != null && testB.duration != null) {
+ return testA.duration < testB.duration ? 1 : -1;
+ } else {
+ return fileSize(testA) < fileSize(testB) ? 1 : -1;
+ }
+ });
+ }
+ allFailedTests(tests) {
+ return this.sort(tests.filter(test => this.hasFailed(test)));
+ }
+ cacheResults(tests, results) {
+ const map = Object.create(null);
+ tests.forEach(test => (map[test.path] = test));
+ results.testResults.forEach(testResult => {
+ const test = map[testResult.testFilePath];
+ if (test != null && !testResult.skipped) {
+ const cache = this._getCache(test);
+ const perf = testResult.perfStats;
+ const testRuntime =
+ perf.runtime ?? test.duration ?? perf.end - perf.start;
+ cache[testResult.testFilePath] = [
+ testResult.numFailingTests > 0 ? FAIL : SUCCESS,
+ testRuntime || 0
+ ];
+ }
+ });
+ this._cache.forEach((cache, context) =>
+ fs().writeFileSync(this._getCachePath(context), JSON.stringify(cache))
+ );
+ }
+ hasFailed(test) {
+ const cache = this._getCache(test);
+ return cache[test.path]?.[0] === FAIL;
+ }
+ time(test) {
+ const cache = this._getCache(test);
+ return cache[test.path]?.[1];
+ }
+}
+exports.default = TestSequencer;
diff --git a/client-side/package/node_modules/@jest/test-sequencer/package.json b/client-side/package/node_modules/@jest/test-sequencer/package.json
new file mode 100644
index 000000000..f1c8a9fcd
--- /dev/null
+++ b/client-side/package/node_modules/@jest/test-sequencer/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@jest/test-sequencer",
+ "version": "29.7.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jestjs/jest.git",
+ "directory": "packages/jest-test-sequencer"
+ },
+ "license": "MIT",
+ "main": "./build/index.js",
+ "types": "./build/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./build/index.d.ts",
+ "default": "./build/index.js"
+ },
+ "./package.json": "./package.json"
+ },
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "devDependencies": {
+ "@jest/test-utils": "^29.7.0",
+ "@types/graceful-fs": "^4.1.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ },
+ "gitHead": "4e56991693da7cd4c3730dc3579a1dd1403ee630"
+}
diff --git a/client-side/package/node_modules/@jest/transform/LICENSE b/client-side/package/node_modules/@jest/transform/LICENSE
new file mode 100644
index 000000000..b93be9051
--- /dev/null
+++ b/client-side/package/node_modules/@jest/transform/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Meta Platforms, Inc. and affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/client-side/package/node_modules/@jest/transform/build/ScriptTransformer.js b/client-side/package/node_modules/@jest/transform/build/ScriptTransformer.js
new file mode 100644
index 000000000..0fe4bdac0
--- /dev/null
+++ b/client-side/package/node_modules/@jest/transform/build/ScriptTransformer.js
@@ -0,0 +1,1000 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.createScriptTransformer = createScriptTransformer;
+exports.createTranspilingRequire = createTranspilingRequire;
+function _crypto() {
+ const data = require('crypto');
+ _crypto = function () {
+ return data;
+ };
+ return data;
+}
+function path() {
+ const data = _interopRequireWildcard(require('path'));
+ path = function () {
+ return data;
+ };
+ return data;
+}
+function _core() {
+ const data = require('@babel/core');
+ _core = function () {
+ return data;
+ };
+ return data;
+}
+function _babelPluginIstanbul() {
+ const data = _interopRequireDefault(require('babel-plugin-istanbul'));
+ _babelPluginIstanbul = function () {
+ return data;
+ };
+ return data;
+}
+function _convertSourceMap() {
+ const data = require('convert-source-map');
+ _convertSourceMap = function () {
+ return data;
+ };
+ return data;
+}
+function _fastJsonStableStringify() {
+ const data = _interopRequireDefault(require('fast-json-stable-stringify'));
+ _fastJsonStableStringify = function () {
+ return data;
+ };
+ return data;
+}
+function fs() {
+ const data = _interopRequireWildcard(require('graceful-fs'));
+ fs = function () {
+ return data;
+ };
+ return data;
+}
+function _pirates() {
+ const data = require('pirates');
+ _pirates = function () {
+ return data;
+ };
+ return data;
+}
+function _slash() {
+ const data = _interopRequireDefault(require('slash'));
+ _slash = function () {
+ return data;
+ };
+ return data;
+}
+function _writeFileAtomic() {
+ const data = require('write-file-atomic');
+ _writeFileAtomic = function () {
+ return data;
+ };
+ return data;
+}
+function _jestHasteMap() {
+ const data = _interopRequireDefault(require('jest-haste-map'));
+ _jestHasteMap = function () {
+ return data;
+ };
+ return data;
+}
+function _jestUtil() {
+ const data = require('jest-util');
+ _jestUtil = function () {
+ return data;
+ };
+ return data;
+}
+var _enhanceUnexpectedTokenMessage = _interopRequireDefault(
+ require('./enhanceUnexpectedTokenMessage')
+);
+var _runtimeErrorsAndWarnings = require('./runtimeErrorsAndWarnings');
+var _shouldInstrument = _interopRequireDefault(require('./shouldInstrument'));
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+function _getRequireWildcardCache(nodeInterop) {
+ if (typeof WeakMap !== 'function') return null;
+ var cacheBabelInterop = new WeakMap();
+ var cacheNodeInterop = new WeakMap();
+ return (_getRequireWildcardCache = function (nodeInterop) {
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+ })(nodeInterop);
+}
+function _interopRequireWildcard(obj, nodeInterop) {
+ if (!nodeInterop && obj && obj.__esModule) {
+ return obj;
+ }
+ if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
+ return {default: obj};
+ }
+ var cache = _getRequireWildcardCache(nodeInterop);
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+ var newObj = {};
+ var hasPropertyDescriptor =
+ Object.defineProperty && Object.getOwnPropertyDescriptor;
+ for (var key in obj) {
+ if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor
+ ? Object.getOwnPropertyDescriptor(obj, key)
+ : null;
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+ newObj.default = obj;
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+ return newObj;
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+// @ts-expect-error: should just be `require.resolve`, but the tests mess that up
+
+// Use `require` to avoid TS rootDir
+const {version: VERSION} = require('../package.json');
+// This data structure is used to avoid recalculating some data every time that
+// we need to transform a file. Since ScriptTransformer is instantiated for each
+// file we need to keep this object in the local scope of this module.
+const projectCaches = new Map();
+
+// To reset the cache for specific changesets (rather than package version).
+const CACHE_VERSION = '1';
+async function waitForPromiseWithCleanup(promise, cleanup) {
+ try {
+ await promise;
+ } finally {
+ cleanup();
+ }
+}
+
+// type predicate
+function isTransformerFactory(t) {
+ return typeof t.createTransformer === 'function';
+}
+class ScriptTransformer {
+ _cache;
+ _transformCache = new Map();
+ _transformsAreLoaded = false;
+ constructor(_config, _cacheFS) {
+ this._config = _config;
+ this._cacheFS = _cacheFS;
+ const configString = (0, _fastJsonStableStringify().default)(this._config);
+ let projectCache = projectCaches.get(configString);
+ if (!projectCache) {
+ projectCache = {
+ configString,
+ ignorePatternsRegExp: calcIgnorePatternRegExp(this._config),
+ transformRegExp: calcTransformRegExp(this._config),
+ transformedFiles: new Map()
+ };
+ projectCaches.set(configString, projectCache);
+ }
+ this._cache = projectCache;
+ }
+ _buildCacheKeyFromFileInfo(
+ fileData,
+ filename,
+ transformOptions,
+ transformerCacheKey
+ ) {
+ if (transformerCacheKey != null) {
+ return (0, _crypto().createHash)('sha1')
+ .update(transformerCacheKey)
+ .update(CACHE_VERSION)
+ .digest('hex')
+ .substring(0, 32);
+ }
+ return (0, _crypto().createHash)('sha1')
+ .update(fileData)
+ .update(transformOptions.configString)
+ .update(transformOptions.instrument ? 'instrument' : '')
+ .update(filename)
+ .update(CACHE_VERSION)
+ .digest('hex')
+ .substring(0, 32);
+ }
+ _buildTransformCacheKey(pattern, filepath) {
+ return pattern + filepath;
+ }
+ _getCacheKey(fileData, filename, options) {
+ const configString = this._cache.configString;
+ const {transformer, transformerConfig = {}} =
+ this._getTransformer(filename) ?? {};
+ let transformerCacheKey = undefined;
+ const transformOptions = {
+ ...options,
+ cacheFS: this._cacheFS,
+ config: this._config,
+ configString,
+ transformerConfig
+ };
+ if (typeof transformer?.getCacheKey === 'function') {
+ transformerCacheKey = transformer.getCacheKey(
+ fileData,
+ filename,
+ transformOptions
+ );
+ }
+ return this._buildCacheKeyFromFileInfo(
+ fileData,
+ filename,
+ transformOptions,
+ transformerCacheKey
+ );
+ }
+ async _getCacheKeyAsync(fileData, filename, options) {
+ const configString = this._cache.configString;
+ const {transformer, transformerConfig = {}} =
+ this._getTransformer(filename) ?? {};
+ let transformerCacheKey = undefined;
+ const transformOptions = {
+ ...options,
+ cacheFS: this._cacheFS,
+ config: this._config,
+ configString,
+ transformerConfig
+ };
+ if (transformer) {
+ const getCacheKey =
+ transformer.getCacheKeyAsync ?? transformer.getCacheKey;
+ if (typeof getCacheKey === 'function') {
+ transformerCacheKey = await getCacheKey(
+ fileData,
+ filename,
+ transformOptions
+ );
+ }
+ }
+ return this._buildCacheKeyFromFileInfo(
+ fileData,
+ filename,
+ transformOptions,
+ transformerCacheKey
+ );
+ }
+ _createCachedFilename(filename, cacheKey) {
+ const HasteMapClass = _jestHasteMap().default.getStatic(this._config);
+ const baseCacheDir = HasteMapClass.getCacheFilePath(
+ this._config.cacheDirectory,
+ `jest-transform-cache-${this._config.id}`,
+ VERSION
+ );
+ // Create sub folders based on the cacheKey to avoid creating one
+ // directory with many files.
+ const cacheDir = path().join(baseCacheDir, cacheKey[0] + cacheKey[1]);
+ const cacheFilenamePrefix = path()
+ .basename(filename, path().extname(filename))
+ .replace(/\W/g, '');
+ return (0, _slash().default)(
+ path().join(cacheDir, `${cacheFilenamePrefix}_${cacheKey}`)
+ );
+ }
+ _getFileCachePath(filename, content, options) {
+ const cacheKey = this._getCacheKey(content, filename, options);
+ return this._createCachedFilename(filename, cacheKey);
+ }
+ async _getFileCachePathAsync(filename, content, options) {
+ const cacheKey = await this._getCacheKeyAsync(content, filename, options);
+ return this._createCachedFilename(filename, cacheKey);
+ }
+ _getTransformPatternAndPath(filename) {
+ const transformEntry = this._cache.transformRegExp;
+ if (transformEntry == null) {
+ return undefined;
+ }
+ for (let i = 0; i < transformEntry.length; i++) {
+ const [transformRegExp, transformPath] = transformEntry[i];
+ if (transformRegExp.test(filename)) {
+ return [transformRegExp.source, transformPath];
+ }
+ }
+ return undefined;
+ }
+ _getTransformPath(filename) {
+ const transformInfo = this._getTransformPatternAndPath(filename);
+ if (!Array.isArray(transformInfo)) {
+ return undefined;
+ }
+ return transformInfo[1];
+ }
+ async loadTransformers() {
+ await Promise.all(
+ this._config.transform.map(
+ async ([transformPattern, transformPath, transformerConfig], i) => {
+ let transformer = await (0, _jestUtil().requireOrImportModule)(
+ transformPath
+ );
+ if (transformer == null) {
+ throw new Error(
+ (0, _runtimeErrorsAndWarnings.makeInvalidTransformerError)(
+ transformPath
+ )
+ );
+ }
+ if (isTransformerFactory(transformer)) {
+ transformer = await transformer.createTransformer(
+ transformerConfig
+ );
+ }
+ if (
+ typeof transformer.process !== 'function' &&
+ typeof transformer.processAsync !== 'function'
+ ) {
+ throw new Error(
+ (0, _runtimeErrorsAndWarnings.makeInvalidTransformerError)(
+ transformPath
+ )
+ );
+ }
+ const res = {
+ transformer,
+ transformerConfig
+ };
+ const transformCacheKey = this._buildTransformCacheKey(
+ this._cache.transformRegExp?.[i]?.[0].source ??
+ new RegExp(transformPattern).source,
+ transformPath
+ );
+ this._transformCache.set(transformCacheKey, res);
+ }
+ )
+ );
+ this._transformsAreLoaded = true;
+ }
+ _getTransformer(filename) {
+ if (!this._transformsAreLoaded) {
+ throw new Error(
+ 'Jest: Transformers have not been loaded yet - make sure to run `loadTransformers` and wait for it to complete before starting to transform files'
+ );
+ }
+ if (this._config.transform.length === 0) {
+ return null;
+ }
+ const transformPatternAndPath = this._getTransformPatternAndPath(filename);
+ if (!Array.isArray(transformPatternAndPath)) {
+ return null;
+ }
+ const [transformPattern, transformPath] = transformPatternAndPath;
+ const transformCacheKey = this._buildTransformCacheKey(
+ transformPattern,
+ transformPath
+ );
+ const transformer = this._transformCache.get(transformCacheKey);
+ if (transformer !== undefined) {
+ return transformer;
+ }
+ throw new Error(
+ `Jest was unable to load the transformer defined for ${filename}. This is a bug in Jest, please open up an issue`
+ );
+ }
+ _instrumentFile(filename, input, canMapToInput, options) {
+ const inputCode = typeof input === 'string' ? input : input.code;
+ const inputMap = typeof input === 'string' ? null : input.map;
+ const result = (0, _core().transformSync)(inputCode, {
+ auxiliaryCommentBefore: ' istanbul ignore next ',
+ babelrc: false,
+ caller: {
+ name: '@jest/transform',
+ supportsDynamicImport: options.supportsDynamicImport,
+ supportsExportNamespaceFrom: options.supportsExportNamespaceFrom,
+ supportsStaticESM: options.supportsStaticESM,
+ supportsTopLevelAwait: options.supportsTopLevelAwait
+ },
+ configFile: false,
+ filename,
+ plugins: [
+ [
+ _babelPluginIstanbul().default,
+ {
+ compact: false,
+ // files outside `cwd` will not be instrumented
+ cwd: this._config.rootDir,
+ exclude: [],
+ extension: false,
+ inputSourceMap: inputMap,
+ useInlineSourceMaps: false
+ }
+ ]
+ ],
+ sourceMaps: canMapToInput ? 'both' : false
+ });
+ if (result?.code != null) {
+ return result;
+ }
+ return input;
+ }
+ _buildTransformResult(
+ filename,
+ cacheFilePath,
+ content,
+ transformer,
+ shouldCallTransform,
+ options,
+ processed,
+ sourceMapPath
+ ) {
+ let transformed = {
+ code: content,
+ map: null
+ };
+ if (transformer && shouldCallTransform) {
+ if (processed != null && typeof processed.code === 'string') {
+ transformed = processed;
+ } else {
+ const transformPath = this._getTransformPath(filename);
+ (0, _jestUtil().invariant)(transformPath);
+ throw new Error(
+ (0, _runtimeErrorsAndWarnings.makeInvalidReturnValueError)(
+ transformPath
+ )
+ );
+ }
+ }
+ if (transformed.map == null || transformed.map === '') {
+ try {
+ //Could be a potential freeze here.
+ //See: https://github.com/jestjs/jest/pull/5177#discussion_r158883570
+ const inlineSourceMap = (0, _convertSourceMap().fromSource)(
+ transformed.code
+ );
+ if (inlineSourceMap) {
+ transformed.map = inlineSourceMap.toObject();
+ }
+ } catch {
+ const transformPath = this._getTransformPath(filename);
+ (0, _jestUtil().invariant)(transformPath);
+ console.warn(
+ (0, _runtimeErrorsAndWarnings.makeInvalidSourceMapWarning)(
+ filename,
+ transformPath
+ )
+ );
+ }
+ }
+
+ // That means that the transform has a custom instrumentation
+ // logic and will handle it based on `config.collectCoverage` option
+ const transformWillInstrument =
+ shouldCallTransform && transformer && transformer.canInstrument;
+
+ // Apply instrumentation to the code if necessary, keeping the instrumented code and new map
+ let map = transformed.map;
+ let code;
+ if (transformWillInstrument !== true && options.instrument) {
+ /**
+ * We can map the original source code to the instrumented code ONLY if
+ * - the process of transforming the code produced a source map e.g. ts-jest
+ * - we did not transform the source code
+ *
+ * Otherwise we cannot make any statements about how the instrumented code corresponds to the original code,
+ * and we should NOT emit any source maps
+ *
+ */
+ const shouldEmitSourceMaps =
+ (transformer != null && map != null) || transformer == null;
+ const instrumented = this._instrumentFile(
+ filename,
+ transformed,
+ shouldEmitSourceMaps,
+ options
+ );
+ code =
+ typeof instrumented === 'string' ? instrumented : instrumented.code;
+ map = typeof instrumented === 'string' ? null : instrumented.map;
+ } else {
+ code = transformed.code;
+ }
+ if (map != null) {
+ const sourceMapContent =
+ typeof map === 'string' ? map : JSON.stringify(map);
+ (0, _jestUtil().invariant)(
+ sourceMapPath,
+ 'We should always have default sourceMapPath'
+ );
+ writeCacheFile(sourceMapPath, sourceMapContent);
+ } else {
+ sourceMapPath = null;
+ }
+ writeCodeCacheFile(cacheFilePath, code);
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ }
+ transformSource(filepath, content, options) {
+ const filename = (0, _jestUtil().tryRealpath)(filepath);
+ const {transformer, transformerConfig = {}} =
+ this._getTransformer(filename) ?? {};
+ const cacheFilePath = this._getFileCachePath(filename, content, options);
+ const sourceMapPath = `${cacheFilePath}.map`;
+ // Ignore cache if `config.cache` is set (--no-cache)
+ const code = this._config.cache ? readCodeCacheFile(cacheFilePath) : null;
+ if (code != null) {
+ // This is broken: we return the code, and a path for the source map
+ // directly from the cache. But, nothing ensures the source map actually
+ // matches that source code. They could have gotten out-of-sync in case
+ // two separate processes write concurrently to the same cache files.
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ }
+ let processed = null;
+ let shouldCallTransform = false;
+ if (transformer && this.shouldTransform(filename)) {
+ shouldCallTransform = true;
+ assertSyncTransformer(transformer, this._getTransformPath(filename));
+ processed = transformer.process(content, filename, {
+ ...options,
+ cacheFS: this._cacheFS,
+ config: this._config,
+ configString: this._cache.configString,
+ transformerConfig
+ });
+ }
+ (0, _jestUtil().createDirectory)(path().dirname(cacheFilePath));
+ return this._buildTransformResult(
+ filename,
+ cacheFilePath,
+ content,
+ transformer,
+ shouldCallTransform,
+ options,
+ processed,
+ sourceMapPath
+ );
+ }
+ async transformSourceAsync(filepath, content, options) {
+ const filename = (0, _jestUtil().tryRealpath)(filepath);
+ const {transformer, transformerConfig = {}} =
+ this._getTransformer(filename) ?? {};
+ const cacheFilePath = await this._getFileCachePathAsync(
+ filename,
+ content,
+ options
+ );
+ const sourceMapPath = `${cacheFilePath}.map`;
+ // Ignore cache if `config.cache` is set (--no-cache)
+ const code = this._config.cache ? readCodeCacheFile(cacheFilePath) : null;
+ if (code != null) {
+ // This is broken: we return the code, and a path for the source map
+ // directly from the cache. But, nothing ensures the source map actually
+ // matches that source code. They could have gotten out-of-sync in case
+ // two separate processes write concurrently to the same cache files.
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ }
+ let processed = null;
+ let shouldCallTransform = false;
+ if (transformer && this.shouldTransform(filename)) {
+ shouldCallTransform = true;
+ const process = transformer.processAsync ?? transformer.process;
+
+ // This is probably dead code since `_getTransformerAsync` already asserts this
+ (0, _jestUtil().invariant)(
+ typeof process === 'function',
+ 'A transformer must always export either a `process` or `processAsync`'
+ );
+ processed = await process(content, filename, {
+ ...options,
+ cacheFS: this._cacheFS,
+ config: this._config,
+ configString: this._cache.configString,
+ transformerConfig
+ });
+ }
+ (0, _jestUtil().createDirectory)(path().dirname(cacheFilePath));
+ return this._buildTransformResult(
+ filename,
+ cacheFilePath,
+ content,
+ transformer,
+ shouldCallTransform,
+ options,
+ processed,
+ sourceMapPath
+ );
+ }
+ async _transformAndBuildScriptAsync(
+ filename,
+ options,
+ transformOptions,
+ fileSource
+ ) {
+ const {isInternalModule} = options;
+ let fileContent = fileSource ?? this._cacheFS.get(filename);
+ if (fileContent == null) {
+ fileContent = fs().readFileSync(filename, 'utf8');
+ this._cacheFS.set(filename, fileContent);
+ }
+ const content = stripShebang(fileContent);
+ let code = content;
+ let sourceMapPath = null;
+ const willTransform =
+ isInternalModule !== true &&
+ (transformOptions.instrument || this.shouldTransform(filename));
+ try {
+ if (willTransform) {
+ const transformedSource = await this.transformSourceAsync(
+ filename,
+ content,
+ transformOptions
+ );
+ code = transformedSource.code;
+ sourceMapPath = transformedSource.sourceMapPath;
+ }
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ } catch (e) {
+ if (!(e instanceof Error)) {
+ throw e;
+ }
+ throw (0, _enhanceUnexpectedTokenMessage.default)(e);
+ }
+ }
+ _transformAndBuildScript(filename, options, transformOptions, fileSource) {
+ const {isInternalModule} = options;
+ let fileContent = fileSource ?? this._cacheFS.get(filename);
+ if (fileContent == null) {
+ fileContent = fs().readFileSync(filename, 'utf8');
+ this._cacheFS.set(filename, fileContent);
+ }
+ const content = stripShebang(fileContent);
+ let code = content;
+ let sourceMapPath = null;
+ const willTransform =
+ isInternalModule !== true &&
+ (transformOptions.instrument || this.shouldTransform(filename));
+ try {
+ if (willTransform) {
+ const transformedSource = this.transformSource(
+ filename,
+ content,
+ transformOptions
+ );
+ code = transformedSource.code;
+ sourceMapPath = transformedSource.sourceMapPath;
+ }
+ return {
+ code,
+ originalCode: content,
+ sourceMapPath
+ };
+ } catch (e) {
+ if (!(e instanceof Error)) {
+ throw e;
+ }
+ throw (0, _enhanceUnexpectedTokenMessage.default)(e);
+ }
+ }
+ async transformAsync(filename, options, fileSource) {
+ const instrument =
+ options.coverageProvider === 'babel' &&
+ (0, _shouldInstrument.default)(filename, options, this._config);
+ const scriptCacheKey = getScriptCacheKey(filename, instrument);
+ let result = this._cache.transformedFiles.get(scriptCacheKey);
+ if (result) {
+ return result;
+ }
+ result = await this._transformAndBuildScriptAsync(
+ filename,
+ options,
+ {
+ ...options,
+ instrument
+ },
+ fileSource
+ );
+ if (scriptCacheKey) {
+ this._cache.transformedFiles.set(scriptCacheKey, result);
+ }
+ return result;
+ }
+ transform(filename, options, fileSource) {
+ const instrument =
+ options.coverageProvider === 'babel' &&
+ (0, _shouldInstrument.default)(filename, options, this._config);
+ const scriptCacheKey = getScriptCacheKey(filename, instrument);
+ let result = this._cache.transformedFiles.get(scriptCacheKey);
+ if (result) {
+ return result;
+ }
+ result = this._transformAndBuildScript(
+ filename,
+ options,
+ {
+ ...options,
+ instrument
+ },
+ fileSource
+ );
+ if (scriptCacheKey) {
+ this._cache.transformedFiles.set(scriptCacheKey, result);
+ }
+ return result;
+ }
+ transformJson(filename, options, fileSource) {
+ const {isInternalModule} = options;
+ const willTransform =
+ isInternalModule !== true && this.shouldTransform(filename);
+ if (willTransform) {
+ const {code: transformedJsonSource} = this.transformSource(
+ filename,
+ fileSource,
+ {
+ ...options,
+ instrument: false
+ }
+ );
+ return transformedJsonSource;
+ }
+ return fileSource;
+ }
+ async requireAndTranspileModule(
+ moduleName,
+ callback,
+ options = {
+ applyInteropRequireDefault: true,
+ instrument: false,
+ supportsDynamicImport: false,
+ supportsExportNamespaceFrom: false,
+ supportsStaticESM: false,
+ supportsTopLevelAwait: false
+ }
+ ) {
+ let transforming = false;
+ const {applyInteropRequireDefault, ...transformOptions} = options;
+ const revertHook = (0, _pirates().addHook)(
+ (code, filename) => {
+ try {
+ transforming = true;
+ return (
+ this.transformSource(filename, code, transformOptions).code || code
+ );
+ } finally {
+ transforming = false;
+ }
+ },
+ {
+ // Exclude `mjs` extension when addHook because pirates don't support hijack es module
+ exts: this._config.moduleFileExtensions
+ .filter(ext => ext !== 'mjs')
+ .map(ext => `.${ext}`),
+ ignoreNodeModules: false,
+ matcher: filename => {
+ if (transforming) {
+ // Don't transform any dependency required by the transformer itself
+ return false;
+ }
+ return this.shouldTransform(filename);
+ }
+ }
+ );
+ try {
+ const module = await (0, _jestUtil().requireOrImportModule)(
+ moduleName,
+ applyInteropRequireDefault
+ );
+ if (!callback) {
+ revertHook();
+ return module;
+ }
+ const cbResult = callback(module);
+ if ((0, _jestUtil().isPromise)(cbResult)) {
+ return await waitForPromiseWithCleanup(cbResult, revertHook).then(
+ () => module
+ );
+ }
+ return module;
+ } finally {
+ revertHook();
+ }
+ }
+ shouldTransform(filename) {
+ const ignoreRegexp = this._cache.ignorePatternsRegExp;
+ const isIgnored = ignoreRegexp ? ignoreRegexp.test(filename) : false;
+ return this._config.transform.length !== 0 && !isIgnored;
+ }
+}
+
+// TODO: do we need to define the generics twice?
+async function createTranspilingRequire(config) {
+ const transformer = await createScriptTransformer(config);
+ return async function requireAndTranspileModule(
+ resolverPath,
+ applyInteropRequireDefault = false
+ ) {
+ const transpiledModule = await transformer.requireAndTranspileModule(
+ resolverPath,
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ () => {},
+ {
+ applyInteropRequireDefault,
+ instrument: false,
+ supportsDynamicImport: false,
+ // this might be true, depending on node version.
+ supportsExportNamespaceFrom: false,
+ supportsStaticESM: false,
+ supportsTopLevelAwait: false
+ }
+ );
+ return transpiledModule;
+ };
+}
+const removeFile = path => {
+ try {
+ fs().unlinkSync(path);
+ } catch {}
+};
+const stripShebang = content => {
+ // If the file data starts with a shebang remove it. Leaves the empty line
+ // to keep stack trace line numbers correct.
+ if (content.startsWith('#!')) {
+ return content.replace(/^#!.*/, '');
+ } else {
+ return content;
+ }
+};
+
+/**
+ * This is like `writeCacheFile` but with an additional sanity checksum. We
+ * cannot use the same technique for source maps because we expose source map
+ * cache file paths directly to callsites, with the expectation they can read
+ * it right away. This is not a great system, because source map cache file
+ * could get corrupted, out-of-sync, etc.
+ */
+function writeCodeCacheFile(cachePath, code) {
+ const checksum = (0, _crypto().createHash)('sha1')
+ .update(code)
+ .digest('hex')
+ .substring(0, 32);
+ writeCacheFile(cachePath, `${checksum}\n${code}`);
+}
+
+/**
+ * Read counterpart of `writeCodeCacheFile`. We verify that the content of the
+ * file matches the checksum, in case some kind of corruption happened. This
+ * could happen if an older version of `jest-runtime` writes non-atomically to
+ * the same cache, for example.
+ */
+function readCodeCacheFile(cachePath) {
+ const content = readCacheFile(cachePath);
+ if (content == null) {
+ return null;
+ }
+ const code = content.substring(33);
+ const checksum = (0, _crypto().createHash)('sha1')
+ .update(code)
+ .digest('hex')
+ .substring(0, 32);
+ if (checksum === content.substring(0, 32)) {
+ return code;
+ }
+ return null;
+}
+
+/**
+ * Writing to the cache atomically relies on 'rename' being atomic on most
+ * file systems. Doing atomic write reduces the risk of corruption by avoiding
+ * two processes to write to the same file at the same time. It also reduces
+ * the risk of reading a file that's being overwritten at the same time.
+ */
+const writeCacheFile = (cachePath, fileData) => {
+ try {
+ (0, _writeFileAtomic().sync)(cachePath, fileData, {
+ encoding: 'utf8',
+ fsync: false
+ });
+ } catch (e) {
+ if (!(e instanceof Error)) {
+ throw e;
+ }
+ if (cacheWriteErrorSafeToIgnore(e, cachePath)) {
+ return;
+ }
+ e.message = `jest: failed to cache transform results in: ${cachePath}\nFailure message: ${e.message}`;
+ removeFile(cachePath);
+ throw e;
+ }
+};
+
+/**
+ * On Windows, renames are not atomic, leading to EPERM exceptions when two
+ * processes attempt to rename to the same target file at the same time.
+ * If the target file exists we can be reasonably sure another process has
+ * legitimately won a cache write race and ignore the error.
+ */
+const cacheWriteErrorSafeToIgnore = (e, cachePath) =>
+ process.platform === 'win32' &&
+ e.code === 'EPERM' &&
+ fs().existsSync(cachePath);
+const readCacheFile = cachePath => {
+ if (!fs().existsSync(cachePath)) {
+ return null;
+ }
+ let fileData;
+ try {
+ fileData = fs().readFileSync(cachePath, 'utf8');
+ } catch (e) {
+ if (!(e instanceof Error)) {
+ throw e;
+ }
+ // on windows write-file-atomic is not atomic which can
+ // result in this error
+ if (e.code === 'ENOENT' && process.platform === 'win32') {
+ return null;
+ }
+ e.message = `jest: failed to read cache file: ${cachePath}\nFailure message: ${e.message}`;
+ removeFile(cachePath);
+ throw e;
+ }
+ if (fileData == null) {
+ // We must have somehow created the file but failed to write to it,
+ // let's delete it and retry.
+ removeFile(cachePath);
+ }
+ return fileData;
+};
+const getScriptCacheKey = (filename, instrument) => {
+ const mtime = fs().statSync(filename).mtime;
+ return `${filename}_${mtime.getTime()}${instrument ? '_instrumented' : ''}`;
+};
+const calcIgnorePatternRegExp = config => {
+ if (
+ config.transformIgnorePatterns == null ||
+ config.transformIgnorePatterns.length === 0
+ ) {
+ return undefined;
+ }
+ return new RegExp(config.transformIgnorePatterns.join('|'));
+};
+const calcTransformRegExp = config => {
+ if (!config.transform.length) {
+ return undefined;
+ }
+ const transformRegexp = [];
+ for (let i = 0; i < config.transform.length; i++) {
+ transformRegexp.push([
+ new RegExp(config.transform[i][0]),
+ config.transform[i][1],
+ config.transform[i][2]
+ ]);
+ }
+ return transformRegexp;
+};
+function assertSyncTransformer(transformer, name) {
+ (0, _jestUtil().invariant)(name);
+ (0, _jestUtil().invariant)(
+ typeof transformer.process === 'function',
+ (0, _runtimeErrorsAndWarnings.makeInvalidSyncTransformerError)(name)
+ );
+}
+async function createScriptTransformer(config, cacheFS = new Map()) {
+ const transformer = new ScriptTransformer(config, cacheFS);
+ await transformer.loadTransformers();
+ return transformer;
+}
diff --git a/client-side/package/node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.js b/client-side/package/node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.js
new file mode 100644
index 000000000..d0498e696
--- /dev/null
+++ b/client-side/package/node_modules/@jest/transform/build/enhanceUnexpectedTokenMessage.js
@@ -0,0 +1,76 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+exports.default = handlePotentialSyntaxError;
+exports.enhanceUnexpectedTokenMessage = enhanceUnexpectedTokenMessage;
+function _chalk() {
+ const data = _interopRequireDefault(require('chalk'));
+ _chalk = function () {
+ return data;
+ };
+ return data;
+}
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {default: obj};
+}
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+const DOT = ' \u2022 ';
+function handlePotentialSyntaxError(e) {
+ if (e.codeFrame != null) {
+ e.stack = `${e.message}\n${e.codeFrame}`;
+ }
+ if (
+ // `instanceof` might come from the wrong context
+ e.name === 'SyntaxError' &&
+ !e.message.includes(' expected')
+ ) {
+ throw enhanceUnexpectedTokenMessage(e);
+ }
+ return e;
+}
+function enhanceUnexpectedTokenMessage(e) {
+ e.stack = `${_chalk().default.bold.red(
+ 'Jest encountered an unexpected token'
+ )}
+
+Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
+
+Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
+
+By default "node_modules" folder is ignored by transformers.
+
+Here's what you can do:
+${DOT}If you are trying to use ECMAScript Modules, see ${_chalk().default.underline(
+ 'https://jestjs.io/docs/ecmascript-modules'
+ )} for how to enable it.
+${DOT}If you are trying to use TypeScript, see ${_chalk().default.underline(
+ 'https://jestjs.io/docs/getting-started#using-typescript'
+ )}
+${DOT}To have some of your "node_modules" files transformed, you can specify a custom ${_chalk().default.bold(
+ '"transformIgnorePatterns"'
+ )} in your config.
+${DOT}If you need a custom transformation specify a ${_chalk().default.bold(
+ '"transform"'
+ )} option in your config.
+${DOT}If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the ${_chalk().default.bold(
+ '"moduleNameMapper"'
+ )} config option.
+
+You'll find more details and examples of these config options in the docs:
+${_chalk().default.cyan('https://jestjs.io/docs/configuration')}
+For information about custom transformations, see:
+${_chalk().default.cyan('https://jestjs.io/docs/code-transformation')}
+
+${_chalk().default.bold.red('Details:')}
+
+${e.stack ?? ''}`.trimRight();
+ return e;
+}
diff --git a/client-side/package/node_modules/@jest/transform/build/index.d.ts b/client-side/package/node_modules/@jest/transform/build/index.d.ts
new file mode 100644
index 000000000..a5065488f
--- /dev/null
+++ b/client-side/package/node_modules/@jest/transform/build/index.d.ts
@@ -0,0 +1,240 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import type {Config} from '@jest/types';
+import type {EncodedSourceMap} from '@jridgewell/trace-mapping';
+import type {TransformTypes} from '@jest/types';
+
+export declare interface AsyncTransformer {
+ /**
+ * Indicates if the transformer is capable of instrumenting the code for code coverage.
+ *
+ * If V8 coverage is _not_ active, and this is `true`, Jest will assume the code is instrumented.
+ * If V8 coverage is _not_ active, and this is `false`. Jest will instrument the code returned by this transformer using Babel.
+ */
+ canInstrument?: boolean;
+ getCacheKey?: (
+ sourceText: string,
+ sourcePath: string,
+ options: TransformOptions,
+ ) => string;
+ getCacheKeyAsync?: (
+ sourceText: string,
+ sourcePath: string,
+ options: TransformOptions,
+ ) => Promise;
+ process?: (
+ sourceText: string,
+ sourcePath: string,
+ options: TransformOptions,
+ ) => TransformedSource;
+ processAsync: (
+ sourceText: string,
+ sourcePath: string,
+ options: TransformOptions,
+ ) => Promise;
+}
+
+export declare interface CallerTransformOptions {
+ supportsDynamicImport: boolean;
+ supportsExportNamespaceFrom: boolean;
+ supportsStaticESM: boolean;
+ supportsTopLevelAwait: boolean;
+}
+
+export declare function createScriptTransformer(
+ config: Config.ProjectConfig,
+ cacheFS?: StringMap,
+): Promise;
+
+export declare function createTranspilingRequire(
+ config: Config.ProjectConfig,
+): Promise<
+ (
+ resolverPath: string,
+ applyInteropRequireDefault?: boolean,
+ ) => Promise
+>;
+
+declare interface ErrorWithCodeFrame extends Error {
+ codeFrame?: string;
+}
+
+declare interface FixedRawSourceMap extends Omit {
+ version: number;
+}
+
+export declare function handlePotentialSyntaxError(
+ e: ErrorWithCodeFrame,
+): ErrorWithCodeFrame;
+
+declare interface ReducedTransformOptions extends CallerTransformOptions {
+ instrument: boolean;
+}
+
+declare interface RequireAndTranspileModuleOptions
+ extends ReducedTransformOptions {
+ applyInteropRequireDefault: boolean;
+}
+
+export declare type ScriptTransformer = ScriptTransformer_2;
+
+declare class ScriptTransformer_2 {
+ private readonly _config;
+ private readonly _cacheFS;
+ private readonly _cache;
+ private readonly _transformCache;
+ private _transformsAreLoaded;
+ constructor(_config: Config.ProjectConfig, _cacheFS: StringMap);
+ private _buildCacheKeyFromFileInfo;
+ private _buildTransformCacheKey;
+ private _getCacheKey;
+ private _getCacheKeyAsync;
+ private _createCachedFilename;
+ private _getFileCachePath;
+ private _getFileCachePathAsync;
+ private _getTransformPatternAndPath;
+ private _getTransformPath;
+ loadTransformers(): Promise;
+ private _getTransformer;
+ private _instrumentFile;
+ private _buildTransformResult;
+ transformSource(
+ filepath: string,
+ content: string,
+ options: ReducedTransformOptions,
+ ): TransformResult;
+ transformSourceAsync(
+ filepath: string,
+ content: string,
+ options: ReducedTransformOptions,
+ ): Promise;
+ private _transformAndBuildScriptAsync;
+ private _transformAndBuildScript;
+ transformAsync(
+ filename: string,
+ options: TransformationOptions,
+ fileSource?: string,
+ ): Promise;
+ transform(
+ filename: string,
+ options: TransformationOptions,
+ fileSource?: string,
+ ): TransformResult;
+ transformJson(
+ filename: string,
+ options: TransformationOptions,
+ fileSource: string,
+ ): string;
+ requireAndTranspileModule(
+ moduleName: string,
+ callback?: (module: ModuleType) => void | Promise,
+ options?: RequireAndTranspileModuleOptions,
+ ): Promise;
+ shouldTransform(filename: string): boolean;
+}
+
+export declare function shouldInstrument(
+ filename: string,
+ options: ShouldInstrumentOptions,
+ config: Config.ProjectConfig,
+ loadedFilenames?: Array,
+): boolean;
+
+export declare interface ShouldInstrumentOptions
+ extends Pick<
+ Config.GlobalConfig,
+ 'collectCoverage' | 'collectCoverageFrom' | 'coverageProvider'
+ > {
+ changedFiles?: Set;
+ sourcesRelatedToTestsInChangedFiles?: Set;
+}
+
+declare type StringMap = Map;
+
+export declare interface SyncTransformer {
+ /**
+ * Indicates if the transformer is capable of instrumenting the code for code coverage.
+ *
+ * If V8 coverage is _not_ active, and this is `true`, Jest will assume the code is instrumented.
+ * If V8 coverage is _not_ active, and this is `false`. Jest will instrument the code returned by this transformer using Babel.
+ */
+ canInstrument?: boolean;
+ getCacheKey?: (
+ sourceText: string,
+ sourcePath: string,
+ options: TransformOptions,
+ ) => string;
+ getCacheKeyAsync?: (
+ sourceText: string,
+ sourcePath: string,
+ options: TransformOptions,
+ ) => Promise;
+ process: (
+ sourceText: string,
+ sourcePath: string,
+ options: TransformOptions,
+ ) => TransformedSource;
+ processAsync?: (
+ sourceText: string,
+ sourcePath: string,
+ options: TransformOptions,
+ ) => Promise;
+}
+
+export declare interface TransformationOptions
+ extends ShouldInstrumentOptions,
+ CallerTransformOptions {
+ isInternalModule?: boolean;
+}
+
+export declare type TransformedSource = {
+ code: string;
+ map?: FixedRawSourceMap | string | null;
+};
+
+/**
+ * We have both sync (`process`) and async (`processAsync`) code transformation, which both can be provided.
+ * `require` will always use `process`, and `import` will use `processAsync` if it exists, otherwise fall back to `process`.
+ * Meaning, if you use `import` exclusively you do not need `process`, but in most cases supplying both makes sense:
+ * Jest transpiles on demand rather than ahead of time, so the sync one needs to exist.
+ *
+ * For more info on the sync vs async model, see https://jestjs.io/docs/code-transformation#writing-custom-transformers
+ */
+declare type Transformer_2 =
+ | SyncTransformer
+ | AsyncTransformer;
+export {Transformer_2 as Transformer};
+
+export declare type TransformerCreator<
+ X extends Transformer_2,
+ TransformerConfig = unknown,
+> = (transformerConfig?: TransformerConfig) => X | Promise]