spyret 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ var ol=Object.create;var Lr=Object.defineProperty;var al=Object.getOwnPropertyDescriptor;var ul=Object.getOwnPropertyNames;var cl=Object.getPrototypeOf,fl=Object.prototype.hasOwnProperty;var Vr=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var a=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ll=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ul(t))!fl.call(e,i)&&i!==r&&Lr(e,i,{get:()=>t[i],enumerable:!(n=al(t,i))||n.enumerable});return e};var Ur=(e,t,r)=>(r=e!=null?ol(cl(e)):{},ll(t||!e||!e.__esModule?Lr(r,"default",{value:e,enumerable:!0}):r,e));var Gr=a((uP,Br)=>{"use strict";function pl(){this.__data__=[],this.size=0}Br.exports=pl});var Ke=a((cP,zr)=>{"use strict";function dl(e,t){return e===t||e!==e&&t!==t}zr.exports=dl});var Ie=a((fP,Kr)=>{"use strict";var yl=Ke();function hl(e,t){for(var r=e.length;r--;)if(yl(e[r][0],t))return r;return-1}Kr.exports=hl});var Hr=a((lP,Jr)=>{"use strict";var gl=Ie(),ml=Array.prototype,bl=ml.splice;function wl(e){var t=this.__data__,r=gl(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():bl.call(t,r,1),--this.size,!0}Jr.exports=wl});var Yr=a((pP,Wr)=>{"use strict";var vl=Ie();function xl(e){var t=this.__data__,r=vl(t,e);return r<0?void 0:t[r][1]}Wr.exports=xl});var Xr=a((dP,Zr)=>{"use strict";var Il=Ie();function Al(e){return Il(this.__data__,e)>-1}Zr.exports=Al});var en=a((yP,Qr)=>{"use strict";var ql=Ie();function Pl(e,t){var r=this.__data__,n=ql(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}Qr.exports=Pl});var Ae=a((hP,tn)=>{"use strict";var El=Gr(),Ol=Hr(),_l=Yr(),Tl=Xr(),Sl=en();function fe(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}fe.prototype.clear=El;fe.prototype.delete=Ol;fe.prototype.get=_l;fe.prototype.has=Tl;fe.prototype.set=Sl;tn.exports=fe});var nn=a((gP,rn)=>{"use strict";var jl=Ae();function kl(){this.__data__=new jl,this.size=0}rn.exports=kl});var on=a((mP,sn)=>{"use strict";function Rl(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}sn.exports=Rl});var un=a((bP,an)=>{"use strict";function Cl(e){return this.__data__.get(e)}an.exports=Cl});var fn=a((wP,cn)=>{"use strict";function Ml(e){return this.__data__.has(e)}cn.exports=Ml});var jt=a((vP,ln)=>{"use strict";var Nl=typeof global=="object"&&global&&global.Object===Object&&global;ln.exports=Nl});var L=a((xP,pn)=>{"use strict";var Dl=jt(),$l=typeof self=="object"&&self&&self.Object===Object&&self,Fl=Dl||$l||Function("return this")();pn.exports=Fl});var ie=a((IP,dn)=>{"use strict";var Ll=L(),Vl=Ll.Symbol;dn.exports=Vl});var mn=a((AP,gn)=>{"use strict";var yn=ie(),hn=Object.prototype,Ul=hn.hasOwnProperty,Bl=hn.toString,qe=yn?yn.toStringTag:void 0;function Gl(e){var t=Ul.call(e,qe),r=e[qe];try{e[qe]=void 0;var n=!0}catch{}var i=Bl.call(e);return n&&(t?e[qe]=r:delete e[qe]),i}gn.exports=Gl});var wn=a((qP,bn)=>{"use strict";var zl=Object.prototype,Kl=zl.toString;function Jl(e){return Kl.call(e)}bn.exports=Jl});var se=a((PP,In)=>{"use strict";var vn=ie(),Hl=mn(),Wl=wn(),Yl="[object Null]",Zl="[object Undefined]",xn=vn?vn.toStringTag:void 0;function Xl(e){return e==null?e===void 0?Zl:Yl:xn&&xn in Object(e)?Hl(e):Wl(e)}In.exports=Xl});var Z=a((EP,An)=>{"use strict";function Ql(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}An.exports=Ql});var Pe=a((OP,qn)=>{"use strict";var ep=se(),tp=Z(),rp="[object AsyncFunction]",np="[object Function]",ip="[object GeneratorFunction]",sp="[object Proxy]";function op(e){if(!tp(e))return!1;var t=ep(e);return t==np||t==ip||t==rp||t==sp}qn.exports=op});var En=a((_P,Pn)=>{"use strict";var ap=L(),up=ap["__core-js_shared__"];Pn.exports=up});var Tn=a((TP,_n)=>{"use strict";var kt=En(),On=(function(){var e=/[^.]+$/.exec(kt&&kt.keys&&kt.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();function cp(e){return!!On&&On in e}_n.exports=cp});var Rt=a((SP,Sn)=>{"use strict";var fp=Function.prototype,lp=fp.toString;function pp(e){if(e!=null){try{return lp.call(e)}catch{}try{return e+""}catch{}}return""}Sn.exports=pp});var kn=a((jP,jn)=>{"use strict";var dp=Pe(),yp=Tn(),hp=Z(),gp=Rt(),mp=/[\\^$.*+?()[\]{}|]/g,bp=/^\[object .+?Constructor\]$/,wp=Function.prototype,vp=Object.prototype,xp=wp.toString,Ip=vp.hasOwnProperty,Ap=RegExp("^"+xp.call(Ip).replace(mp,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function qp(e){if(!hp(e)||yp(e))return!1;var t=dp(e)?Ap:bp;return t.test(gp(e))}jn.exports=qp});var Cn=a((kP,Rn)=>{"use strict";function Pp(e,t){return e?.[t]}Rn.exports=Pp});var X=a((RP,Mn)=>{"use strict";var Ep=kn(),Op=Cn();function _p(e,t){var r=Op(e,t);return Ep(r)?r:void 0}Mn.exports=_p});var Je=a((CP,Nn)=>{"use strict";var Tp=X(),Sp=L(),jp=Tp(Sp,"Map");Nn.exports=jp});var Ee=a((MP,Dn)=>{"use strict";var kp=X(),Rp=kp(Object,"create");Dn.exports=Rp});var Ln=a((NP,Fn)=>{"use strict";var $n=Ee();function Cp(){this.__data__=$n?$n(null):{},this.size=0}Fn.exports=Cp});var Un=a((DP,Vn)=>{"use strict";function Mp(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}Vn.exports=Mp});var Gn=a(($P,Bn)=>{"use strict";var Np=Ee(),Dp="__lodash_hash_undefined__",$p=Object.prototype,Fp=$p.hasOwnProperty;function Lp(e){var t=this.__data__;if(Np){var r=t[e];return r===Dp?void 0:r}return Fp.call(t,e)?t[e]:void 0}Bn.exports=Lp});var Kn=a((FP,zn)=>{"use strict";var Vp=Ee(),Up=Object.prototype,Bp=Up.hasOwnProperty;function Gp(e){var t=this.__data__;return Vp?t[e]!==void 0:Bp.call(t,e)}zn.exports=Gp});var Hn=a((LP,Jn)=>{"use strict";var zp=Ee(),Kp="__lodash_hash_undefined__";function Jp(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=zp&&t===void 0?Kp:t,this}Jn.exports=Jp});var Yn=a((VP,Wn)=>{"use strict";var Hp=Ln(),Wp=Un(),Yp=Gn(),Zp=Kn(),Xp=Hn();function le(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}le.prototype.clear=Hp;le.prototype.delete=Wp;le.prototype.get=Yp;le.prototype.has=Zp;le.prototype.set=Xp;Wn.exports=le});var Qn=a((UP,Xn)=>{"use strict";var Zn=Yn(),Qp=Ae(),ed=Je();function td(){this.size=0,this.__data__={hash:new Zn,map:new(ed||Qp),string:new Zn}}Xn.exports=td});var ti=a((BP,ei)=>{"use strict";function rd(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}ei.exports=rd});var Oe=a((GP,ri)=>{"use strict";var nd=ti();function id(e,t){var r=e.__data__;return nd(t)?r[typeof t=="string"?"string":"hash"]:r.map}ri.exports=id});var ii=a((zP,ni)=>{"use strict";var sd=Oe();function od(e){var t=sd(this,e).delete(e);return this.size-=t?1:0,t}ni.exports=od});var oi=a((KP,si)=>{"use strict";var ad=Oe();function ud(e){return ad(this,e).get(e)}si.exports=ud});var ui=a((JP,ai)=>{"use strict";var cd=Oe();function fd(e){return cd(this,e).has(e)}ai.exports=fd});var fi=a((HP,ci)=>{"use strict";var ld=Oe();function pd(e,t){var r=ld(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}ci.exports=pd});var He=a((WP,li)=>{"use strict";var dd=Qn(),yd=ii(),hd=oi(),gd=ui(),md=fi();function pe(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}pe.prototype.clear=dd;pe.prototype.delete=yd;pe.prototype.get=hd;pe.prototype.has=gd;pe.prototype.set=md;li.exports=pe});var di=a((YP,pi)=>{"use strict";var bd=Ae(),wd=Je(),vd=He(),xd=200;function Id(e,t){var r=this.__data__;if(r instanceof bd){var n=r.__data__;if(!wd||n.length<xd-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new vd(n)}return r.set(e,t),this.size=r.size,this}pi.exports=Id});var We=a((ZP,yi)=>{"use strict";var Ad=Ae(),qd=nn(),Pd=on(),Ed=un(),Od=fn(),_d=di();function de(e){var t=this.__data__=new Ad(e);this.size=t.size}de.prototype.clear=qd;de.prototype.delete=Pd;de.prototype.get=Ed;de.prototype.has=Od;de.prototype.set=_d;yi.exports=de});var Ye=a((XP,hi)=>{"use strict";function Td(e,t){for(var r=-1,n=e==null?0:e.length;++r<n&&t(e[r],r,e)!==!1;);return e}hi.exports=Td});var Ct=a((QP,gi)=>{"use strict";var Sd=X(),jd=(function(){try{var e=Sd(Object,"defineProperty");return e({},"",{}),e}catch{}})();gi.exports=jd});var Mt=a((eE,bi)=>{"use strict";var mi=Ct();function kd(e,t,r){t=="__proto__"&&mi?mi(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}bi.exports=kd});var Nt=a((tE,wi)=>{"use strict";var Rd=Mt(),Cd=Ke(),Md=Object.prototype,Nd=Md.hasOwnProperty;function Dd(e,t,r){var n=e[t];(!(Nd.call(e,t)&&Cd(n,r))||r===void 0&&!(t in e))&&Rd(e,t,r)}wi.exports=Dd});var _e=a((rE,vi)=>{"use strict";var $d=Nt(),Fd=Mt();function Ld(e,t,r,n){var i=!r;r||(r={});for(var s=-1,o=t.length;++s<o;){var u=t[s],f=n?n(r[u],e[u],u,r,e):void 0;f===void 0&&(f=e[u]),i?Fd(r,u,f):$d(r,u,f)}return r}vi.exports=Ld});var Ii=a((nE,xi)=>{"use strict";function Vd(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}xi.exports=Vd});var G=a((iE,Ai)=>{"use strict";function Ud(e){return e!=null&&typeof e=="object"}Ai.exports=Ud});var Pi=a((sE,qi)=>{"use strict";var Bd=se(),Gd=G(),zd="[object Arguments]";function Kd(e){return Gd(e)&&Bd(e)==zd}qi.exports=Kd});var Te=a((oE,_i)=>{"use strict";var Ei=Pi(),Jd=G(),Oi=Object.prototype,Hd=Oi.hasOwnProperty,Wd=Oi.propertyIsEnumerable,Yd=Ei((function(){return arguments})())?Ei:function(e){return Jd(e)&&Hd.call(e,"callee")&&!Wd.call(e,"callee")};_i.exports=Yd});var R=a((aE,Ti)=>{"use strict";var Zd=Array.isArray;Ti.exports=Zd});var ji=a((uE,Si)=>{"use strict";function Xd(){return!1}Si.exports=Xd});var he=a((Se,ye)=>{"use strict";var Qd=L(),ey=ji(),Ci=typeof Se=="object"&&Se&&!Se.nodeType&&Se,ki=Ci&&typeof ye=="object"&&ye&&!ye.nodeType&&ye,ty=ki&&ki.exports===Ci,Ri=ty?Qd.Buffer:void 0,ry=Ri?Ri.isBuffer:void 0,ny=ry||ey;ye.exports=ny});var Dt=a((cE,Mi)=>{"use strict";var iy=9007199254740991,sy=/^(?:0|[1-9]\d*)$/;function oy(e,t){var r=typeof e;return t=t??iy,!!t&&(r=="number"||r!="symbol"&&sy.test(e))&&e>-1&&e%1==0&&e<t}Mi.exports=oy});var Ze=a((fE,Ni)=>{"use strict";var ay=9007199254740991;function uy(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=ay}Ni.exports=uy});var $i=a((lE,Di)=>{"use strict";var cy=se(),fy=Ze(),ly=G(),py="[object Arguments]",dy="[object Array]",yy="[object Boolean]",hy="[object Date]",gy="[object Error]",my="[object Function]",by="[object Map]",wy="[object Number]",vy="[object Object]",xy="[object RegExp]",Iy="[object Set]",Ay="[object String]",qy="[object WeakMap]",Py="[object ArrayBuffer]",Ey="[object DataView]",Oy="[object Float32Array]",_y="[object Float64Array]",Ty="[object Int8Array]",Sy="[object Int16Array]",jy="[object Int32Array]",ky="[object Uint8Array]",Ry="[object Uint8ClampedArray]",Cy="[object Uint16Array]",My="[object Uint32Array]",j={};j[Oy]=j[_y]=j[Ty]=j[Sy]=j[jy]=j[ky]=j[Ry]=j[Cy]=j[My]=!0;j[py]=j[dy]=j[Py]=j[yy]=j[Ey]=j[hy]=j[gy]=j[my]=j[by]=j[wy]=j[vy]=j[xy]=j[Iy]=j[Ay]=j[qy]=!1;function Ny(e){return ly(e)&&fy(e.length)&&!!j[cy(e)]}Di.exports=Ny});var Xe=a((pE,Fi)=>{"use strict";function Dy(e){return function(t){return e(t)}}Fi.exports=Dy});var Qe=a((je,ge)=>{"use strict";var $y=jt(),Li=typeof je=="object"&&je&&!je.nodeType&&je,ke=Li&&typeof ge=="object"&&ge&&!ge.nodeType&&ge,Fy=ke&&ke.exports===Li,$t=Fy&&$y.process,Ly=(function(){try{var e=ke&&ke.require&&ke.require("util").types;return e||$t&&$t.binding&&$t.binding("util")}catch{}})();ge.exports=Ly});var Re=a((dE,Bi)=>{"use strict";var Vy=$i(),Uy=Xe(),Vi=Qe(),Ui=Vi&&Vi.isTypedArray,By=Ui?Uy(Ui):Vy;Bi.exports=By});var Ft=a((yE,Gi)=>{"use strict";var Gy=Ii(),zy=Te(),Ky=R(),Jy=he(),Hy=Dt(),Wy=Re(),Yy=Object.prototype,Zy=Yy.hasOwnProperty;function Xy(e,t){var r=Ky(e),n=!r&&zy(e),i=!r&&!n&&Jy(e),s=!r&&!n&&!i&&Wy(e),o=r||n||i||s,u=o?Gy(e.length,String):[],f=u.length;for(var l in e)(t||Zy.call(e,l))&&!(o&&(l=="length"||i&&(l=="offset"||l=="parent")||s&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||Hy(l,f)))&&u.push(l);return u}Gi.exports=Xy});var Ce=a((hE,zi)=>{"use strict";var Qy=Object.prototype;function eh(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||Qy;return e===r}zi.exports=eh});var Lt=a((gE,Ki)=>{"use strict";function th(e,t){return function(r){return e(t(r))}}Ki.exports=th});var Hi=a((mE,Ji)=>{"use strict";var rh=Lt(),nh=rh(Object.keys,Object);Ji.exports=nh});var et=a((bE,Wi)=>{"use strict";var ih=Ce(),sh=Hi(),oh=Object.prototype,ah=oh.hasOwnProperty;function uh(e){if(!ih(e))return sh(e);var t=[];for(var r in Object(e))ah.call(e,r)&&r!="constructor"&&t.push(r);return t}Wi.exports=uh});var Q=a((wE,Yi)=>{"use strict";var ch=Pe(),fh=Ze();function lh(e){return e!=null&&fh(e.length)&&!ch(e)}Yi.exports=lh});var ee=a((vE,Zi)=>{"use strict";var ph=Ft(),dh=et(),yh=Q();function hh(e){return yh(e)?ph(e):dh(e)}Zi.exports=hh});var Qi=a((xE,Xi)=>{"use strict";var gh=_e(),mh=ee();function bh(e,t){return e&&gh(t,mh(t),e)}Xi.exports=bh});var ts=a((IE,es)=>{"use strict";function wh(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}es.exports=wh});var ns=a((AE,rs)=>{"use strict";var vh=Z(),xh=Ce(),Ih=ts(),Ah=Object.prototype,qh=Ah.hasOwnProperty;function Ph(e){if(!vh(e))return Ih(e);var t=xh(e),r=[];for(var n in e)n=="constructor"&&(t||!qh.call(e,n))||r.push(n);return r}rs.exports=Ph});var tt=a((qE,is)=>{"use strict";var Eh=Ft(),Oh=ns(),_h=Q();function Th(e){return _h(e)?Eh(e,!0):Oh(e)}is.exports=Th});var os=a((PE,ss)=>{"use strict";var Sh=_e(),jh=tt();function kh(e,t){return e&&Sh(t,jh(t),e)}ss.exports=kh});var ls=a((Me,me)=>{"use strict";var Rh=L(),fs=typeof Me=="object"&&Me&&!Me.nodeType&&Me,as=fs&&typeof me=="object"&&me&&!me.nodeType&&me,Ch=as&&as.exports===fs,us=Ch?Rh.Buffer:void 0,cs=us?us.allocUnsafe:void 0;function Mh(e,t){if(t)return e.slice();var r=e.length,n=cs?cs(r):new e.constructor(r);return e.copy(n),n}me.exports=Mh});var ds=a((EE,ps)=>{"use strict";function Nh(e,t){var r=-1,n=e.length;for(t||(t=Array(n));++r<n;)t[r]=e[r];return t}ps.exports=Nh});var Vt=a((OE,ys)=>{"use strict";function Dh(e,t){for(var r=-1,n=e==null?0:e.length,i=0,s=[];++r<n;){var o=e[r];t(o,r,e)&&(s[i++]=o)}return s}ys.exports=Dh});var Ut=a((_E,hs)=>{"use strict";function $h(){return[]}hs.exports=$h});var rt=a((TE,ms)=>{"use strict";var Fh=Vt(),Lh=Ut(),Vh=Object.prototype,Uh=Vh.propertyIsEnumerable,gs=Object.getOwnPropertySymbols,Bh=gs?function(e){return e==null?[]:(e=Object(e),Fh(gs(e),function(t){return Uh.call(e,t)}))}:Lh;ms.exports=Bh});var ws=a((SE,bs)=>{"use strict";var Gh=_e(),zh=rt();function Kh(e,t){return Gh(e,zh(e),t)}bs.exports=Kh});var nt=a((jE,vs)=>{"use strict";function Jh(e,t){for(var r=-1,n=t.length,i=e.length;++r<n;)e[i+r]=t[r];return e}vs.exports=Jh});var it=a((kE,xs)=>{"use strict";var Hh=Lt(),Wh=Hh(Object.getPrototypeOf,Object);xs.exports=Wh});var Bt=a((RE,Is)=>{"use strict";var Yh=nt(),Zh=it(),Xh=rt(),Qh=Ut(),eg=Object.getOwnPropertySymbols,tg=eg?function(e){for(var t=[];e;)Yh(t,Xh(e)),e=Zh(e);return t}:Qh;Is.exports=tg});var qs=a((CE,As)=>{"use strict";var rg=_e(),ng=Bt();function ig(e,t){return rg(e,ng(e),t)}As.exports=ig});var Gt=a((ME,Ps)=>{"use strict";var sg=nt(),og=R();function ag(e,t,r){var n=t(e);return og(e)?n:sg(n,r(e))}Ps.exports=ag});var zt=a((NE,Es)=>{"use strict";var ug=Gt(),cg=rt(),fg=ee();function lg(e){return ug(e,fg,cg)}Es.exports=lg});var _s=a((DE,Os)=>{"use strict";var pg=Gt(),dg=Bt(),yg=tt();function hg(e){return pg(e,yg,dg)}Os.exports=hg});var Ss=a(($E,Ts)=>{"use strict";var gg=X(),mg=L(),bg=gg(mg,"DataView");Ts.exports=bg});var ks=a((FE,js)=>{"use strict";var wg=X(),vg=L(),xg=wg(vg,"Promise");js.exports=xg});var Kt=a((LE,Rs)=>{"use strict";var Ig=X(),Ag=L(),qg=Ig(Ag,"Set");Rs.exports=qg});var Ms=a((VE,Cs)=>{"use strict";var Pg=X(),Eg=L(),Og=Pg(Eg,"WeakMap");Cs.exports=Og});var ae=a((UE,Us)=>{"use strict";var Jt=Ss(),Ht=Je(),Wt=ks(),Yt=Kt(),Zt=Ms(),Vs=se(),be=Rt(),Ns="[object Map]",_g="[object Object]",Ds="[object Promise]",$s="[object Set]",Fs="[object WeakMap]",Ls="[object DataView]",Tg=be(Jt),Sg=be(Ht),jg=be(Wt),kg=be(Yt),Rg=be(Zt),oe=Vs;(Jt&&oe(new Jt(new ArrayBuffer(1)))!=Ls||Ht&&oe(new Ht)!=Ns||Wt&&oe(Wt.resolve())!=Ds||Yt&&oe(new Yt)!=$s||Zt&&oe(new Zt)!=Fs)&&(oe=function(e){var t=Vs(e),r=t==_g?e.constructor:void 0,n=r?be(r):"";if(n)switch(n){case Tg:return Ls;case Sg:return Ns;case jg:return Ds;case kg:return $s;case Rg:return Fs}return t});Us.exports=oe});var Gs=a((BE,Bs)=>{"use strict";var Cg=Object.prototype,Mg=Cg.hasOwnProperty;function Ng(e){var t=e.length,r=new e.constructor(t);return t&&typeof e[0]=="string"&&Mg.call(e,"index")&&(r.index=e.index,r.input=e.input),r}Bs.exports=Ng});var Xt=a((GE,zs)=>{"use strict";var Dg=L(),$g=Dg.Uint8Array;zs.exports=$g});var st=a((zE,Js)=>{"use strict";var Ks=Xt();function Fg(e){var t=new e.constructor(e.byteLength);return new Ks(t).set(new Ks(e)),t}Js.exports=Fg});var Ws=a((KE,Hs)=>{"use strict";var Lg=st();function Vg(e,t){var r=t?Lg(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.byteLength)}Hs.exports=Vg});var Zs=a((JE,Ys)=>{"use strict";var Ug=/\w*$/;function Bg(e){var t=new e.constructor(e.source,Ug.exec(e));return t.lastIndex=e.lastIndex,t}Ys.exports=Bg});var ro=a((HE,to)=>{"use strict";var Xs=ie(),Qs=Xs?Xs.prototype:void 0,eo=Qs?Qs.valueOf:void 0;function Gg(e){return eo?Object(eo.call(e)):{}}to.exports=Gg});var io=a((WE,no)=>{"use strict";var zg=st();function Kg(e,t){var r=t?zg(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}no.exports=Kg});var oo=a((YE,so)=>{"use strict";var Jg=st(),Hg=Ws(),Wg=Zs(),Yg=ro(),Zg=io(),Xg="[object Boolean]",Qg="[object Date]",em="[object Map]",tm="[object Number]",rm="[object RegExp]",nm="[object Set]",im="[object String]",sm="[object Symbol]",om="[object ArrayBuffer]",am="[object DataView]",um="[object Float32Array]",cm="[object Float64Array]",fm="[object Int8Array]",lm="[object Int16Array]",pm="[object Int32Array]",dm="[object Uint8Array]",ym="[object Uint8ClampedArray]",hm="[object Uint16Array]",gm="[object Uint32Array]";function mm(e,t,r){var n=e.constructor;switch(t){case om:return Jg(e);case Xg:case Qg:return new n(+e);case am:return Hg(e,r);case um:case cm:case fm:case lm:case pm:case dm:case ym:case hm:case gm:return Zg(e,r);case em:return new n;case tm:case im:return new n(e);case rm:return Wg(e);case nm:return new n;case sm:return Yg(e)}}so.exports=mm});var Qt=a((ZE,uo)=>{"use strict";var bm=Z(),ao=Object.create,wm=(function(){function e(){}return function(t){if(!bm(t))return{};if(ao)return ao(t);e.prototype=t;var r=new e;return e.prototype=void 0,r}})();uo.exports=wm});var fo=a((XE,co)=>{"use strict";var vm=Qt(),xm=it(),Im=Ce();function Am(e){return typeof e.constructor=="function"&&!Im(e)?vm(xm(e)):{}}co.exports=Am});var po=a((QE,lo)=>{"use strict";var qm=ae(),Pm=G(),Em="[object Map]";function Om(e){return Pm(e)&&qm(e)==Em}lo.exports=Om});var mo=a((eO,go)=>{"use strict";var _m=po(),Tm=Xe(),yo=Qe(),ho=yo&&yo.isMap,Sm=ho?Tm(ho):_m;go.exports=Sm});var wo=a((tO,bo)=>{"use strict";var jm=ae(),km=G(),Rm="[object Set]";function Cm(e){return km(e)&&jm(e)==Rm}bo.exports=Cm});var Ao=a((rO,Io)=>{"use strict";var Mm=wo(),Nm=Xe(),vo=Qe(),xo=vo&&vo.isSet,Dm=xo?Nm(xo):Mm;Io.exports=Dm});var _o=a((nO,Oo)=>{"use strict";var $m=We(),Fm=Ye(),Lm=Nt(),Vm=Qi(),Um=os(),Bm=ls(),Gm=ds(),zm=ws(),Km=qs(),Jm=zt(),Hm=_s(),Wm=ae(),Ym=Gs(),Zm=oo(),Xm=fo(),Qm=R(),eb=he(),tb=mo(),rb=Z(),nb=Ao(),ib=ee(),sb=tt(),ob=1,ab=2,ub=4,qo="[object Arguments]",cb="[object Array]",fb="[object Boolean]",lb="[object Date]",pb="[object Error]",Po="[object Function]",db="[object GeneratorFunction]",yb="[object Map]",hb="[object Number]",Eo="[object Object]",gb="[object RegExp]",mb="[object Set]",bb="[object String]",wb="[object Symbol]",vb="[object WeakMap]",xb="[object ArrayBuffer]",Ib="[object DataView]",Ab="[object Float32Array]",qb="[object Float64Array]",Pb="[object Int8Array]",Eb="[object Int16Array]",Ob="[object Int32Array]",_b="[object Uint8Array]",Tb="[object Uint8ClampedArray]",Sb="[object Uint16Array]",jb="[object Uint32Array]",S={};S[qo]=S[cb]=S[xb]=S[Ib]=S[fb]=S[lb]=S[Ab]=S[qb]=S[Pb]=S[Eb]=S[Ob]=S[yb]=S[hb]=S[Eo]=S[gb]=S[mb]=S[bb]=S[wb]=S[_b]=S[Tb]=S[Sb]=S[jb]=!0;S[pb]=S[Po]=S[vb]=!1;function ot(e,t,r,n,i,s){var o,u=t&ob,f=t&ab,l=t&ub;if(r&&(o=i?r(e,n,i,s):r(e)),o!==void 0)return o;if(!rb(e))return e;var p=Qm(e);if(p){if(o=Ym(e),!u)return Gm(e,o)}else{var b=Wm(e),c=b==Po||b==db;if(eb(e))return Bm(e,u);if(b==Eo||b==qo||c&&!i){if(o=f||c?{}:Xm(e),!u)return f?Km(e,Um(o,e)):zm(e,Vm(o,e))}else{if(!S[b])return i?e:{};o=Zm(e,b,u)}}s||(s=new $m);var w=s.get(e);if(w)return w;s.set(e,o),nb(e)?e.forEach(function(y){o.add(ot(y,t,r,y,e,s))}):tb(e)&&e.forEach(function(y,d){o.set(d,ot(y,t,r,d,e,s))});var h=l?f?Hm:Jm:f?sb:ib,m=p?void 0:h(e);return Fm(m||e,function(y,d){m&&(d=y,y=e[d]),Lm(o,d,ot(y,t,r,d,e,s))}),o}Oo.exports=ot});var So=a((iO,To)=>{"use strict";var kb=_o(),Rb=4;function Cb(e){return kb(e,Rb)}To.exports=Cb});var er=a((sO,jo)=>{"use strict";function Mb(e){return function(){return e}}jo.exports=Mb});var Ro=a((oO,ko)=>{"use strict";function Nb(e){return function(t,r,n){for(var i=-1,s=Object(t),o=n(t),u=o.length;u--;){var f=o[e?u:++i];if(r(s[f],f,s)===!1)break}return t}}ko.exports=Nb});var Mo=a((aO,Co)=>{"use strict";var Db=Ro(),$b=Db();Co.exports=$b});var tr=a((uO,No)=>{"use strict";var Fb=Mo(),Lb=ee();function Vb(e,t){return e&&Fb(e,t,Lb)}No.exports=Vb});var $o=a((cO,Do)=>{"use strict";var Ub=Q();function Bb(e,t){return function(r,n){if(r==null)return r;if(!Ub(r))return e(r,n);for(var i=r.length,s=t?i:-1,o=Object(r);(t?s--:++s<i)&&n(o[s],s,o)!==!1;);return r}}Do.exports=Bb});var Ne=a((fO,Fo)=>{"use strict";var Gb=tr(),zb=$o(),Kb=zb(Gb);Fo.exports=Kb});var De=a((lO,Lo)=>{"use strict";function Jb(e){return e}Lo.exports=Jb});var Uo=a((pO,Vo)=>{"use strict";var Hb=De();function Wb(e){return typeof e=="function"?e:Hb}Vo.exports=Wb});var Go=a((dO,Bo)=>{"use strict";var Yb=Ye(),Zb=Ne(),Xb=Uo(),Qb=R();function ew(e,t){var r=Qb(e)?Yb:Zb;return r(e,Xb(t))}Bo.exports=ew});var Ko=a((yO,zo)=>{"use strict";zo.exports=Go()});var Ho=a((hO,Jo)=>{"use strict";var tw=Ne();function rw(e,t){var r=[];return tw(e,function(n,i,s){t(n,i,s)&&r.push(n)}),r}Jo.exports=rw});var Yo=a((gO,Wo)=>{"use strict";var nw="__lodash_hash_undefined__";function iw(e){return this.__data__.set(e,nw),this}Wo.exports=iw});var Xo=a((mO,Zo)=>{"use strict";function sw(e){return this.__data__.has(e)}Zo.exports=sw});var rr=a((bO,Qo)=>{"use strict";var ow=He(),aw=Yo(),uw=Xo();function at(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new ow;++t<r;)this.add(e[t])}at.prototype.add=at.prototype.push=aw;at.prototype.has=uw;Qo.exports=at});var ta=a((wO,ea)=>{"use strict";function cw(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}ea.exports=cw});var nr=a((vO,ra)=>{"use strict";function fw(e,t){return e.has(t)}ra.exports=fw});var ir=a((xO,na)=>{"use strict";var lw=rr(),pw=ta(),dw=nr(),yw=1,hw=2;function gw(e,t,r,n,i,s){var o=r&yw,u=e.length,f=t.length;if(u!=f&&!(o&&f>u))return!1;var l=s.get(e),p=s.get(t);if(l&&p)return l==t&&p==e;var b=-1,c=!0,w=r&hw?new lw:void 0;for(s.set(e,t),s.set(t,e);++b<u;){var h=e[b],m=t[b];if(n)var y=o?n(m,h,b,t,e,s):n(h,m,b,e,t,s);if(y!==void 0){if(y)continue;c=!1;break}if(w){if(!pw(t,function(d,v){if(!dw(w,v)&&(h===d||i(h,d,r,n,s)))return w.push(v)})){c=!1;break}}else if(!(h===m||i(h,m,r,n,s))){c=!1;break}}return s.delete(e),s.delete(t),c}na.exports=gw});var sa=a((IO,ia)=>{"use strict";function mw(e){var t=-1,r=Array(e.size);return e.forEach(function(n,i){r[++t]=[i,n]}),r}ia.exports=mw});var ut=a((AO,oa)=>{"use strict";function bw(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}oa.exports=bw});var la=a((qO,fa)=>{"use strict";var aa=ie(),ua=Xt(),ww=Ke(),vw=ir(),xw=sa(),Iw=ut(),Aw=1,qw=2,Pw="[object Boolean]",Ew="[object Date]",Ow="[object Error]",_w="[object Map]",Tw="[object Number]",Sw="[object RegExp]",jw="[object Set]",kw="[object String]",Rw="[object Symbol]",Cw="[object ArrayBuffer]",Mw="[object DataView]",ca=aa?aa.prototype:void 0,sr=ca?ca.valueOf:void 0;function Nw(e,t,r,n,i,s,o){switch(r){case Mw:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case Cw:return!(e.byteLength!=t.byteLength||!s(new ua(e),new ua(t)));case Pw:case Ew:case Tw:return ww(+e,+t);case Ow:return e.name==t.name&&e.message==t.message;case Sw:case kw:return e==t+"";case _w:var u=xw;case jw:var f=n&Aw;if(u||(u=Iw),e.size!=t.size&&!f)return!1;var l=o.get(e);if(l)return l==t;n|=qw,o.set(e,t);var p=vw(u(e),u(t),n,i,s,o);return o.delete(e),p;case Rw:if(sr)return sr.call(e)==sr.call(t)}return!1}fa.exports=Nw});var ya=a((PO,da)=>{"use strict";var pa=zt(),Dw=1,$w=Object.prototype,Fw=$w.hasOwnProperty;function Lw(e,t,r,n,i,s){var o=r&Dw,u=pa(e),f=u.length,l=pa(t),p=l.length;if(f!=p&&!o)return!1;for(var b=f;b--;){var c=u[b];if(!(o?c in t:Fw.call(t,c)))return!1}var w=s.get(e),h=s.get(t);if(w&&h)return w==t&&h==e;var m=!0;s.set(e,t),s.set(t,e);for(var y=o;++b<f;){c=u[b];var d=e[c],v=t[c];if(n)var x=o?n(v,d,c,t,e,s):n(d,v,c,e,t,s);if(!(x===void 0?d===v||i(d,v,r,n,s):x)){m=!1;break}y||(y=c=="constructor")}if(m&&!y){var _=e.constructor,T=t.constructor;_!=T&&"constructor"in e&&"constructor"in t&&!(typeof _=="function"&&_ instanceof _&&typeof T=="function"&&T instanceof T)&&(m=!1)}return s.delete(e),s.delete(t),m}da.exports=Lw});var Ia=a((EO,xa)=>{"use strict";var or=We(),Vw=ir(),Uw=la(),Bw=ya(),ha=ae(),ga=R(),ma=he(),Gw=Re(),zw=1,ba="[object Arguments]",wa="[object Array]",ct="[object Object]",Kw=Object.prototype,va=Kw.hasOwnProperty;function Jw(e,t,r,n,i,s){var o=ga(e),u=ga(t),f=o?wa:ha(e),l=u?wa:ha(t);f=f==ba?ct:f,l=l==ba?ct:l;var p=f==ct,b=l==ct,c=f==l;if(c&&ma(e)){if(!ma(t))return!1;o=!0,p=!1}if(c&&!p)return s||(s=new or),o||Gw(e)?Vw(e,t,r,n,i,s):Uw(e,t,f,r,n,i,s);if(!(r&zw)){var w=p&&va.call(e,"__wrapped__"),h=b&&va.call(t,"__wrapped__");if(w||h){var m=w?e.value():e,y=h?t.value():t;return s||(s=new or),i(m,y,r,n,s)}}return c?(s||(s=new or),Bw(e,t,r,n,i,s)):!1}xa.exports=Jw});var ar=a((OO,Pa)=>{"use strict";var Hw=Ia(),Aa=G();function qa(e,t,r,n,i){return e===t?!0:e==null||t==null||!Aa(e)&&!Aa(t)?e!==e&&t!==t:Hw(e,t,r,n,qa,i)}Pa.exports=qa});var Oa=a((_O,Ea)=>{"use strict";var Ww=We(),Yw=ar(),Zw=1,Xw=2;function Qw(e,t,r,n){var i=r.length,s=i,o=!n;if(e==null)return!s;for(e=Object(e);i--;){var u=r[i];if(o&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++i<s;){u=r[i];var f=u[0],l=e[f],p=u[1];if(o&&u[2]){if(l===void 0&&!(f in e))return!1}else{var b=new Ww;if(n)var c=n(l,p,f,e,t,b);if(!(c===void 0?Yw(p,l,Zw|Xw,n,b):c))return!1}}return!0}Ea.exports=Qw});var ur=a((TO,_a)=>{"use strict";var ev=Z();function tv(e){return e===e&&!ev(e)}_a.exports=tv});var Sa=a((SO,Ta)=>{"use strict";var rv=ur(),nv=ee();function iv(e){for(var t=nv(e),r=t.length;r--;){var n=t[r],i=e[n];t[r]=[n,i,rv(i)]}return t}Ta.exports=iv});var cr=a((jO,ja)=>{"use strict";function sv(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}ja.exports=sv});var Ra=a((kO,ka)=>{"use strict";var ov=Oa(),av=Sa(),uv=cr();function cv(e){var t=av(e);return t.length==1&&t[0][2]?uv(t[0][0],t[0][1]):function(r){return r===e||ov(r,e,t)}}ka.exports=cv});var ft=a((RO,Ca)=>{"use strict";var fv=se(),lv=G(),pv="[object Symbol]";function dv(e){return typeof e=="symbol"||lv(e)&&fv(e)==pv}Ca.exports=dv});var lt=a((CO,Ma)=>{"use strict";var yv=R(),hv=ft(),gv=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,mv=/^\w*$/;function bv(e,t){if(yv(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||hv(e)?!0:mv.test(e)||!gv.test(e)||t!=null&&e in Object(t)}Ma.exports=bv});var $a=a((MO,Da)=>{"use strict";var Na=He(),wv="Expected a function";function fr(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(wv);var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],s=r.cache;if(s.has(i))return s.get(i);var o=e.apply(this,n);return r.cache=s.set(i,o)||s,o};return r.cache=new(fr.Cache||Na),r}fr.Cache=Na;Da.exports=fr});var La=a((NO,Fa)=>{"use strict";var vv=$a(),xv=500;function Iv(e){var t=vv(e,function(n){return r.size===xv&&r.clear(),n}),r=t.cache;return t}Fa.exports=Iv});var Ua=a((DO,Va)=>{"use strict";var Av=La(),qv=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Pv=/\\(\\)?/g,Ev=Av(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(qv,function(r,n,i,s){t.push(i?s.replace(Pv,"$1"):n||r)}),t});Va.exports=Ev});var pt=a(($O,Ba)=>{"use strict";function Ov(e,t){for(var r=-1,n=e==null?0:e.length,i=Array(n);++r<n;)i[r]=t(e[r],r,e);return i}Ba.exports=Ov});var Wa=a((FO,Ha)=>{"use strict";var Ga=ie(),_v=pt(),Tv=R(),Sv=ft(),jv=1/0,za=Ga?Ga.prototype:void 0,Ka=za?za.toString:void 0;function Ja(e){if(typeof e=="string")return e;if(Tv(e))return _v(e,Ja)+"";if(Sv(e))return Ka?Ka.call(e):"";var t=e+"";return t=="0"&&1/e==-jv?"-0":t}Ha.exports=Ja});var Za=a((LO,Ya)=>{"use strict";var kv=Wa();function Rv(e){return e==null?"":kv(e)}Ya.exports=Rv});var lr=a((VO,Xa)=>{"use strict";var Cv=R(),Mv=lt(),Nv=Ua(),Dv=Za();function $v(e,t){return Cv(e)?e:Mv(e,t)?[e]:Nv(Dv(e))}Xa.exports=$v});var $e=a((UO,Qa)=>{"use strict";var Fv=ft(),Lv=1/0;function Vv(e){if(typeof e=="string"||Fv(e))return e;var t=e+"";return t=="0"&&1/e==-Lv?"-0":t}Qa.exports=Vv});var pr=a((BO,eu)=>{"use strict";var Uv=lr(),Bv=$e();function Gv(e,t){t=Uv(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[Bv(t[r++])];return r&&r==n?e:void 0}eu.exports=Gv});var ru=a((GO,tu)=>{"use strict";var zv=pr();function Kv(e,t,r){var n=e==null?void 0:zv(e,t);return n===void 0?r:n}tu.exports=Kv});var iu=a((zO,nu)=>{"use strict";function Jv(e,t){return e!=null&&t in Object(e)}nu.exports=Jv});var dr=a((KO,su)=>{"use strict";var Hv=lr(),Wv=Te(),Yv=R(),Zv=Dt(),Xv=Ze(),Qv=$e();function ex(e,t,r){t=Hv(t,e);for(var n=-1,i=t.length,s=!1;++n<i;){var o=Qv(t[n]);if(!(s=e!=null&&r(e,o)))break;e=e[o]}return s||++n!=i?s:(i=e==null?0:e.length,!!i&&Xv(i)&&Zv(o,i)&&(Yv(e)||Wv(e)))}su.exports=ex});var au=a((JO,ou)=>{"use strict";var tx=iu(),rx=dr();function nx(e,t){return e!=null&&rx(e,t,tx)}ou.exports=nx});var cu=a((HO,uu)=>{"use strict";var ix=ar(),sx=ru(),ox=au(),ax=lt(),ux=ur(),cx=cr(),fx=$e(),lx=1,px=2;function dx(e,t){return ax(e)&&ux(t)?cx(fx(e),t):function(r){var n=sx(r,e);return n===void 0&&n===t?ox(r,e):ix(t,n,lx|px)}}uu.exports=dx});var yr=a((WO,fu)=>{"use strict";function yx(e){return function(t){return t?.[e]}}fu.exports=yx});var pu=a((YO,lu)=>{"use strict";var hx=pr();function gx(e){return function(t){return hx(t,e)}}lu.exports=gx});var yu=a((ZO,du)=>{"use strict";var mx=yr(),bx=pu(),wx=lt(),vx=$e();function xx(e){return wx(e)?mx(vx(e)):bx(e)}du.exports=xx});var Fe=a((XO,hu)=>{"use strict";var Ix=Ra(),Ax=cu(),qx=De(),Px=R(),Ex=yu();function Ox(e){return typeof e=="function"?e:e==null?qx:typeof e=="object"?Px(e)?Ax(e[0],e[1]):Ix(e):Ex(e)}hu.exports=Ox});var mu=a((QO,gu)=>{"use strict";var _x=Vt(),Tx=Ho(),Sx=Fe(),jx=R();function kx(e,t){var r=jx(e)?_x:Tx;return r(e,Sx(t,3))}gu.exports=kx});var wu=a((e_,bu)=>{"use strict";var Rx=Object.prototype,Cx=Rx.hasOwnProperty;function Mx(e,t){return e!=null&&Cx.call(e,t)}bu.exports=Mx});var xu=a((t_,vu)=>{"use strict";var Nx=wu(),Dx=dr();function $x(e,t){return e!=null&&Dx(e,t,Nx)}vu.exports=$x});var Au=a((r_,Iu)=>{"use strict";var Fx=et(),Lx=ae(),Vx=Te(),Ux=R(),Bx=Q(),Gx=he(),zx=Ce(),Kx=Re(),Jx="[object Map]",Hx="[object Set]",Wx=Object.prototype,Yx=Wx.hasOwnProperty;function Zx(e){if(e==null)return!0;if(Bx(e)&&(Ux(e)||typeof e=="string"||typeof e.splice=="function"||Gx(e)||Kx(e)||Vx(e)))return!e.length;var t=Lx(e);if(t==Jx||t==Hx)return!e.size;if(zx(e))return!Fx(e).length;for(var r in e)if(Yx.call(e,r))return!1;return!0}Iu.exports=Zx});var Pu=a((n_,qu)=>{"use strict";function Xx(e){return e===void 0}qu.exports=Xx});var Ou=a((i_,Eu)=>{"use strict";var Qx=Ne(),eI=Q();function tI(e,t){var r=-1,n=eI(e)?Array(e.length):[];return Qx(e,function(i,s,o){n[++r]=t(i,s,o)}),n}Eu.exports=tI});var Tu=a((s_,_u)=>{"use strict";var rI=pt(),nI=Fe(),iI=Ou(),sI=R();function oI(e,t){var r=sI(e)?rI:iI;return r(e,nI(t,3))}_u.exports=oI});var ju=a((o_,Su)=>{"use strict";function aI(e,t,r,n){var i=-1,s=e==null?0:e.length;for(n&&s&&(r=e[++i]);++i<s;)r=t(r,e[i],i,e);return r}Su.exports=aI});var Ru=a((a_,ku)=>{"use strict";function uI(e,t,r,n,i){return i(e,function(s,o,u){r=n?(n=!1,s):t(r,s,o,u)}),r}ku.exports=uI});var Mu=a((u_,Cu)=>{"use strict";var cI=ju(),fI=Ne(),lI=Fe(),pI=Ru(),dI=R();function yI(e,t,r){var n=dI(e)?cI:pI,i=arguments.length<3;return n(e,lI(t,4),r,i,fI)}Cu.exports=yI});var Du=a((c_,Nu)=>{"use strict";var hI=se(),gI=R(),mI=G(),bI="[object String]";function wI(e){return typeof e=="string"||!gI(e)&&mI(e)&&hI(e)==bI}Nu.exports=wI});var Fu=a((f_,$u)=>{"use strict";var vI=yr(),xI=vI("length");$u.exports=xI});var Vu=a((l_,Lu)=>{"use strict";var II="\\ud800-\\udfff",AI="\\u0300-\\u036f",qI="\\ufe20-\\ufe2f",PI="\\u20d0-\\u20ff",EI=AI+qI+PI,OI="\\ufe0e\\ufe0f",_I="\\u200d",TI=RegExp("["+_I+II+EI+OI+"]");function SI(e){return TI.test(e)}Lu.exports=SI});var Yu=a((p_,Wu)=>{"use strict";var Bu="\\ud800-\\udfff",jI="\\u0300-\\u036f",kI="\\ufe20-\\ufe2f",RI="\\u20d0-\\u20ff",CI=jI+kI+RI,MI="\\ufe0e\\ufe0f",NI="["+Bu+"]",hr="["+CI+"]",gr="\\ud83c[\\udffb-\\udfff]",DI="(?:"+hr+"|"+gr+")",Gu="[^"+Bu+"]",zu="(?:\\ud83c[\\udde6-\\uddff]){2}",Ku="[\\ud800-\\udbff][\\udc00-\\udfff]",$I="\\u200d",Ju=DI+"?",Hu="["+MI+"]?",FI="(?:"+$I+"(?:"+[Gu,zu,Ku].join("|")+")"+Hu+Ju+")*",LI=Hu+Ju+FI,VI="(?:"+[Gu+hr+"?",hr,zu,Ku,NI].join("|")+")",Uu=RegExp(gr+"(?="+gr+")|"+VI+LI,"g");function UI(e){for(var t=Uu.lastIndex=0;Uu.test(e);)++t;return t}Wu.exports=UI});var Xu=a((d_,Zu)=>{"use strict";var BI=Fu(),GI=Vu(),zI=Yu();function KI(e){return GI(e)?zI(e):BI(e)}Zu.exports=KI});var ec=a((y_,Qu)=>{"use strict";var JI=et(),HI=ae(),WI=Q(),YI=Du(),ZI=Xu(),XI="[object Map]",QI="[object Set]";function eA(e){if(e==null)return 0;if(WI(e))return YI(e)?ZI(e):e.length;var t=HI(e);return t==XI||t==QI?e.size:JI(e).length}Qu.exports=eA});var rc=a((h_,tc)=>{"use strict";var tA=Ye(),rA=Qt(),nA=tr(),iA=Fe(),sA=it(),oA=R(),aA=he(),uA=Pe(),cA=Z(),fA=Re();function lA(e,t,r){var n=oA(e),i=n||aA(e)||fA(e);if(t=iA(t,4),r==null){var s=e&&e.constructor;i?r=n?new s:[]:cA(e)?r=uA(s)?rA(sA(e)):{}:r={}}return(i?tA:nA)(e,function(o,u,f){return t(r,o,u,f)}),r}tc.exports=lA});var oc=a((g_,sc)=>{"use strict";var nc=ie(),pA=Te(),dA=R(),ic=nc?nc.isConcatSpreadable:void 0;function yA(e){return dA(e)||pA(e)||!!(ic&&e&&e[ic])}sc.exports=yA});var cc=a((m_,uc)=>{"use strict";var hA=nt(),gA=oc();function ac(e,t,r,n,i){var s=-1,o=e.length;for(r||(r=gA),i||(i=[]);++s<o;){var u=e[s];t>0&&r(u)?t>1?ac(u,t-1,r,n,i):hA(i,u):n||(i[i.length]=u)}return i}uc.exports=ac});var lc=a((b_,fc)=>{"use strict";function mA(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}fc.exports=mA});var yc=a((w_,dc)=>{"use strict";var bA=lc(),pc=Math.max;function wA(e,t,r){return t=pc(t===void 0?e.length-1:t,0),function(){for(var n=arguments,i=-1,s=pc(n.length-t,0),o=Array(s);++i<s;)o[i]=n[t+i];i=-1;for(var u=Array(t+1);++i<t;)u[i]=n[i];return u[t]=r(o),bA(e,this,u)}}dc.exports=wA});var mc=a((v_,gc)=>{"use strict";var vA=er(),hc=Ct(),xA=De(),IA=hc?function(e,t){return hc(e,"toString",{configurable:!0,enumerable:!1,value:vA(t),writable:!0})}:xA;gc.exports=IA});var wc=a((x_,bc)=>{"use strict";var AA=800,qA=16,PA=Date.now;function EA(e){var t=0,r=0;return function(){var n=PA(),i=qA-(n-r);if(r=n,i>0){if(++t>=AA)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}bc.exports=EA});var xc=a((I_,vc)=>{"use strict";var OA=mc(),_A=wc(),TA=_A(OA);vc.exports=TA});var Ac=a((A_,Ic)=>{"use strict";var SA=De(),jA=yc(),kA=xc();function RA(e,t){return kA(jA(e,t,SA),e+"")}Ic.exports=RA});var Pc=a((q_,qc)=>{"use strict";function CA(e,t,r,n){for(var i=e.length,s=r+(n?1:-1);n?s--:++s<i;)if(t(e[s],s,e))return s;return-1}qc.exports=CA});var Oc=a((P_,Ec)=>{"use strict";function MA(e){return e!==e}Ec.exports=MA});var Tc=a((E_,_c)=>{"use strict";function NA(e,t,r){for(var n=r-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1}_c.exports=NA});var jc=a((O_,Sc)=>{"use strict";var DA=Pc(),$A=Oc(),FA=Tc();function LA(e,t,r){return t===t?FA(e,t,r):DA(e,$A,r)}Sc.exports=LA});var Rc=a((__,kc)=>{"use strict";var VA=jc();function UA(e,t){var r=e==null?0:e.length;return!!r&&VA(e,t,0)>-1}kc.exports=UA});var Mc=a((T_,Cc)=>{"use strict";function BA(e,t,r){for(var n=-1,i=e==null?0:e.length;++n<i;)if(r(t,e[n]))return!0;return!1}Cc.exports=BA});var Dc=a((S_,Nc)=>{"use strict";function GA(){}Nc.exports=GA});var Fc=a((j_,$c)=>{"use strict";var mr=Kt(),zA=Dc(),KA=ut(),JA=1/0,HA=mr&&1/KA(new mr([,-0]))[1]==JA?function(e){return new mr(e)}:zA;$c.exports=HA});var Vc=a((k_,Lc)=>{"use strict";var WA=rr(),YA=Rc(),ZA=Mc(),XA=nr(),QA=Fc(),eq=ut(),tq=200;function rq(e,t,r){var n=-1,i=YA,s=e.length,o=!0,u=[],f=u;if(r)o=!1,i=ZA;else if(s>=tq){var l=t?null:QA(e);if(l)return eq(l);o=!1,i=XA,f=new WA}else f=t?[]:u;e:for(;++n<s;){var p=e[n],b=t?t(p):p;if(p=r||p!==0?p:0,o&&b===b){for(var c=f.length;c--;)if(f[c]===b)continue e;t&&f.push(b),u.push(p)}else i(f,b,r)||(f!==u&&f.push(b),u.push(p))}return u}Lc.exports=rq});var Bc=a((R_,Uc)=>{"use strict";var nq=Q(),iq=G();function sq(e){return iq(e)&&nq(e)}Uc.exports=sq});var zc=a((C_,Gc)=>{"use strict";var oq=cc(),aq=Ac(),uq=Vc(),cq=Bc(),fq=aq(function(e){return uq(oq(e,1,cq,!0))});Gc.exports=fq});var Jc=a((M_,Kc)=>{"use strict";var lq=pt();function pq(e,t){return lq(t,function(r){return e[r]})}Kc.exports=pq});var Wc=a((N_,Hc)=>{"use strict";var dq=Jc(),yq=ee();function hq(e){return e==null?[]:dq(e,yq(e))}Hc.exports=hq});var N=a((D_,Yc)=>{"use strict";var dt;if(typeof Vr=="function")try{dt={clone:So(),constant:er(),each:Ko(),filter:mu(),has:xu(),isArray:R(),isEmpty:Au(),isFunction:Pe(),isUndefined:Pu(),keys:ee(),map:Tu(),reduce:Mu(),size:ec(),transform:rc(),union:zc(),values:Wc()}}catch{}dt||(dt=window._);Yc.exports=dt});var yt=a((F_,ef)=>{"use strict";var q=N();ef.exports=O;var gq="\0",ue="\0",Zc="";function O(e){this._isDirected=q.has(e,"directed")?e.directed:!0,this._isMultigraph=q.has(e,"multigraph")?e.multigraph:!1,this._isCompound=q.has(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=q.constant(void 0),this._defaultEdgeLabelFn=q.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[ue]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}O.prototype._nodeCount=0;O.prototype._edgeCount=0;O.prototype.isDirected=function(){return this._isDirected};O.prototype.isMultigraph=function(){return this._isMultigraph};O.prototype.isCompound=function(){return this._isCompound};O.prototype.setGraph=function(e){return this._label=e,this};O.prototype.graph=function(){return this._label};O.prototype.setDefaultNodeLabel=function(e){return q.isFunction(e)||(e=q.constant(e)),this._defaultNodeLabelFn=e,this};O.prototype.nodeCount=function(){return this._nodeCount};O.prototype.nodes=function(){return q.keys(this._nodes)};O.prototype.sources=function(){var e=this;return q.filter(this.nodes(),function(t){return q.isEmpty(e._in[t])})};O.prototype.sinks=function(){var e=this;return q.filter(this.nodes(),function(t){return q.isEmpty(e._out[t])})};O.prototype.setNodes=function(e,t){var r=arguments,n=this;return q.each(e,function(i){r.length>1?n.setNode(i,t):n.setNode(i)}),this};O.prototype.setNode=function(e,t){return q.has(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=ue,this._children[e]={},this._children[ue][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)};O.prototype.node=function(e){return this._nodes[e]};O.prototype.hasNode=function(e){return q.has(this._nodes,e)};O.prototype.removeNode=function(e){var t=this;if(q.has(this._nodes,e)){var r=function(n){t.removeEdge(t._edgeObjs[n])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],q.each(this.children(e),function(n){t.setParent(n)}),delete this._children[e]),q.each(q.keys(this._in[e]),r),delete this._in[e],delete this._preds[e],q.each(q.keys(this._out[e]),r),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this};O.prototype.setParent=function(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(q.isUndefined(t))t=ue;else{t+="";for(var r=t;!q.isUndefined(r);r=this.parent(r))if(r===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this};O.prototype._removeFromParentsChildList=function(e){delete this._children[this._parent[e]][e]};O.prototype.parent=function(e){if(this._isCompound){var t=this._parent[e];if(t!==ue)return t}};O.prototype.children=function(e){if(q.isUndefined(e)&&(e=ue),this._isCompound){var t=this._children[e];if(t)return q.keys(t)}else{if(e===ue)return this.nodes();if(this.hasNode(e))return[]}};O.prototype.predecessors=function(e){var t=this._preds[e];if(t)return q.keys(t)};O.prototype.successors=function(e){var t=this._sucs[e];if(t)return q.keys(t)};O.prototype.neighbors=function(e){var t=this.predecessors(e);if(t)return q.union(t,this.successors(e))};O.prototype.isLeaf=function(e){var t;return this.isDirected()?t=this.successors(e):t=this.neighbors(e),t.length===0};O.prototype.filterNodes=function(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var r=this;q.each(this._nodes,function(s,o){e(o)&&t.setNode(o,s)}),q.each(this._edgeObjs,function(s){t.hasNode(s.v)&&t.hasNode(s.w)&&t.setEdge(s,r.edge(s))});var n={};function i(s){var o=r.parent(s);return o===void 0||t.hasNode(o)?(n[s]=o,o):o in n?n[o]:i(o)}return this._isCompound&&q.each(t.nodes(),function(s){t.setParent(s,i(s))}),t};O.prototype.setDefaultEdgeLabel=function(e){return q.isFunction(e)||(e=q.constant(e)),this._defaultEdgeLabelFn=e,this};O.prototype.edgeCount=function(){return this._edgeCount};O.prototype.edges=function(){return q.values(this._edgeObjs)};O.prototype.setPath=function(e,t){var r=this,n=arguments;return q.reduce(e,function(i,s){return n.length>1?r.setEdge(i,s,t):r.setEdge(i,s),s}),this};O.prototype.setEdge=function(){var e,t,r,n,i=!1,s=arguments[0];typeof s=="object"&&s!==null&&"v"in s?(e=s.v,t=s.w,r=s.name,arguments.length===2&&(n=arguments[1],i=!0)):(e=s,t=arguments[1],r=arguments[3],arguments.length>2&&(n=arguments[2],i=!0)),e=""+e,t=""+t,q.isUndefined(r)||(r=""+r);var o=Le(this._isDirected,e,t,r);if(q.has(this._edgeLabels,o))return i&&(this._edgeLabels[o]=n),this;if(!q.isUndefined(r)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[o]=i?n:this._defaultEdgeLabelFn(e,t,r);var u=mq(this._isDirected,e,t,r);return e=u.v,t=u.w,Object.freeze(u),this._edgeObjs[o]=u,Xc(this._preds[t],e),Xc(this._sucs[e],t),this._in[t][o]=u,this._out[e][o]=u,this._edgeCount++,this};O.prototype.edge=function(e,t,r){var n=arguments.length===1?br(this._isDirected,arguments[0]):Le(this._isDirected,e,t,r);return this._edgeLabels[n]};O.prototype.hasEdge=function(e,t,r){var n=arguments.length===1?br(this._isDirected,arguments[0]):Le(this._isDirected,e,t,r);return q.has(this._edgeLabels,n)};O.prototype.removeEdge=function(e,t,r){var n=arguments.length===1?br(this._isDirected,arguments[0]):Le(this._isDirected,e,t,r),i=this._edgeObjs[n];return i&&(e=i.v,t=i.w,delete this._edgeLabels[n],delete this._edgeObjs[n],Qc(this._preds[t],e),Qc(this._sucs[e],t),delete this._in[t][n],delete this._out[e][n],this._edgeCount--),this};O.prototype.inEdges=function(e,t){var r=this._in[e];if(r){var n=q.values(r);return t?q.filter(n,function(i){return i.v===t}):n}};O.prototype.outEdges=function(e,t){var r=this._out[e];if(r){var n=q.values(r);return t?q.filter(n,function(i){return i.w===t}):n}};O.prototype.nodeEdges=function(e,t){var r=this.inEdges(e,t);if(r)return r.concat(this.outEdges(e,t))};function Xc(e,t){e[t]?e[t]++:e[t]=1}function Qc(e,t){--e[t]||delete e[t]}function Le(e,t,r,n){var i=""+t,s=""+r;if(!e&&i>s){var o=i;i=s,s=o}return i+Zc+s+Zc+(q.isUndefined(n)?gq:n)}function mq(e,t,r,n){var i=""+t,s=""+r;if(!e&&i>s){var o=i;i=s,s=o}var u={v:i,w:s};return n&&(u.name=n),u}function br(e,t){return Le(e,t.v,t.w,t.name)}});var rf=a((L_,tf)=>{"use strict";tf.exports="2.1.8"});var sf=a((V_,nf)=>{"use strict";nf.exports={Graph:yt(),version:rf()}});var af=a((U_,of)=>{"use strict";var z=N(),bq=yt();of.exports={write:wq,read:Iq};function wq(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:vq(e),edges:xq(e)};return z.isUndefined(e.graph())||(t.value=z.clone(e.graph())),t}function vq(e){return z.map(e.nodes(),function(t){var r=e.node(t),n=e.parent(t),i={v:t};return z.isUndefined(r)||(i.value=r),z.isUndefined(n)||(i.parent=n),i})}function xq(e){return z.map(e.edges(),function(t){var r=e.edge(t),n={v:t.v,w:t.w};return z.isUndefined(t.name)||(n.name=t.name),z.isUndefined(r)||(n.value=r),n})}function Iq(e){var t=new bq(e.options).setGraph(e.value);return z.each(e.nodes,function(r){t.setNode(r.v,r.value),r.parent&&t.setParent(r.v,r.parent)}),z.each(e.edges,function(r){t.setEdge({v:r.v,w:r.w,name:r.name},r.value)}),t}});var cf=a((B_,uf)=>{"use strict";var ht=N();uf.exports=Aq;function Aq(e){var t={},r=[],n;function i(s){ht.has(t,s)||(t[s]=!0,n.push(s),ht.each(e.successors(s),i),ht.each(e.predecessors(s),i))}return ht.each(e.nodes(),function(s){n=[],i(s),n.length&&r.push(n)}),r}});var wr=a((G_,lf)=>{"use strict";var ff=N();lf.exports=$;function $(){this._arr=[],this._keyIndices={}}$.prototype.size=function(){return this._arr.length};$.prototype.keys=function(){return this._arr.map(function(e){return e.key})};$.prototype.has=function(e){return ff.has(this._keyIndices,e)};$.prototype.priority=function(e){var t=this._keyIndices[e];if(t!==void 0)return this._arr[t].priority};$.prototype.min=function(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key};$.prototype.add=function(e,t){var r=this._keyIndices;if(e=String(e),!ff.has(r,e)){var n=this._arr,i=n.length;return r[e]=i,n.push({key:e,priority:t}),this._decrease(i),!0}return!1};$.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key};$.prototype.decrease=function(e,t){var r=this._keyIndices[e];if(t>this._arr[r].priority)throw new Error("New priority is greater than current priority. Key: "+e+" Old: "+this._arr[r].priority+" New: "+t);this._arr[r].priority=t,this._decrease(r)};$.prototype._heapify=function(e){var t=this._arr,r=2*e,n=r+1,i=e;r<t.length&&(i=t[r].priority<t[i].priority?r:i,n<t.length&&(i=t[n].priority<t[i].priority?n:i),i!==e&&(this._swap(e,i),this._heapify(i)))};$.prototype._decrease=function(e){for(var t=this._arr,r=t[e].priority,n;e!==0&&(n=e>>1,!(t[n].priority<r));)this._swap(e,n),e=n};$.prototype._swap=function(e,t){var r=this._arr,n=this._keyIndices,i=r[e],s=r[t];r[e]=s,r[t]=i,n[s.key]=e,n[i.key]=t}});var vr=a((z_,pf)=>{"use strict";var qq=N(),Pq=wr();pf.exports=Oq;var Eq=qq.constant(1);function Oq(e,t,r,n){return _q(e,String(t),r||Eq,n||function(i){return e.outEdges(i)})}function _q(e,t,r,n){var i={},s=new Pq,o,u,f=function(l){var p=l.v!==o?l.v:l.w,b=i[p],c=r(l),w=u.distance+c;if(c<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+l+" Weight: "+c);w<b.distance&&(b.distance=w,b.predecessor=o,s.decrease(p,w))};for(e.nodes().forEach(function(l){var p=l===t?0:Number.POSITIVE_INFINITY;i[l]={distance:p},s.add(l,p)});s.size()>0&&(o=s.removeMin(),u=i[o],u.distance!==Number.POSITIVE_INFINITY);)n(o).forEach(f);return i}});var yf=a((K_,df)=>{"use strict";var Tq=vr(),Sq=N();df.exports=jq;function jq(e,t,r){return Sq.transform(e.nodes(),function(n,i){n[i]=Tq(e,i,t,r)},{})}});var xr=a((J_,gf)=>{"use strict";var hf=N();gf.exports=kq;function kq(e){var t=0,r=[],n={},i=[];function s(o){var u=n[o]={onStack:!0,lowlink:t,index:t++};if(r.push(o),e.successors(o).forEach(function(p){hf.has(n,p)?n[p].onStack&&(u.lowlink=Math.min(u.lowlink,n[p].index)):(s(p),u.lowlink=Math.min(u.lowlink,n[p].lowlink))}),u.lowlink===u.index){var f=[],l;do l=r.pop(),n[l].onStack=!1,f.push(l);while(o!==l);i.push(f)}}return e.nodes().forEach(function(o){hf.has(n,o)||s(o)}),i}});var bf=a((H_,mf)=>{"use strict";var Rq=N(),Cq=xr();mf.exports=Mq;function Mq(e){return Rq.filter(Cq(e),function(t){return t.length>1||t.length===1&&e.hasEdge(t[0],t[0])})}});var vf=a((W_,wf)=>{"use strict";var Nq=N();wf.exports=$q;var Dq=Nq.constant(1);function $q(e,t,r){return Fq(e,t||Dq,r||function(n){return e.outEdges(n)})}function Fq(e,t,r){var n={},i=e.nodes();return i.forEach(function(s){n[s]={},n[s][s]={distance:0},i.forEach(function(o){s!==o&&(n[s][o]={distance:Number.POSITIVE_INFINITY})}),r(s).forEach(function(o){var u=o.v===s?o.w:o.v,f=t(o);n[s][u]={distance:f,predecessor:s}})}),i.forEach(function(s){var o=n[s];i.forEach(function(u){var f=n[u];i.forEach(function(l){var p=f[s],b=o[l],c=f[l],w=p.distance+b.distance;w<c.distance&&(c.distance=w,c.predecessor=b.predecessor)})})}),n}});var Ir=a((Y_,If)=>{"use strict";var Ve=N();If.exports=xf;xf.CycleException=gt;function xf(e){var t={},r={},n=[];function i(s){if(Ve.has(r,s))throw new gt;Ve.has(t,s)||(r[s]=!0,t[s]=!0,Ve.each(e.predecessors(s),i),delete r[s],n.push(s))}if(Ve.each(e.sinks(),i),Ve.size(t)!==e.nodeCount())throw new gt;return n}function gt(){}gt.prototype=new Error});var Pf=a((Z_,qf)=>{"use strict";var Af=Ir();qf.exports=Lq;function Lq(e){try{Af(e)}catch(t){if(t instanceof Af.CycleException)return!1;throw t}return!0}});var Ar=a((X_,Of)=>{"use strict";var mt=N();Of.exports=Vq;function Vq(e,t,r){mt.isArray(t)||(t=[t]);var n=(e.isDirected()?e.successors:e.neighbors).bind(e),i=[],s={};return mt.each(t,function(o){if(!e.hasNode(o))throw new Error("Graph does not have node: "+o);Ef(e,o,r==="post",s,n,i)}),i}function Ef(e,t,r,n,i,s){mt.has(n,t)||(n[t]=!0,r||s.push(t),mt.each(i(t),function(o){Ef(e,o,r,n,i,s)}),r&&s.push(t))}});var Tf=a((Q_,_f)=>{"use strict";var Uq=Ar();_f.exports=Bq;function Bq(e,t){return Uq(e,t,"post")}});var jf=a((eT,Sf)=>{"use strict";var Gq=Ar();Sf.exports=zq;function zq(e,t){return Gq(e,t,"pre")}});var Cf=a((tT,Rf)=>{"use strict";var kf=N(),Kq=yt(),Jq=wr();Rf.exports=Hq;function Hq(e,t){var r=new Kq,n={},i=new Jq,s;function o(f){var l=f.v===s?f.w:f.v,p=i.priority(l);if(p!==void 0){var b=t(f);b<p&&(n[l]=s,i.decrease(l,b))}}if(e.nodeCount()===0)return r;kf.each(e.nodes(),function(f){i.add(f,Number.POSITIVE_INFINITY),r.setNode(f)}),i.decrease(e.nodes()[0],0);for(var u=!1;i.size()>0;){if(s=i.removeMin(),kf.has(n,s))r.setEdge(s,n[s]);else{if(u)throw new Error("Input graph is not connected: "+e);u=!0}e.nodeEdges(s).forEach(o)}return r}});var Nf=a((rT,Mf)=>{"use strict";Mf.exports={components:cf(),dijkstra:vr(),dijkstraAll:yf(),findCycles:bf(),floydWarshall:vf(),isAcyclic:Pf(),postorder:Tf(),preorder:jf(),prim:Cf(),tarjan:xr(),topsort:Ir()}});var qr=a((nT,$f)=>{"use strict";var Df=sf();$f.exports={Graph:Df.Graph,json:af(),alg:Nf(),version:Df.version}});var rl=Ur(qr());var bt=class{constructor(){this.eventListeners=new Map}addEventListener(t,r){this.eventListeners.has(t)||this.eventListeners.set(t,new Set),this.eventListeners.get(t).add(r)}removeEventListener(t,r){this.eventListeners.get(t)?.delete(r)}emitEvent(t){let r=this.eventListeners.get(t.type);if(r)for(let n of r)try{n(t)}catch(i){console.error("Error in data instance event listener:",i)}}};function Ff(e,t,r){let n=e.atoms.length,i=Array.isArray(t?.types)?t.types:[],o=(t?.tuples?.length??0)>0&&i.length!==n;if(!o&&i.length===n)return{tuple:{...e,types:[...i]},relationTypes:[...i]};let u=Array.isArray(e.types)?e.types:[],f=e.atoms.map((l,p)=>r(l)??u[p]??"untyped");return{tuple:{...e,types:f},relationTypes:o?[]:f}}function te(e){if(!Object.prototype.hasOwnProperty.call(e,"$pyretValue"))return;let t=e.$pyretValue;if(t?.kind==="nothing"||t?.kind==="object"||t?.kind==="tuple"||t?.kind==="raw-array"||t?.kind==="table")return{kind:t.kind};if(t?.kind==="reference"&&typeof t.unrestricted=="boolean")return{kind:t.kind,unrestricted:t.unrestricted};if(t?.kind==="string-dict"&&typeof t.mutable=="boolean"&&typeof t.sealed=="boolean"&&(t.mutable||!t.sealed))return{kind:t.kind,mutable:t.mutable,sealed:t.sealed};throw new Error("Malformed reconstructed Pyret value")}function Pr(e){if(!e||typeof e!="object"||"dict"in e)return!1;let t=e;return Number.isInteger(t.state)&&"value"in t&&!!t.anns&&Array.isArray(t.anns.anns)&&typeof t.anns.check=="function"&&typeof t.anns.addAnn=="function"&&Object.keys(t).every(r=>r==="state"||r==="value"||r==="anns")}function Lf(e){if(Pr(e)){if(e.state!==2)throw new Error("Only initialized mutable Pyret references are supported");return{kind:"reference",unrestricted:e.anns.anns.every(t=>t.ann?.name==="Any")}}}function Vf(e){return!!e.dict&&typeof e.dict=="object"&&Object.keys(e.dict).length===0&&typeof e.brand=="function"&&typeof e.extendWith=="function"&&!("updateDict"in e)&&Object.keys(e).every(t=>t==="dict"||t==="brands")}function wt(e){return typeof e=="function"||e!==null&&typeof e=="object"&&("app"in e||"meth"in e&&"full_meth"in e)}function Uf(e,t){let r=[];for(let n in e)(t||!wt(e[n]))&&r.push(n);return r}var vt=e=>typeof e=="string"&&/^-?(0|[1-9][0-9]*)$/.test(e);function J(e,t=1n){if(t===0n)throw new Error("Invalid Pyret rational denominator");t<0n&&(e=-e,t=-t);let r=e<0n?-e:e,n=t;for(;n!==0n;){let i=r%n;r=n,n=i}return e/=r,t/=r,t===1n?{version:1,kind:"integer",value:e.toString()}:{version:1,kind:"rational",numerator:e.toString(),denominator:t.toString()}}function Bf(e){let t=e;if(t?.version===1){if(t.kind==="integer"&&vt(t.value))return J(BigInt(t.value));if(t.kind==="rational"&&vt(t.numerator)&&vt(t.denominator))return J(BigInt(t.numerator),BigInt(t.denominator));if(t.kind==="roughnum"&&typeof t.value=="string"&&/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:e[+-]?[0-9]+)?$/i.test(t.value)&&Number.isFinite(Number(t.value)))return{version:1,kind:"roughnum",value:t.value}}throw new Error("Malformed Pyret number")}function Gf(e){if(e.startsWith("~"))return Bf({version:1,kind:"roughnum",value:e.slice(1)});let t=/^(-?(?:0|[1-9][0-9]*))\/(-?(?:0|[1-9][0-9]*))$/.exec(e);if(t)return J(BigInt(t[1]),BigInt(t[2]));let r=/^(-?(?:0|[1-9][0-9]*))(?:\.([0-9]+))?(?:e([+-]?[0-9]+))?$/i.exec(e);if(!r)throw new Error("Malformed Pyret number label");let n=BigInt(r[3]??"0")-BigInt(r[2]?.length??0),i=BigInt(r[1]+(r[2]??""));return n>=0n?J(i*10n**n):J(i,10n**-n)}function Er(e){if(typeof e=="number"&&Number.isInteger(e))return BigInt(e).toString();if(typeof e=="bigint")return e.toString();if(!e||typeof e!="object")return;let t=e;if(typeof t.isInteger=="function"&&t.isInteger()&&typeof t.isExact=="function"&&t.isExact()){let r=t.toString();if(vt(r))return r}}function H(e){if(e&&typeof e=="object"){if("$pyretNumber"in e)return Bf(e.$pyretNumber);if("n"in e&&"d"in e){let n=Er(e.n),i=Er(e.d);if(n!==void 0&&i!==void 0)return J(BigInt(n),BigInt(i))}let r=e;if(typeof r.isRoughnum=="function"&&r.isRoughnum()){if(typeof r.n!="number"||!Number.isFinite(r.n))throw new Error("Invalid Pyret roughnum");return{version:1,kind:"roughnum",value:Object.is(r.n,-0)?"-0":String(r.n)}}}let t=Er(e);if(t!==void 0)return J(BigInt(t));if(typeof e=="number"){if(!Number.isFinite(e))throw new Error("Invalid Pyret number");let[r,n="0"]=String(e).split("e"),i=r.split(".")[1]?.length??0,s=Number(n)-i,o=BigInt(r.replace(".",""));return s>=0?J(o*10n**BigInt(s)):J(o,10n**BigInt(-s))}}function xt(e){switch(e.kind){case"integer":return e.value;case"rational":return`${e.numerator}/${e.denominator}`;case"roughnum":return`~${e.value}`}}function zf(e){if(e.kind==="integer"){let t=BigInt(e.value);if(t>=BigInt(Number.MIN_SAFE_INTEGER)&&t<=BigInt(Number.MAX_SAFE_INTEGER))return Number(t)}return{$pyretNumber:e}}var Or="pyret:field:v1:",_r="pyret:constructor:v1:";function Kf(e,t,r){return _r+JSON.stringify([e,t,r])}function V(e){if(!e.startsWith(_r))return;let t=JSON.parse(e.slice(_r.length));if(!Array.isArray(t)||t.length!==3||typeof t[0]!="string"||!t[0]||!Number.isSafeInteger(t[1])||t[1]<0||typeof t[2]!="string"||!t[2])throw new Error("Malformed Pyret constructor identity");return{scope:t[0],index:t[1],name:t[2]}}function U(e){return V(e)?.name??e}function W(e){let{$name:t,$arity:r}=e;if(typeof t!="string"||!Number.isInteger(r)||r<-1)return;let n=e.$constructor?.$fieldNames;if(r===-1)return{name:t,arity:r,fields:[]};if(!Array.isArray(n)||n.length!==r||n.some(o=>typeof o!="string")||new Set(n).size!==n.length)throw new Error(`Invalid Pyret constructor metadata for ${t}`);let i=e.$mut_fields_mask;if(i!==void 0&&(!Array.isArray(i)||i.length!==r||i.some(o=>typeof o!="boolean")))throw new Error(`Invalid Pyret mutable field mask for ${t}`);let s=i?.flatMap((o,u)=>o?[u]:[])??[];return{name:t,arity:r,fields:n,...s.length?{mutableFields:s}:{}}}function Jf(e,t){return Or+JSON.stringify([e.name,t,e.fields[t]])}function we(e){if(!e.startsWith(Or))return;let t=JSON.parse(e.slice(Or.length));if(!Array.isArray(t)||t.length!==3||typeof t[0]!="string"||!Number.isInteger(t[1])||t[1]<0||typeof t[2]!="string")throw new Error("Malformed Pyret field ID");return{name:t[0],position:t[1],field:t[2]}}var Wf=new Set(["Number","String","Boolean"]),Tr=new Set([...Wf,"Index","Nothing","Object","Tuple","RawArray","Reference","StringDict","MutableStringDict","Table"]);function Ue(e){if(e?.type!=="Index"||!/^(0|[1-9][0-9]*)$/.test(e.label)||!Number.isSafeInteger(Number(e.label)))throw new Error("Malformed Pyret position label");return Number(e.label)}function Hf(e,t,r){if(e.has(t)&&e.get(t)!==r||[...e].some(([n,i])=>n!==t&&i===r))throw new Error("Conflicting Pyret field positions");e.set(t,r)}function Be(e,t){let r=[];for(let n=0;n<e.size;n++){if(!e.has(n))throw new Error(`Incomplete Pyret ${t}: positions must be contiguous from zero`);r.push(e.get(n))}return r}function Wq(e){let t={fields:new Map,targets:new Set,constructors:new Map,objectPositions:new Map,elements:new Map,columns:new Map,rows:new Map,references:new Map,entries:new Map,mutableFields:new Map,sealed:new Set,unrestricted:new Set,nullary:new Set},r=new Map(e.getAtoms().map(n=>[n.id,n]));for(let n of e.getRelations()){let i=we(n.id);if(i){if(n.name!==i.field)throw new Error("Pyret field ID disagrees with its name");let s=t.constructors.get(i.name)??new Map;Hf(s,i.field,i.position),t.constructors.set(i.name,s)}for(let s of n.tuples){if(!s.atoms.length||s.atoms.some(m=>!r.has(m)))throw new Error("Malformed Pyret relation tuple");let[o,u,f,l]=s.atoms,p=r.get(o).type,b=s.atoms.length;for(let m of s.atoms.slice(1))t.targets.add(m);if(!i&&p!=="Object"){if(n.name==="sealed"&&p==="MutableStringDict"){if(b!==1)throw new Error("Malformed Pyret sealed fact");t.sealed.add(o);continue}if(n.name==="unrestricted"&&p==="Reference"){if(b!==1)throw new Error("Malformed Pyret unrestricted fact");t.unrestricted.add(o);continue}if(n.name==="nullary-constructor"&&!Tr.has(p)){if(b!==1)throw new Error("Malformed Pyret nullary constructor fact");t.nullary.add(o);continue}if(n.name==="mutable-field"&&!Tr.has(p)){if(b!==2)throw new Error("Malformed Pyret mutable field positions");let m=t.mutableFields.get(o)??new Set;m.add(Ue(r.get(u))),t.mutableFields.set(o,m);continue}}if(b<2)throw new Error("Malformed Pyret unary relation");if(p==="Table"){if(i)throw new Error("Pyret table relations must have opaque IDs");let m=Ue(r.get(u));if(n.name==="column"&&b===3&&r.get(f)?.type==="String"){let y=t.columns.get(o)??new Map;if(y.has(m)&&y.get(m)!==f)throw new Error("Conflicting Pyret table column positions");y.set(m,f),t.columns.set(o,y)}else if(n.name==="row"){let y=t.rows.get(o)??new Map,d=s.atoms.slice(2);if(y.has(m)&&JSON.stringify(y.get(m))!==JSON.stringify(d))throw new Error("Conflicting Pyret table row positions");if(d.some(v=>r.get(v)?.type==="Index"))throw new Error("Pyret table cells cannot be positions");y.set(m,d),t.rows.set(o,y)}else throw new Error("Malformed Pyret table relation");continue}if(p==="StringDict"||p==="MutableStringDict"){if(n.name!=="entry"||b!==4||r.get(f)?.type!=="String")throw new Error("Malformed Pyret dictionary entry");let m=Ue(r.get(u)),y=t.entries.get(o)??new Map,d=y.get(m);if(d&&(d.key!==f||d.value!==l))throw new Error("Conflicting Pyret dictionary entry positions");y.set(m,{key:f,value:l}),t.entries.set(o,y);continue}if(p==="Reference"){if(n.name!=="target"||b!==2)throw new Error("Malformed Pyret reference target");if(t.references.has(o)&&t.references.get(o)!==u)throw new Error("Conflicting Pyret reference targets");t.references.set(o,u);continue}if(p==="Tuple"||p==="RawArray"){if(n.name!=="element"||b!==3)throw new Error("Malformed Pyret indexed element");let m=Ue(r.get(u)),y=t.elements.get(o)??new Map;if(y.has(m)&&y.get(m)!==f)throw new Error("Conflicting Pyret element positions");y.set(m,f),t.elements.set(o,y);continue}if(Tr.has(p)&&p!=="Object")throw new Error("Pyret primitive cannot have fields");if(i&&(p!==i.name||b!==2))throw new Error("Pyret field ID disagrees with its source constructor");if(p==="Object"){if(b!==3||i)throw new Error("Pyret object field must have a position and one value");let m=t.objectPositions.get(o)??new Map;Hf(m,n.name,Ue(r.get(u))),t.objectPositions.set(o,m)}let c=t.fields.get(o)??new Map,w=i?.field??n.name,h=c.get(w)??[];for(let m of p==="Object"?[f]:s.atoms.slice(1))h.includes(m)||h.push(m);c.set(w,h),t.fields.set(o,c)}}return t}function Yq(e,t){switch(e.type){case"Nothing":return{kind:"nothing"};case"Object":return{kind:"object"};case"Tuple":return{kind:"tuple"};case"RawArray":return{kind:"raw-array"};case"Table":return{kind:"table"};case"Reference":return{kind:"reference",unrestricted:t.unrestricted.has(e.id)};case"StringDict":case"MutableStringDict":return{kind:"string-dict",mutable:e.type==="MutableStringDict",sealed:t.sealed.has(e.id)};default:return}}function Zq(e){switch(e.type){case"Number":return zf(Gf(e.label));case"Boolean":if(e.label!=="true"&&e.label!=="false")throw new Error("Malformed Pyret boolean label");return e.label==="true";default:return e.label}}function Sr(e,t){let r=/^\d+$/.test(e),n=/^\d+$/.test(t);return r&&n?parseInt(e,10)-parseInt(t,10):e.localeCompare(t)}function Xq(e,t){let n=re.getGlobalConstructorCache().get(e);if(n&&n.length){let i=n.filter(o=>t.includes(o)),s=t.filter(o=>!n.includes(o));return[...i,...s.sort(Sr)]}return[...t].sort(Sr)}function Qq(e){return e.length>0&&e.every(t=>/^\d+$/.test(t))}function jr(e,t,r={}){let n=It(e,t===void 0?void 0:[t],r);return n.length?n[0]:null}function It(e,t,r={}){let n=new Map(e.getAtoms().map(d=>[d.id,d])),i=Wq(e),{fields:s,targets:o,elements:u,references:f,entries:l}=i,p=new Map,b=0,c=new Set,w=new Map,h=d=>{if(w.has(d)){if(!r.allowContainerCycles&&p.get(d)===b&&c.size)throw new Error("Cyclic Pyret containers are not supported");return w.get(d)}let v=n.get(d);if(!v)throw new Error("Unknown Pyret atom ID: "+d);if(Wf.has(v.type)){let P=Zq(v);return w.set(d,P),P}let x=Yq(v,i);if(x?.kind==="nothing"){let P={$pyretValue:x};return w.set(d,P),P}if(p.set(d,b),x?.kind==="table"){let P=Be(i.columns.get(d)??new Map,"table columns").map(E=>n.get(E).label);if(new Set(P).size!==P.length)throw new Error("Duplicate Pyret table column name");let g=Be(i.rows.get(d)??new Map,"table rows");if(g.some(E=>E.length!==P.length))throw new Error("Pyret table row width must match its columns");let I=[],A={$pyretValue:x,dict:{"_header-raw-array":P,"_rows-raw-array":I}};w.set(d,A),c.add(d);for(let E of g)I.push(E.map(h));return c.delete(d),p.delete(d),A}if(x?.kind==="string-dict"){let P=l.get(d)??new Map,g=Be(P,"dictionary entries"),I={$pyretValue:x,entries:[]};w.set(d,I);let A=new Set;x.mutable&&b++;for(let E of g){let M=n.get(E.key).label;if(A.has(M))throw new Error("Duplicate Pyret dictionary key");A.add(M),I.entries.push([M,h(E.value)])}return x.mutable&&b--,p.delete(d),I}if(x?.kind==="reference"){let P=f.get(d);if(P===void 0)throw new Error("Incomplete Pyret reference target");let g={$pyretValue:x};return w.set(d,g),b++,g.value=h(P),b--,p.delete(d),g}if(x?.kind==="raw-array"||x?.kind==="tuple"){let P=u.get(d)??new Map,g=Be(P,"container elements"),I=[],A=x.kind==="raw-array"?I:{vals:I};w.set(d,A),c.add(d);for(let E of g)I.push(h(E));return c.delete(d),p.delete(d),A}let _=s.get(d)??new Map,T=Array.from(_.keys()),C=i.constructors.get(v.type),D=x?void 0:i.nullary.has(d)?0:C?.size??(T.length?void 0:-1),B=[...i.mutableFields.get(d)??[]];if(B.some(P=>D===void 0||P>=D))throw new Error("Malformed Pyret mutable field positions");if(!x&&D===void 0&&Qq(T)){let P=[];w.set(d,P);let g=T.slice().sort(Sr);for(let I of g){let A=_.get(I)??[];P.push(A.length===1?h(A[0]):A.map(E=>h(E)))}return p.delete(d),P}let F={dict:Object.create(null),...x?.kind==="object"?{$pyretValue:x}:{$name:v.type}};w.set(d,F);let K;if(x?.kind==="object"){let P=i.objectPositions.get(d)??new Map;K=Be(new Map([...P].map(([g,I])=>[I,g])),"object fields")}else if(D!==void 0){let P=C??new Map,g=Math.max(0,D);if(T.length!==g||P.size!==g||[...P].some(([I,A])=>A>=g||!_.has(I)))throw new Error("Incomplete Pyret constructor fields");K=[...P].sort((I,A)=>I[1]-A[1]).map(([I])=>I),F.$arity=D,F.$constructor={$fieldNames:K},B.length&&(F.$mut_fields_mask=K.map((I,A)=>B.includes(A)))}else K=Xq(v.type,T);for(let P of K){let g=_.get(P)??[];if((x?.kind==="object"||D!==void 0)&&g.length!==1)throw new Error("Pyret constructor field must have one value");g.length===1?F.dict[P]=h(g[0]):F.dict[P]=g.map(I=>h(I))}for(let P of B){let g=F.dict[K[P]];if(!g||typeof g!="object"||te(g)?.kind!=="reference")throw new Error("Pyret mutable field must contain a reference")}return p.delete(d),F};if(t!==void 0)return t.map(d=>{if(!n.has(d))throw new Error("Unknown Pyret root ID: "+d);return h(d)});let m=e.getAtoms().map(d=>d.id);if(!m.length)return[];let y=m.filter(d=>!o.has(d));if(y.length!==1)throw new Error("Pyret graph has no unique root; supply an explicit root ID");return[h(y[0])]}function ve(e,t,r){if(!e||typeof e!="object"||Array.isArray(e)||!("$name"in e)||U(String(e.$name))!==t)return!1;let n=W(e);return!!n&&!n.mutableFields?.length&&n.arity===(r.length||-1)&&n.fields.length===r.length&&n.fields.every((i,s)=>i===r[s])&&!!e.dict&&r.every(i=>Object.prototype.hasOwnProperty.call(e.dict,i))}function Ge(e){let t=ve(e,"list-set",["elems"])?"list-set":ve(e,"tree-set",["elems"])?"tree-set":void 0;if(!t)return;let r=e.dict.elems,n=[],i=new Set,s=()=>new Error(`Malformed Pyret ${t} backing structure`);if(t==="list-set"){let o=r;for(;!ve(o,"empty",[]);){if(!ve(o,"link",["first","rest"])||i.has(o))throw s();i.add(o),n.push(o.dict.first),o=o.dict.rest}}else{let o=[{node:r,phase:"enter"}];for(;o.length;){let{node:u,phase:f}=o.pop();if(!ve(u,"leaf",[])){if(!ve(u,"branch",["value","h","left","right"]))throw s();if(f==="exit")i.delete(u);else if(f==="emit")n.push(u.dict.value);else{if(i.has(u))throw s();i.add(u),o.push({node:u,phase:"exit"},{node:u.dict.right,phase:"enter"},{node:u,phase:"emit"},{node:u.dict.left,phase:"enter"})}}}}return{kind:t,elements:n}}function Yf(e,t){return e.kind==="tree-set"?`[tree-set: ${e.elements.map(t).join(", ")}]`:"[list-set: ]"+[...e.elements].reverse().map(r=>`.add(${t(r)})`).join("")}function At(e){return!!e.dict&&typeof e.dict=="object"&&"_header-raw-array"in e.dict&&"_rows-raw-array"in e.dict&&(!e.brands||Object.keys(e.brands).some(t=>t.includes("brandtable")))}function qt(e){return Array.isArray(e.$rowData)&&!!e.$underlyingTable}function ce(e){let t=e.dict?.["_header-raw-array"],r=e.dict?.["_rows-raw-array"];if(!Array.isArray(t)||!Array.isArray(r)||Array.from(t).some(n=>typeof n!="string")||new Set(t).size!==t.length||Array.from(r).some(n=>!Array.isArray(n)||n.length!==t.length))throw new Error("Malformed Pyret table: unique string headers and rectangular rows required");return{headers:t,rows:r}}function Zf(e,t,r){let{headers:n,rows:i}=ce(e);if(!n.length)return i.length?`for fold(spytial-table from empty-table([list: ]), spytial-row from range(0, ${i.length})):
2
+ spytial-table.add-row([raw-row: ])
3
+ end`:"empty-table([list: ])";let s;try{s=n.map(r)}catch{}return s?`table: ${s.join(", ")}${i.map(o=>`
4
+ row: `+o.map(t).join(", ")).join("")}
5
+ end`:`[table-from-columns: ${n.map((o,u)=>`{${t(o)}; [list: ${i.map(f=>t(f[u])).join(", ")}]}`).join(", ")}]`}function Xf(e,t,r){let n=te,i=g=>!!g&&typeof g=="object"&&!H(g)&&n(g)?.kind!=="nothing",s=g=>{if(Array.isArray(g))return g;let I=n(g);if(I?.kind==="reference")return[g.value];if(I?.kind==="string-dict")return g.entries.map(E=>E[1]);if(I?.kind==="table")return ce(g).rows.flat();if(Array.isArray(g.vals))return g.vals;let A=Ge(g);return A?A.elements:Object.keys(g.dict??{}).map(E=>g.dict[E])},o=new Set,u=new Set,f=new Map,l=!1,p=!1,b=[e];for(;b.length;){let g=b.pop();if(!i(g))continue;if(o.has(g)){l=!0;continue}if(o.add(g),!Array.isArray(g)&&n(g)?.kind==="reference"&&u.add(g),!Array.isArray(g)){let A=n(g);A?.kind==="string-dict"&&A.mutable&&f.set(g,A),A?.kind==="table"&&(p=!0)}let I=s(g);for(let A=I.length-1;A>=0;A--)b.push(I[A])}if(!u.size&&!((f.size||p)&&l))return;let c=new Map,w=new Map,h=new Set(["nothing"]);for(let g of o){if(Array.isArray(g))continue;typeof g.$name=="string"&&h.add(U(g.$name));let I=W(g),A=I?.mutableFields?.map(E=>I.fields[E])??[];w.set(g,A);for(let E of A){let M=g.dict[E];if(!u.has(M))throw new Error("Pyret mutable field must contain a reference");if(c.has(M))throw new Error("A Pyret reference shared by multiple mutable constructor fields cannot be reconstructed");c.set(M,{value:g,field:E})}}let m=0,y=g=>{let I;do I=g+m++;while(h.has(I));return h.add(I),I},d=new Map,v=new Set,x=[],_=new Map,T=g=>!i(g)||v.has(g),C=g=>{if(!i(g))return t(g,C);if(!v.has(g))throw new Error("Unresolved Pyret construction dependency");return d.get(g)};for(let g of o)u.has(g)||d.set(g,y("spytial-value"));if([...u].some(g=>!c.has(g)))throw new Error("Pyret reference source requires a reachable mutable constructor field for each reference");let D=new Map;for(let[g,I]of f){let A=d.get(g),E=I.sealed?y("spytial-dict"):A;x.push(`shadow ${E} = ${t({$pyretValue:{...I,sealed:!1},entries:[]},C)}`),I.sealed&&x.push(`shadow ${A} = ${E}.seal()`),v.add(g),D.set(g,E)}let B=new Map(D),F=()=>{for(let[g,I]of B)if(s(g).every(T)){for(let[A,E]of g.entries)x.push(`${I}.set-now(${C(A)}, ${C(E)})`);B.delete(g)}for(let[g,{owner:I,field:A}]of _)T(g.value)&&(x.push(`${I}!{${r(A)}: ${C(g.value)}}`),_.delete(g))},K=g=>{let I=new Set,A=[g];for(;A.length;){let E=A.pop();if(!(!i(E)||I.has(E))){if(!v.has(E)||B.has(E)||_.has(E))return!1;I.add(E),A.push(...s(E))}}return!0},P=[...o].filter(g=>!u.has(g)&&!f.has(g));for(;P.length;){F();let g=!1;for(let I=0;I<P.length;){let A=P[I],E=Array.isArray(A)?[]:w.get(A)??[],M=A;if(E.length){let Y=A,ne={...Y.dict};for(let $r of E){let ze=Y.dict[$r],Fr=n(ze);ne[$r]=T(ze.value)?ze.value:Fr?.kind==="reference"&&Fr.unrestricted?null:ze.value}M={...Y,dict:ne}}if(!s(M).every(T)){I++;continue}if(Ge(M)&&!s(M).every(K)){I++;continue}let St=d.get(A);x.push(`shadow ${St} = ${t(M,C)}`),v.add(A);for(let Y of E){let ne=A.dict[Y];d.set(ne,`${St}.${r(Y).trim()}`),v.add(ne),(!T(ne.value)||M.dict[Y]===null)&&_.set(ne,{owner:St,field:Y})}P.splice(I,1),g=!0}if(!g)throw new Error("Pyret graph cannot be constructed: cycles need allocatable mutable fields and set elements need complete contents")}return F(),x.push(C(e)),`block:
6
+ ${x.map(g=>" "+g).join(`
7
+ `)}
8
+ end`}function Pt(e){let t=n=>{let i=e.dict?.[n];return i&&typeof i.meth=="function"&&typeof i.full_meth=="function"},r=e.$underlyingMap;if(r&&t("keys-list")&&t("get-value")&&t("unfreeze")){if(!Number.isSafeInteger(r.size)||r.size<0||typeof r.keys!="function"||typeof r.get!="function")throw new Error("Malformed Pyret string dictionary backing map");return{kind:"string-dict",mutable:!1,sealed:!1}}if(e.$underlyingDict&&t("keys-list-now")&&t("get-value-now")&&t("freeze")){if(typeof e.$underlyingDict!="object"||e.$sealed!==void 0&&typeof e.$sealed!="boolean")throw new Error("Malformed Pyret mutable string dictionary backing map");return{kind:"string-dict",mutable:!0,sealed:e.$sealed===!0}}}function Et(e,t){let r;if("$pyretValue"in e)r=e.entries;else if(t.mutable)r=Object.entries(e.$underlyingDict);else{let n=e.$underlyingMap,i=n.keys();if(!Array.isArray(i)||i.some(s=>typeof s!="string"))throw new Error("Malformed Pyret dictionary keys");r=i.map(s=>[s,n.get(s)])}if(!Array.isArray(r)||r.some(n=>!Array.isArray(n)||n.length!==2||typeof n[0]!="string")||new Set(r.map(n=>n[0])).size!==r.length)throw new Error("Malformed Pyret dictionary entries");return r}function Qf(e,t,r){let n=e.mutable?"mutable-string-dict":"string-dict",i=[...t];if(!e.mutable&&i.length>8){let s=f=>{let l=0;for(let p=0;p<f.length;p++)l=31*l+f.charCodeAt(p)|0;return l>>>1&1073741824|l&3221225471},o=s(i[8][0]),u=i.findIndex(([f])=>s(f)===o);i.splice(8,0,i.splice(u,1)[0])}return`[${n}: ${i.flatMap(([s,o])=>[r(s),r(o)]).join(", ")}]`+(e.sealed?".seal()":"")}function eP(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&"dict"in e}function tP(e){return'"'+e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/[^\x20-\x7E]/g,t=>"\\u"+t.charCodeAt(0).toString(16).toUpperCase().padStart(4,"0"))+'"'}var rP=new Set(`and as ascending ask by cases check data descending do does-not-raise
9
+ else end examples extend extract false for from fun hiding if import include is is-not is-roughly
10
+ is-not-roughly because lam lazy let letrec load-table method module newtype of or provide provide-types
11
+ raises raises-other-than raises-satisfies raises-violates reactor rec ref sanitize satisfies select
12
+ shadow sieve spy order transform true type type-let using use var violates when`.split(/\s+/)),nP=new Set(`function break return do yield throw continue while class interface
13
+ type generator alias extends implements module package namespace public private protected static const
14
+ enum super export new try finally debug spy switch this match case with __proto__`.split(/\s+/)),iP=new Set(["block","doc","otherwise","row","sharing","source","table","then","where","with"]);function kr(e){if(rP.has(e)||nP.has(e)||!/^[A-Za-z_][A-Za-z0-9_]*(?:-+[A-Za-z0-9_]+)*$/.test(e))throw new Error(`Pyret object field has no literal spelling: ${JSON.stringify(e)}`);return iP.has(e)?e+" ":e}function Rr(e,t,r=n=>Rr(n,t)){if(e==null)return"nothing";if(typeof e=="number")return String(e);if(typeof e=="boolean")return e?"true":"false";if(typeof e=="string")return tP(e);let n=H(e);if(n)return xt(n);let i=te(e);if(i?.kind==="nothing")return"nothing";if(i?.kind==="table"){if(t.has(e))throw new Error("Cyclic Pyret table construction is not supported");t.add(e);let s=Zf(e,r,kr);return t.delete(e),s}if(i?.kind==="string-dict"){if(t.has(e))throw new Error("Cyclic immutable Pyret dictionary construction is not supported");t.add(e);let s=Qf(i,e.entries,r);return t.delete(e),s}if("vals"in e&&Array.isArray(e.vals)){if(t.has(e))throw new Error("Cyclic Pyret containers are not supported");if(!e.vals.length)throw new Error("Pyret has no empty tuple literal");t.add(e);let s=`{${e.vals.map(o=>r(o)).join("; ")}${e.vals.length===1?";":""}}`;return t.delete(e),s}if(Array.isArray(e)){if(t.has(e))return"<cyclic>";t.add(e);let s=`[raw-array: ${e.map(r).join(", ")}]`;return t.delete(e),s}if(eP(e)){if(t.has(e))return"<cyclic>";t.add(e);let s=Ge(e);if(s){let p=Yf(s,r);return t.delete(e),p}let o=U(e.$name||"object"),u=e.dict||{},f=Object.keys(u),l=i?.kind==="object"?`{${f.map(p=>`${kr(p)}: ${r(u[p])}`).join(", ")}}`:f.length||e.$arity===0?`${o}(${f.map(p=>r(u[p])).join(", ")})`:o;return t.delete(e),l}return String(e)}function xe(e,t){let r=new Map;for(let i of e.getAtoms()){let s=V(i.type);if(s){if(r.has(s.name)&&r.get(s.name)!==i.type)throw new Error(`Source reconstruction needs explicit bindings for same-named constructor ${s.name}`);r.set(s.name,i.type)}}let n=jr(e,t);return Xf(n,(i,s)=>Rr(i,new Set,s),kr)??Rr(n,new Set)}function Ot(e){return JSON.stringify(e.atoms)}function el(e){let t=new Set;return e.filter(r=>{let n=Ot(r);return t.has(n)?!1:(t.add(n),!0)}).map(r=>({...r,atoms:[...r.atoms],types:[...r.types]}))}function tl(e,t=[]){if(!e.length)return[...t];let r=e[0].atoms.length;return e.some(n=>n.atoms.length!==r)?[]:Array.from({length:r},(n,i)=>{let s=new Set(e.map(o=>o.types[i]??"univ"));return s.size===1?[...s][0]:"univ"})}function Cr(e,t){if(e.name!==t.name)throw new Error(`Conflicting names for relation ID ${JSON.stringify(e.id)}: ${JSON.stringify(e.name)} and ${JSON.stringify(t.name)}`)}function sP(e,t){let r=e.id,n=t.atoms;return`${r}:${n.join("->")}`}var k=class k extends bt{constructor(r,n={},i){super();this.atoms=new Map;this.relations=new Map;this.types=new Map;this.objectToAtomId=new WeakMap;this.atomCounter=0;this.valueRelations=new Map;this.indexAtoms=new Map;this.typeLabelCounters=new Map;this.originalObjects=new Map;this.externalEvaluator=null;this.options={stringsIdempotent:n.stringsIdempotent??!0,numbersIdempotent:n.numbersIdempotent??!0,booleansIdempotent:n.booleansIdempotent??!0,showFunctions:n.showFunctions??!1},this.externalEvaluator=i||null,this.initializeBuiltinTypes(),this.isAtomicValue(r)?this.createAtomFromPrimitive(r):r!=null&&this.parseObjectIteratively(r)}static fromValues(r){let n=new k,i=new WeakSet,s=r.map(o=>{if(n.isAtomicValue(o))return n.createAtomFromPrimitive(o);if(!Array.isArray(o)&&!n.isPyretObject(o))throw new Error("Unsupported normalized Pyret root");return n.parseObjectIteratively(o,i),n.objectToAtomId.get(o)});return{instance:n,rootIds:s}}setExternalEvaluator(r){this.externalEvaluator=r}getExternalEvaluator(){return this.externalEvaluator}getOptions(){return{...this.options}}cacheConstructorPattern(r,n){if(n.length===0)return;let i=k.globalConstructorCache.get(r),s=++k.instantiationCounter;(!i||s>i.instantiation)&&k.globalConstructorCache.set(r,{pattern:[...n],instantiation:s})}static getGlobalConstructorCache(){let r=new Map;for(let[n,i]of k.globalConstructorCache)r.set(n,[...i.pattern]);return r}static getGlobalConstructorCacheWithPriority(){return new Map(k.globalConstructorCache)}static clearGlobalConstructorCache(){k.globalConstructorCache.clear()}static async fromExpression(r,n={},i){let s=await k.evaluateExpression(r,i);if(!s.success)throw new Error(`Failed to evaluate Pyret expression: ${k.formatError(s.exn)}`);if(k.isPrimitive(s.result)){let o=new k(null,n,i),u=typeof s.result=="string"?"String":typeof s.result=="number"?"Number":"Boolean",f={id:`result_${s.result}`,label:String(s.result),type:u};return o.addAtom(f),o}return new k(s.result,n,i)}static async evaluateExpression(r,n){try{let i=await n.run(r),s=k.findKeyAtAnyLevel(i,"exn");if(s!==void 0)return{success:!1,exn:s};let o=k.findKeyAtAnyLevel(i,"answer");return o!==void 0?{success:!0,result:o}:k.isPrimitive(i)?{success:!0,result:i}:{success:!1,exn:"Unable to find answer or exn in evaluation result"}}catch(i){return{success:!1,exn:i instanceof Error?i.message:"Unknown evaluation error"}}}static findKeyAtAnyLevel(r,n){if(!(!r||typeof r!="object")){if(n in r)return r[n];for(let i of Object.values(r))if(i&&typeof i=="object"){let s=k.findKeyAtAnyLevel(i,n);if(s!==void 0)return s}}}static isPrimitive(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"}static formatError(r){if(!r)return"Unknown error";if(typeof r=="string")return r;if(typeof r=="object"&&r!==null){let n=r;if(n.message)return n.message;if(n.toString&&typeof n.toString=="function")return n.toString()}return String(r)}hasExternalEvaluator(){return this.externalEvaluator!==null}addAtom(r){this.atoms.set(r.id,r),this.ensureTypeExists(r.type);let n=this.types.get(r.type);n&&!n.atoms.some(i=>i.id===r.id)&&n.atoms.push(r),this.emitEvent({type:"atomAdded",data:{atom:r}})}removeAtom(r){let n=this.atoms.get(r);this.atoms.delete(r),this.types.forEach(i=>{i.atoms=i.atoms.filter(s=>s.id!==r)}),this.relations.forEach(i=>{i.tuples=i.tuples.filter(s=>!s.atoms.includes(r))}),n&&this.emitEvent({type:"atomRemoved",data:{atomId:r}})}removeRelationTuple(r,n){let i=this.relations.get(r);if(i){let s=i.tuples.length;i.tuples=i.tuples.filter(o=>!o.atoms.every((u,f)=>u===n.atoms[f])),i.tuples.length<s&&this.emitEvent({type:"relationTupleRemoved",data:{relationId:r,tuple:n}})}}reify(r){return xe(this,r)}parseObjectIteratively(r,n=new WeakSet){let i=[{obj:r}],s=(o,u,f,l)=>{if(this.isAtomicValue(o)){let p=this.createAtomFromPrimitive(o);this.addRelationTuple(f,{atoms:[...u,p],types:[]},l)}else(Array.isArray(o)||this.isPyretObject(o))&&i.push({obj:o,parentInfo:{atoms:u,relationId:f,relationName:l}})};for(let o=0;o<i.length;o++){let{obj:u,parentInfo:f}=i[o],l=this.objectToAtomId.get(u);if(l||(l=this.createAtomFromObject(u)),f&&this.addRelationTuple(f.relationId,{atoms:[...f.atoms,l],types:[]},f.relationName),n.has(u))continue;n.add(u);let p=this.valueInfo(u);if(p?.kind==="nothing")continue;if(p?.kind==="table"){this.processTableSemantics(l,u,h=>{if(this.isAtomicValue(h))return this.createAtomFromPrimitive(h);if(wt(h)||!Array.isArray(h)&&!this.isPyretObject(h))throw new Error("Unsupported Pyret table cell");let m=h,y=this.objectToAtomId.get(m)??this.createAtomFromObject(m);return i.push({obj:m}),y});continue}if(p?.kind==="string-dict"){p.sealed&&this.addValueFact("sealed",l,"MutableStringDict"),Et(u,p).forEach(([m,y],d)=>{if(!this.isAtomicValue(y)&&!Array.isArray(y)&&!this.isPyretObject(y))throw new Error("Unsupported Pyret dictionary value");let v=this.valueRelationId("dictionary-entries","entry",["PyretObject","Index","String","PyretObject"]);s(y,[l,this.createIndexAtom(d),this.createAtomFromPrimitive(m)],v,"entry")});continue}if(p?.kind==="reference"){p.unrestricted&&this.addValueFact("unrestricted",l,"Reference");let h=u.value;if(!this.isAtomicValue(h)&&!Array.isArray(h)&&!this.isPyretObject(h))throw new Error("Unsupported Pyret reference target");let m=this.valueRelationId("reference-target","target",["Reference","PyretObject"]);s(h,[l],m,"target");continue}if(p?.kind==="tuple"||p?.kind==="raw-array"){let h=Array.isArray(u)?u:u.vals;for(let m=0;m<h.length;m++){let y=this.valueRelationId("sequence-elements","element",["PyretObject","Index","PyretObject"]);s(h[m],[l,this.createIndexAtom(m)],y,"element")}continue}let b=u;this.originalObjects.set(l,b);let c=W(b);c?.arity===0&&this.addValueFact("nullary-constructor",l,"PyretObject");for(let h of c?.mutableFields??[]){let m=this.valueRelationId("mutable-field","mutable-field",["PyretObject","Index"]);this.addRelationTuple(m,{atoms:[l,this.createIndexAtom(h)],types:[]},"mutable-field")}if(!b.dict||typeof b.dict!="object")continue;let w=c?.fields??(p?.kind==="object"?Uf(b.dict,this.options.showFunctions):Object.keys(b.dict));!p&&!V(this.extractType(b))&&this.cacheConstructorPattern(this.extractType(b),w),w.forEach((h,m)=>{let y=b.dict[h],d=c?Jf(c,m):p?.kind==="object"?this.valueRelationId("object-field:"+h,h,["Object","Index","PyretObject"]):h;if(c&&!this.relations.has(d)&&this.relations.set(d,{id:d,name:h,types:[c.name,"PyretObject"],tuples:[]}),!this.options.showFunctions&&wt(y))return;let v=p?.kind==="object"?[l,this.createIndexAtom(m)]:[l];s(y,v,d,p?.kind==="object"?h:void 0)})}}addValueFact(r,n,i){let s=this.valueRelationId(r,r,[i]);this.addRelationTuple(s,{atoms:[n],types:[]},r)}valueRelationId(r,n,i){let s=this.valueRelations.get(r);return s||(s=globalThis.crypto?.randomUUID?.()??`relation-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}-${this.valueRelations.size}`,this.valueRelations.set(r,s),this.relations.set(s,{id:s,name:n,types:i,tuples:[]})),s}createIndexAtom(r){let n=this.indexAtoms.get(r);if(n)return n;let i=this.generateAtomId("Index");return this.atoms.set(i,{id:i,type:"Index",label:String(r)}),this.ensureTypeExists("Index"),this.indexAtoms.set(r,i),i}valueInfo(r){if(Array.isArray(r))return{kind:"raw-array"};if("$pyretValue"in r)return te(r);if(qt(r))throw new Error("Standalone Pyret Row values are not supported");if(At(r))return{kind:"table"};let n=Lf(r);if(n)return n;let i=Pt(r);if(i)return i;if(Vf(r))return{kind:"nothing"};if(Array.isArray(r.vals))return{kind:"tuple"};if(!W(r)&&r.dict&&(typeof r.updateDict=="function"||this.extractType(r)==="PyretObject"))return{kind:"object"}}processTableSemantics(r,n,i){let{headers:s,rows:o}=ce(n),u=this.valueRelationId("table-columns","column",["Table","Index","String"]);s.forEach((l,p)=>this.addRelationTuple(u,{atoms:[r,this.createIndexAtom(p),this.createAtomFromPrimitive(l)],types:[]},"column"));let f=this.valueRelationId("table-rows:"+s.length,"row",["Table","Index",...s.map(()=>"PyretObject")]);o.forEach((l,p)=>this.addRelationTuple(f,{atoms:[r,this.createIndexAtom(p),...Array.from(l,i)],types:[]},"row"))}createAtomFromObject(r){let n=this.valueInfo(r),i=n?{nothing:"Nothing",reference:"Reference",object:"Object",tuple:"Tuple","raw-array":"RawArray",table:"Table","string-dict":n.kind==="string-dict"&&n.mutable?"MutableStringDict":"StringDict"}[n.kind]:this.extractType(r),s=this.generateAtomId(i),o={id:s,type:i,label:n?i:this.extractLabel(r)};return this.atoms.set(s,o),this.objectToAtomId.set(r,s),this.ensureTypeExists(i),s}createAtomFromPrimitive(r){let n=H(r),i=n?"Number":this.mapPrimitiveType(r),s=n?xt(n):String(r);if(i==="String"&&this.options.stringsIdempotent||i==="Number"&&this.options.numbersIdempotent||i==="Boolean"&&this.options.booleansIdempotent){let l=Array.from(this.atoms.values()).find(p=>p.type===i&&p.label===s);if(l)return l.id}let u=this.generateAtomId(i),f={id:u,type:i,label:s};return this.atoms.set(u,f),this.ensureTypeExists(i),u}mapPrimitiveType(r){switch(typeof r){case"number":return"Number";case"string":return"String";case"boolean":return"Boolean";default:return"Value"}}extractMostSpecificBrand(r){let n=-1,i,s;for(let o of Object.keys(r)){let u=/^\$brand([a-zA-Z_]+)(\d+)$/.exec(o);if(u){let[,f,l]=u,p=parseInt(l,10);p>n&&(n=p,i=f)}else{let f=/^\$brand_?([a-zA-Z_]+)$/.exec(o);if(f){let[,l]=f;(!s||l>s)&&(s=l)}}}return i||s}extractType(r){if(r.$name&&typeof r.$name=="string")return r.$name;if(r.brands&&typeof r.brands=="object"){let n=this.extractMostSpecificBrand(r.brands);if(n)return n}return"PyretObject"}extractLabel(r){if(r.$name&&typeof r.$name=="string")return U(r.$name);let n=this.extractType(r),s=(this.typeLabelCounters.get(n)??0)+1;return this.typeLabelCounters.set(n,s),`${n}$${s}`}addRelationTuple(r,n,i){let s=n.atoms[0],o=n.atoms[n.atoms.length-1],u=this.atoms.get(s),f=this.atoms.get(o);if(!u||!f){console.warn(`Cannot create relation ${r}: missing atoms ${s} or ${o}`);return}let l=this.relations.get(r),p=i??l?.name??we(r)?.field??r;l&&Cr(l,{...l,name:p});let b=Ff(n,l,w=>this.atoms.get(w)?.type);l?l.types=b.relationTypes:(l={id:r,name:p,types:b.relationTypes,tuples:[]},this.relations.set(r,l)),l.tuples.some(w=>Ot(w)===Ot(n))||(l.tuples.push(b.tuple),this.emitEvent({type:"relationTupleAdded",data:{relationId:r,tuple:b.tuple}}))}ensureTypeExists(r){if(!this.types.has(r)){let n=V(r),i=n&&!["Number","String","Boolean","PyretObject","Index","Nothing","Object","Tuple","RawArray","Reference","StringDict","MutableStringDict","Table"].includes(n.name)?n.name:void 0;i&&this.ensureTypeExists(i);let s={id:r,types:i?[r,i,"PyretObject"]:[r,"PyretObject"],atoms:[],isBuiltin:this.isBuiltinType(r)};this.types.set(r,s)}}initializeBuiltinTypes(){["Number","String","Boolean","PyretObject"].forEach(n=>{let i={id:n,types:n==="PyretObject"?["PyretObject"]:[n,"PyretObject"],atoms:[],isBuiltin:!0};this.types.set(n,i)})}isBuiltinType(r){return["Number","String","Boolean","PyretObject"].includes(r)}isAtomicValue(r){return typeof r=="string"||typeof r=="boolean"||H(r)!==void 0}isPyretObject(r){return typeof r=="object"&&r!==null&&("dict"in r||"brands"in r||"$name"in r||"vals"in r||"$pyretValue"in r||Pr(r))}generateAtomId(r){return`${r?r.toLowerCase().substring(0,3):"atom"}_${++this.atomCounter}`}getAtoms(){return Array.from(this.atoms.values())}getRelations(){let r=this.relations.values();return Array.from(r)}getTypes(){return this.types.forEach(r=>{r.atoms=this.getAtoms().filter(n=>n.type===r.id||!!V(n.type)&&this.types.get(n.type)?.types.includes(r.id))}),Array.from(this.types.values())}getAtomType(r){let n=this.atoms.get(r);if(!n)throw new Error(`Atom with id '${r}' not found`);let i=this.types.get(n.type);return i||(this.ensureTypeExists(n.type),this.types.get(n.type))}generateGraph(r=!1,n=!1){let i=new rl.Graph({directed:!0,multigraph:!0});if(this.getAtoms().forEach(s=>{i.setNode(s.id,{label:s.label})}),this.getRelations().forEach(s=>{s.tuples.forEach(o=>{if(o.atoms.length>=2){let u=o.atoms[0],f=o.atoms[o.atoms.length-1],l=o.atoms.slice(1,-1),p=s.name;if(l.length>0){let c=l.map(w=>{let h=this.atoms.get(w);return h?h.label:w});p=`${s.name}[${c.join(", ")}]`}let b=sP(s,o);i.setEdge(u,f,p,b)}})}),r||n){let s=[];i.nodes().forEach(o=>{let u=i.inEdges(o)||[],f=i.outEdges(o)||[];if(u.length===0&&f.length===0&&this.atoms.get(o)){let c=this.getAtomType(o).isBuiltin;(r||c&&n)&&s.push(o)}}),s.forEach(o=>i.removeNode(o))}return i}addFromDataInstance(r,n){if(!(r instanceof k))return!1;let i=r;for(let o of i.getRelations()){let u=this.relations.get(o.id);u&&Cr(u,o)}let s=new Map;return i.getAtoms().forEach(o=>{let u=this.isBuiltinType(o.type);if(n&&u&&(o.type==="String"&&this.options.stringsIdempotent||o.type==="Number"&&this.options.numbersIdempotent||o.type==="Boolean"&&this.options.booleansIdempotent)){let c=Array.from(this.atoms.values()).find(w=>w.type===o.type&&w.label===o.label);if(c){s.set(o.id,c.id);return}}let f=this.generateAtomId(o.type);s.set(o.id,f);let l={...o,id:f};this.addAtom(l);let p=i.originalObjects.get(o.id);p&&this.originalObjects.set(f,p)}),i.getTypes().forEach(o=>{if(!this.types.has(o.id))this.types.set(o.id,{...o,atoms:o.atoms.map(u=>({...u,id:s.get(u.id)||u.id}))});else{let u=this.types.get(o.id),f=o.atoms.map(l=>({...l,id:s.get(l.id)||l.id}));u.atoms.push(...f)}}),i.getRelations().forEach(o=>{let u=o.tuples.map(l=>({atoms:l.atoms.map(p=>s.get(p)||p),types:l.types})),f=this.relations.get(o.id);f?(f.tuples=el([...f.tuples,...u]),f.types=tl(f.tuples,f.types)):this.relations.set(o.id,{...o,tuples:u})}),!0}};k.globalConstructorCache=new Map,k.instantiationCounter=0;var re=k,zT=(e,t={})=>{try{let r=JSON.parse(e);return new re(r,t)}catch(r){throw new Error(`Failed to parse Pyret JSON: ${r instanceof Error?r.message:"Unknown error"}`)}},KT=e=>e instanceof re;var nl=Ur(qr()),_t=class{constructor(t){this.datum=t;this.atoms=new Map(t.atoms.map(r=>[r.id,r])),this.types=new Map(t.types.map(r=>[r.id,r]))}getAtoms(){return this.datum.atoms}getRelations(){return this.datum.relations}getTypes(){return this.datum.types}getAtomType(t){let r=this.atoms.get(t);if(!r)throw new Error(`Unknown captured atom ${t}`);let n=this.types.get(r.type);if(!n)throw new Error(`Unknown captured type ${r.type}`);return n}generateGraph(t=!1,r=!1){let n=new nl.Graph({directed:!0,multigraph:!0});for(let i of this.datum.atoms)n.setNode(i.id,{label:i.label});for(let i of this.datum.relations)for(let s of i.tuples){if(s.atoms.length<2)continue;let o=s.atoms[0],u=s.atoms[s.atoms.length-1],f=s.atoms.slice(1,-1).map(p=>this.atoms.get(p).label),l=i.name+(f.length?`[${f.join(", ")}]`:"");n.setEdge(o,u,l,JSON.stringify([i.id,s.atoms]))}if(t||r)for(let i of n.nodes())!(n.nodeEdges(i)||[]).length&&(t||this.getAtomType(i).isBuiltin)&&n.removeNode(i);return n}};var Tt=class extends Error{constructor(r,n,i){super(`Cannot capture ${JSON.stringify(r)}${n.map(s=>`[${JSON.stringify(s)}]`).join("")}: ${i}`);this.root=r;this.path=n;this.reason=i;this.name="PyretCaptureError"}};function il(e){let t=new Set;function r(n){if(n===null||typeof n=="string"||typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n))return;let i=n&&typeof n=="object"?Object.getPrototypeOf(n):void 0;if(!n||typeof n!="object"||!Array.isArray(n)&&i!==null&&Object.getPrototypeOf(i)!==null)throw new Error("Capture metadata must contain only JSON values");if(t.has(n))throw new Error("Capture metadata must not contain cycles");t.add(n);for(let s of Reflect.ownKeys(n)){let o=Object.getOwnPropertyDescriptor(n,s);if(typeof s!="string"||o.get||o.set)throw new Error("Capture metadata must not contain symbols or accessors")}for(let s of Array.isArray(n)?Array.from(n):Object.values(n))r(s);t.delete(n)}return r(e),JSON.parse(JSON.stringify(e))}function Mr(e,t,r){if(!Array.isArray(e)||!e.length)throw new Error("Capture requires at least one named root");let n=new Set;for(let c of e){if(!c||typeof c.name!="string"||!c.name||n.has(c.name))throw new Error("Capture root names must be nonempty and unique");n.add(c.name)}let i=globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,s=new Map,o=new Map,u=[],f=(c,w,h)=>{if(s.has(c))return s.get(c);try{let m=t.observe(c);if(m.kind==="primitive")return m.value;let y;switch(m.kind){case"nothing":y={$pyretValue:{kind:"nothing"}};break;case"raw-array":y=[];break;case"tuple":y={vals:[]};break;case"object":y={$pyretValue:{kind:"object"},dict:Object.create(null)};break;case"reference":y={$pyretValue:{kind:"reference",unrestricted:!0}};break;case"string-dict":y={$pyretValue:{kind:"string-dict",mutable:m.mutable,sealed:m.sealed},entries:[]};break;case"table":y={$pyretValue:{kind:"table"},dict:Object.create(null)};break;case"constructor":{let d=JSON.stringify(m.info),v=o.get(m.identity);if(v&&v.schema!==d)throw new Error("Constructor schema changed during capture");v||(v={id:Kf(i,o.size,m.info.name),schema:d},o.set(m.identity,v)),y={$name:v.id,$arity:m.info.arity,$constructor:{$fieldNames:m.info.fields.slice()},$mut_fields_mask:m.info.fields.map((x,_)=>(m.info.mutableFields??[]).includes(_)),dict:Object.create(null)};break}default:throw new Error("Unsupported adapter observation")}return s.set(c,y),u.push({carrier:y,observed:m,root:w,path:h}),y}catch(m){throw m instanceof Tt?m:new Tt(w,h,m instanceof Error?m.message:String(m))}},l=e.map(c=>f(c.value,c.name,[]));for(let c=0;c<u.length;c++){let{carrier:w,observed:h,root:m,path:y}=u[c],d=(v,...x)=>f(v,m,[...y,...x]);switch(h.kind){case"constructor":h.info.fields.forEach((v,x)=>{w.dict[v]=d(h.values[x],v)});break;case"object":h.fields.forEach(([v,x])=>{w.dict[v]=d(x,v)});break;case"raw-array":h.values.forEach((v,x)=>w.push(d(v,x)));break;case"tuple":h.values.forEach((v,x)=>w.vals.push(d(v,x)));break;case"reference":w.value=d(h.value,"target");break;case"string-dict":h.entries.forEach(([v,x])=>w.entries.push([v,d(x,v)]));break;case"table":w.dict["_header-raw-array"]=h.headers.slice(),w.dict["_rows-raw-array"]=h.rows.map((v,x)=>v.map((_,T)=>d(_,"rows",x,h.headers[T])));break}}let{instance:p,rootIds:b}=re.fromValues(l);return il({format:"spytial-pyret-capture",version:1,datum:{atoms:[...p.getAtoms()],relations:[...p.getRelations()],types:[...p.getTypes()]},roots:e.map((c,w)=>({name:c.name,atomId:b[w],...c.observation===void 0?{}:{observation:c.observation}})),...r===void 0?{}:{provenance:r}})}function Nr(e){let t=il(e);if(!t||t.format!=="spytial-pyret-capture"||t.version!==1)throw new Error("Unsupported Pyret capture format/version");if(!Array.isArray(t.roots)||!t.roots.length||!t.datum||!Array.isArray(t.datum.atoms)||!Array.isArray(t.datum.relations)||!Array.isArray(t.datum.types))throw new Error("Malformed Pyret capture");let r=new Map,n=new Set(["Number","String","Boolean","Nothing","Object","Index","Tuple","RawArray","Reference","StringDict","MutableStringDict","Table"]);for(let c of t.datum.atoms){if(!c||typeof c.id!="string"||!c.id||r.has(c.id)||typeof c.label!="string"||typeof c.type!="string"||!n.has(c.type)&&!V(c.type))throw new Error("Malformed or duplicate Pyret capture atom");if(c.type==="Index"&&(!/^(0|[1-9][0-9]*)$/.test(c.label)||!Number.isSafeInteger(Number(c.label))))throw new Error("Malformed Pyret capture index");r.set(c.id,c)}let i=new Set,s=(c,w)=>c===w.type||c==="PyretObject"||!n.has(c)&&c===V(w.type)?.name,o=new Set;for(let c of t.datum.types){if(!c||typeof c.id!="string"||o.has(c.id)||!Array.isArray(c.types)||c.types[0]!==c.id||c.types.some(h=>typeof h!="string")||!Array.isArray(c.atoms)||typeof c.isBuiltin!="boolean")throw new Error("Malformed Pyret capture type");o.add(c.id);let w=new Set;for(let h of c.atoms){let m=h&&r.get(h.id);if(!m||w.has(h.id)||h.type!==m.type||h.label!==m.label||!s(c.id,m))throw new Error("Invalid Pyret capture type membership");w.add(h.id)}}if([...r.values()].some(c=>!o.has(c.type))||t.datum.types.some(c=>c.types.some(w=>!o.has(w))))throw new Error("Unknown Pyret capture type");for(let c of t.datum.relations){if(!c||typeof c.id!="string"||i.has(c.id)||typeof c.name!="string"||!Array.isArray(c.tuples)||!Array.isArray(c.types)||c.types.some(h=>typeof h!="string"))throw new Error("Malformed or duplicate Pyret capture relation");i.add(c.id);let w=new Set;for(let h of c.tuples){if(!h||!Array.isArray(h.atoms)||!h.atoms.length||h.atoms.some(y=>!r.has(y))||!Array.isArray(h.types)||h.types.length!==h.atoms.length||h.types.some((y,d)=>!s(y,r.get(h.atoms[d]))))throw new Error("Malformed Pyret capture tuple");let m=JSON.stringify(h.atoms);if(w.has(m))throw new Error("Duplicate Pyret capture tuple");w.add(m)}}let u=new Set;for(let c of t.roots){if(!c||typeof c.name!="string"||!c.name||u.has(c.name)||!r.has(c.atomId)||r.get(c.atomId).type==="Index")throw new Error("Invalid Pyret capture root");u.add(c.name)}let f=new _t(t.datum),l=[...r.values()].filter(c=>c.type!=="Index").map(c=>c.id),p=It(f,l,{allowContainerCycles:!0}),b=new Map(l.map((c,w)=>[c,p[w]]));return{snapshot:t,instance:f,values:new Map(t.roots.map(c=>[c.name,b.get(c.atomId)]))}}function Dr(e){for(let t of["isNumber","isNothing","isDataValue","isTuple","isRef","isFunction","isMethod","isOpaque","isObject"])if(typeof e?.[t]!="function")throw new Error(`Pyret runtime lacks ${t}`);return{observe(t){if(typeof t=="string"||typeof t=="boolean")return{kind:"primitive",value:t};if(e.isNumber(t)){let n=H(t);if(!n)throw new Error("Unsupported Pyret numeric representation");return{kind:"primitive",value:{$pyretNumber:n}}}if(e.isFunction(t))throw new Error("Unsupported Pyret function");if(e.isMethod(t))throw new Error("Unsupported Pyret method");if(e.isOpaque(t))throw new Error("Unsupported Pyret opaque value");if(e.isNothing(t))return{kind:"nothing"};if(Array.isArray(t)){if(Array.from({length:t.length},(n,i)=>i).some(n=>!(n in t)))throw new Error("Unsupported sparse raw array");return{kind:"raw-array",values:t.slice()}}let r=t;if(e.isRef(t)){if(r.state!==2)throw new Error("Unsupported Pyret reference state: only initialized mutable references are supported");if(!Array.isArray(r.anns?.anns)||!r.anns.anns.every(n=>n.ann===e.Any))throw new Error("Unsupported Pyret reference annotation: only the runtime Any annotation is supported");return{kind:"reference",value:r.value}}if(e.isTuple(t))return{kind:"tuple",values:r.vals.slice()};if(e.isDataValue(t)){let n=W(r);if(!n||!r.$constructor||typeof r.$constructor!="object")throw new Error("Invalid Pyret constructor metadata");for(let i in r.dict)if(!n.fields.includes(i)&&i!=="$fieldNames"&&!e.isMethod(r.dict[i]))throw new Error(`Unsupported extra constructor field ${JSON.stringify(i)}`);return{kind:"constructor",identity:r.$constructor,info:n,values:n.fields.map(i=>r.dict[i])}}if(e.isObject(t)){if(qt(r))throw new Error("Unsupported standalone Pyret Row");if(At(r))return{kind:"table",...ce(r)};let n=Pt(r);if(n)return{...n,entries:Et(r,n)};if(r.brands&&Object.keys(r.brands).some(s=>s!=="brandCount"&&r.brands[s]===!0))throw new Error("Unsupported branded Pyret object");let i=[];for(let s in r.dict)i.push([s,r.dict[s]]);return{kind:"object",fields:i}}throw new Error("Unsupported value from this Pyret runtime")}}}function yS(e,t){return Nr(Mr([{name:"value",value:e}],Dr(t))).instance}function hS(e,t){let r=Mr([{name:"value",value:e}],Dr(t)),{instance:n}=Nr(r),i;try{i=xe(n,r.roots[0].atomId)}catch(s){i="Source preview unavailable: "+(s instanceof Error?s.message:String(s))}return{snapshot:r,instance:n,sourcePreview:i}}function gS(e){return{...e,nodes:e.nodes.map(t=>({...t,mostSpecificType:U(t.mostSpecificType)}))}}var sl=new Set(["Number","String","Boolean","Index"]);function oP(e,t){let r=e.getAtoms(),n=e.getRelations(),i=new Map(r.map(y=>[y.id,y])),s=y=>we(y.id)?y.id:y.name,o=new Map,u=new Set;for(let y of n)for(let d of y.tuples){if(d.atoms.length<1)continue;let v=d.atoms[0];for(let _=1;_<d.atoms.length;_++)u.add(d.atoms[_]);let x=o.get(v)??[];x.push({rel:s(y),tuple:d.atoms.slice()}),o.set(v,x)}let f=y=>{let d=i.get(y);return d?JSON.stringify([d.type,sl.has(d.type)?d.label:void 0]):"?"},l=t?[t]:r.map(y=>y.id).filter(y=>!u.has(y)),p=(l.length?l:r.map(y=>y.id)).slice().sort((y,d)=>{let v=f(y).localeCompare(f(d));return v!==0?v:y.localeCompare(d)}),b=new Map,c=0,w=y=>{let d=[y];for(;d.length;){let v=d.pop();if(b.has(v))continue;b.set(v,c++);let x=(o.get(v)??[]).slice().sort((_,T)=>{let C=_.rel.localeCompare(T.rel);if(C!==0)return C;let D=_.tuple.slice(1).map(f).join("|"),B=T.tuple.slice(1).map(f).join("|");return D.localeCompare(B)});for(let _=x.length-1;_>=0;_--){let T=x[_].tuple;for(let C=T.length-1;C>=1;C--)d.push(T[C])}}};for(let y of p)w(y);r.map(y=>y.id).sort().forEach(y=>{b.has(y)||b.set(y,c++)});let h=r.map(y=>({id:b.get(y.id),type:y.type,label:sl.has(y.type)?y.label:void 0})).sort((y,d)=>y.id-d.id),m=n.map(y=>{let d=y.tuples.filter(v=>v.atoms.length>=1).map(v=>v.atoms.map(x=>b.get(x)??-1));return d.sort((v,x)=>{let _=Math.min(v.length,x.length);for(let T=0;T<_;T++)if(v[T]!==x[T])return v[T]-x[T];return v.length-x.length}),{name:s(y),tuples:d}}).filter(y=>y.tuples.length>0).sort((y,d)=>y.name.localeCompare(d.name)||JSON.stringify(y.tuples).localeCompare(JSON.stringify(d.tuples)));return JSON.stringify({atoms:h,relations:m})}export{Tt as PyretCaptureError,re as PyretDataInstance,oP as canon,Mr as capturePyret,U as constructorDisplayName,zT as createPyretDataInstance,Dr as createPyretRuntimeAdapter,gS as diagramTypeNames,sP as generateEdgeId,Nr as importPyretCapture,KT as isPyretDataInstance,hS as prepareDiagram,xe as pyretCaptureSource,V as readConstructorTypeId,jr as reifyToValue,It as reifyToValues,xe as replit,yS as toDataInstance};
@@ -0,0 +1,137 @@
1
+ # Portable Pyret capture
2
+
3
+ `spyret` captures live values from an ordinary Pyret JavaScript
4
+ runtime. It needs neither the Spyret compiler extension, a REPL evaluator, a
5
+ display skeleton, nor a browser. The entry ships CommonJS, ESM, and an IIFE
6
+ (`dist/spyret.global.js`, global `Spyret`).
7
+
8
+ ```js
9
+ import {
10
+ capturePyret, createPyretRuntimeAdapter, importPyretCapture,
11
+ } from 'spyret';
12
+
13
+ const snapshot = capturePyret([
14
+ { name: 'tree', value: tree, observation: { expression: 'tree' } },
15
+ { name: 'selected', value: selectedNode },
16
+ ], createPyretRuntimeAdapter(runtime), { module: 'example.arr' });
17
+
18
+ // Save JSON.stringify(snapshot). The receiver does not need Pyret:
19
+ const { instance, values } = importPyretCapture(JSON.parse(savedText));
20
+ // instance implements IDataInstance for layout/query consumers.
21
+ // values is a map from root names to synthetic structural values; aliases and
22
+ // cycles, including aliases between different roots, share JS object identity.
23
+ ```
24
+
25
+ Use the **owning runtime**. Runtime predicates distinguish its functions,
26
+ references, data values, numeric objects, etc. A different runtime can have a
27
+ different number tower and class identities. `createPyretRuntimeAdapter` keeps
28
+ the unavoidable constructor, reference, and library backing-store reads in one
29
+ module. Alternative hosts can implement the small `PyretRuntimeAdapter.observe`
30
+ interface; adapter observations are transient live facts, not a portable format.
31
+
32
+ ## Contract
33
+
34
+ `capturePyret(roots, adapter, provenance?)` returns a detached JSON snapshot or
35
+ throws `PyretCaptureError`, which supplies `root`, `path`, and `reason`. It never
36
+ returns a successful partial capture. Names must be nonempty and unique. All
37
+ roots share one object-identity map, and the returned root IDs are explicit.
38
+ Call again to refresh after a mutation; there is no mutation observer.
39
+
40
+ `importPyretCapture(snapshot)` checks the format/version, root and endpoint IDs,
41
+ type memberships, duplicate records, and structural field/position/reference
42
+ constraints. It returns a detached snapshot, a Spyret data instance implementing Core’s `IDataInstance`, and synthetic
43
+ values. Synthetic values are **not executable Pyret values**: they have no
44
+ methods, annotations, runtime brands, or closures. They are useful for inspecting
45
+ structure without the producing runtime. Constructor identity is the synthetic
46
+ value's encoded `$name`; use `readConstructorTypeId`/`constructorDisplayName` to
47
+ inspect its nominal token/display spelling.
48
+
49
+ | State | Preservation |
50
+ | --- | --- |
51
+ | Numbers | Exact integer/rational text; rough versus exact, including rough negative zero |
52
+ | Strings/booleans/nothing | Content and distinct kinds |
53
+ | Data constructors | Capture-scoped nominal identity, declared ordered slots, singleton versus nullary application, mutable-slot positions |
54
+ | Objects | Enumerable fields, including inherited fields, in observed order |
55
+ | Raw arrays/tuples | Kind, positions, duplicates, empty containers, shared elements |
56
+ | References | Initialized mutable cells with only the owning runtime's `Any` annotation; identity and target |
57
+ | Dictionaries | Mutable/immutable kind, sealed state, observed entry order, keys, values and sharing |
58
+ | Tables | Ordered headers and row occurrences, including duplicate rows, empty/zero-column tables and structured cells |
59
+ | Lists/options/either/sets | Observed declared constructor state; no serialization of executable library behavior |
60
+ | Sharing/cycles | Object identity, equal-but-distinct objects, cycles and cross-root aliases |
61
+ | Observation/provenance | Caller-supplied JSON, carried separately from value structure |
62
+
63
+ No printer or arbitrary annotation runs during capture. Declared datatype methods
64
+ are behavior supplied by declarations and are outside the declared-slot state
65
+ contract; this includes `_output`. Non-method extension fields on data values
66
+ are rejected instead of dropped. Functions/methods in state-bearing slots,
67
+ opaque values, unrecognized branded library objects, standalone table Row
68
+ values, sparse arrays, unset/frozen references, and arbitrary reference
69
+ annotations produce explicit diagnostics. This API does not serialize closures
70
+ or a program's execution environment.
71
+
72
+ Value-only capture cannot discover unobserved datatype variants, erased generic
73
+ parameters, binding names, or complete declaration/source schemas. Supply
74
+ observation metadata explicitly. Runtime brand strings are not persisted as
75
+ stable declaration IDs. Rebinding saved constructor identities to executable
76
+ constructors in a fresh runtime requires a separate declaration-binding API.
77
+
78
+ ## Format version 1
79
+
80
+ ```text
81
+ { format: "spytial-pyret-capture", version: 1,
82
+ datum: { atoms, relations, types },
83
+ roots: [{ name, atomId, observation? }], provenance? }
84
+ ```
85
+
86
+ The datum remains the sole authority for value structure. Exact primitive labels,
87
+ `element`, `entry`, `column`, `row`, `target`, mutable-field and nullary facts use
88
+ the relational encoding inherited from Core. No second object tree is exported.
89
+
90
+ Nominal constructor type IDs encode `pyret:constructor:v1:[scope,index,name]`.
91
+ The scope is fresh for each capture. Existing field relation IDs retain their
92
+ `pyret:field:v1:[typeId,position,field]` encoding, now with the nominal type ID.
93
+ Labels retain the ordinary constructor name. Name-based type selectors use a
94
+ display-name supertype, so `node` still selects observed `node` variants; it is
95
+ the union when multiple nominal constructors have that spelling. Names reserved
96
+ by builtin kinds (e.g. `Number`) are not aliases: the nominal type remains
97
+ distinct and can be selected by its ID or other graph structure.
98
+
99
+ These are immutable snapshots. An edited datum must pass import validation, but
100
+ the API does not promise live program updates, complete edit semantics, or
101
+ backwards conversion to the legacy nominally ambiguous format.
102
+
103
+ `pyretCaptureSource(instance, rootId)` provides a best-effort source preview using
104
+ Spyret's source emitter. It rejects ambiguous same-named constructors.
105
+ Some valid structural graphs cannot be emitted as executable source. In
106
+ particular, direct container cycles and library aliasing may need constructs
107
+ the emitter does not support. Render the graph even if this preview fails.
108
+
109
+ ## Verified runtime and reproducible checks
110
+
111
+ The compatibility target is upstream `brownplt/pyret-lang` revision
112
+ `6e62dcda5298606aa0abe66a372c4eb17a38db85` (`lang/` in the upstream monorepo).
113
+ The same checks also run locally against Spyret revision
114
+ `6a6c8728f7540d36a143538f6068eb033849ed27`.
115
+
116
+ ```sh
117
+ npm ci
118
+ npm run build
119
+ npm test
120
+ # In the selected upstream checkout's lang/: npm ci --ignore-scripts && make phaseA
121
+ node scripts/check-pyret-capture.mjs /path/to/pyret/lang runtime-report.json
122
+ node scripts/check-pyret-capture-program.mjs /path/to/pyret/lang program-report.json
123
+ ```
124
+
125
+ The runtime check constructs real runtime/library values, transports 23 roots to
126
+ a fresh Node process with no Pyret loaded, asserts structural identity/content,
127
+ and checks ten unsupported-value diagnostics. The program check compiles and
128
+ executes actual Pyret source, including two imported modules defining `same`
129
+ with different field orders, a reference cycle, an `_output` that throws, and
130
+ shared dictionary/table contents. The CI workflow pins and builds upstream and
131
+ uploads both reports. These checks establish structural capture, not arbitrary
132
+ executable reconstruction or a migration of the IDE's display extension.
133
+
134
+ The capture unit suite also runs 1,000 generated graphs for each of seeds 1 and 2.
135
+ It compares the original and imported graphs with a bijection, checking that
136
+ sharing, cycles, distinct objects, constructor identities, ordered fields and
137
+ primitive contents survive JSON transport independently of enumeration order.
@@ -0,0 +1,69 @@
1
+ # Releasing Spyret
2
+
3
+ Spyret is published as the public npm package `spyret`. The CJS, ESM, browser and
4
+ TypeScript entry points contain Spyret's adapters and bundled data contract
5
+ declarations, with no Core runtime dependency. The host passes the returned
6
+ `IDataInstance` to Core for layout/rendering; compatibility tests use Core 6.3.1.
7
+
8
+ ## One-time npm setup
9
+
10
+ The first package publication requires an npm maintainer login. From a checked,
11
+ merged release commit, run:
12
+
13
+ ```sh
14
+ npm login
15
+ npm install --global npm@11.20.0
16
+ npm ci
17
+ npm run typecheck
18
+ npm test
19
+ npm run test:package -- --out release
20
+ npm publish ./release/spyret-0.1.0.tgz --access public
21
+ ```
22
+
23
+ Also require green upstream PBT CI for this commit before publishing. The package
24
+ check installs the actual tarball into an empty project and exercises
25
+ CJS, ESM, browser and TypeScript consumers.
26
+
27
+ After the package exists, configure its npm **Trusted Publisher** settings:
28
+
29
+ | Setting | Value |
30
+ | --- | --- |
31
+ | Provider | GitHub Actions |
32
+ | Organization/user | `sidprasad` |
33
+ | Repository | `spyret` |
34
+ | Workflow filename | `release.yml` |
35
+ | Environment | Leave empty |
36
+ | Allowed action | Enable direct `npm publish` |
37
+
38
+ With npm 11.15 or later, the equivalent command is:
39
+
40
+ ```sh
41
+ npm trust github spyret --repo sidprasad/spyret --file release.yml --allow-publish
42
+ ```
43
+
44
+ See [npm's trusted publishing documentation](https://docs.npmjs.com/trusted-publishers/).
45
+ No npm token needs to be stored in GitHub. Publishing uses OIDC and provenance.
46
+
47
+ ## Later releases
48
+
49
+ 1. On a release branch, run `npm version patch --no-git-tag-version` (or choose a
50
+ minor/major bump), commit both manifests, and merge after CI passes.
51
+ 2. On the updated `main`, tag that exact commit and push the tag:
52
+
53
+ ```sh
54
+ git tag v0.1.1
55
+ git push origin v0.1.1
56
+ ```
57
+
58
+ 3. `release.yml` verifies the tag matches `package.json` and belongs to `main`,
59
+ runs the unit/package suite and both standard-Pyret PBT seeds, tests the packed
60
+ artifact, publishes it to npm, and attaches it to a GitHub release.
61
+
62
+ Prerelease versions publish under `next`; stable versions use `latest`. A failed
63
+ workflow can be rerun or manually dispatched against the same **tag**. An existing
64
+ npm version is accepted only when its integrity matches the tested tarball;
65
+ different contents require a version bump.
66
+
67
+ For the manually bootstrapped 0.1.0 release, push `v0.1.0` after configuring
68
+ trusted publishing. The workflow verifies that identical package and creates
69
+ the corresponding GitHub release.
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "spyret",
3
+ "version": "0.1.0",
4
+ "description": "Headless interfaces between standard Pyret and Spytial",
5
+ "license": "MIT",
6
+ "author": "Siddhartha Prasad",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/sidprasad/spyret.git"
10
+ },
11
+ "main": "./dist/spyret.js",
12
+ "module": "./dist/spyret.mjs",
13
+ "types": "./dist/spyret.d.ts",
14
+ "files": [
15
+ "dist",
16
+ "docs",
17
+ "THIRD_PARTY_NOTICES.txt"
18
+ ],
19
+ "exports": {
20
+ ".": {
21
+ "import": {
22
+ "types": "./dist/spyret.d.mts",
23
+ "default": "./dist/spyret.mjs"
24
+ },
25
+ "require": {
26
+ "types": "./dist/spyret.d.ts",
27
+ "default": "./dist/spyret.js"
28
+ }
29
+ },
30
+ "./global": "./dist/spyret.global.js"
31
+ },
32
+ "scripts": {
33
+ "build": "tsup && node scripts/write-notices.mjs",
34
+ "typecheck": "tsc --noEmit",
35
+ "test": "vitest run",
36
+ "test:upstream": "node scripts/check-pyret-capture.mjs",
37
+ "test:program": "node scripts/check-pyret-capture-program.mjs",
38
+ "test:pbt": "node scripts/check-pyret-pbt.mjs",
39
+ "prepack": "npm run typecheck && npm run build",
40
+ "test:package": "npm run build && node scripts/check-package.mjs"
41
+ },
42
+ "engines": {
43
+ "node": ">=22"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^24.0.3",
47
+ "fast-check": "^4.6.0",
48
+ "jsdom": "^26.1.0",
49
+ "tsup": "^8.5.0",
50
+ "tsx": "^4.21.0",
51
+ "typescript": "^5.8.3",
52
+ "vitest": "^3.2.4",
53
+ "spytial-core": "6.3.1",
54
+ "graphlib": "^2.1.8"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public",
58
+ "registry": "https://registry.npmjs.org/"
59
+ },
60
+ "bugs": {
61
+ "url": "https://github.com/sidprasad/spyret/issues"
62
+ },
63
+ "homepage": "https://github.com/sidprasad/spyret#readme",
64
+ "dependencies": {
65
+ "@types/graphlib": "^2.1.12"
66
+ }
67
+ }