@donverduyn/react-runtime
Version:
effect-ts react integration
3 lines (2 loc) • 35.9 kB
JavaScript
import{v4 as e,v5 as t}from"uuid";import{jsx as r,jsxs as n,Fragment as o}from"react/jsx-runtime";import*as s from"react";import i from"react";import{flushSync as c}from"react-dom";import u from"react-dom/client";import a from"moize";import{identity as d,pipe as l,Layer as f,ManagedRuntime as p,Context as m,Effect as g,Deferred as y,Stream as h,Scope as v,Option as I,Exit as b}from"effect";import{hasProperty as k}from"effect/Predicate";import{StreamTypeId as w}from"effect/Stream";const P="undefined"!=typeof window?s.useLayoutEffect:s.useEffect;function S(e,t){const r=new Map;for(const[n,o]of e){const e=t.get(n),s=new Set(o);if(e)for(const t of e)s.add(t);r.set(n,s)}for(const[n,o]of t)e.has(n)||r.set(n,new Set(o));return r}function E(e,t){for(const[r,n]of t){const t=e.get(r);t instanceof Map&&n instanceof Map?E(t,n):t instanceof Set&&n instanceof Set?n.forEach(e=>t.add(e)):e.set(r,n)}return e}function M(e){const t=new Map;for(const[r,n]of e.entries())n instanceof Map?t.set(r,M(n)):t.set(r,n);return t}const A=e=>{const t=function(e){const t=globalThis;return t.__singletonStores||(t.__singletonStores={}),t.__singletonStores[e]||(t.__singletonStores[e]=new Map),t.__singletonStores[e]}(`factory:${e.name||"anon"}`),r=(...r)=>{const n=r[0];return n&&!t.has(n)&&t.set(n,e(...r)),t.get(n)};return r.getByKey=e=>t.get(e),r};const C=A(function(e){const t=new Map,r=new Map,n=new Map,o=new Map;function s(e){return r.get(e)??null}return{update:function(e,t){const o=r.get(e);o&&(r.set(e,t),n.get(o)?.splice(n.get(o).indexOf(e),1)),r.set(e,t),n.has(t)||n.set(t,[]),n.get(t).push(e)},register:function(e,o){t.has(e)||t.set(e,function(e,t={}){return{id:e,meta:t}}(e)),r.has(e)||r.set(e,o),n.has(o)||n.set(o,[]),n.get(o).push(e)},isRoot:function(e){return"__ROOT__"===s(e)},getRoot:function(){return(e="__ROOT__",n.get(e)??[])[0]??null;var e},unregister:function(e){!function(e){const s=r.get(e);if(r.delete(e),t.delete(e),s&&n.has(s)){const t=n.get(s);n.set(s,t.filter(t=>t!==e))}o.delete(e)}(e)},getParent:s}}),R=(e,t,r)=>{const n=r.getParent(e),o=s.useCallback(()=>{t&&null===n&&r.register(e,t)},[e,t,n,r]);return o(),s.useEffect(()=>(o(),()=>r.unregister(e)),[e,t]),o};function O(e){try{return e()}catch(e){return new Error(String(e))}}const _=s.createContext(null),x=a(e=>{e.length,e.length},{isDeepEqual:!0}),T=A((t,r)=>{const n=new Map,o=new Map;return{getAuthorativeCandidate:a(e=>{const t=Array.from(n.values()).map(e=>Object.assign({},e,{ancestors:e.ancestors.map(e=>o.get(e))}));let r=[],s=!0;if(e.props.id)r=t.filter(t=>t.self.componentId!==e.componentId||!e.props.id||t.self.props.id===e.props.id);else{const e=t[0];r=(e?[e]:[]).concat(t.filter(t=>t.self.props.id===e.self.props.id&&t!==e))}if(x(r),0===r.length){const t=Array.from(o.values())[o.size-1],n={declId:e.declarationId,id:e.registerId,props:e.props,upstreamModules:new Map,localProviders:[]},i={id:e.registerId,depth:1,self:e,firstDescendent:null,ancestors:[n,t]};r.push(i),s=!1}return[r[0],s]}),registerAncestor:function(e){o.has(e.id)||o.set(e.id,e)},registerCandidate:function(t,o,s){const i=((t,r,n,o)=>({id:e(),depth:n,self:t,firstDescendent:r,ancestors:o}))(t,s,o,function(e){const t=[];let n=e;for(;n&&"__ROOT__"!==n;)t.push(n),n=r.getParent(n);return t}(t.registerId));n.set(i.id,i)},unregisterCandidate:function(e){n.delete(e)}}}),F=(e,t)=>T(e,t),$=F;function B(e){const{container:t,destroy:r}=function(e={}){if("undefined"==typeof document)throw new Error("createHiddenDomRoot must run in the browser");const{mode:t="hidden",parent:r=document.body,id:n="dry-root"}=e,o=document.createElement("div");o.id=n,o.setAttribute("aria-hidden","true"),o.setAttribute("role","presentation"),o.setAttribute("data-dry-root",""),o.tabIndex=-1;try{o.inert=!0}catch{}if("hidden"===t)o.hidden=!0,o.style.contain="layout paint style",o.style.contentVisibility="hidden";else{const e=o.style;e.position="fixed",e.width="0",e.height="0",e.overflow="hidden",e.opacity="0",e.visibility="hidden",e.pointerEvents="none",e.userSelect="none",e.contain="layout paint style",e.isolation="isolate"}return r.appendChild(o),{container:o,destroy(){try{document.body.removeChild(o)}catch{}}}}(e),n=u.createRoot(t);return{render:n.render.bind(n),unmount(){try{n.unmount()}finally{r()}}}}const j=A(function(e,t,r,n){const o=((e,t)=>({scopeId:e,targetId:t}))(e,n),i=B({mode:"hidden"}),u=function(){var e;const t=globalThis;if(t.__dryAsyncPatched)return()=>{};t.__dryAsyncPatched=!0;const r={setTimeout:t.setTimeout,clearTimeout:t.clearTimeout,setInterval:t.setInterval,clearInterval:t.clearInterval,requestAnimationFrame:t.requestAnimationFrame,cancelAnimationFrame:t.cancelAnimationFrame,requestIdleCallback:t.requestIdleCallback,cancelIdleCallback:t.cancelIdleCallback,fetch:t.fetch,WebSocket:t.WebSocket,sendBeacon:t.navigator?.sendBeacon},n=(()=>{let e=1;return()=>e++})();if("function"==typeof t.setTimeout&&(t.setTimeout=()=>n()),"function"==typeof t.clearTimeout&&(t.clearTimeout=()=>{}),"function"==typeof t.setInterval&&(t.setInterval=()=>n()),"function"==typeof t.clearInterval&&(t.clearInterval=()=>{}),"function"==typeof t.requestAnimationFrame&&(t.requestAnimationFrame=()=>n()),"function"==typeof t.cancelAnimationFrame&&(t.cancelAnimationFrame=()=>{}),"function"==typeof t.requestIdleCallback&&(t.requestIdleCallback=()=>n()),"function"==typeof t.cancelIdleCallback&&(t.cancelIdleCallback=()=>{}),"function"==typeof t.fetch&&(t.fetch=(e,r)=>{const n=r?.signal??("object"==typeof e&&e?.signal?e.signal:void 0);if(n?.aborted){const e=t.DOMException??Error;return Promise.reject(new e("Aborted","AbortError"))}const o="function"==typeof t.Response?new t.Response("",{status:204,statusText:"No Content"}):{ok:!0,status:204,statusText:"No Content",headers:new Map,url:"",clone(){return this},text:async()=>"",async json(){},arrayBuffer:async()=>new ArrayBuffer(0),blob:async()=>new Blob([])};return Promise.resolve(o)}),"function"==typeof r.WebSocket){const r="function"==typeof t.EventTarget?t.EventTarget:class{addEventListener(e,t,r){}removeEventListener(e,t,r){}dispatchEvent(e){return!0}};class n extends r{constructor(t){super(),this.CONNECTING=n.CONNECTING,this.OPEN=n.OPEN,this.CLOSING=n.CLOSING,this.CLOSED=n.CLOSED,this.readyState=n.CLOSED,this.protocol="",this.binaryType="blob",this.onopen=null,this.onmessage=null,this.onerror=null,this.onclose=null,this[e]="WebSocket",this.url=t}send(e){}close(e,t){}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}dispatchEvent(e){return super.dispatchEvent(e)}get bufferedAmount(){return 0}get extensions(){return""}}e=Symbol.toStringTag,n.CONNECTING=0,n.OPEN=1,n.CLOSING=2,n.CLOSED=3,t.WebSocket=n}return t.navigator&&"function"==typeof r.sendBeacon&&(t.navigator.sendBeacon=()=>!0),function(){"function"==typeof r.setTimeout&&(t.setTimeout=r.setTimeout),"function"==typeof r.clearTimeout&&(t.clearTimeout=r.clearTimeout),"function"==typeof r.setInterval&&(t.setInterval=r.setInterval),"function"==typeof r.clearInterval&&(t.clearInterval=r.clearInterval),"function"==typeof r.requestAnimationFrame&&(t.requestAnimationFrame=r.requestAnimationFrame),"function"==typeof r.cancelAnimationFrame&&(t.cancelAnimationFrame=r.cancelAnimationFrame),"function"==typeof r.requestIdleCallback&&(t.requestIdleCallback=r.requestIdleCallback),"function"==typeof r.cancelIdleCallback&&(t.cancelIdleCallback=r.cancelIdleCallback),"function"==typeof r.fetch&&(t.fetch=r.fetch),"function"==typeof r.WebSocket&&(t.WebSocket=r.WebSocket),t.navigator&&"function"==typeof r.sendBeacon&&(t.navigator.sendBeacon=r.sendBeacon),delete t.__dryAsyncPatched}}();("test"===process.env.NODE_ENV?s.act:e=>e())(()=>{c(()=>{i.render(s.createElement(_.Provider,{value:o},s.createElement(t,r)))}),O(()=>{i.unmount(),u()})});const a=(e=>C(e))(e);return(e=>{let t=null;return{getRoot:function(){if(!t)throw new Error("No root set!");const[r,n]=e.getAuthorativeCandidate(t);return r.ancestors.find(({id:e})=>e===r.self.registerId)},getRootAncestors:function(){if(!t)throw new Error("No root set!");const[r]=e.getAuthorativeCandidate(t);return r?r.ancestors:[]},getOffTreeData:function(){if(!t)throw new Error("No root set!");const[r,n]=e.getAuthorativeCandidate(t);return[r.ancestors.reduce((e,t)=>e.set(t.id,t),new Map),r,n]},promoteByRoot:function(e){t=e}}})($(e,a))}),U=j,N=A(()=>{const e=new Map;return{register:function(t,r){e.has(t)||e.set(t,new Map);const n=e.get(t);r.forEach(e=>{n.has(e.id)||n.set(e.id,e)})},unregister:function(t){e.has(t)&&e.delete(t)},getModulesById:function(t){const r=e.get(t);return Array.from(r.values()).reduce((e,t)=>"runtime"===t.type?e.add(t.module):e,new Set)}}}),D=e(),L=t(`react-runtime@idns:${D}`,t.DNS),q=t("CUM_SIG_ID",L);function z(e){return t(`ghost:${e}`,L)}const W=(e,t,r)=>{const n=(e=>N(e))(e);function o(e,t=0,n,i=new Set,c=new Set){if(c.has(e))return i;c.add(e);const u=0===t&&n?n:new Set((r.getUpstreamById(e)??new Map).values().flatMap(d));if(0===u.size)return i;for(const r of u.values()){const u=s(e,r);if(!u)throw new Error("No provider available for upstream module");"__ROOT__"===u?i.add(r):o(u,t+1,n,i,c)}return i}function s(e,o){const i=t.getParent(e);if("__ROOT__"===i)return i;const c=r.getDeclarationId(i),u=n.getModulesById(c);return 0===u.size?null:u.has(o)?i:s(i,o)}function i(e,t){const r=Array.from(t.values()).map(t=>function(e,t){const r=Array.from(e.values()).findIndex(e=>e.localProviders.some(e=>"runtime"===e.type&&e.module===t)),n=new Set;function o(t){const r=e[t];if(n.has(r.id))return new Map;n.add(r.id);const s=r.upstreamModules;if(0===s.size)return new Map;const i=new Map;i.set(r.id,r);const u=new Set(...s.values());for(const r of u){const n=c(e,t,r);if(null===n)throw new Error(`No provider available for ${String(r.key)}`);const s=o(n);for(const[e,t]of s)i.has(e)||i.set(e,t)}return i}return o(r)}(e,t));return e.reduce((e,{id:t})=>{const n=Array.from(r.values()).find(e=>e.has(t));return n?e.set(t,n.get(t)):e},new Map)}function c(e,t,r){for(let n=t+1;n<e.length;n++){if(e[n].localProviders.reduce((e,t)=>"runtime"===t.type?e.add(t.module):e,new Set).has(r))return n}return null}return{register:n.register,resolveProviderData:function(e,t,n){const s=o(e,0,n),[c,u,a]=t.getOffTreeData(s),d=c.values().reduce((e,t)=>{const n=z(t.id);return e.push(Object.assign({},t,{upstreamModules:r.getUpstreamById(n),id:n})),e},[]),l=a?O(()=>i(d,s)):i(d,s);if(l instanceof Error)throw new Error("Couldn't resolve upstream dependencies as a direct descendent of the root. If the provided root does render your component through children, you can provide children to the root, via the second argument in of withProviderScope");const f=l.get(u.self.registerId);return[l,f]},getRoot:function(e){const t=e.getRoot();return Object.assign({},t,{id:z(t.id)})},getRootAncestors:function(e){const t=e.getRoot(),r=e.getRootAncestors();return r.slice(r.findIndex(e=>e.id===t.id)+1).reduce((e,t)=>{const r=z(t.id);return e.set(r,{...t,id:r})},new Map)}}},V=l,G=e=>"object"==typeof e&&null!==e&&"key"in e&&"layer"in e&&"symbol"==typeof e.key&&"object"==typeof e.layer&&f.isLayer(e.layer),K=e=>"object"==typeof e&&null!==e&&"debug"in e&&"postUnmountTTL"in e&&"env"in e&&"replace"in e&&"cleanupPolicy"in e&&"boolean"==typeof e.debug&&"number"==typeof e.postUnmountTTL&&["prod","dev"].includes(e.env)&&"boolean"==typeof e.replace&&["onUnmount","immediate"].includes(e.cleanupPolicy),H=e=>"object"==typeof e&&null!==e&&"runtime"in e&&p.isManagedRuntime(e.runtime)&&"config"in e&&"object"==typeof e.config&&K(e.config),Q=e=>t=>({key:Symbol("RuntimeContext"),name:e?.name??"runtime_name",layer:t}),J=e=>{const t=new Map,r=e(e=>({provide:r=>(t.set(r.key,e),r)})),n={};for(const e of r){const t=X(e.key).split("/");let r=n;for(let n=0;n<t.length;n++){const o=t[n];n===t.length-1?r[o]=e:(r[o]||(r[o]={}),r=r[o])}}return{map:t,from:n}};function X(e){return e.startsWith("@")?e.slice(1):e}const Y=e=>new Proxy(Object.assign({},e),(()=>{const e=new Map;return{get:(t,r)=>"subscribe"===r?(t,r)=>(e.has(t)||e.set(t,new Set),e.get(t).add(r),()=>{e.get(t).delete(r),0===e.get(t).size&&e.delete(t)}):"value"===r?t:Reflect.get(t,r),set:(t,r,n)=>{const o=Reflect.set(t,r,n),s=e.get(r);return s&&s.forEach(e=>e(n)),o}}})()),Z=(e,t=()=>{})=>g.gen(function*(){const r=yield*y.make();return yield*g.addFinalizer(()=>y.succeed(r,!0)),new Proxy({},{get:a.shallow((n,o)=>h.merge(h.fromIterable([e[o]]).pipe(h.tap(()=>g.sync(()=>t(o)))),h.asyncPush(t=>g.acquireRelease(g.sync(()=>e.subscribe(o,t.single)),g.fn(e=>g.sync(e)))).pipe(h.interruptWhenDeferred(r))).pipe(h.filter(e=>void 0!==e)))})}),ee=()=>e=>e,te=Symbol.for("react-runtime/getPropTag/Id"),re=e=>()=>{const t=e(te.toString());class r extends(t()){}return{PropService:r}},ne=re(m.Tag),oe=e=>k(e,w)&&!g.isEffect(e),se=e=>g.sync(()=>oe(e)),ie=e=>e,ce={debug:!1,postUnmountTTL:1e3,env:"production"===process.env.NODE_ENV?"prod":"dev",cleanupPolicy:"onUnmount",replace:!1};const ue=A(function(t){const r=new Map,n=new Map,o=new Map,s=new Map,i=new Map,c=new Map;function u(e,t,o,s){const i=s??r,c=i.get(e)?.get(t)?.get(o);return(c&&n.get(c))??null}return{keepAlive:function(e){const t=i.get(e);t&&(t.forEach(clearTimeout),t.clear())},promoteById:function(e){c.set(e,!0)},gcUnpromoted:function(e){if(!0===c.get(e))return;const t=r.get(e);t?.forEach(e=>{e.forEach(e=>{n.get(e)&&(n.get(e)?.runtime.dispose(),n.delete(e))})});const s=o.get(e);s?.forEach(e=>{e.forEach(e=>{n.get(e)&&(n.get(e)?.runtime.dispose(),n.delete(e))})}),i.delete(e),r.delete(e),c.delete(e)},registerIsolated:function(t,r){const n=u(t,r.context.key,r.index);if(n)return n;const{context:i,config:c,providerId:a}=r,d=a;let l=o.get(t);l||(l=new Map,o.set(t,l)),l.has(i.key)||l.set(i.key,new Map),l.get(i.key).set(r.index,d);const{PropService:m}=ne(),g=Y(r.props),y=Z(g),h=f.scoped(m,y),v={id:e(),runtime:p.make(i.layer.pipe(f.provide(h))),config:Object.assign({},ce,c),propProxy:Y(r.props)};s.set(d,v);const I=l.get(i.key)?.get(r.index);return s.get(I)},gcIsolated:function(e){const t=o.get(e);t&&t.forEach(e=>{e.forEach(e=>{const t=s.get(e);t&&(t.runtime.dispose(),s.delete(e))})})},register:function(t,o){const s=u(t,o.context.key,o.index);if(s)return s;const{context:i,config:a,providerId:d}=o,l=d;void 0===c.get(t)&&c.set(t,!1);let m=r.get(t);m||(m=new Map,r.set(t,m)),m.has(i.key)||m.set(i.key,new Map),m.get(i.key).set(o.index,l);const{PropService:g}=ne(),y=Y(o.props),h=Z(y),v=f.scoped(g,h),I={id:e(),runtime:p.make(i.layer.pipe(f.provide(v))),config:Object.assign({},ce,a),propProxy:y};n.set(l,I);const b=m.get(i.key)?.get(o.index);return n.get(b)},unregister:function(e,t){const o=r.get(e);o&&(i.has(e)||i.set(e,new Map),o.forEach(o=>{o.forEach(o=>{const s=n.get(o);if(s){const u=setTimeout(()=>function(e,t,o){n.get(t)?.runtime.dispose(),n.delete(t);const s=i.get(e);if(s){const n=s.get(t);n||(clearTimeout(n),s.delete(t)),0===s.size&&(i.delete(e),r.delete(e),c.delete(e),o())}}(e,o,t??(()=>{})),s.config.postUnmountTTL);i.get(e)?.set(o,u)}})}))},getById:u,mergeIsolatedById:function(e){const t=o.get(e)??null,i=t?.values().reduce((e,t)=>(t.forEach(t=>{const r=s.get(t);return r?e.set(t,r):e}),e),new Map);if(!t)return;const c=r.get(e),u=c?E(c,t):t;r.set(e,u),t.forEach(e=>{e.forEach(e=>{const t=i?.get(e);t&&n.set(e,t)})})},getSnapshot:function(){return M(r)},subscribe:function(e){return e=>()=>{}},registry:n}});function ae(e,t){let r=e.get(t);return r||(r={inUse:0,nextSalt:1,free:[],claims:new Map},e.set(t,r)),r}const de=s.createContext(null);function le(){return s.useContext(de)??{depth:-1,parent:{declarationId:null,registerId:"__ROOT__",childrenSketch:null,cumSig:q},seq:new Map}}function fe(e){return"object"==typeof e&&null!==e&&Object.getPrototypeOf(e)===Object.prototype}const pe=Symbol.for("react.memo"),me=Symbol.for("react.forward_ref"),ge=Symbol.for("react.lazy"),ye=Symbol.for("react.provider"),he=Symbol.for("react.context"),ve=Symbol.for("react.portal");function Ie(e){const t=null!=e.key?String(e.key):"";if("string"==typeof e.type)return{token:`host:${e.type}#${t}`,kind:"host"};const r=e.type,n=r.$$typeof;if(n===ge)return{token:`lazy#${t}`,kind:"anon"};if(n===ye)return{token:`provider#${t}`,kind:"anon"};if(n===he)return{token:`context#${t}`,kind:"anon"};const o=function(e){let t=e;for(let e=0;e<3;e++){const e=t.$$typeof;if(e!==pe&&e!==me)break;t=t.type}return t}(r),s=o._id;if(s)return{token:`decl:${s}#${t}`,kind:"decl"};return{token:`cmp:${o&&(o.displayName||o.name)||"anon"}#${t}`,kind:"anon"}}function be(e,r,n,o){if(r&&"object"==typeof r&&r.$$typeof===ve)return o.total++,o.portals++,t("portal",e);if(!s.isValidElement(r))return o.total++,o.textish++,t(function(e){return e&&"object"==typeof e&&e.$$typeof===ve?"portal":"nonel:"+typeof e}(r),e);const i=r;if(i.type===s.Fragment){o.total++;const r=t("frag",e);return n>0?ke(r,i.props.children,n-1,o):r}const{token:c,kind:u}=Ie(i);o.total++,"host"===u?o.host++:"decl"===u?o.declComposite++:o.anonComposite++,null!=i.key&&o.keyed++;const a=t(c,e);return"host"===u&&n>0?ke(a,i.props.children,n-1,o):a}function ke(e,r,n,o){const i=s.Children.toArray(r);let c=t(`len:${String(i.length)}`,e);for(const e of i)c=be(c,e,n,o);return c}function we(e,t=2,r="89e1b7f1-2a3f-4e6d-8f2d-5a3f0c1f1a77"){const n={total:0,host:0,declComposite:0,anonComposite:0,portals:0,textish:0,keyed:0},o=ke(r,e,t,n),s=n.host+n.declComposite+n.portals;return{id:o,quality:s>=2||s>=1&&n.keyed>0&&n.total>=2?"strong":s>=1?"ok":"weak",stats:n}}function Pe(e){const t=typeof e;if("string"===t||"number"===t||"bigint"===t||"boolean"===t||null==e)return!0;if(s.isValidElement(e))return!0;if(function(e){return"object"==typeof e&&null!==e&&void 0!==e.key&&void 0!==e.children&&void 0!==e.containerInfo}(e))return!0;if(function(e){return"object"==typeof e&&null!==e&&"function"==typeof e.then&&"function"==typeof e.catch}(e))return!0;if(Array.isArray(e)){for(let t=0;t<e.length;t++)if(!Pe(e[t]))return!1;return!0}if(function(e){return"object"==typeof e&&null!==e&&"function"==typeof e[Symbol.iterator]}(e)){for(const t of e)if(!Pe(t))return!1;return!0}return!1}function Se(e){return fe(e)&&s.isValidElement(e.Provider)&&s.isValidElement(e.Consumer)}const Ee=e=>fe(e)&&e.$$typeof===s.createContext(null).$$typeof,Me=(e,t)=>{const r=e?.type?.name,n=e&&(e.displayName||e.name||r)||"Component";return t?`${t}(${n})`:n},Ae={$$typeof:!0,compare:!0,displayName:!0,render:!0,type:!0};function Ce(e,t){Object.keys(e).forEach(function(r){Ae[r]||Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))})}const Re=(e,t)=>e?r(e,{...t}):null,Oe=e=>Object.getOwnPropertyNames(e).filter((()=>{const e=Object.getOwnPropertyNames(()=>{});return t=>!e.includes(t)})()).reduce((t,r)=>Object.assign(t,{[r]:e[r]}),{}),_e=e=>{try{return Pe(e({}))}catch{return!1}},xe=s.memo(function(e){const{renderFn:t,...r}=e;return s.useEffect(()=>{},[]),t(r)}),Te=s.memo(function e(t){const{discoveryFn:n,...o}=t,i=s.useRef(t.runtimeProviderApi.getSnapshot()),c=t.discoveryFn(Object.assign({},o,{snapshot:i.current}));if("use-stub"===t.strategy)return Array.from(c.offTreeMap.values()).reverse().map(n=>r(e,{declarationId:n.declId,discoveryFn:t.discoveryFn,localProviders:n.localProviders,nodeProps:n.props,registerId:n.id,runtimeProviderApi:t.runtimeProviderApi,strategy:"use-isolated"},n.id)).concat(r(e,{declarationId:t.declarationId,discoveryFn:t.discoveryFn,localProviders:t.localProviders,nodeProps:t.nodeProps,registerId:t.registerId,runtimeProviderApi:t.runtimeProviderApi,strategy:"use-isolated-check"},t.registerId));if("use-isolated"===t.strategy)return c.succeeded?null:r(e,{declarationId:t.declarationId,discoveryFn:t.discoveryFn,localProviders:t.localProviders,nodeProps:t.nodeProps,registerId:t.registerId,runtimeProviderApi:t.runtimeProviderApi,strategy:"use-all"},t.registerId);if("use-isolated-check"===t.strategy)return c.succeeded,null;if("use-all"===t.strategy)return Array.from(c.offTreeMap.values()).reverse().map(n=>r(e,{declarationId:n.declId,discoveryFn:t.discoveryFn,localProviders:n.localProviders,nodeProps:n.props,registerId:n.id,runtimeProviderApi:t.runtimeProviderApi,strategy:"use-isolated-check"},n.id)).concat(r(e,{declarationId:t.declarationId,discoveryFn:t.discoveryFn,localProviders:t.localProviders,nodeProps:t.nodeProps,registerId:t.registerId,runtimeProviderApi:t.runtimeProviderApi,strategy:"use-public"},t.registerId));if("use-public"===t.strategy){if(c.succeeded)return null;throw new Error("Missing upstream dependencies! Make sure your providerScope provides all upstream dependencies and is self sufficient, or use withMock, to stub missing ones.")}},(e,t)=>!0),Fe=s.memo(function(e){const{renderFn:t}=e;return t()}),$e=[new Proxy({},{get:()=>({})})],Be=e=>{const t=s.useRef({...e}),r=s.useCallback(e=>(Object.assign(t.current,e),{...t.current}),[]),n=s.useCallback(()=>{t.current={...e}},[e]),o=s.useCallback(()=>({...t.current}),[]);return i={update:r,reset:n,get:o},s.useMemo(()=>({...i}),Object.values(i));var i},je=a.shallow(e=>(t,r)=>{const n=oe(t)?t:g.isEffect(t)?h.unwrap(t.pipe(g.andThen(e=>oe(e)?e:h.fromEffect(g.succeed(e))))):h.empty,o=g.runSync(v.make());try{const t=e.runSync(h.runHead(n));I.isSome(t)&&r(t.value)}catch{}return{fiber:e.runFork(n.pipe(h.tap(e=>g.sync(()=>r(e))),h.runDrain),{scope:o}),scope:o}}),Ue=(e,t)=>(r,n=[])=>{const o=t.get(e.key),i=(c=o.runtime,{create:je(c)});var c;const u=s.useRef(void 0),a=s.useMemo(()=>i.create(r,e=>{u.current=e}),[]),[d,l]=s.useState(()=>u.current),f=s.useRef(a);return Array.from(t.values()).filter(Boolean),s.useEffect(()=>(null===f.current&&(f.current=i.create(r,e=>{l(e)})),()=>{g.runFork(v.close(f.current.scope,b.void)),f.current=null}),[]),d};function Ne(e,t){return(r,n=[])=>{const o=t.get(e.key);Array.from(t.values()).filter(Boolean);const i=s.useRef(g.runSync(v.make()));return s.useEffect(()=>(null===i.current&&(i.current=g.runSync(v.make())),()=>{o.runtime.runFork(v.close(i.current,b.void)),i.current=null}),[o,...n]),s.useCallback((...e)=>{const t=O(()=>o.runtime.runSync(r(...e)));return t instanceof Error?g.async(t=>{o.runtime.runFork(r(...e).pipe(g.tap(e=>t(g.succeed(e)))),{scope:i.current})}):g.succeed(t)},[])}}class De{constructor(){this.listeners=[],this.resolvers=new Map,this.eventQueue=[],this.emit=(...t)=>{const r=e();let n;const o=new Promise(e=>{n=e});return this.eventQueue.push({data:t,eventId:r}),this.resolvers.set(r,n),this.notifyListeners(),o}}subscribe(e){this.listeners.push(e),this.notifyListeners()}notifyListeners(){for(;this.eventQueue.length>0&&this.listeners.length>0;){const e=this.eventQueue.shift();this.listeners.forEach(t=>t(e.data,e.eventId))}}resolve(e){return t=>{const r=this.resolvers.get(e);r&&(r(t),this.resolvers.delete(e))}}async waitForEvent(){return this.eventQueue.length>0?Promise.resolve(this.eventQueue.shift()):new Promise(e=>{const t=(r,n)=>{e({data:r,eventId:n}),this.listeners=this.listeners.filter(e=>e!==t)};this.subscribe(t)})}}function Le(e,t){return(r,n=[])=>{const o=t.get(e.key),i=Array.from(t.values()).filter(Boolean),c=s.useRef(r);s.useEffect(()=>{c.current=r},[i,o,r,...n]);const u=s.useMemo(()=>new De,[i,o,...n]),a=s.useMemo(()=>l(h.fromAsyncIterable(async function*(e){for(;;)yield await e.waitForEvent()}(u),()=>{}),h.mapEffect(({data:e,eventId:t})=>l(c.current(...e),g.tap(e=>u.resolve(t)(e)))),h.runDrain),[i,o,...n]);return s.useEffect(()=>{const e=g.runSync(v.make());return o.runtime.runFork(a.pipe(g.forkScoped,v.extend(e))),()=>{o.runtime.runFork(v.close(e,b.void))}},[i,o,u,...n]),u.emit}}const qe=(e,t)=>(r,n=[])=>{const o=t.get(e.key),i=Array.from(t.values()).filter(Boolean),c=s.useRef(!1),u=s.useRef(null);c.current||(u.current=g.runSync(v.make()),o.runtime.runFork(r.pipe(g.forkScoped,v.extend(u.current))),c.current=!0),s.useEffect(()=>(c.current||(u.current=g.runSync(v.make()),o.runtime.runFork(r.pipe(g.forkScoped,v.extend(u.current)))),()=>{o.runtime.runFork(v.close(u.current,b.void)),c.current=!1}),[i,o,...n])},ze=A(()=>({create:function(e,t){return{instance:t.get(e.key).runtime,use:Ue(e,t),useFn:Ne(e,t),usePush:Le(e,t),useRun:qe(e,t)}},createInert:function(e){return{instance:p.make(f.empty),use:()=>e,useFn:()=>()=>Promise.resolve(e),usePush:()=>()=>Promise.resolve(e),useRun:()=>{}}}})),We=(e,t)=>i.useCallback((r,n,o,s,i)=>new Proxy({},{get(c,u){if("runtime"===r.type&&s){if("runtime"===u)return s();if("configure"===u)return s}if("upstream"===r.type&&s&&"runtime"===u)return s();if("inject"===u)return r=>{const n=o(r);if(!n.has(r.key)){if(i?.stub)return e.createInert(i.stub.value);throw new Error(function(e,t){return`[${e}] "${String(t)}" is undefined, because components are not rendered upstream in portable scenarios. This may cause inconsistent behavior.`}(t,r.key))}return e.create(r,n)};if("props"===u)return n;throw new Error(function(e,t){return`[${e}] Invalid destructure "${String(t)}".`}(t,u))}}),[e,t]),Ve=(e,t)=>{const r=(e=>ze(e))(e),n=We(r,t),o=(e=>i.useCallback(e=>new Proxy(e,{get:(e,t)=>e[t]}),[e]))(t),s=((e,t)=>i.useCallback((t,r,n,o,s,i)=>(c={})=>{const u={providerId:r.id,index:r.index,context:r.module,config:c,props:s};if(i?.dryRun)return e.createInert(i.stub?.value);const a=(i?.isolated?o.registerIsolated:o.register)(t,u),d=n(a);return e.create(r.module,d)},[e,t]))(r,t),c=Be({});return i.useCallback((e,t,i,u,a,d,l)=>{const f=Object.assign({dryRun:!1,stub:void 0,isolated:!1},l),p=new Set,m=new Map;c.reset(),c.update({id:u,...i});for(const i of e.values()){const e=new Set,l=new Map;if(t&&t.has(i.id)&&("upstream"==i.type||"runtime"===i.type))for(const e of t.get(i.id)){const t=a.getByKey(u,e.key,i.index,d)[0];t&&l.set(e.key,t)}if("upstream"===i.type){let t;if(void 0!==i.module){e.add(i.module);const[n]=a.getByKey(u,i.module.key,i.index,f.isolated||f.dryRun?d:null);if(n)l.set(i.module.key,n);else{if(!f.stub)throw new Error(`[38;5;180m💡 Hey, ${i.module.name} is not available from upstream.[0m`);p.add(i.module)}t=n?()=>r.create(i.module,l):f.stub?()=>r.createInert(f.stub.value):void 0}const s=o(c.get()),m=n(i,s,t=>{if(e.add(t),!l.has(t.key)){const[e]=a.getByKey(u,t.key,i.index,f.isolated||f.dryRun?d:null);e?l.set(t.key,e):p.add(t)}return l},t,f),g=i.fn(m);g&&c.update(g)}if("runtime"===i.type){const[t,d]=a.getByKey(u,i.module.key);if(t){l.set(i.module.key,t);const e=l.get(i.module.key);Object.entries(c.get()).forEach(([t,r])=>{e.propProxy[t]!==r&&(e.propProxy[t]=r)})}const m=t?()=>r.create(i.module,l):s(u,i,e=>l.set(i.module.key,e),a,c.get(),f);if(i.fn){const t=o(c.get()),r=n(i,t,t=>{if(e.add(t),!l.has(t.key)){const[e]=a.getByKey(u,t.key,i.index);e?l.set(t.key,e):p.add(t)}return l},m,f),s=i.fn(r);s&&c.update(s)}else m()}if("props"===i.type){const e=i.fn(c.get());c.update(e??{})}"upstream"!==i.type&&"runtime"!==i.type||m.set(i.id,e)}return{resultProps:c.get(),upstreamModuleSource:m,missingUpstream:p}},[n,o,s,r,c])};const Ge=s.createContext(null),Ke="_id",He="_dryRunId",Qe="_providers",Je="_component",Xe="_props",Ye="_upstream",Ze="_error",et=(e,t)=>(e[Qe]??[]).concat(t??[]).map((e,t)=>Object.assign({},e,{level:0,index:t})),tt=e=>e[Je],rt=e=>e[Ke],nt=e=>e[He]??null;function ot(e,i,c,u,a,d){const l=function(e){const r=t(e,L);function n(e){return t(e,r)}function o(n,o,s){return t(null===s?`${n}|${e}#${o}`:`${n}|${e}#${o}@${String(s)}`,r)}return Object.assign(function(e,t){return o(n(e),e,t)},{baseId:n,withTrail:o})}(e);return f=>{const{children:p,...m}=f,g=s.useRef(!1);s.useRef(!1);const y=s.useContext(_),h=y?.scopeId??"live",v=(()=>{const e=le();return Object.assign(e,{useSalt:(t=e.seq,(e,r)=>{const n=s.useMemo(()=>Symbol("salt"),[]),o=ae(t,e);let i=o.claims.get(n);return void 0===i&&(i=0===o.inUse+o.claims.size?null:o.free.pop()??o.nextSalt++,o.claims.set(n,i)),s.useLayoutEffect(()=>{const r=ae(t,e),o=r.claims.get(n);return void 0!==o&&(r.claims.delete(n),r.inUse++),()=>{const r=t.get(e);r&&(r.inUse=Math.max(0,r.inUse-1),null!=o&&r.free.push(o),0===r.inUse&&0===r.claims.size&&t.delete(e))}},[t,e,n]),"production"!==process.env.NODE_ENV&&r?.userId&&o.inUse+o.claims.size>1&&null!==i&&r.familyLabel&&r.familyLabel,i})});var t})(),I={getInstance:e=>j(e)},b=d??nt(i),k=s.useContext(Ge)??((e,t,r)=>({scopeId:e,dryRunId:t,mode:r}))(h,b,y?"dry":"live"),w=s.useMemo(()=>l.baseId(f.id??""),[f.id]),M=v.useSalt(w,f.id?{userId:f.id}:{}),A=s.useMemo(()=>l.withTrail(v.parent.cumSig,f.id??"",null),[f.id,v.parent.cumSig,M]),x=s.useMemo(()=>we(p,5),[p]),T=s.useMemo(()=>{const r={declarationId:e,registerId:A,childrenSketch:x,cumSig:(n=v.parent.cumSig,o=e,s=A,t(`${o}#${s}`,n))};var n,o,s;const i=y?{parentHit:y.targetId===e}:void 0;return function(e,t,r){return{parent:t,depth:e.depth+1,seq:new Map,dryRunMeta:r}}(v,r,i)},[v,A,x,y]),$=((e,t,r)=>{const n=C(e);return t&&r&&R(t,r,n),n})(h,A,v.parent.registerId),B=(()=>{const e=new Map,t=new Map;return{getUpstreamById:function(e){return t.get(e)||t.set(e,new Map),t.get(e)},getDeclarationId:function(t){return e.get(t)||null},register:function(r,n,o){e.set(r,n);const s=t.get(r),i=s?E(s,o):o;t.set(r,i)},dispose:function(r){e.delete(r),t.delete(r)}}})(),U=W(h,$,B);if(!g.current){if(g.current=!0,0===T.depth&&"live"===k.mode&&null!==k.dryRunId){const t={props:m,declarationId:e,componentId:w,registerId:A,childrenSketch:x},r=I.getInstance(k.dryRunId);r.promoteByRoot(t);U.getRootAncestors(r).forEach(e=>{B.register(e.id,e.declId,e.upstreamModules),U.register(e.declId,e.localProviders)});const n=r.getRoot();B.register(A,e,n.upstreamModules),U.register(e,n.localProviders)}v.depth}const N=et(i,a?[a]:[]),D=F(h,$);(e=>{const t=s.useRef(!1),r=s.useRef(e);r.current=e,s.useLayoutEffect(()=>(t.current?t.current=!1:r.current(),()=>{t.current=!0}),[])})(()=>{const t=0===T.seq.size;if("dry"===k.mode&&(v.dryRunMeta?.parentHit||T.dryRunMeta?.parentHit&&t)){const r={props:m,userId:f.id,declarationId:e,componentId:w,registerId:A,childrenSketch:we(f.children,5)};D.registerCandidate(t?r:v.parent,v.depth,t?null:r)}});const L=null!==k.dryRunId?I.getInstance(k.dryRunId):null,q=((e,t,r,n,o=null)=>{const s=ue(e);return{gcUnpromoted:()=>s.gcUnpromoted(t),keepAlive:()=>s.keepAlive(t),promote:()=>s.promoteById(t),getByKey:function(e=t,i,c=0,u){const a=o?Array.from(n.resolveProviderData(e,o)[0].values()):[];let d=e;for(;null!==d;){const e=s.getById(d,i,c,u);if(e)return[e,!1];const t=r.getParent(d);if("__ROOT__"!==t&&null!==t)d=t;else if("__ROOT__"===t){for(let e=0;e<a.length;e++){const t=a[e],r=s.getById(t.id,i,c);if(r)return[r,!0]}d=null}else d=null}return[null,!1]},getSnapshot:s.getSnapshot,mergeIsolatedById:s.mergeIsolatedById,register:s.register,registerIsolated:s.registerIsolated,gcIsolated:s.gcIsolated,unregister:()=>s.unregister(t,()=>r.unregister(t))}})(h,A,$,U,L);queueMicrotask(q.gcUnpromoted),P(()=>(q.promote(),q.keepAlive(),q.unregister),[]);const z=Ve(h,u);if(null===k.dryRunId){const{resultProps:t,upstreamModuleSource:n}=z(N,B.getUpstreamById(A),m,A,q,null);"dry"===k.mode&&D.registerAncestor({id:A,declId:e,props:m,upstreamModules:n,localProviders:N}),B.register(A,e,n),U.register(e,N);const o=Object.assign({},f,t,{registerId:A.substring(0,3),id:f.id}),i=s.useMemo(()=>s.memo(c),[]),u=Re(i,o)??p??null,a=r(de.Provider,{value:T,children:u});return 0===v.depth?r(Ge.Provider,{value:k,children:a}):a}const V=s.useCallback(e=>{const t=I.getInstance(k.dryRunId);if("use-stub"===e.strategy){const[r,n]=$e.reduce(([t,r],n)=>{const o=O(()=>z(e.localProviders,B.getUpstreamById(e.registerId),e.nodeProps,e.registerId,e.runtimeProviderApi,e.snapshot,{dryRun:!0,stub:{value:n}}));return o instanceof Error?[t,r]:[t.union(o.missingUpstream),S(r,o.upstreamModuleSource)]},[new Set,new Map]);B.register(e.registerId,e.declarationId,n);const[o]=U.resolveProviderData(e.registerId,t,r);return{offTreeMap:o,succeeded:0===r.size}}if("use-isolated"===e.strategy||"use-isolated-check"===e.strategy){const r=O(()=>z(e.localProviders,B.getUpstreamById(e.registerId),e.nodeProps,e.registerId,e.runtimeProviderApi,e.snapshot,{isolated:!0}));r instanceof Error||0!==r.missingUpstream.size||(B.register(e.registerId,e.declarationId,r.upstreamModuleSource),q.mergeIsolatedById(e.registerId));const[n]=U.resolveProviderData(e.registerId,t,r instanceof Error?new Set:r.missingUpstream);return{offTreeMap:n,succeeded:!(r instanceof Error)&&0===r.missingUpstream.size}}if("use-all"===e.strategy){const r=U.getRootAncestors(t),[n]=U.resolveProviderData(e.registerId,t,function(e){const t=new Set;for(const r of e.values())for(const e of r)t.add(e);return t}(B.getUpstreamById(e.registerId)));return{offTreeMap:r.values().reduce((e,t)=>n.has(t.id)?e:e.set(t.id,t),new Map),succeeded:!0}}if("use-public"===e.strategy){const r=O(()=>z(e.localProviders,B.getUpstreamById(e.registerId),e.nodeProps,e.registerId,e.runtimeProviderApi,null));r instanceof Error||0!==r.missingUpstream.size||B.register(e.registerId,e.declarationId,r.upstreamModuleSource);const[n]=U.resolveProviderData(e.registerId,t,r instanceof Error?new Set:r.missingUpstream);return{offTreeMap:n,succeeded:!(r instanceof Error)&&0===r.missingUpstream.size}}return null},[]),G=s.useCallback(()=>{const t=I.getInstance(k.dryRunId),n=U.getRoot(t);return r(Te,{declarationId:e,discoveryFn:V,localProviders:N,registerId:A,runtimeProviderApi:q,strategy:"use-stub",nodeProps:0===T.depth?n.props:m},A)},[]),K=s.useCallback(()=>{let t=null;if(0===T.depth&&k.dryRunId){t=I.getInstance(k.dryRunId).getRoot()}const{resultProps:n,upstreamModuleSource:o}=z(N,B.getUpstreamById(A),Object.assign({},m,t?t.props:{}),A,q,null);B.register(A,e,o),U.register(e,N);const s=Object.assign({},m,n,0===T.depth?t?.props??{}:{}),i=Re(c,s)??p??null,u=r(de.Provider,{value:T,children:i});return 0===T.depth?r(Ge.Provider,{value:k,children:u}):u},[]);return n(o,{children:[r(xe,{renderFn:G}),r(Fe,{renderFn:K})]})}}const st=(e,t,r,n,o,i,c)=>{const u=Oe(r),a=s.memo(n);return a.displayName=c,Ce(u,a),((e,t)=>{e[Je]=t})(a,o),((e,t)=>{e[Ke]=t})(a,e),t&&((e,t)=>{e[He]=t})(a,t),((e,t)=>{e[Qe]=t})(a,i),a};function it(t,r){return n=>{const o=rt(n)??e(),s=e(),i=nt(n),c=tt(n)??n,u=function(e,t,r){return{type:"runtime",id:e,module:t,fn:r}}(s,t,r),a=et(n,[u]),d=Me(c,"withRuntime"),l=ot(o,n,c,d,u);return st(o,i,n,l,c,a,d)}}function ct(t,r){const n=G(t),o=n?t:void 0,s=n?r:t;return t=>{const r=rt(t)??e(),n=e(),i=nt(t),c=tt(t)??t,u=function(e,t,r){return{type:"upstream",id:e,fn:r,module:t}}(n,o,s),a=et(t,[u]),d=Me(c,"withRuntime"),l=ot(r,t,c,d,u);return st(r,i,t,l,c,a,d)}}function ut(t){return r=>{const n=rt(r)??e(),o=e(),s=nt(r),i=tt(r)??r,c={type:"props",id:o,fn:t};const u=et(r,[c]),a=Me(i),d=ot(n,r,i,a,c);return st(n,s,r,d,i,u,a)}}function at(t,r){return G(t),t=>{const r=rt(t)??e(),n=nt(t),o=tt(t)??t,s=et(t),i=Me(o),c=ot(r,t,o,i);return st(r,n,t,c,o,s,i)}}let dt=0;function lt(e,t){return r=>{const n=rt(r);if(null===n)throw new Error(`Component with name "${Me(r)}" cannot be identified as a target for off-tree provider traversal. Use withId on the component itself, to make it discoverable and to enable additional analytics in tools like Storybook, or use withParentTag on the portable root to use the parent component as a target for provider resolution.`);const o=tt(r)??r,s=et(r),i=Me(o),c=`dry-run-${String(dt++)}`;U(c,e,t??{},n);const u=ot(n,r,o,i,void 0,c);return st(n,c,r,u,o,s,i)}}export{Je as COMPONENT_PROP,ot as CreateSystem,He as DRYRUN_ID_PROP,Ze as ERROR_PROP,Ke as ID_PROP,Xe as PROPS_PROP,Qe as PROVIDERS_PROP,st as PropagateSystem,Ye as UPSTREAM_PROP,Ce as copyStaticProperties,we as createChildrenSketch,Re as createElement,re as createGetPropTag,ie as createKey,Y as createProxy,Z as createProxyStreamMap,Q as createRuntimeContext,ee as enhanceRuntime,Oe as extractMeta,Me as getDisplayName,ne as getPropTag,J as getProviders,_e as isFunctionalComponent,Ee as isReactContext,Se as isReactContext2,Pe as isReactNode,K as isRuntimeConfig,G as isRuntimeContext,H as isRuntimeInstance,oe as isStream,se as isStreamEffect,V as link,at as withMock,ut as withProps,lt as withProviderScope,it as withRuntime,ct as withUpstream};
//# sourceMappingURL=index.esm.min.js.map