",Dr,Ve,ea=`Nymph is a product of SciActive Inc. You can contact SciActive by email
+ or post, or follow on Mastodon.`,Nr,O,J,ce,Pr,K,ta="@hperrin@port87.social on Mastodon",jr,X,fe,qr,Z,ra="(loading...)",Ur,U,ue,Qr,Rr,zr,Hr,Or,Gr,Vr,Br,de,Kr,aa;P=new Tl({});const Wr=L[7].default,Q=fl(Wr,L,L[6],null);ce=new et({props:{path:cl}}),fe=new et({props:{path:Il}}),ue=new et({props:{path:Al}});let k=L[2]&&ll(L);return{c(){i=t("meta"),h=t("meta"),b=t("meta"),$=t("meta"),C=t("meta"),g=t("meta"),E=t("meta"),x=t("meta"),S=t("link"),I=t("link"),R=t("link"),D=t("meta"),T=t("link"),N=s(),u=t("div"),y=t("div"),he(P.$$.fragment),ge=s(),Q&&Q.c(),_e=s(),z=t("footer"),z.innerHTML=tt,ee=s(),M=t("div"),q=t("div"),te=t("section"),Y=t("div"),re=t("img"),Dt=s(),ae=t("span"),ae.textContent=Yr,Nt=s(),Ee=t("nav"),V=t("ul"),rt=t("li"),ye=t("a"),Pt=p("Homepage"),jt=s(),le=t("li"),ne=t("span"),ne.textContent=Jr,qt=s(),A=t("ul"),at=t("li"),be=t("a"),Ut=p("Introduction"),Qt=s(),lt=t("li"),Ie=t("a"),Rt=p("Creating Entities"),zt=s(),nt=t("li"),Ae=t("a"),Ht=p("Entity Querying"),Ot=s(),st=t("li"),Le=t("a"),Gt=p("Subscribing to Queries"),Vt=s(),ot=t("li"),$e=t("a"),Bt=p("Entity Class"),Kt=s(),it=t("li"),Ce=t("a"),Wt=p("Defining Entities"),Ft=s(),ct=t("li"),Se=t("a"),Yt=p("UIDs"),Jt=s(),ft=t("li"),ke=t("a"),Xt=p("Transactions"),Zt=s(),ut=t("li"),Te=t("a"),er=p("Export and Import"),tr=s(),se=t("li"),oe=t("span"),oe.textContent=Xr,rr=s(),c=t("ul"),dt=t("li"),we=t("a"),ar=p("Nymph Core"),lr=s(),ht=t("li"),Me=t("a"),nr=p("MySQL Driver"),sr=s(),pt=t("li"),xe=t("a"),or=p("PostgreSQL Driver"),ir=s(),mt=t("li"),De=t("a"),cr=p("SQLite3 Driver"),fr=s(),vt=t("li"),Ne=t("a"),ur=p("REST Server"),dr=s(),gt=t("li"),Pe=t("a"),hr=p("PubSub Server"),pr=s(),_t=t("li"),je=t("a"),mr=p("Client"),vr=s(),Et=t("li"),qe=t("a"),gr=p("Node Client"),_r=s(),yt=t("li"),Ue=t("a"),Er=p("Tilmeld"),yr=s(),bt=t("li"),Qe=t("a"),br=p("Tilmeld Client"),Ir=s(),It=t("li"),Re=t("a"),Ar=p("Tilmeld Components"),Lr=s(),At=t("li"),ze=t("a"),$r=p("Tilmeld Setup"),Cr=s(),Lt=t("li"),He=t("a"),Sr=p("Entity Sorter"),kr=s(),$t=t("li"),Oe=t("a"),Tr=p("Query Parser"),wr=s(),Ct=t("li"),Ge=t("a"),Mr=p("GUID / Unique Code Generator"),xr=s(),B=t("section"),ie=t("header"),ie.innerHTML=Zr,Dr=s(),Ve=t("p"),Ve.textContent=ea,Nr=s(),O=t("ul"),J=t("li"),he(ce.$$.fragment),Pr=s(),K=t("a"),K.textContent=ta,jr=s(),X=t("li"),he(fe.$$.fragment),qr=s(),Z=t("a"),Z.textContent=ra,Ur=s(),U=t("li"),he(ue.$$.fragment),Qr=p(`
+ SciActive Inc`),Rr=t("br"),zr=p(`
+ 310 S Twin Oaks Valley Rd #107`),Hr=t("br"),Or=p(`
+ PMB 422`),Gr=t("br"),Vr=p(`
+ San Marcos, CA 92078`),Br=s(),k&&k.c(),this.h()},l(f){const _=ul("svelte-6i6yy0",j.head);i=r(_,"META",{name:!0,content:!0}),h=r(_,"META",{property:!0,content:!0}),b=r(_,"META",{property:!0,content:!0}),$=r(_,"META",{property:!0,content:!0}),C=r(_,"META",{property:!0,content:!0}),g=r(_,"META",{property:!0,content:!0}),E=r(_,"META",{property:!0,content:!0}),x=r(_,"META",{property:!0,content:!0}),S=r(_,"LINK",{rel:!0,href:!0,sizes:!0}),I=r(_,"LINK",{rel:!0,href:!0,sizes:!0}),R=r(_,"LINK",{rel:!0,href:!0}),D=r(_,"META",{name:!0,content:!0}),T=r(_,"LINK",{rel:!0,href:!0}),_.forEach(a),N=o(f),u=r(f,"DIV",{id:!0});var la=n(u);y=r(la,"DIV",{class:!0});var Be=n(y);pe(P.$$.fragment,Be),ge=o(Be),Q&&Q.l(Be),_e=o(Be),z=r(Be,"FOOTER",{id:!0,"data-svelte-h":!0}),F(z)!=="svelte-12j9vpf"&&(z.innerHTML=tt),Be.forEach(a),la.forEach(a),ee=o(f),M=r(f,"DIV",{id:!0});var St=n(M);q=r(St,"DIV",{class:!0});var Ke=n(q);te=r(Ke,"SECTION",{id:!0,class:!0});var na=n(te);Y=r(na,"DIV",{class:!0});var kt=n(Y);re=r(kt,"IMG",{class:!0,src:!0,alt:!0}),Dt=o(kt),ae=r(kt,"SPAN",{class:!0,"data-svelte-h":!0}),F(ae)!=="svelte-1ym2tgr"&&(ae.textContent=Yr),kt.forEach(a),na.forEach(a),Nt=o(Ke),Ee=r(Ke,"NAV",{id:!0});var sa=n(Ee);V=r(sa,"UL",{});var We=n(V);rt=r(We,"LI",{});var oa=n(rt);ye=r(oa,"A",{href:!0});var ia=n(ye);Pt=m(ia,"Homepage"),ia.forEach(a),oa.forEach(a),jt=o(We),le=r(We,"LI",{});var Tt=n(le);ne=r(Tt,"SPAN",{class:!0,"data-svelte-h":!0}),F(ne)!=="svelte-60cxqh"&&(ne.textContent=Jr),qt=o(Tt),A=r(Tt,"UL",{});var w=n(A);at=r(w,"LI",{});var ca=n(at);be=r(ca,"A",{href:!0});var fa=n(be);Ut=m(fa,"Introduction"),fa.forEach(a),ca.forEach(a),Qt=o(w),lt=r(w,"LI",{});var ua=n(lt);Ie=r(ua,"A",{href:!0});var da=n(Ie);Rt=m(da,"Creating Entities"),da.forEach(a),ua.forEach(a),zt=o(w),nt=r(w,"LI",{});var ha=n(nt);Ae=r(ha,"A",{href:!0});var pa=n(Ae);Ht=m(pa,"Entity Querying"),pa.forEach(a),ha.forEach(a),Ot=o(w),st=r(w,"LI",{});var ma=n(st);Le=r(ma,"A",{href:!0});var va=n(Le);Gt=m(va,"Subscribing to Queries"),va.forEach(a),ma.forEach(a),Vt=o(w),ot=r(w,"LI",{});var ga=n(ot);$e=r(ga,"A",{href:!0});var _a=n($e);Bt=m(_a,"Entity Class"),_a.forEach(a),ga.forEach(a),Kt=o(w),it=r(w,"LI",{});var Ea=n(it);Ce=r(Ea,"A",{href:!0});var ya=n(Ce);Wt=m(ya,"Defining Entities"),ya.forEach(a),Ea.forEach(a),Ft=o(w),ct=r(w,"LI",{});var ba=n(ct);Se=r(ba,"A",{href:!0});var Ia=n(Se);Yt=m(Ia,"UIDs"),Ia.forEach(a),ba.forEach(a),Jt=o(w),ft=r(w,"LI",{});var Aa=n(ft);ke=r(Aa,"A",{href:!0});var La=n(ke);Xt=m(La,"Transactions"),La.forEach(a),Aa.forEach(a),Zt=o(w),ut=r(w,"LI",{});var $a=n(ut);Te=r($a,"A",{href:!0});var Ca=n(Te);er=m(Ca,"Export and Import"),Ca.forEach(a),$a.forEach(a),w.forEach(a),Tt.forEach(a),tr=o(We),se=r(We,"LI",{});var wt=n(se);oe=r(wt,"SPAN",{class:!0,"data-svelte-h":!0}),F(oe)!=="svelte-5ppnrj"&&(oe.textContent=Xr),rr=o(wt),c=r(wt,"UL",{});var d=n(c);dt=r(d,"LI",{});var Sa=n(dt);we=r(Sa,"A",{href:!0});var ka=n(we);ar=m(ka,"Nymph Core"),ka.forEach(a),Sa.forEach(a),lr=o(d),ht=r(d,"LI",{});var Ta=n(ht);Me=r(Ta,"A",{href:!0});var wa=n(Me);nr=m(wa,"MySQL Driver"),wa.forEach(a),Ta.forEach(a),sr=o(d),pt=r(d,"LI",{});var Ma=n(pt);xe=r(Ma,"A",{href:!0});var xa=n(xe);or=m(xa,"PostgreSQL Driver"),xa.forEach(a),Ma.forEach(a),ir=o(d),mt=r(d,"LI",{});var Da=n(mt);De=r(Da,"A",{href:!0});var Na=n(De);cr=m(Na,"SQLite3 Driver"),Na.forEach(a),Da.forEach(a),fr=o(d),vt=r(d,"LI",{});var Pa=n(vt);Ne=r(Pa,"A",{href:!0});var ja=n(Ne);ur=m(ja,"REST Server"),ja.forEach(a),Pa.forEach(a),dr=o(d),gt=r(d,"LI",{});var qa=n(gt);Pe=r(qa,"A",{href:!0});var Ua=n(Pe);hr=m(Ua,"PubSub Server"),Ua.forEach(a),qa.forEach(a),pr=o(d),_t=r(d,"LI",{});var Qa=n(_t);je=r(Qa,"A",{href:!0});var Ra=n(je);mr=m(Ra,"Client"),Ra.forEach(a),Qa.forEach(a),vr=o(d),Et=r(d,"LI",{});var za=n(Et);qe=r(za,"A",{href:!0});var Ha=n(qe);gr=m(Ha,"Node Client"),Ha.forEach(a),za.forEach(a),_r=o(d),yt=r(d,"LI",{});var Oa=n(yt);Ue=r(Oa,"A",{href:!0});var Ga=n(Ue);Er=m(Ga,"Tilmeld"),Ga.forEach(a),Oa.forEach(a),yr=o(d),bt=r(d,"LI",{});var Va=n(bt);Qe=r(Va,"A",{href:!0});var Ba=n(Qe);br=m(Ba,"Tilmeld Client"),Ba.forEach(a),Va.forEach(a),Ir=o(d),It=r(d,"LI",{});var Ka=n(It);Re=r(Ka,"A",{href:!0});var Wa=n(Re);Ar=m(Wa,"Tilmeld Components"),Wa.forEach(a),Ka.forEach(a),Lr=o(d),At=r(d,"LI",{});var Fa=n(At);ze=r(Fa,"A",{href:!0});var Ya=n(ze);$r=m(Ya,"Tilmeld Setup"),Ya.forEach(a),Fa.forEach(a),Cr=o(d),Lt=r(d,"LI",{});var Ja=n(Lt);He=r(Ja,"A",{href:!0});var Xa=n(He);Sr=m(Xa,"Entity Sorter"),Xa.forEach(a),Ja.forEach(a),kr=o(d),$t=r(d,"LI",{});var Za=n($t);Oe=r(Za,"A",{href:!0});var el=n(Oe);Tr=m(el,"Query Parser"),el.forEach(a),Za.forEach(a),wr=o(d),Ct=r(d,"LI",{});var tl=n(Ct);Ge=r(tl,"A",{href:!0});var rl=n(Ge);Mr=m(rl,"GUID / Unique Code Generator"),rl.forEach(a),tl.forEach(a),d.forEach(a),wt.forEach(a),We.forEach(a),sa.forEach(a),xr=o(Ke),B=r(Ke,"SECTION",{});var Fe=n(B);ie=r(Fe,"HEADER",{class:!0,"data-svelte-h":!0}),F(ie)!=="svelte-grs083"&&(ie.innerHTML=Zr),Dr=o(Fe),Ve=r(Fe,"P",{"data-svelte-h":!0}),F(Ve)!=="svelte-1l9tx70"&&(Ve.textContent=ea),Nr=o(Fe),O=r(Fe,"UL",{class:!0});var Ye=n(O);J=r(Ye,"LI",{class:!0});var Mt=n(J);pe(ce.$$.fragment,Mt),Pr=o(Mt),K=r(Mt,"A",{href:!0,target:!0,rel:!0,"data-svelte-h":!0}),F(K)!=="svelte-2tjg6n"&&(K.textContent=ta),Mt.forEach(a),jr=o(Ye),X=r(Ye,"LI",{class:!0});var xt=n(X);pe(fe.$$.fragment,xt),qr=o(xt),Z=r(xt,"A",{href:!0,"data-svelte-h":!0}),F(Z)!=="svelte-1duywns"&&(Z.textContent=ra),xt.forEach(a),Ur=o(Ye),U=r(Ye,"LI",{class:!0});var W=n(U);pe(ue.$$.fragment,W),Qr=m(W,`
+ SciActive Inc`),Rr=r(W,"BR",{}),zr=m(W,`
+ 310 S Twin Oaks Valley Rd #107`),Hr=r(W,"BR",{}),Or=m(W,`
+ PMB 422`),Gr=r(W,"BR",{}),Vr=m(W,`
+ San Marcos, CA 92078`),W.forEach(a),Ye.forEach(a),Fe.forEach(a),Ke.forEach(a),Br=o(St),k&&k.l(St),St.forEach(a),this.h()},h(){l(i,"name","description"),l(i,"content","Object relational mapper for Node.js and the browser"),l(h,"property","og:title"),l(h,"content","Nymph"),l(b,"property","og:type"),l(b,"content","website"),l($,"property","og:url"),l($,"content","http://nymph.io/"),l(C,"property","og:image"),l(C,"content","https://raw.githubusercontent.com/sciactive/nymph/master/assets/nymph-logo-500.png"),l(g,"property","og:site_name"),l(g,"content","Nymph"),l(E,"property","fb:admins"),l(E,"content","508999194"),l(x,"property","og:description"),l(x,"content","Object relational mapper for Node.js and the browser"),l(S,"rel","icon"),l(S,"href",Je+"/images/cropped-logo-32x32.png"),l(S,"sizes","32x32"),l(I,"rel","icon"),l(I,"href",Je+"/images/cropped-logo-192x192.png"),l(I,"sizes","192x192"),l(R,"rel","apple-touch-icon"),l(R,"href",Je+"/images/cropped-logo-180x180.png"),l(D,"name","msapplication-TileImage"),l(D,"content",Je+"/images/cropped-logo-270x270.png"),l(T,"rel","stylesheet"),l(T,"href",Je+"/css/main.css"),l(z,"id","footer"),l(y,"class","inner"),l(u,"id","main"),l(re,"class","logo"),dl(re.src,Fr=Je+"/images/web-logo.png")||l(re,"src",Fr),l(re,"alt","SciActive"),l(ae,"class","name"),l(Y,"class","title"),l(te,"id","top-panel"),l(te,"class","alt"),l(ye,"href",v+"/"),l(ne,"class","opener static"),l(be,"href",v+"/user-guide/introduction"),l(Ie,"href",v+"/user-guide/creating-entities"),l(Ae,"href",v+"/user-guide/entity-querying"),l(Le,"href",v+"/user-guide/subscribing-to-queries"),l($e,"href",v+"/user-guide/entity-class"),l(Ce,"href",v+"/user-guide/defining-entities"),l(Se,"href",v+"/user-guide/uids"),l(ke,"href",v+"/user-guide/transactions"),l(Te,"href",v+"/user-guide/export-and-import"),l(oe,"class","opener static"),l(we,"href",v+"/packages/nymph"),l(Me,"href",v+"/packages/driver-mysql"),l(xe,"href",v+"/packages/driver-postgresql"),l(De,"href",v+"/packages/driver-sqlite3"),l(Ne,"href",v+"/packages/server"),l(Pe,"href",v+"/packages/pubsub"),l(je,"href",v+"/packages/client"),l(qe,"href",v+"/packages/client-node"),l(Ue,"href",v+"/packages/tilmeld"),l(Qe,"href",v+"/packages/tilmeld-client"),l(Re,"href",v+"/packages/tilmeld-components"),l(ze,"href",v+"/packages/tilmeld-setup"),l(He,"href",v+"/packages/sorter"),l(Oe,"href",v+"/packages/query-parser"),l(Ge,"href",v+"/packages/guid"),l(Ee,"id","menu"),l(ie,"class","major"),l(K,"href","https://port87.social/@hperrin"),l(K,"target","_blank"),l(K,"rel","noreferrer"),l(J,"class","icon"),l(Z,"href","mailto:someone@example.com"),l(X,"class","icon"),l(U,"class","icon"),l(O,"class","contact"),l(q,"class","inner"),l(M,"id","sidebar"),al(M,"inactive",L[1])},m(f,_){e(j.head,i),e(j.head,h),e(j.head,b),e(j.head,$),e(j.head,C),e(j.head,g),e(j.head,E),e(j.head,x),e(j.head,S),e(j.head,I),e(j.head,R),e(j.head,D),e(j.head,T),Ze(f,N,_),Ze(f,u,_),e(u,y),me(P,y,null),e(y,ge),Q&&Q.m(y,null),e(y,_e),e(y,z),Ze(f,ee,_),Ze(f,M,_),e(M,q),e(q,te),e(te,Y),e(Y,re),e(Y,Dt),e(Y,ae),e(q,Nt),e(q,Ee),e(Ee,V),e(V,rt),e(rt,ye),e(ye,Pt),e(V,jt),e(V,le),e(le,ne),e(le,qt),e(le,A),e(A,at),e(at,be),e(be,Ut),e(A,Qt),e(A,lt),e(lt,Ie),e(Ie,Rt),e(A,zt),e(A,nt),e(nt,Ae),e(Ae,Ht),e(A,Ot),e(A,st),e(st,Le),e(Le,Gt),e(A,Vt),e(A,ot),e(ot,$e),e($e,Bt),e(A,Kt),e(A,it),e(it,Ce),e(Ce,Wt),e(A,Ft),e(A,ct),e(ct,Se),e(Se,Yt),e(A,Jt),e(A,ft),e(ft,ke),e(ke,Xt),e(A,Zt),e(A,ut),e(ut,Te),e(Te,er),e(V,tr),e(V,se),e(se,oe),e(se,rr),e(se,c),e(c,dt),e(dt,we),e(we,ar),e(c,lr),e(c,ht),e(ht,Me),e(Me,nr),e(c,sr),e(c,pt),e(pt,xe),e(xe,or),e(c,ir),e(c,mt),e(mt,De),e(De,cr),e(c,fr),e(c,vt),e(vt,Ne),e(Ne,ur),e(c,dr),e(c,gt),e(gt,Pe),e(Pe,hr),e(c,pr),e(c,_t),e(_t,je),e(je,mr),e(c,vr),e(c,Et),e(Et,qe),e(qe,gr),e(c,_r),e(c,yt),e(yt,Ue),e(Ue,Er),e(c,yr),e(c,bt),e(bt,Qe),e(Qe,br),e(c,Ir),e(c,It),e(It,Re),e(Re,Ar),e(c,Lr),e(c,At),e(At,ze),e(ze,$r),e(c,Cr),e(c,Lt),e(Lt,He),e(He,Sr),e(c,kr),e(c,$t),e($t,Oe),e(Oe,Tr),e(c,wr),e(c,Ct),e(Ct,Ge),e(Ge,Mr),e(q,xr),e(q,B),e(B,ie),e(B,Dr),e(B,Ve),e(B,Nr),e(B,O),e(O,J),me(ce,J,null),e(J,Pr),e(J,K),e(O,jr),e(O,X),me(fe,X,null),e(X,qr),e(X,Z),L[9](Z),e(O,Ur),e(O,U),me(ue,U,null),e(U,Qr),e(U,Rr),e(U,zr),e(U,Hr),e(U,Or),e(U,Gr),e(U,Vr),e(M,Br),k&&k.m(M,null),de=!0,Kr||(aa=[Xe(wl,"resize",L[3]),Xe(u,"click",L[4]),Xe(u,"keypress",L[8]),Xe(M,"click",L[5]),Xe(M,"keypress",L[5])],Kr=!0)},p(f,[_]){Q&&Q.p&&(!de||_&64)&&hl(Q,Wr,f,f[6],de?ml(Wr,f[6],_,null):pl(f[6]),null),f[2]?k?(k.p(f,_),_&4&&H(k,1)):(k=ll(f),k.c(),H(k,1),k.m(M,null)):k&&(yl(),G(k,1,1,()=>{k=null}),El()),(!de||_&2)&&al(M,"inactive",f[1])},i(f){de||(H(P.$$.fragment,f),H(Q,f),H(ce.$$.fragment,f),H(fe.$$.fragment,f),H(ue.$$.fragment,f),H(k),de=!0)},o(f){G(P.$$.fragment,f),G(Q,f),G(ce.$$.fragment,f),G(fe.$$.fragment,f),G(ue.$$.fragment,f),G(k),de=!1},d(f){f&&(a(N),a(u),a(ee),a(M)),a(i),a(h),a(b),a($),a(C),a(g),a(E),a(x),a(S),a(I),a(R),a(D),a(T),ve(P),Q&&Q.d(f),ve(ce),ve(fe),L[9](null),ve(ue),k&&k.d(),Kr=!1,vl(aa)}}}function xl(L,i,h){let{$$slots:b={},$$scope:$}=i,C,g=!1,E=!1;gl(()=>{const u=["sciactive.com","hperrin"].reverse().join("@");h(0,C.href="mailto:"+u,C),h(0,C.textContent=u,C),document.body.classList.remove("is-preload"),I()});let x;function S(){I(),document.body&&(document.body.classList.add("is-resizing"),clearTimeout(x),x=setTimeout(function(){document.body.classList.remove("is-resizing")},100))}function I(){h(2,E=window.innerWidth<=1280),h(1,g=E)}function R(u){"href"in u.target&&I()}const D=u=>u.key==="Enter"||I();function T(u){_l[u?"unshift":"push"](()=>{C=u,h(0,C)})}const N=u=>{u.preventDefault(),u.stopPropagation(),h(1,g=!g)};return L.$$set=u=>{"$$scope"in u&&h(6,$=u.$$scope)},[C,g,E,S,I,R,$,b,D,T,N]}class Ul extends ol{constructor(i){super(),il(this,i,xl,Ml,nl,{})}}export{Ul as component,ql as universal};
diff --git a/docs/_app/immutable/nodes/1.3e67dd50.js b/docs/_app/immutable/nodes/1.3e67dd50.js
new file mode 100644
index 0000000..f31309b
--- /dev/null
+++ b/docs/_app/immutable/nodes/1.3e67dd50.js
@@ -0,0 +1 @@
+import{s as S,f as _,l as d,a as x,g as f,h as g,m as h,d as u,c as q,i as m,u as v,n as $,v as E,F as y}from"../chunks/scheduler.d7e45cc8.js";import{S as C,i as F}from"../chunks/index.77720afb.js";import{d as H}from"../chunks/singletons.faf0a52c.js";const P=()=>{const s=H;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},j={subscribe(s){return P().page.subscribe(s)}};function k(s){var b;let t,r=s[0].status+"",o,n,i,c=((b=s[0].error)==null?void 0:b.message)+"",l;return{c(){t=_("h1"),o=d(r),n=x(),i=_("p"),l=d(c)},l(e){t=f(e,"H1",{});var a=g(t);o=h(a,r),a.forEach(u),n=q(e),i=f(e,"P",{});var p=g(i);l=h(p,c),p.forEach(u)},m(e,a){m(e,t,a),v(t,o),m(e,n,a),m(e,i,a),v(i,l)},p(e,[a]){var p;a&1&&r!==(r=e[0].status+"")&&$(o,r),a&1&&c!==(c=((p=e[0].error)==null?void 0:p.message)+"")&&$(l,c)},i:E,o:E,d(e){e&&(u(t),u(n),u(i))}}}function w(s,t,r){let o;return y(s,j,n=>r(0,o=n)),[o]}let D=class extends C{constructor(t){super(),F(this,t,w,k,S,{})}};export{D as component};
diff --git a/docs/_app/immutable/nodes/1.54985b8e.js b/docs/_app/immutable/nodes/1.54985b8e.js
deleted file mode 100644
index a6f5e8a..0000000
--- a/docs/_app/immutable/nodes/1.54985b8e.js
+++ /dev/null
@@ -1 +0,0 @@
-import{S,i as q,s as x,k as _,q as f,a as C,l as d,m as g,r as h,h as u,c as k,b as m,C as v,u as $,D as E,O as y}from"../chunks/index.d7cc8d8b.js";import{s as D}from"../chunks/singletons.77faaafc.js";const H=()=>{const s=D;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},O={subscribe(s){return H().page.subscribe(s)}};function P(s){var b;let t,r=s[0].status+"",o,n,i,c=((b=s[0].error)==null?void 0:b.message)+"",l;return{c(){t=_("h1"),o=f(r),n=C(),i=_("p"),l=f(c)},l(e){t=d(e,"H1",{});var a=g(t);o=h(a,r),a.forEach(u),n=k(e),i=d(e,"P",{});var p=g(i);l=h(p,c),p.forEach(u)},m(e,a){m(e,t,a),v(t,o),m(e,n,a),m(e,i,a),v(i,l)},p(e,[a]){var p;a&1&&r!==(r=e[0].status+"")&&$(o,r),a&1&&c!==(c=((p=e[0].error)==null?void 0:p.message)+"")&&$(l,c)},i:E,o:E,d(e){e&&u(t),e&&u(n),e&&u(i)}}}function j(s,t,r){let o;return y(s,O,n=>r(0,o=n)),[o]}let A=class extends S{constructor(t){super(),q(this,t,j,P,x,{})}};export{A as component};
diff --git a/docs/_app/immutable/nodes/10.74e9b544.js b/docs/_app/immutable/nodes/10.74e9b544.js
new file mode 100644
index 0000000..8229230
--- /dev/null
+++ b/docs/_app/immutable/nodes/10.74e9b544.js
@@ -0,0 +1,88 @@
+import{s as ae,I as ue,e as se,a as s,f as i,x as le,J as he,d as C,c as o,g as a,h as pe,r as u,j as T,u as r,i as oe,v as me}from"../chunks/scheduler.d7e45cc8.js";import{S as ce,i as be,b as L,d as j,m as N,a as D,t as k,e as E}from"../chunks/index.77720afb.js";import{H as M,g as de}from"../chunks/github.64534d2c.js";import{b as ge}from"../chunks/bash.7e4226ac.js";import{t as F}from"../chunks/typescript.09c48802.js";function fe(ie){let l,P,x,e,h,G='
PubSub Server
',q,v,K=`The PubSub server provides a WebSocket server that allows Nymph to publish
+ changes and the Nymph Client to subscribe to those changes. You can
+ subscribe to individual entities, entity queries, or UIDs.`,A,p,V="
Installation
",I,m,Q,c,X="
Usage
",R,y,Z=`Any Nymph instance will only publish changes if you initialize PubSub
+ publisher before Nymph is used! This step is absolutely required to have a working PubSub system.`,Y,b,W,S,ee=`Now, on your PubSub server, you can use the createServer function to create
+ a new PubSub server using HTTP (without TLS). If you want, this can be done
+ on the same server you use as a REST server, with a different port.`,O,d,U,w,te=`If you need to provide custom handling in your server (like TLS), you can
+ use the PubSub class directly and provide it a WebSocket server instance.`,z,g,J,f,re="
Options
",B,$,ne='See the config declaration file.',H;return m=new M({props:{language:ge,code:"npm install --save @nymphjs/pubsub"}}),b=new M({props:{language:F,code:`import SQLite3Driver from '@nymphjs/driver-sqlite3';
+import { Nymph } from '@nymphjs/nymph';
+import { PubSub } from '@nymphjs/pubsub';
+
+const pubSubConfig = {
+ entries: ['ws://yourpubsubserver.tld:8080/'], // This should be set to your PubSub server URL(s).
+};
+
+const nymph = new Nymph(
+ {},
+ new SQLite3Driver({
+ filename: ':memory:', // Put the correct driver/config here.
+ }),
+);
+PubSub.initPublisher(pubSubConfig, nymph);`}}),d=new M({props:{language:F,code:`import SQLite3Driver from '@nymphjs/driver-sqlite3';
+import { Nymph } from '@nymphjs/nymph';
+import createServer, { PubSub } from '@nymphjs/pubsub';
+
+const pubSubConfig = {
+ originIsAllowed: (origin) => {
+ // Your logic to determine allowed origins goes here.
+ return true;
+ },
+ entries: ['ws://yourpubsubserver.tld:8080/'],
+};
+
+const nymph = new Nymph(
+ {},
+ new SQLite3Driver({
+ filename: ':memory:', // Put the correct driver/config here.
+ }),
+);
+// Don't forget to do this; even here!
+PubSub.initPublisher(pubSubConfig, nymph);
+
+const pubsub = createServer(8080, pubSubConfig, nymph);`}}),g=new M({props:{language:F,code:`import http from 'http';
+import { server as WebSocketServer } from 'websocket';
+import SQLite3Driver from '@nymphjs/driver-sqlite3';
+import { Nymph } from '@nymphjs/nymph';
+import { PubSub } from '@nymphjs/pubsub';
+
+const pubSubConfig = {
+ originIsAllowed: (origin) => {
+ // Your logic to determine allowed origins goes here.
+ return true;
+ },
+ entries: ['ws://yourpubsubserver.tld:8080/'],
+};
+
+// Set up Nymph.
+const nymph = new Nymph(
+ {},
+ new SQLite3Driver({
+ filename: ':memory:', // Put the correct driver/config here.
+ }),
+);
+// Don't forget to do this; even here!
+PubSub.initPublisher(pubSubConfig, nymph);
+
+// Set up the PubSub server.
+const port = 8080;
+const server = http.createServer((_request, response) => {
+ response.writeHead(404);
+ response.end();
+});
+const listener = server.listen(port, () => {
+ console.log(
+ new Date().toISOString(),
+ \`Nymph-PubSub server started listening on port \${port}.\`,
+ );
+});
+const wsServer = new WebSocketServer({
+ httpServer: listener,
+ // You should not use autoAcceptConnections for production
+ // applications, as it defeats all standard cross-origin protection
+ // facilities built into the protocol and the browser. You should
+ // *always* verify the connection's origin and decide whether or not
+ // to accept it.
+ autoAcceptConnections: false,
+});
+
+const pubsub = new PubSub(pubSubConfig, nymph, wsServer);`}}),{c(){l=new ue(!1),P=se(),x=s(),e=i("section"),h=i("header"),h.innerHTML=G,q=s(),v=i("p"),v.textContent=K,A=s(),p=i("header"),p.innerHTML=V,I=s(),L(m.$$.fragment),Q=s(),c=i("header"),c.innerHTML=X,R=s(),y=i("p"),y.innerHTML=Z,Y=s(),L(b.$$.fragment),W=s(),S=i("p"),S.textContent=ee,O=s(),L(d.$$.fragment),U=s(),w=i("p"),w.textContent=te,z=s(),L(g.$$.fragment),J=s(),f=i("header"),f.innerHTML=re,B=s(),$=i("p"),$.innerHTML=ne,this.h()},l(n){const _=le("svelte-5j20iv",document.head);l=he(_,!1),P=se(),_.forEach(C),x=o(n),e=a(n,"SECTION",{});var t=pe(e);h=a(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(h)!=="svelte-1qdw5uk"&&(h.innerHTML=G),q=o(t),v=a(t,"P",{"data-svelte-h":!0}),u(v)!=="svelte-1xdc8lw"&&(v.textContent=K),A=o(t),p=a(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(p)!=="svelte-1hx9pnb"&&(p.innerHTML=V),I=o(t),j(m.$$.fragment,t),Q=o(t),c=a(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(c)!=="svelte-n87w0o"&&(c.innerHTML=X),R=o(t),y=a(t,"P",{"data-svelte-h":!0}),u(y)!=="svelte-23d8mg"&&(y.innerHTML=Z),Y=o(t),j(b.$$.fragment,t),W=o(t),S=a(t,"P",{"data-svelte-h":!0}),u(S)!=="svelte-u44tq3"&&(S.textContent=ee),O=o(t),j(d.$$.fragment,t),U=o(t),w=a(t,"P",{"data-svelte-h":!0}),u(w)!=="svelte-1qhjyg3"&&(w.textContent=te),z=o(t),j(g.$$.fragment,t),J=o(t),f=a(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(f)!=="svelte-1v13hnh"&&(f.innerHTML=re),B=o(t),$=a(t,"P",{"data-svelte-h":!0}),u($)!=="svelte-139likm"&&($.innerHTML=ne),t.forEach(C),this.h()},h(){document.title="PubSub Server - Packages - Nymph.js",l.a=P,T(h,"class","major"),T(p,"class","major"),T(c,"class","major"),T(f,"class","major")},m(n,_){l.m(de,document.head),r(document.head,P),oe(n,x,_),oe(n,e,_),r(e,h),r(e,q),r(e,v),r(e,A),r(e,p),r(e,I),N(m,e,null),r(e,Q),r(e,c),r(e,R),r(e,y),r(e,Y),N(b,e,null),r(e,W),r(e,S),r(e,O),N(d,e,null),r(e,U),r(e,w),r(e,z),N(g,e,null),r(e,J),r(e,f),r(e,B),r(e,$),H=!0},p:me,i(n){H||(D(m.$$.fragment,n),D(b.$$.fragment,n),D(d.$$.fragment,n),D(g.$$.fragment,n),H=!0)},o(n){k(m.$$.fragment,n),k(b.$$.fragment,n),k(d.$$.fragment,n),k(g.$$.fragment,n),H=!1},d(n){n&&(l.d(),C(x),C(e)),C(P),E(m),E(b),E(d),E(g)}}}class Pe extends ce{constructor(l){super(),be(this,l,null,fe,ae,{})}}export{Pe as component};
diff --git a/docs/_app/immutable/nodes/10.c52e4994.js b/docs/_app/immutable/nodes/10.c52e4994.js
deleted file mode 100644
index 261a6ac..0000000
--- a/docs/_app/immutable/nodes/10.c52e4994.js
+++ /dev/null
@@ -1,94 +0,0 @@
-import{S as Ie,i as Le,s as qe,R as Re,e as Ce,a as u,k as o,q as h,y as Q,F as xe,T as Qe,h as s,c as l,l as a,m as i,r as p,z as W,p as We,n as S,C as e,b as He,A as Y,D as Ye,g as O,d as U,B as z}from"../chunks/index.d7cc8d8b.js";import{H as B,g as Oe}from"../chunks/github.df9008b1.js";import{b as Ue}from"../chunks/bash.2b754df6.js";import{t as ge}from"../chunks/typescript.7dd1ec19.js";function ze(Ae){let m,N,L,t,w,P,F,G,T,J,K,_,j,M,V,b,X,$,D,Z,ee,d,te,k,re,se,ne,f,oe,C,ae,ie,g,ue,H,he,le,y,pe,E,A,ce,me,v,be,c,de,fe,q;return b=new B({props:{language:Ue,code:"npm install --save @nymphjs/pubsub"}}),f=new B({props:{language:ge,code:`import SQLite3Driver from '@nymphjs/driver-sqlite3';
-import { Nymph } from '@nymphjs/nymph';
-import { PubSub } from '@nymphjs/pubsub';
-
-const pubSubConfig = {
- entries: ['ws://yourpubsubserver.tld:8080/'], // This should be set to your PubSub server URL(s).
-};
-
-const nymph = new Nymph(
- {},
- new SQLite3Driver({
- filename: ':memory:', // Put the correct driver/config here.
- }),
-);
-PubSub.initPublisher(pubSubConfig, nymph);`}}),g=new B({props:{language:ge,code:`import SQLite3Driver from '@nymphjs/driver-sqlite3';
-import { Nymph } from '@nymphjs/nymph';
-import createServer, { PubSub } from '@nymphjs/pubsub';
-
-const pubSubConfig = {
- originIsAllowed: (origin) => {
- // Your logic to determine allowed origins goes here.
- return true;
- },
- entries: ['ws://yourpubsubserver.tld:8080/'],
-};
-
-const nymph = new Nymph(
- {},
- new SQLite3Driver({
- filename: ':memory:', // Put the correct driver/config here.
- }),
-);
-// Don't forget to do this; even here!
-PubSub.initPublisher(pubSubConfig, nymph);
-
-const pubsub = createServer(8080, pubSubConfig, nymph);`}}),y=new B({props:{language:ge,code:`import http from 'http';
-import { server as WebSocketServer } from 'websocket';
-import SQLite3Driver from '@nymphjs/driver-sqlite3';
-import { Nymph } from '@nymphjs/nymph';
-import { PubSub } from '@nymphjs/pubsub';
-
-const pubSubConfig = {
- originIsAllowed: (origin) => {
- // Your logic to determine allowed origins goes here.
- return true;
- },
- entries: ['ws://yourpubsubserver.tld:8080/'],
-};
-
-// Set up Nymph.
-const nymph = new Nymph(
- {},
- new SQLite3Driver({
- filename: ':memory:', // Put the correct driver/config here.
- }),
-);
-// Don't forget to do this; even here!
-PubSub.initPublisher(pubSubConfig, nymph);
-
-// Set up the PubSub server.
-const port = 8080;
-const server = http.createServer((_request, response) => {
- response.writeHead(404);
- response.end();
-});
-const listener = server.listen(port, () => {
- console.log(
- new Date().toISOString(),
- \`Nymph-PubSub server started listening on port \${port}.\`,
- );
-});
-const wsServer = new WebSocketServer({
- httpServer: listener,
- // You should not use autoAcceptConnections for production
- // applications, as it defeats all standard cross-origin protection
- // facilities built into the protocol and the browser. You should
- // *always* verify the connection's origin and decide whether or not
- // to accept it.
- autoAcceptConnections: false,
-});
-
-const pubsub = new PubSub(pubSubConfig, nymph, wsServer);`}}),{c(){m=new Re(!1),N=Ce(),L=u(),t=o("section"),w=o("header"),P=o("h1"),F=h("PubSub Server"),G=u(),T=o("p"),J=h(`The PubSub server provides a WebSocket server that allows Nymph to publish
- changes and the Nymph Client to subscribe to those changes. You can
- subscribe to individual entities, entity queries, or UIDs.`),K=u(),_=o("header"),j=o("h2"),M=h("Installation"),V=u(),Q(b.$$.fragment),X=u(),$=o("header"),D=o("h2"),Z=h("Usage"),ee=u(),d=o("p"),te=h(`Any Nymph instance will only publish changes if you initialize PubSub
- publisher before Nymph is used! This step is `),k=o("strong"),re=h("absolutely required"),se=h(" to have a working PubSub system."),ne=u(),Q(f.$$.fragment),oe=u(),C=o("p"),ae=h(`Now, on your PubSub server, you can use the createServer function to create
- a new PubSub server using HTTP (without TLS). If you want, this can be done
- on the same server you use as a REST server, with a different port.`),ie=u(),Q(g.$$.fragment),ue=u(),H=o("p"),he=h(`If you need to provide custom handling in your server (like TLS), you can
- use the PubSub class directly and provide it a WebSocket server instance.`),le=u(),Q(y.$$.fragment),pe=u(),E=o("header"),A=o("h2"),ce=h("Options"),me=u(),v=o("p"),be=h("See the "),c=o("a"),de=h("config declaration file"),fe=h("."),this.h()},l(n){const I=xe("svelte-5j20iv",document.head);m=Qe(I,!1),N=Ce(),I.forEach(s),L=l(n),t=a(n,"SECTION",{});var r=i(t);w=a(r,"HEADER",{class:!0});var ye=i(w);P=a(ye,"H1",{style:!0});var ve=i(P);F=p(ve,"PubSub Server"),ve.forEach(s),ye.forEach(s),G=l(r),T=a(r,"P",{});var Se=i(T);J=p(Se,`The PubSub server provides a WebSocket server that allows Nymph to publish
- changes and the Nymph Client to subscribe to those changes. You can
- subscribe to individual entities, entity queries, or UIDs.`),Se.forEach(s),K=l(r),_=a(r,"HEADER",{class:!0});var we=i(_);j=a(we,"H2",{});var Pe=i(j);M=p(Pe,"Installation"),Pe.forEach(s),we.forEach(s),V=l(r),W(b.$$.fragment,r),X=l(r),$=a(r,"HEADER",{class:!0});var _e=i($);D=a(_e,"H2",{});var $e=i(D);Z=p($e,"Usage"),$e.forEach(s),_e.forEach(s),ee=l(r),d=a(r,"P",{});var R=i(d);te=p(R,`Any Nymph instance will only publish changes if you initialize PubSub
- publisher before Nymph is used! This step is `),k=a(R,"STRONG",{});var Ee=i(k);re=p(Ee,"absolutely required"),Ee.forEach(s),se=p(R," to have a working PubSub system."),R.forEach(s),ne=l(r),W(f.$$.fragment,r),oe=l(r),C=a(r,"P",{});var Ne=i(C);ae=p(Ne,`Now, on your PubSub server, you can use the createServer function to create
- a new PubSub server using HTTP (without TLS). If you want, this can be done
- on the same server you use as a REST server, with a different port.`),Ne.forEach(s),ie=l(r),W(g.$$.fragment,r),ue=l(r),H=a(r,"P",{});var Te=i(H);he=p(Te,`If you need to provide custom handling in your server (like TLS), you can
- use the PubSub class directly and provide it a WebSocket server instance.`),Te.forEach(s),le=l(r),W(y.$$.fragment,r),pe=l(r),E=a(r,"HEADER",{class:!0});var je=i(E);A=a(je,"H2",{});var De=i(A);ce=p(De,"Options"),De.forEach(s),je.forEach(s),me=l(r),v=a(r,"P",{});var x=i(v);be=p(x,"See the "),c=a(x,"A",{href:!0,target:!0,rel:!0});var ke=i(c);de=p(ke,"config declaration file"),ke.forEach(s),fe=p(x,"."),x.forEach(s),r.forEach(s),this.h()},h(){document.title="PubSub Server - Packages - Nymph.js",m.a=N,We(P,"font-size","3em"),S(w,"class","major"),S(_,"class","major"),S($,"class","major"),S(E,"class","major"),S(c,"href","https://github.com/sciactive/nymphjs/tree/master/packages/pubsub/src/conf/d.ts"),S(c,"target","_blank"),S(c,"rel","external")},m(n,I){m.m(Oe,document.head),e(document.head,N),He(n,L,I),He(n,t,I),e(t,w),e(w,P),e(P,F),e(t,G),e(t,T),e(T,J),e(t,K),e(t,_),e(_,j),e(j,M),e(t,V),Y(b,t,null),e(t,X),e(t,$),e($,D),e(D,Z),e(t,ee),e(t,d),e(d,te),e(d,k),e(k,re),e(d,se),e(t,ne),Y(f,t,null),e(t,oe),e(t,C),e(C,ae),e(t,ie),Y(g,t,null),e(t,ue),e(t,H),e(H,he),e(t,le),Y(y,t,null),e(t,pe),e(t,E),e(E,A),e(A,ce),e(t,me),e(t,v),e(v,be),e(v,c),e(c,de),e(v,fe),q=!0},p:Ye,i(n){q||(O(b.$$.fragment,n),O(f.$$.fragment,n),O(g.$$.fragment,n),O(y.$$.fragment,n),q=!0)},o(n){U(b.$$.fragment,n),U(f.$$.fragment,n),U(g.$$.fragment,n),U(y.$$.fragment,n),q=!1},d(n){s(N),n&&m.d(),n&&s(L),n&&s(t),z(b),z(f),z(g),z(y)}}}class Ke extends Ie{constructor(m){super(),Le(this,m,null,ze,qe,{})}}export{Ke as component};
diff --git a/docs/_app/immutable/nodes/11.223541f1.js b/docs/_app/immutable/nodes/11.223541f1.js
deleted file mode 100644
index 7a1b8ec..0000000
--- a/docs/_app/immutable/nodes/11.223541f1.js
+++ /dev/null
@@ -1,152 +0,0 @@
-import{S as yE,i as gE,s as CE,R as OE,e as cE,a as c,k as a,q as o,y as hE,F as DE,T as kE,h as t,c as h,l,m as r,r as n,z as iE,p as wE,n as M,C as e,b as fE,A as uE,D as LE,g as EE,d as vE,B as _E}from"../chunks/index.d7cc8d8b.js";import{H as pE,g as bE}from"../chunks/github.df9008b1.js";import{b as IE}from"../chunks/bash.2b754df6.js";import{t as HE}from"../chunks/typescript.7dd1ec19.js";function qE(mE){let X,Fe,sr,s,pe,me,qr,Ur,Qe,Pr,Sr,ye,Be,Ar,Nr,z,xr,ge,Ye,Rr,Jr,G,$r,Me,Tr,jr,Fr,K,Qr,Ce,Xe,Br,Yr,ze,Mr,Xr,m,Ge,Ke,zr,Gr,Ve,We,Kr,Vr,Ze,et,Wr,Zr,y,tt,eo,to,at,ao,lo,lt,ro,oo,rt,no,so,ot,co,ho,Oe,nt,io,fo,st,uo,Eo,dt,ct,vo,_o,ht,po,mo,b,V,it,yo,go,ft,Co,Oo,I,ut,Do,ko,Et,wo,Lo,vt,_t,bo,Io,H,pt,Ho,qo,mt,Uo,Po,yt,f,So,gt,Ao,No,Ct,xo,Ro,Ot,Jo,$o,Dt,ch='{"prop":"val"}',To,jo,Fo,kt,wt,Qo,Bo,Lt,Yo,Mo,bt,W,It,hh="{guid}",Xo,zo,Ht,ih="{!guid}",Go,Ko,qt,Ut,Vo,Wo,Pt,Zo,en,St,Z,At,fh="",tn,an,Nt,uh="",ln,rn,xt,Rt,on,nn,Jt,sn,dn,$t,ee,Tt,cn,hn,jt,fn,un,Ft,Qt,En,vn,Bt,_n,pn,Yt,te,Mt,Eh="name<{guid}>",mn,yn,Xt,vh="name!<{guid}>",gn,Cn,zt,Gt,On,Dn,Kt,kn,wn,Vt,q,Wt,_h="name<{refclassname inner query}>",Ln,bn,Zt,ph="name!<{refclassname inner query}>",In,Hn,ae,ea,qn,Un,ta,Pn,Sn,aa,la,An,Nn,ra,xn,Rn,le,U,oa,mh="name",Jn,$n,na,yh="name!",Tn,jn,sa,da,Fn,Qn,P,ca,gh="name",Bn,Yn,ha,Ch="name!",Mn,Xn,ia,u,zn,fa,Gn,Kn,ua,Vn,Wn,Ea,Zn,es,va,Oh='{"prop":"val"}',ts,as,ls,_a,pa,rs,os,ma,ns,ss,ya,re,ga,ds,cs,Ca,hs,is,Oa,Da,fs,us,ka,Es,vs,wa,oe,La,_s,ps,ba,ms,ys,Ia,Ha,gs,Cs,qa,Os,Ds,ne,se,Ua,ks,ws,Pa,Ls,bs,S,Sa,Is,Hs,Aa,qs,Us,Na,xa,Ps,Ss,Ra,Ja,As,Ns,$a,xs,Rs,Ta,de,ja,Js,$s,Fa,Ts,js,Qa,Ba,Fs,Qs,Ya,Bs,Ys,A,Ma,Xa,Dh="name>number",Ms,Xs,ce,za,kh="name>relative",zs,Gs,Ga,N,Ks,Ka,Vs,Ws,Va,Zs,ed,td,he,Wa,wh='name>"relative time value"',ad,ld,Za,E,rd,el,od,nd,tl,sd,dd,al,cd,hd,ll,id,fd,ud,rl,ol,Ed,vd,nl,_d,pd,x,sl,dl,Lh="name>=number",md,yd,ie,cl,bh="name>=relative",gd,Cd,hl,R,Od,il,Dd,kd,fl,wd,Ld,bd,fe,ul,Ih='name>="relative time value"',Id,Hd,El,v,qd,vl,Ud,Pd,_l,Sd,Ad,pl,Nd,xd,ml,Rd,Jd,$d,yl,gl,Td,jd,Cl,Fd,Qd,J,Ol,Dl,Hh="name) abilities<"lifeline-subscriber">)
-
-
-Published is not truthy and cdate is not greater than 6 months ago.
-
-(! [published] cdate>"6 months ago")`,Bc,Yc,ke,Zl,Mc,Xc,g,zc,er,Gc,Kc,tr,Vc,Wc,ar,Zc,eh,th,we,lr,ah,lh,F,rh,rr,oh,nh,or,sh,dh,dr;return z=new pE({props:{language:IE,code:"npm install --save @nymphjs/query-parser"}}),K=new pE({props:{language:HE,code:`import queryParser from '@nymphjs/query-parser';
-
-import BlogPost from './BlogPost';
-import Category from './Category';
-
-async function doQuery() {
- const [options, ...selectors] = queryParser({
- query:
- 'limit:4 sort:mdate foobar (| [archived] mdate<"2 weeks ago") category<{cat Tech}>',
- entityClass: BlogPost,
- defaultFields: ['title', 'body'],
- qrefMap: {
- cat: {
- class: Category,
- defaultFields: ['name'],
- },
- },
- });
- /*
- Options will be
- {
- class: BlogPost,
- limit: 4,
- sort: 'mdate'
- }
-
- And selectors will be (equivalent to)
- [
- {
- type: "|",
- truthy: [
- "archived"
- ],
- lt: [
- ["mdate", null, "2 weeks ago"]
- ]
- },
- {
- type: "&",
- qref: [
- "category",
- [
- {
- class: Category
- },
- {
- type: "|",
- ilike: ["name", "%Tech%"]
- }
- ]
- ]
- },
- {
- type: "|",
- ilike: [
- ["title", "%foobar%"],
- ["body", "%foobar%"]
- ]
- }
- ]
- */
- const entities = await nymph.getEntities(options, ...selectors);
-}`}}),{c(){X=new OE(!1),Fe=cE(),sr=c(),s=a("section"),pe=a("header"),me=a("h1"),qr=o("Query Parser"),Ur=c(),Qe=a("p"),Pr=o(`The Query Parser is a utility for creating complex Nymph entity queries from
- a simple text input. Essentially, it turns a string into a Nymph query.`),Sr=c(),ye=a("header"),Be=a("h2"),Ar=o("Installation"),Nr=c(),hE(z.$$.fragment),xr=c(),ge=a("header"),Ye=a("h2"),Rr=o("Usage"),Jr=c(),G=a("p"),$r=o(`The query parser will turn a string into an Options and Selectors array for
- the Nymph Client. It has a syntax that allows for `),Me=a("em"),Tr=o("most"),jr=o(` features of a
- Nymph query to be expressed in a text input.`),Fr=c(),hE(K.$$.fragment),Qr=c(),Ce=a("header"),Xe=a("h2"),Br=o("Options"),Yr=c(),ze=a("p"),Mr=o("You can set limit, offset, sort, and reverse like this."),Xr=c(),m=a("ul"),Ge=a("li"),Ke=a("code"),zr=o("limit:number"),Gr=c(),Ve=a("li"),We=a("code"),Kr=o("offset:number"),Vr=c(),Ze=a("li"),et=a("code"),Wr=o("sort:string"),Zr=c(),y=a("li"),tt=a("code"),eo=o("reverse:true"),to=o(", "),at=a("code"),ao=o("reverse:false"),lo=o(`,
- `),lt=a("code"),ro=o("reverse:1"),oo=o(", or "),rt=a("code"),no=o("reverse:0"),so=c(),ot=a("p"),co=o(`These must appear in the top level of the query (outside of any
- parentheses).`),ho=c(),Oe=a("header"),nt=a("h2"),io=o("Clauses"),fo=c(),st=a("p"),uo=o("These are the available clauses, and their syntax."),Eo=c(),dt=a("header"),ct=a("h3"),vo=o("equal and !equal"),_o=c(),ht=a("p"),po=o("Check for string or JSON representation equality."),mo=c(),b=a("ul"),V=a("li"),it=a("code"),yo=o("name=string"),go=o(" or "),ft=a("code"),Co=o("name!=string"),Oo=c(),I=a("li"),ut=a("code"),Do=o('name="string value"'),ko=o(" or "),Et=a("code"),wo=o('name!="string value"'),Lo=c(),vt=a("ul"),_t=a("li"),bo=o(`(Use this if you have a space in your string, or if your string could
- be interpreted as valid JSON. Escape double quotes with a leading
- backslash.)`),Io=c(),H=a("li"),pt=a("code"),Ho=o("name=JSON"),qo=o(" or "),mt=a("code"),Uo=o("name!=JSON"),Po=c(),yt=a("ul"),f=a("li"),So=o("(Match a JSON encoded value (like "),gt=a("code"),Ao=o("true"),No=o(", "),Ct=a("code"),xo=o("1"),Ro=o(`,
- `),Ot=a("code"),Jo=o("[1,2,3]"),$o=o(", or "),Dt=a("code"),To=o(ch),jo=o(").)"),Fo=c(),kt=a("header"),wt=a("h3"),Qo=o("guid and !guid"),Bo=c(),Lt=a("p"),Yo=o("Check for entity GUID."),Mo=c(),bt=a("ul"),W=a("li"),It=a("code"),Xo=o(hh),zo=o(" or "),Ht=a("code"),Go=o(ih),Ko=c(),qt=a("header"),Ut=a("h3"),Vo=o("tag and !tag"),Wo=c(),Pt=a("p"),Zo=o("Check for a tag."),en=c(),St=a("ul"),Z=a("li"),At=a("code"),tn=o(fh),an=o(" or "),Nt=a("code"),ln=o(uh),rn=c(),xt=a("header"),Rt=a("h3"),on=o("truthy and !truthy"),nn=c(),Jt=a("p"),sn=o("Check for truthiness."),dn=c(),$t=a("ul"),ee=a("li"),Tt=a("code"),cn=o("[name]"),hn=o(" or "),jt=a("code"),fn=o("[!name]"),un=c(),Ft=a("header"),Qt=a("h3"),En=o("ref and !ref"),vn=c(),Bt=a("p"),_n=o("Check for a reference to another entity."),pn=c(),Yt=a("ul"),te=a("li"),Mt=a("code"),mn=o(Eh),yn=o(" or "),Xt=a("code"),gn=o(vh),Cn=c(),zt=a("header"),Gt=a("h3"),On=o("qref and !qref"),Dn=c(),Kt=a("p"),kn=o("Check for a reference to another entity using a query."),wn=c(),Vt=a("ul"),q=a("li"),Wt=a("code"),Ln=o(_h),bn=o(` or
- `),Zt=a("code"),In=o(ph),Hn=c(),ae=a("ul"),ea=a("li"),qn=o("(Escape curly brackets with a leading backslash.)"),Un=c(),ta=a("li"),Pn=o(`(Requires a map of refclassname to their actual class and default
- fields.)`),Sn=c(),aa=a("header"),la=a("h3"),An=o("contain and !contain"),Nn=c(),ra=a("p"),xn=o(`Check for a JSON representation appearing within the JSON representation of
- the named property.`),Rn=c(),le=a("ul"),U=a("li"),oa=a("code"),Jn=o(mh),$n=o(` or
- `),na=a("code"),Tn=o(yh),jn=c(),sa=a("ul"),da=a("li"),Fn=o(`(Escape angle brackets with a leading backslash. If your value could
- be interpreted as valid JSON, encode it as a JSON string and use the
- JSON syntax instead.)`),Qn=c(),P=a("li"),ca=a("code"),Bn=o(gh),Yn=o(` or
- `),ha=a("code"),Mn=o(Ch),Xn=c(),ia=a("ul"),u=a("li"),zn=o("(Search for a JSON encoded value (like "),fa=a("code"),Gn=o("true"),Kn=o(`,
- `),ua=a("code"),Vn=o("1"),Wn=o(`,
- `),Ea=a("code"),Zn=o("[1,2,3]"),es=o(", or "),va=a("code"),ts=o(Oh),as=o(").)"),ls=c(),_a=a("header"),pa=a("h3"),rs=o("match and !match"),os=c(),ma=a("p"),ns=o("Check for POSIX regex match."),ss=c(),ya=a("ul"),re=a("li"),ga=a("code"),ds=o("name~/pattern/"),cs=o(" or "),Ca=a("code"),hs=o("name!~/pattern/"),is=c(),Oa=a("header"),Da=a("h3"),fs=o("imatch and !imatch"),us=c(),ka=a("p"),Es=o("Check for case insensitive POSIX regex match."),vs=c(),wa=a("ul"),oe=a("li"),La=a("code"),_s=o("name~/pattern/i"),ps=o(" or "),ba=a("code"),ms=o("name!~/pattern/i"),ys=c(),Ia=a("header"),Ha=a("h3"),gs=o("like and !like"),Cs=c(),qa=a("p"),Os=o(`Check for pattern match where _ is single char wildcard and % is any length
- wildcard.`),Ds=c(),ne=a("ul"),se=a("li"),Ua=a("code"),ks=o("name~pattern"),ws=o(" or "),Pa=a("code"),Ls=o("name!~pattern"),bs=c(),S=a("li"),Sa=a("code"),Is=o('name~"pattern"'),Hs=o(" or "),Aa=a("code"),qs=o('name!~"pattern"'),Us=c(),Na=a("ul"),xa=a("li"),Ps=o("(Use this if you have a space in your pattern.)"),Ss=c(),Ra=a("header"),Ja=a("h3"),As=o("ilike and !ilike"),Ns=c(),$a=a("p"),xs=o(`Check for case insensitive pattern match where _ is single char wildcard and
- % is any length wildcard.`),Rs=c(),Ta=a("ul"),de=a("li"),ja=a("code"),Js=o('name~"pattern"i'),$s=o(" or "),Fa=a("code"),Ts=o('name!~"pattern"i'),js=c(),Qa=a("header"),Ba=a("h3"),Fs=o("gt"),Qs=c(),Ya=a("p"),Bs=o("Check a prop's value is greater than a given value."),Ys=c(),A=a("ul"),Ma=a("li"),Xa=a("code"),Ms=o(Dh),Xs=c(),ce=a("li"),za=a("code"),zs=o(kh),Gs=c(),Ga=a("ul"),N=a("li"),Ks=o("(A single relative time value like "),Ka=a("code"),Vs=o("now"),Ws=o(` or
- `),Va=a("code"),Zs=o("yesterday"),ed=o(".)"),td=c(),he=a("li"),Wa=a("code"),ad=o(wh),ld=c(),Za=a("ul"),E=a("li"),rd=o("(Use this for a time value with a space like "),el=a("code"),od=o('"two days from now"'),nd=o(`,
- `),tl=a("code"),sd=o('"last thursday"'),dd=o(", "),al=a("code"),cd=o('"+4 weeks"'),hd=o(`, or
- `),ll=a("code"),id=o('"5 minutes ago"'),fd=o(".)"),ud=c(),rl=a("header"),ol=a("h3"),Ed=o("gte"),vd=c(),nl=a("p"),_d=o("Check a prop's value is greater than or equal to a given value."),pd=c(),x=a("ul"),sl=a("li"),dl=a("code"),md=o(Lh),yd=c(),ie=a("li"),cl=a("code"),gd=o(bh),Cd=c(),hl=a("ul"),R=a("li"),Od=o("(A single relative time value like "),il=a("code"),Dd=o("now"),kd=o(` or
- `),fl=a("code"),wd=o("yesterday"),Ld=o(".)"),bd=c(),fe=a("li"),ul=a("code"),Id=o(Ih),Hd=c(),El=a("ul"),v=a("li"),qd=o("(Use this for a time value with a space like "),vl=a("code"),Ud=o('"two days from now"'),Pd=o(`,
- `),_l=a("code"),Sd=o('"last thursday"'),Ad=o(", "),pl=a("code"),Nd=o('"+4 weeks"'),xd=o(`, or
- `),ml=a("code"),Rd=o('"5 minutes ago"'),Jd=o(".)"),$d=c(),yl=a("header"),gl=a("h3"),Td=o("lt"),jd=c(),Cl=a("p"),Fd=o("Check a prop's value is less than a given value."),Qd=c(),J=a("ul"),Ol=a("li"),Dl=a("code"),Bd=o(Hh),Yd=c(),ue=a("li"),kl=a("code"),Md=o(qh),Xd=c(),wl=a("ul"),$=a("li"),zd=o("(A single relative time value like "),Ll=a("code"),Gd=o("now"),Kd=o(` or
- `),bl=a("code"),Vd=o("yesterday"),Wd=o(".)"),Zd=c(),Ee=a("li"),Il=a("code"),ec=o(Uh),tc=c(),Hl=a("ul"),_=a("li"),ac=o("(Use this for a time value with a space like "),ql=a("code"),lc=o('"two days from now"'),rc=o(`,
- `),Ul=a("code"),oc=o('"last thursday"'),nc=o(", "),Pl=a("code"),sc=o('"+4 weeks"'),dc=o(`, or
- `),Sl=a("code"),cc=o('"5 minutes ago"'),hc=o(".)"),ic=c(),Al=a("header"),Nl=a("h3"),fc=o("lte"),uc=c(),xl=a("p"),Ec=o("Check a prop's value is less than or equal to a given value."),vc=c(),T=a("ul"),Rl=a("li"),Jl=a("code"),_c=o(Ph),pc=c(),ve=a("li"),$l=a("code"),mc=o(Sh),yc=c(),Tl=a("ul"),j=a("li"),gc=o("(A single relative time value like "),jl=a("code"),Cc=o("now"),Oc=o(` or
- `),Fl=a("code"),Dc=o("yesterday"),kc=o(".)"),wc=c(),_e=a("li"),Ql=a("code"),Lc=o(Ah),bc=c(),Bl=a("ul"),p=a("li"),Ic=o("(Use this for a time value with a space like "),Yl=a("code"),Hc=o('"two days from now"'),qc=o(`,
- `),Ml=a("code"),Uc=o('"last thursday"'),Pc=o(", "),Xl=a("code"),Sc=o('"+4 weeks"'),Ac=o(`, or
- `),zl=a("code"),Nc=o('"5 minutes ago"'),xc=o(".)"),Rc=c(),De=a("header"),Gl=a("h2"),Jc=o("Selectors"),$c=c(),Kl=a("p"),Tc=o(`You can specify nested selectors with different types using pairs of
- parentheses. The first character (or two) inside the parentheses can be a
- type: "&", "!&", "|", "!|", or "!" (the same as "!&").`),jc=c(),Vl=a("p"),Fc=o("Here are some examples of nested selectors."),Qc=c(),Wl=a("pre"),Bc=o(Nh),Yc=c(),ke=a("header"),Zl=a("h2"),Mc=o("Default Fields"),Xc=c(),g=a("p"),zc=o(`Anything contained in the query (including in selector parentheses) that
- doesn't match any of the options or clause syntaxes listed above (bare query
- parts) will be added (at the appropriate nesting level) to a selector with
- an `),er=a("code"),Gc=o('"|"'),Kc=o(" type in an "),tr=a("code"),Vc=o("ilike"),Wc=o(` clause surrounded by "%"
- characters for each field passed in to the `),ar=a("code"),Zc=o("defaultFields"),eh=o(" argument."),th=c(),we=a("header"),lr=a("h2"),ah=o("Bare Query Handler"),lh=c(),F=a("p"),rh=o("You can also supply a function in the option "),rr=a("code"),oh=o("bareHandler"),nh=o(` that
- will handle bare query parts instead of the "Default Fields" behavior
- described above. It will receive three arguments, the query parts, the
- entity class, and the default fields entry for that class. It should return
- a partial selector that will replace or extend the `),or=a("code"),sh=o('"|"'),dh=o(" selector."),this.h()},l(i){const nr=DE("svelte-18iv594",document.head);X=kE(nr,!1),Fe=cE(),nr.forEach(t),sr=h(i),s=l(i,"SECTION",{});var d=r(s);pe=l(d,"HEADER",{class:!0});var xh=r(pe);me=l(xh,"H1",{style:!0});var Rh=r(me);qr=n(Rh,"Query Parser"),Rh.forEach(t),xh.forEach(t),Ur=h(d),Qe=l(d,"P",{});var Jh=r(Qe);Pr=n(Jh,`The Query Parser is a utility for creating complex Nymph entity queries from
- a simple text input. Essentially, it turns a string into a Nymph query.`),Jh.forEach(t),Sr=h(d),ye=l(d,"HEADER",{class:!0});var $h=r(ye);Be=l($h,"H2",{});var Th=r(Be);Ar=n(Th,"Installation"),Th.forEach(t),$h.forEach(t),Nr=h(d),iE(z.$$.fragment,d),xr=h(d),ge=l(d,"HEADER",{class:!0});var jh=r(ge);Ye=l(jh,"H2",{});var Fh=r(Ye);Rr=n(Fh,"Usage"),Fh.forEach(t),jh.forEach(t),Jr=h(d),G=l(d,"P",{});var cr=r(G);$r=n(cr,`The query parser will turn a string into an Options and Selectors array for
- the Nymph Client. It has a syntax that allows for `),Me=l(cr,"EM",{});var Qh=r(Me);Tr=n(Qh,"most"),Qh.forEach(t),jr=n(cr,` features of a
- Nymph query to be expressed in a text input.`),cr.forEach(t),Fr=h(d),iE(K.$$.fragment,d),Qr=h(d),Ce=l(d,"HEADER",{class:!0});var Bh=r(Ce);Xe=l(Bh,"H2",{});var Yh=r(Xe);Br=n(Yh,"Options"),Yh.forEach(t),Bh.forEach(t),Yr=h(d),ze=l(d,"P",{});var Mh=r(ze);Mr=n(Mh,"You can set limit, offset, sort, and reverse like this."),Mh.forEach(t),Xr=h(d),m=l(d,"UL",{});var Q=r(m);Ge=l(Q,"LI",{});var Xh=r(Ge);Ke=l(Xh,"CODE",{});var zh=r(Ke);zr=n(zh,"limit:number"),zh.forEach(t),Xh.forEach(t),Gr=h(Q),Ve=l(Q,"LI",{});var Gh=r(Ve);We=l(Gh,"CODE",{});var Kh=r(We);Kr=n(Kh,"offset:number"),Kh.forEach(t),Gh.forEach(t),Vr=h(Q),Ze=l(Q,"LI",{});var Vh=r(Ze);et=l(Vh,"CODE",{});var Wh=r(et);Wr=n(Wh,"sort:string"),Wh.forEach(t),Vh.forEach(t),Zr=h(Q),y=l(Q,"LI",{});var B=r(y);tt=l(B,"CODE",{});var Zh=r(tt);eo=n(Zh,"reverse:true"),Zh.forEach(t),to=n(B,", "),at=l(B,"CODE",{});var ei=r(at);ao=n(ei,"reverse:false"),ei.forEach(t),lo=n(B,`,
- `),lt=l(B,"CODE",{});var ti=r(lt);ro=n(ti,"reverse:1"),ti.forEach(t),oo=n(B,", or "),rt=l(B,"CODE",{});var ai=r(rt);no=n(ai,"reverse:0"),ai.forEach(t),B.forEach(t),Q.forEach(t),so=h(d),ot=l(d,"P",{});var li=r(ot);co=n(li,`These must appear in the top level of the query (outside of any
- parentheses).`),li.forEach(t),ho=h(d),Oe=l(d,"HEADER",{class:!0});var ri=r(Oe);nt=l(ri,"H2",{});var oi=r(nt);io=n(oi,"Clauses"),oi.forEach(t),ri.forEach(t),fo=h(d),st=l(d,"P",{});var ni=r(st);uo=n(ni,"These are the available clauses, and their syntax."),ni.forEach(t),Eo=h(d),dt=l(d,"HEADER",{});var si=r(dt);ct=l(si,"H3",{});var di=r(ct);vo=n(di,"equal and !equal"),di.forEach(t),si.forEach(t),_o=h(d),ht=l(d,"P",{});var ci=r(ht);po=n(ci,"Check for string or JSON representation equality."),ci.forEach(t),mo=h(d),b=l(d,"UL",{});var Le=r(b);V=l(Le,"LI",{});var hr=r(V);it=l(hr,"CODE",{});var hi=r(it);yo=n(hi,"name=string"),hi.forEach(t),go=n(hr," or "),ft=l(hr,"CODE",{});var ii=r(ft);Co=n(ii,"name!=string"),ii.forEach(t),hr.forEach(t),Oo=h(Le),I=l(Le,"LI",{});var be=r(I);ut=l(be,"CODE",{});var fi=r(ut);Do=n(fi,'name="string value"'),fi.forEach(t),ko=n(be," or "),Et=l(be,"CODE",{});var ui=r(Et);wo=n(ui,'name!="string value"'),ui.forEach(t),Lo=h(be),vt=l(be,"UL",{});var Ei=r(vt);_t=l(Ei,"LI",{});var vi=r(_t);bo=n(vi,`(Use this if you have a space in your string, or if your string could
- be interpreted as valid JSON. Escape double quotes with a leading
- backslash.)`),vi.forEach(t),Ei.forEach(t),be.forEach(t),Io=h(Le),H=l(Le,"LI",{});var Ie=r(H);pt=l(Ie,"CODE",{});var _i=r(pt);Ho=n(_i,"name=JSON"),_i.forEach(t),qo=n(Ie," or "),mt=l(Ie,"CODE",{});var pi=r(mt);Uo=n(pi,"name!=JSON"),pi.forEach(t),Po=h(Ie),yt=l(Ie,"UL",{});var mi=r(yt);f=l(mi,"LI",{});var C=r(f);So=n(C,"(Match a JSON encoded value (like "),gt=l(C,"CODE",{});var yi=r(gt);Ao=n(yi,"true"),yi.forEach(t),No=n(C,", "),Ct=l(C,"CODE",{});var gi=r(Ct);xo=n(gi,"1"),gi.forEach(t),Ro=n(C,`,
- `),Ot=l(C,"CODE",{});var Ci=r(Ot);Jo=n(Ci,"[1,2,3]"),Ci.forEach(t),$o=n(C,", or "),Dt=l(C,"CODE",{});var Oi=r(Dt);To=n(Oi,ch),Oi.forEach(t),jo=n(C,").)"),C.forEach(t),mi.forEach(t),Ie.forEach(t),Le.forEach(t),Fo=h(d),kt=l(d,"HEADER",{});var Di=r(kt);wt=l(Di,"H3",{});var ki=r(wt);Qo=n(ki,"guid and !guid"),ki.forEach(t),Di.forEach(t),Bo=h(d),Lt=l(d,"P",{});var wi=r(Lt);Yo=n(wi,"Check for entity GUID."),wi.forEach(t),Mo=h(d),bt=l(d,"UL",{});var Li=r(bt);W=l(Li,"LI",{});var ir=r(W);It=l(ir,"CODE",{});var bi=r(It);Xo=n(bi,hh),bi.forEach(t),zo=n(ir," or "),Ht=l(ir,"CODE",{});var Ii=r(Ht);Go=n(Ii,ih),Ii.forEach(t),ir.forEach(t),Li.forEach(t),Ko=h(d),qt=l(d,"HEADER",{});var Hi=r(qt);Ut=l(Hi,"H3",{});var qi=r(Ut);Vo=n(qi,"tag and !tag"),qi.forEach(t),Hi.forEach(t),Wo=h(d),Pt=l(d,"P",{});var Ui=r(Pt);Zo=n(Ui,"Check for a tag."),Ui.forEach(t),en=h(d),St=l(d,"UL",{});var Pi=r(St);Z=l(Pi,"LI",{});var fr=r(Z);At=l(fr,"CODE",{});var Si=r(At);tn=n(Si,fh),Si.forEach(t),an=n(fr," or "),Nt=l(fr,"CODE",{});var Ai=r(Nt);ln=n(Ai,uh),Ai.forEach(t),fr.forEach(t),Pi.forEach(t),rn=h(d),xt=l(d,"HEADER",{});var Ni=r(xt);Rt=l(Ni,"H3",{});var xi=r(Rt);on=n(xi,"truthy and !truthy"),xi.forEach(t),Ni.forEach(t),nn=h(d),Jt=l(d,"P",{});var Ri=r(Jt);sn=n(Ri,"Check for truthiness."),Ri.forEach(t),dn=h(d),$t=l(d,"UL",{});var Ji=r($t);ee=l(Ji,"LI",{});var ur=r(ee);Tt=l(ur,"CODE",{});var $i=r(Tt);cn=n($i,"[name]"),$i.forEach(t),hn=n(ur," or "),jt=l(ur,"CODE",{});var Ti=r(jt);fn=n(Ti,"[!name]"),Ti.forEach(t),ur.forEach(t),Ji.forEach(t),un=h(d),Ft=l(d,"HEADER",{});var ji=r(Ft);Qt=l(ji,"H3",{});var Fi=r(Qt);En=n(Fi,"ref and !ref"),Fi.forEach(t),ji.forEach(t),vn=h(d),Bt=l(d,"P",{});var Qi=r(Bt);_n=n(Qi,"Check for a reference to another entity."),Qi.forEach(t),pn=h(d),Yt=l(d,"UL",{});var Bi=r(Yt);te=l(Bi,"LI",{});var Er=r(te);Mt=l(Er,"CODE",{});var Yi=r(Mt);mn=n(Yi,Eh),Yi.forEach(t),yn=n(Er," or "),Xt=l(Er,"CODE",{});var Mi=r(Xt);gn=n(Mi,vh),Mi.forEach(t),Er.forEach(t),Bi.forEach(t),Cn=h(d),zt=l(d,"HEADER",{});var Xi=r(zt);Gt=l(Xi,"H3",{});var zi=r(Gt);On=n(zi,"qref and !qref"),zi.forEach(t),Xi.forEach(t),Dn=h(d),Kt=l(d,"P",{});var Gi=r(Kt);kn=n(Gi,"Check for a reference to another entity using a query."),Gi.forEach(t),wn=h(d),Vt=l(d,"UL",{});var Ki=r(Vt);q=l(Ki,"LI",{});var He=r(q);Wt=l(He,"CODE",{});var Vi=r(Wt);Ln=n(Vi,_h),Vi.forEach(t),bn=n(He,` or
- `),Zt=l(He,"CODE",{});var Wi=r(Zt);In=n(Wi,ph),Wi.forEach(t),Hn=h(He),ae=l(He,"UL",{});var vr=r(ae);ea=l(vr,"LI",{});var Zi=r(ea);qn=n(Zi,"(Escape curly brackets with a leading backslash.)"),Zi.forEach(t),Un=h(vr),ta=l(vr,"LI",{});var ef=r(ta);Pn=n(ef,`(Requires a map of refclassname to their actual class and default
- fields.)`),ef.forEach(t),vr.forEach(t),He.forEach(t),Ki.forEach(t),Sn=h(d),aa=l(d,"HEADER",{});var tf=r(aa);la=l(tf,"H3",{});var af=r(la);An=n(af,"contain and !contain"),af.forEach(t),tf.forEach(t),Nn=h(d),ra=l(d,"P",{});var lf=r(ra);xn=n(lf,`Check for a JSON representation appearing within the JSON representation of
- the named property.`),lf.forEach(t),Rn=h(d),le=l(d,"UL",{});var _r=r(le);U=l(_r,"LI",{});var qe=r(U);oa=l(qe,"CODE",{});var rf=r(oa);Jn=n(rf,mh),rf.forEach(t),$n=n(qe,` or
- `),na=l(qe,"CODE",{});var of=r(na);Tn=n(of,yh),of.forEach(t),jn=h(qe),sa=l(qe,"UL",{});var nf=r(sa);da=l(nf,"LI",{});var sf=r(da);Fn=n(sf,`(Escape angle brackets with a leading backslash. If your value could
- be interpreted as valid JSON, encode it as a JSON string and use the
- JSON syntax instead.)`),sf.forEach(t),nf.forEach(t),qe.forEach(t),Qn=h(_r),P=l(_r,"LI",{});var Ue=r(P);ca=l(Ue,"CODE",{});var df=r(ca);Bn=n(df,gh),df.forEach(t),Yn=n(Ue,` or
- `),ha=l(Ue,"CODE",{});var cf=r(ha);Mn=n(cf,Ch),cf.forEach(t),Xn=h(Ue),ia=l(Ue,"UL",{});var hf=r(ia);u=l(hf,"LI",{});var O=r(u);zn=n(O,"(Search for a JSON encoded value (like "),fa=l(O,"CODE",{});var ff=r(fa);Gn=n(ff,"true"),ff.forEach(t),Kn=n(O,`,
- `),ua=l(O,"CODE",{});var uf=r(ua);Vn=n(uf,"1"),uf.forEach(t),Wn=n(O,`,
- `),Ea=l(O,"CODE",{});var Ef=r(Ea);Zn=n(Ef,"[1,2,3]"),Ef.forEach(t),es=n(O,", or "),va=l(O,"CODE",{});var vf=r(va);ts=n(vf,Oh),vf.forEach(t),as=n(O,").)"),O.forEach(t),hf.forEach(t),Ue.forEach(t),_r.forEach(t),ls=h(d),_a=l(d,"HEADER",{});var _f=r(_a);pa=l(_f,"H3",{});var pf=r(pa);rs=n(pf,"match and !match"),pf.forEach(t),_f.forEach(t),os=h(d),ma=l(d,"P",{});var mf=r(ma);ns=n(mf,"Check for POSIX regex match."),mf.forEach(t),ss=h(d),ya=l(d,"UL",{});var yf=r(ya);re=l(yf,"LI",{});var pr=r(re);ga=l(pr,"CODE",{});var gf=r(ga);ds=n(gf,"name~/pattern/"),gf.forEach(t),cs=n(pr," or "),Ca=l(pr,"CODE",{});var Cf=r(Ca);hs=n(Cf,"name!~/pattern/"),Cf.forEach(t),pr.forEach(t),yf.forEach(t),is=h(d),Oa=l(d,"HEADER",{});var Of=r(Oa);Da=l(Of,"H3",{});var Df=r(Da);fs=n(Df,"imatch and !imatch"),Df.forEach(t),Of.forEach(t),us=h(d),ka=l(d,"P",{});var kf=r(ka);Es=n(kf,"Check for case insensitive POSIX regex match."),kf.forEach(t),vs=h(d),wa=l(d,"UL",{});var wf=r(wa);oe=l(wf,"LI",{});var mr=r(oe);La=l(mr,"CODE",{});var Lf=r(La);_s=n(Lf,"name~/pattern/i"),Lf.forEach(t),ps=n(mr," or "),ba=l(mr,"CODE",{});var bf=r(ba);ms=n(bf,"name!~/pattern/i"),bf.forEach(t),mr.forEach(t),wf.forEach(t),ys=h(d),Ia=l(d,"HEADER",{});var If=r(Ia);Ha=l(If,"H3",{});var Hf=r(Ha);gs=n(Hf,"like and !like"),Hf.forEach(t),If.forEach(t),Cs=h(d),qa=l(d,"P",{});var qf=r(qa);Os=n(qf,`Check for pattern match where _ is single char wildcard and % is any length
- wildcard.`),qf.forEach(t),Ds=h(d),ne=l(d,"UL",{});var yr=r(ne);se=l(yr,"LI",{});var gr=r(se);Ua=l(gr,"CODE",{});var Uf=r(Ua);ks=n(Uf,"name~pattern"),Uf.forEach(t),ws=n(gr," or "),Pa=l(gr,"CODE",{});var Pf=r(Pa);Ls=n(Pf,"name!~pattern"),Pf.forEach(t),gr.forEach(t),bs=h(yr),S=l(yr,"LI",{});var Pe=r(S);Sa=l(Pe,"CODE",{});var Sf=r(Sa);Is=n(Sf,'name~"pattern"'),Sf.forEach(t),Hs=n(Pe," or "),Aa=l(Pe,"CODE",{});var Af=r(Aa);qs=n(Af,'name!~"pattern"'),Af.forEach(t),Us=h(Pe),Na=l(Pe,"UL",{});var Nf=r(Na);xa=l(Nf,"LI",{});var xf=r(xa);Ps=n(xf,"(Use this if you have a space in your pattern.)"),xf.forEach(t),Nf.forEach(t),Pe.forEach(t),yr.forEach(t),Ss=h(d),Ra=l(d,"HEADER",{});var Rf=r(Ra);Ja=l(Rf,"H3",{});var Jf=r(Ja);As=n(Jf,"ilike and !ilike"),Jf.forEach(t),Rf.forEach(t),Ns=h(d),$a=l(d,"P",{});var $f=r($a);xs=n($f,`Check for case insensitive pattern match where _ is single char wildcard and
- % is any length wildcard.`),$f.forEach(t),Rs=h(d),Ta=l(d,"UL",{});var Tf=r(Ta);de=l(Tf,"LI",{});var Cr=r(de);ja=l(Cr,"CODE",{});var jf=r(ja);Js=n(jf,'name~"pattern"i'),jf.forEach(t),$s=n(Cr," or "),Fa=l(Cr,"CODE",{});var Ff=r(Fa);Ts=n(Ff,'name!~"pattern"i'),Ff.forEach(t),Cr.forEach(t),Tf.forEach(t),js=h(d),Qa=l(d,"HEADER",{});var Qf=r(Qa);Ba=l(Qf,"H3",{});var Bf=r(Ba);Fs=n(Bf,"gt"),Bf.forEach(t),Qf.forEach(t),Qs=h(d),Ya=l(d,"P",{});var Yf=r(Ya);Bs=n(Yf,"Check a prop's value is greater than a given value."),Yf.forEach(t),Ys=h(d),A=l(d,"UL",{});var Se=r(A);Ma=l(Se,"LI",{});var Mf=r(Ma);Xa=l(Mf,"CODE",{});var Xf=r(Xa);Ms=n(Xf,Dh),Xf.forEach(t),Mf.forEach(t),Xs=h(Se),ce=l(Se,"LI",{});var Or=r(ce);za=l(Or,"CODE",{});var zf=r(za);zs=n(zf,kh),zf.forEach(t),Gs=h(Or),Ga=l(Or,"UL",{});var Gf=r(Ga);N=l(Gf,"LI",{});var Ae=r(N);Ks=n(Ae,"(A single relative time value like "),Ka=l(Ae,"CODE",{});var Kf=r(Ka);Vs=n(Kf,"now"),Kf.forEach(t),Ws=n(Ae,` or
- `),Va=l(Ae,"CODE",{});var Vf=r(Va);Zs=n(Vf,"yesterday"),Vf.forEach(t),ed=n(Ae,".)"),Ae.forEach(t),Gf.forEach(t),Or.forEach(t),td=h(Se),he=l(Se,"LI",{});var Dr=r(he);Wa=l(Dr,"CODE",{});var Wf=r(Wa);ad=n(Wf,wh),Wf.forEach(t),ld=h(Dr),Za=l(Dr,"UL",{});var Zf=r(Za);E=l(Zf,"LI",{});var D=r(E);rd=n(D,"(Use this for a time value with a space like "),el=l(D,"CODE",{});var eu=r(el);od=n(eu,'"two days from now"'),eu.forEach(t),nd=n(D,`,
- `),tl=l(D,"CODE",{});var tu=r(tl);sd=n(tu,'"last thursday"'),tu.forEach(t),dd=n(D,", "),al=l(D,"CODE",{});var au=r(al);cd=n(au,'"+4 weeks"'),au.forEach(t),hd=n(D,`, or
- `),ll=l(D,"CODE",{});var lu=r(ll);id=n(lu,'"5 minutes ago"'),lu.forEach(t),fd=n(D,".)"),D.forEach(t),Zf.forEach(t),Dr.forEach(t),Se.forEach(t),ud=h(d),rl=l(d,"HEADER",{});var ru=r(rl);ol=l(ru,"H3",{});var ou=r(ol);Ed=n(ou,"gte"),ou.forEach(t),ru.forEach(t),vd=h(d),nl=l(d,"P",{});var nu=r(nl);_d=n(nu,"Check a prop's value is greater than or equal to a given value."),nu.forEach(t),pd=h(d),x=l(d,"UL",{});var Ne=r(x);sl=l(Ne,"LI",{});var su=r(sl);dl=l(su,"CODE",{});var du=r(dl);md=n(du,Lh),du.forEach(t),su.forEach(t),yd=h(Ne),ie=l(Ne,"LI",{});var kr=r(ie);cl=l(kr,"CODE",{});var cu=r(cl);gd=n(cu,bh),cu.forEach(t),Cd=h(kr),hl=l(kr,"UL",{});var hu=r(hl);R=l(hu,"LI",{});var xe=r(R);Od=n(xe,"(A single relative time value like "),il=l(xe,"CODE",{});var iu=r(il);Dd=n(iu,"now"),iu.forEach(t),kd=n(xe,` or
- `),fl=l(xe,"CODE",{});var fu=r(fl);wd=n(fu,"yesterday"),fu.forEach(t),Ld=n(xe,".)"),xe.forEach(t),hu.forEach(t),kr.forEach(t),bd=h(Ne),fe=l(Ne,"LI",{});var wr=r(fe);ul=l(wr,"CODE",{});var uu=r(ul);Id=n(uu,Ih),uu.forEach(t),Hd=h(wr),El=l(wr,"UL",{});var Eu=r(El);v=l(Eu,"LI",{});var k=r(v);qd=n(k,"(Use this for a time value with a space like "),vl=l(k,"CODE",{});var vu=r(vl);Ud=n(vu,'"two days from now"'),vu.forEach(t),Pd=n(k,`,
- `),_l=l(k,"CODE",{});var _u=r(_l);Sd=n(_u,'"last thursday"'),_u.forEach(t),Ad=n(k,", "),pl=l(k,"CODE",{});var pu=r(pl);Nd=n(pu,'"+4 weeks"'),pu.forEach(t),xd=n(k,`, or
- `),ml=l(k,"CODE",{});var mu=r(ml);Rd=n(mu,'"5 minutes ago"'),mu.forEach(t),Jd=n(k,".)"),k.forEach(t),Eu.forEach(t),wr.forEach(t),Ne.forEach(t),$d=h(d),yl=l(d,"HEADER",{});var yu=r(yl);gl=l(yu,"H3",{});var gu=r(gl);Td=n(gu,"lt"),gu.forEach(t),yu.forEach(t),jd=h(d),Cl=l(d,"P",{});var Cu=r(Cl);Fd=n(Cu,"Check a prop's value is less than a given value."),Cu.forEach(t),Qd=h(d),J=l(d,"UL",{});var Re=r(J);Ol=l(Re,"LI",{});var Ou=r(Ol);Dl=l(Ou,"CODE",{});var Du=r(Dl);Bd=n(Du,Hh),Du.forEach(t),Ou.forEach(t),Yd=h(Re),ue=l(Re,"LI",{});var Lr=r(ue);kl=l(Lr,"CODE",{});var ku=r(kl);Md=n(ku,qh),ku.forEach(t),Xd=h(Lr),wl=l(Lr,"UL",{});var wu=r(wl);$=l(wu,"LI",{});var Je=r($);zd=n(Je,"(A single relative time value like "),Ll=l(Je,"CODE",{});var Lu=r(Ll);Gd=n(Lu,"now"),Lu.forEach(t),Kd=n(Je,` or
- `),bl=l(Je,"CODE",{});var bu=r(bl);Vd=n(bu,"yesterday"),bu.forEach(t),Wd=n(Je,".)"),Je.forEach(t),wu.forEach(t),Lr.forEach(t),Zd=h(Re),Ee=l(Re,"LI",{});var br=r(Ee);Il=l(br,"CODE",{});var Iu=r(Il);ec=n(Iu,Uh),Iu.forEach(t),tc=h(br),Hl=l(br,"UL",{});var Hu=r(Hl);_=l(Hu,"LI",{});var w=r(_);ac=n(w,"(Use this for a time value with a space like "),ql=l(w,"CODE",{});var qu=r(ql);lc=n(qu,'"two days from now"'),qu.forEach(t),rc=n(w,`,
- `),Ul=l(w,"CODE",{});var Uu=r(Ul);oc=n(Uu,'"last thursday"'),Uu.forEach(t),nc=n(w,", "),Pl=l(w,"CODE",{});var Pu=r(Pl);sc=n(Pu,'"+4 weeks"'),Pu.forEach(t),dc=n(w,`, or
- `),Sl=l(w,"CODE",{});var Su=r(Sl);cc=n(Su,'"5 minutes ago"'),Su.forEach(t),hc=n(w,".)"),w.forEach(t),Hu.forEach(t),br.forEach(t),Re.forEach(t),ic=h(d),Al=l(d,"HEADER",{});var Au=r(Al);Nl=l(Au,"H3",{});var Nu=r(Nl);fc=n(Nu,"lte"),Nu.forEach(t),Au.forEach(t),uc=h(d),xl=l(d,"P",{});var xu=r(xl);Ec=n(xu,"Check a prop's value is less than or equal to a given value."),xu.forEach(t),vc=h(d),T=l(d,"UL",{});var $e=r(T);Rl=l($e,"LI",{});var Ru=r(Rl);Jl=l(Ru,"CODE",{});var Ju=r(Jl);_c=n(Ju,Ph),Ju.forEach(t),Ru.forEach(t),pc=h($e),ve=l($e,"LI",{});var Ir=r(ve);$l=l(Ir,"CODE",{});var $u=r($l);mc=n($u,Sh),$u.forEach(t),yc=h(Ir),Tl=l(Ir,"UL",{});var Tu=r(Tl);j=l(Tu,"LI",{});var Te=r(j);gc=n(Te,"(A single relative time value like "),jl=l(Te,"CODE",{});var ju=r(jl);Cc=n(ju,"now"),ju.forEach(t),Oc=n(Te,` or
- `),Fl=l(Te,"CODE",{});var Fu=r(Fl);Dc=n(Fu,"yesterday"),Fu.forEach(t),kc=n(Te,".)"),Te.forEach(t),Tu.forEach(t),Ir.forEach(t),wc=h($e),_e=l($e,"LI",{});var Hr=r(_e);Ql=l(Hr,"CODE",{});var Qu=r(Ql);Lc=n(Qu,Ah),Qu.forEach(t),bc=h(Hr),Bl=l(Hr,"UL",{});var Bu=r(Bl);p=l(Bu,"LI",{});var L=r(p);Ic=n(L,"(Use this for a time value with a space like "),Yl=l(L,"CODE",{});var Yu=r(Yl);Hc=n(Yu,'"two days from now"'),Yu.forEach(t),qc=n(L,`,
- `),Ml=l(L,"CODE",{});var Mu=r(Ml);Uc=n(Mu,'"last thursday"'),Mu.forEach(t),Pc=n(L,", "),Xl=l(L,"CODE",{});var Xu=r(Xl);Sc=n(Xu,'"+4 weeks"'),Xu.forEach(t),Ac=n(L,`, or
- `),zl=l(L,"CODE",{});var zu=r(zl);Nc=n(zu,'"5 minutes ago"'),zu.forEach(t),xc=n(L,".)"),L.forEach(t),Bu.forEach(t),Hr.forEach(t),$e.forEach(t),Rc=h(d),De=l(d,"HEADER",{class:!0});var Gu=r(De);Gl=l(Gu,"H2",{});var Ku=r(Gl);Jc=n(Ku,"Selectors"),Ku.forEach(t),Gu.forEach(t),$c=h(d),Kl=l(d,"P",{});var Vu=r(Kl);Tc=n(Vu,`You can specify nested selectors with different types using pairs of
- parentheses. The first character (or two) inside the parentheses can be a
- type: "&", "!&", "|", "!|", or "!" (the same as "!&").`),Vu.forEach(t),jc=h(d),Vl=l(d,"P",{});var Wu=r(Vl);Fc=n(Wu,"Here are some examples of nested selectors."),Wu.forEach(t),Qc=h(d),Wl=l(d,"PRE",{});var Zu=r(Wl);Bc=n(Zu,Nh),Zu.forEach(t),Yc=h(d),ke=l(d,"HEADER",{class:!0});var eE=r(ke);Zl=l(eE,"H2",{});var tE=r(Zl);Mc=n(tE,"Default Fields"),tE.forEach(t),eE.forEach(t),Xc=h(d),g=l(d,"P",{});var Y=r(g);zc=n(Y,`Anything contained in the query (including in selector parentheses) that
- doesn't match any of the options or clause syntaxes listed above (bare query
- parts) will be added (at the appropriate nesting level) to a selector with
- an `),er=l(Y,"CODE",{});var aE=r(er);Gc=n(aE,'"|"'),aE.forEach(t),Kc=n(Y," type in an "),tr=l(Y,"CODE",{});var lE=r(tr);Vc=n(lE,"ilike"),lE.forEach(t),Wc=n(Y,` clause surrounded by "%"
- characters for each field passed in to the `),ar=l(Y,"CODE",{});var rE=r(ar);Zc=n(rE,"defaultFields"),rE.forEach(t),eh=n(Y," argument."),Y.forEach(t),th=h(d),we=l(d,"HEADER",{class:!0});var oE=r(we);lr=l(oE,"H2",{});var nE=r(lr);ah=n(nE,"Bare Query Handler"),nE.forEach(t),oE.forEach(t),lh=h(d),F=l(d,"P",{});var je=r(F);rh=n(je,"You can also supply a function in the option "),rr=l(je,"CODE",{});var sE=r(rr);oh=n(sE,"bareHandler"),sE.forEach(t),nh=n(je,` that
- will handle bare query parts instead of the "Default Fields" behavior
- described above. It will receive three arguments, the query parts, the
- entity class, and the default fields entry for that class. It should return
- a partial selector that will replace or extend the `),or=l(je,"CODE",{});var dE=r(or);sh=n(dE,'"|"'),dE.forEach(t),dh=n(je," selector."),je.forEach(t),d.forEach(t),this.h()},h(){document.title="Query Parser - Packages - Nymph.js",X.a=Fe,wE(me,"font-size","3em"),M(pe,"class","major"),M(ye,"class","major"),M(ge,"class","major"),M(Ce,"class","major"),M(Oe,"class","major"),M(De,"class","major"),M(ke,"class","major"),M(we,"class","major")},m(i,nr){X.m(bE,document.head),e(document.head,Fe),fE(i,sr,nr),fE(i,s,nr),e(s,pe),e(pe,me),e(me,qr),e(s,Ur),e(s,Qe),e(Qe,Pr),e(s,Sr),e(s,ye),e(ye,Be),e(Be,Ar),e(s,Nr),uE(z,s,null),e(s,xr),e(s,ge),e(ge,Ye),e(Ye,Rr),e(s,Jr),e(s,G),e(G,$r),e(G,Me),e(Me,Tr),e(G,jr),e(s,Fr),uE(K,s,null),e(s,Qr),e(s,Ce),e(Ce,Xe),e(Xe,Br),e(s,Yr),e(s,ze),e(ze,Mr),e(s,Xr),e(s,m),e(m,Ge),e(Ge,Ke),e(Ke,zr),e(m,Gr),e(m,Ve),e(Ve,We),e(We,Kr),e(m,Vr),e(m,Ze),e(Ze,et),e(et,Wr),e(m,Zr),e(m,y),e(y,tt),e(tt,eo),e(y,to),e(y,at),e(at,ao),e(y,lo),e(y,lt),e(lt,ro),e(y,oo),e(y,rt),e(rt,no),e(s,so),e(s,ot),e(ot,co),e(s,ho),e(s,Oe),e(Oe,nt),e(nt,io),e(s,fo),e(s,st),e(st,uo),e(s,Eo),e(s,dt),e(dt,ct),e(ct,vo),e(s,_o),e(s,ht),e(ht,po),e(s,mo),e(s,b),e(b,V),e(V,it),e(it,yo),e(V,go),e(V,ft),e(ft,Co),e(b,Oo),e(b,I),e(I,ut),e(ut,Do),e(I,ko),e(I,Et),e(Et,wo),e(I,Lo),e(I,vt),e(vt,_t),e(_t,bo),e(b,Io),e(b,H),e(H,pt),e(pt,Ho),e(H,qo),e(H,mt),e(mt,Uo),e(H,Po),e(H,yt),e(yt,f),e(f,So),e(f,gt),e(gt,Ao),e(f,No),e(f,Ct),e(Ct,xo),e(f,Ro),e(f,Ot),e(Ot,Jo),e(f,$o),e(f,Dt),e(Dt,To),e(f,jo),e(s,Fo),e(s,kt),e(kt,wt),e(wt,Qo),e(s,Bo),e(s,Lt),e(Lt,Yo),e(s,Mo),e(s,bt),e(bt,W),e(W,It),e(It,Xo),e(W,zo),e(W,Ht),e(Ht,Go),e(s,Ko),e(s,qt),e(qt,Ut),e(Ut,Vo),e(s,Wo),e(s,Pt),e(Pt,Zo),e(s,en),e(s,St),e(St,Z),e(Z,At),e(At,tn),e(Z,an),e(Z,Nt),e(Nt,ln),e(s,rn),e(s,xt),e(xt,Rt),e(Rt,on),e(s,nn),e(s,Jt),e(Jt,sn),e(s,dn),e(s,$t),e($t,ee),e(ee,Tt),e(Tt,cn),e(ee,hn),e(ee,jt),e(jt,fn),e(s,un),e(s,Ft),e(Ft,Qt),e(Qt,En),e(s,vn),e(s,Bt),e(Bt,_n),e(s,pn),e(s,Yt),e(Yt,te),e(te,Mt),e(Mt,mn),e(te,yn),e(te,Xt),e(Xt,gn),e(s,Cn),e(s,zt),e(zt,Gt),e(Gt,On),e(s,Dn),e(s,Kt),e(Kt,kn),e(s,wn),e(s,Vt),e(Vt,q),e(q,Wt),e(Wt,Ln),e(q,bn),e(q,Zt),e(Zt,In),e(q,Hn),e(q,ae),e(ae,ea),e(ea,qn),e(ae,Un),e(ae,ta),e(ta,Pn),e(s,Sn),e(s,aa),e(aa,la),e(la,An),e(s,Nn),e(s,ra),e(ra,xn),e(s,Rn),e(s,le),e(le,U),e(U,oa),e(oa,Jn),e(U,$n),e(U,na),e(na,Tn),e(U,jn),e(U,sa),e(sa,da),e(da,Fn),e(le,Qn),e(le,P),e(P,ca),e(ca,Bn),e(P,Yn),e(P,ha),e(ha,Mn),e(P,Xn),e(P,ia),e(ia,u),e(u,zn),e(u,fa),e(fa,Gn),e(u,Kn),e(u,ua),e(ua,Vn),e(u,Wn),e(u,Ea),e(Ea,Zn),e(u,es),e(u,va),e(va,ts),e(u,as),e(s,ls),e(s,_a),e(_a,pa),e(pa,rs),e(s,os),e(s,ma),e(ma,ns),e(s,ss),e(s,ya),e(ya,re),e(re,ga),e(ga,ds),e(re,cs),e(re,Ca),e(Ca,hs),e(s,is),e(s,Oa),e(Oa,Da),e(Da,fs),e(s,us),e(s,ka),e(ka,Es),e(s,vs),e(s,wa),e(wa,oe),e(oe,La),e(La,_s),e(oe,ps),e(oe,ba),e(ba,ms),e(s,ys),e(s,Ia),e(Ia,Ha),e(Ha,gs),e(s,Cs),e(s,qa),e(qa,Os),e(s,Ds),e(s,ne),e(ne,se),e(se,Ua),e(Ua,ks),e(se,ws),e(se,Pa),e(Pa,Ls),e(ne,bs),e(ne,S),e(S,Sa),e(Sa,Is),e(S,Hs),e(S,Aa),e(Aa,qs),e(S,Us),e(S,Na),e(Na,xa),e(xa,Ps),e(s,Ss),e(s,Ra),e(Ra,Ja),e(Ja,As),e(s,Ns),e(s,$a),e($a,xs),e(s,Rs),e(s,Ta),e(Ta,de),e(de,ja),e(ja,Js),e(de,$s),e(de,Fa),e(Fa,Ts),e(s,js),e(s,Qa),e(Qa,Ba),e(Ba,Fs),e(s,Qs),e(s,Ya),e(Ya,Bs),e(s,Ys),e(s,A),e(A,Ma),e(Ma,Xa),e(Xa,Ms),e(A,Xs),e(A,ce),e(ce,za),e(za,zs),e(ce,Gs),e(ce,Ga),e(Ga,N),e(N,Ks),e(N,Ka),e(Ka,Vs),e(N,Ws),e(N,Va),e(Va,Zs),e(N,ed),e(A,td),e(A,he),e(he,Wa),e(Wa,ad),e(he,ld),e(he,Za),e(Za,E),e(E,rd),e(E,el),e(el,od),e(E,nd),e(E,tl),e(tl,sd),e(E,dd),e(E,al),e(al,cd),e(E,hd),e(E,ll),e(ll,id),e(E,fd),e(s,ud),e(s,rl),e(rl,ol),e(ol,Ed),e(s,vd),e(s,nl),e(nl,_d),e(s,pd),e(s,x),e(x,sl),e(sl,dl),e(dl,md),e(x,yd),e(x,ie),e(ie,cl),e(cl,gd),e(ie,Cd),e(ie,hl),e(hl,R),e(R,Od),e(R,il),e(il,Dd),e(R,kd),e(R,fl),e(fl,wd),e(R,Ld),e(x,bd),e(x,fe),e(fe,ul),e(ul,Id),e(fe,Hd),e(fe,El),e(El,v),e(v,qd),e(v,vl),e(vl,Ud),e(v,Pd),e(v,_l),e(_l,Sd),e(v,Ad),e(v,pl),e(pl,Nd),e(v,xd),e(v,ml),e(ml,Rd),e(v,Jd),e(s,$d),e(s,yl),e(yl,gl),e(gl,Td),e(s,jd),e(s,Cl),e(Cl,Fd),e(s,Qd),e(s,J),e(J,Ol),e(Ol,Dl),e(Dl,Bd),e(J,Yd),e(J,ue),e(ue,kl),e(kl,Md),e(ue,Xd),e(ue,wl),e(wl,$),e($,zd),e($,Ll),e(Ll,Gd),e($,Kd),e($,bl),e(bl,Vd),e($,Wd),e(J,Zd),e(J,Ee),e(Ee,Il),e(Il,ec),e(Ee,tc),e(Ee,Hl),e(Hl,_),e(_,ac),e(_,ql),e(ql,lc),e(_,rc),e(_,Ul),e(Ul,oc),e(_,nc),e(_,Pl),e(Pl,sc),e(_,dc),e(_,Sl),e(Sl,cc),e(_,hc),e(s,ic),e(s,Al),e(Al,Nl),e(Nl,fc),e(s,uc),e(s,xl),e(xl,Ec),e(s,vc),e(s,T),e(T,Rl),e(Rl,Jl),e(Jl,_c),e(T,pc),e(T,ve),e(ve,$l),e($l,mc),e(ve,yc),e(ve,Tl),e(Tl,j),e(j,gc),e(j,jl),e(jl,Cc),e(j,Oc),e(j,Fl),e(Fl,Dc),e(j,kc),e(T,wc),e(T,_e),e(_e,Ql),e(Ql,Lc),e(_e,bc),e(_e,Bl),e(Bl,p),e(p,Ic),e(p,Yl),e(Yl,Hc),e(p,qc),e(p,Ml),e(Ml,Uc),e(p,Pc),e(p,Xl),e(Xl,Sc),e(p,Ac),e(p,zl),e(zl,Nc),e(p,xc),e(s,Rc),e(s,De),e(De,Gl),e(Gl,Jc),e(s,$c),e(s,Kl),e(Kl,Tc),e(s,jc),e(s,Vl),e(Vl,Fc),e(s,Qc),e(s,Wl),e(Wl,Bc),e(s,Yc),e(s,ke),e(ke,Zl),e(Zl,Mc),e(s,Xc),e(s,g),e(g,zc),e(g,er),e(er,Gc),e(g,Kc),e(g,tr),e(tr,Vc),e(g,Wc),e(g,ar),e(ar,Zc),e(g,eh),e(s,th),e(s,we),e(we,lr),e(lr,ah),e(s,lh),e(s,F),e(F,rh),e(F,rr),e(rr,oh),e(F,nh),e(F,or),e(or,sh),e(F,dh),dr=!0},p:LE,i(i){dr||(EE(z.$$.fragment,i),EE(K.$$.fragment,i),dr=!0)},o(i){vE(z.$$.fragment,i),vE(K.$$.fragment,i),dr=!1},d(i){t(Fe),i&&X.d(),i&&t(sr),i&&t(s),_E(z),_E(K)}}}class NE extends yE{constructor(X){super(),gE(this,X,null,qE,CE,{})}}export{NE as component};
diff --git a/docs/_app/immutable/nodes/11.255d0ca1.js b/docs/_app/immutable/nodes/11.255d0ca1.js
new file mode 100644
index 0000000..dbc8f9f
--- /dev/null
+++ b/docs/_app/immutable/nodes/11.255d0ca1.js
@@ -0,0 +1,116 @@
+import{s as Mi,I as qi,e as pi,a as o,f as l,l as c,x as bi,J as wi,d as s,c as r,g as n,h as d,r as i,m as u,j as M,u as e,i as _i,v as ki}from"../chunks/scheduler.d7e45cc8.js";import{S as Di,i as Oi,b as mi,d as xi,m as Ei,a as Li,t as yi,e as Hi}from"../chunks/index.77720afb.js";import{H as gi,g as Pi}from"../chunks/github.64534d2c.js";import{b as Ui}from"../chunks/bash.7e4226ac.js";import{t as Ii}from"../chunks/typescript.09c48802.js";function Ai(Ti){let q,pt,tl,t,b,Na='
Query Parser
',Cl,K,$a=`The Query Parser is a utility for creating complex Nymph entity queries from
+ a simple text input. Essentially, it turns a string into a Nymph query.`,pl,w,za="
Installation
",_l,k,ml,D,Ja="
Usage
",xl,V,Ba=`The query parser will turn a string into an Options and Selectors array for
+ the Nymph Client. It has a syntax that allows for most features of a
+ Nymph query to be expressed in a text input.`,El,O,Ll,P,Fa="
Options
",yl,W,Qa="You can set limit, offset, sort, and reverse like this.",Hl,Z,Ya=`
limit:number
offset:number
sort:string
reverse:true, reverse:false,
+ reverse:1, or reverse:0
`,gl,ee,Xa=`These must appear in the top level of the query (outside of any
+ parentheses).`,Tl,U,Ga="
Clauses
",Ml,te,Ka="These are the available clauses, and their syntax.",ql,le,Va="
equal and !equal
",bl,ne,Wa="Check for string or JSON representation equality.",wl,_,ae,Za="name=string or name!=string",kl,oe,eo=`name="string value" or name!="string value"
(Use this if you have a space in your string, or if your string could
+ be interpreted as valid JSON. Escape double quotes with a leading
+ backslash.)
",$l,he,so="Check for entity GUID.",zl,xt,I,Et,co="{guid}",Jl,Bl,Lt,uo="{!guid}",Fl,Ql,ve,ho="
tag and !tag
",Yl,fe,vo="Check for a tag.",Xl,yt,A,Ht,fo="",Gl,Kl,gt,Co="",Vl,Wl,Ce,po="
truthy and !truthy
",Zl,pe,_o="Check for truthiness.",en,_e,mo="
[name] or [!name]
",tn,me,xo="
ref and !ref
",ln,xe,Eo="Check for a reference to another entity.",nn,Tt,R,Mt,Lo="name<{guid}>",an,on,qt,yo="name!<{guid}>",rn,sn,Ee,Ho="
qref and !qref
",dn,Le,go="Check for a reference to another entity using a query.",cn,bt,x,wt,To="name<{refclassname inner query}>",un,hn,kt,Mo="name!<{refclassname inner query}>",vn,fn,ye,qo=`
(Escape curly brackets with a leading backslash.)
(Requires a map of refclassname to their actual class and default
+ fields.)
`,Cn,He,bo="
contain and !contain
",pn,ge,wo="Check if the array at the named property contains a value.",_n,S,E,Dt,ko="name",mn,xn,Ot,Do="name!",En,Ln,Te,Oo=`
(Escape angle brackets with a leading backslash. If your value could
+ be interpreted as valid JSON, encode it as a JSON string and use the
+ JSON syntax instead.)
",Un,ke,No="Check for POSIX regex match.",In,De,$o="
name~/pattern/ or name!~/pattern/
",An,Oe,zo="
imatch and !imatch
",Rn,Pe,Jo="Check for case insensitive POSIX regex match.",Sn,Ue,Bo="
name~/pattern/i or name!~/pattern/i
",jn,Ie,Fo="
like and !like
",Nn,Ae,Qo=`Check for pattern match where _ is single char wildcard and % is any length
+ wildcard.`,$n,Re,Yo="
name~pattern or name!~pattern
name~"pattern" or name!~"pattern"
(Use this if you have a space in your pattern.)
",zn,Se,Xo="
ilike and !ilike
",Jn,je,Go=`Check for case insensitive pattern match where _ is single char wildcard and
+ % is any length wildcard.`,Bn,Ne,Ko="
name~"pattern"i or name!~"pattern"i
",Fn,$e,Vo="
gt
",Qn,ze,Wo="Check a prop's value is greater than a given value.",Yn,y,Rt,St,Zo="name>number",Xn,Gn,j,jt,er="name>relative",Kn,Vn,Je,tr=`
(A single relative time value like now or
+ yesterday.)
`,Wn,N,Nt,lr='name>"relative time value"',Zn,ea,Be,nr=`
(Use this for a time value with a space like "two days from now",
+ "last thursday", "+4 weeks", or
+ "5 minutes ago".)
`,ta,Fe,ar="
gte
",la,Qe,or="Check a prop's value is greater than or equal to a given value.",na,H,$t,zt,rr="name>=number",aa,oa,$,Jt,ir="name>=relative",ra,ia,Ye,sr=`
(A single relative time value like now or
+ yesterday.)
`,sa,z,Bt,dr='name>="relative time value"',da,ca,Xe,cr=`
(Use this for a time value with a space like "two days from now",
+ "last thursday", "+4 weeks", or
+ "5 minutes ago".)
`,ua,Ge,ur="
lt
",ha,Ke,hr="Check a prop's value is less than a given value.",va,g,Ft,Qt,vr="name(A single relative time value like now or
+ yesterday.)`,ma,B,Xt,pr='name<"relative time value"',xa,Ea,We,_r=`
(Use this for a time value with a space like "two days from now",
+ "last thursday", "+4 weeks", or
+ "5 minutes ago".)
`,La,Ze,mr="
lte
",ya,et,xr="Check a prop's value is less than or equal to a given value.",Ha,T,Gt,Kt,Er="name<=number",ga,Ta,F,Vt,Lr="name<=relative",Ma,qa,tt,yr=`
(A single relative time value like now or
+ yesterday.)
`,ba,Q,Wt,Hr='name<="relative time value"',wa,ka,lt,gr=`
(Use this for a time value with a space like "two days from now",
+ "last thursday", "+4 weeks", or
+ "5 minutes ago".)
`,Da,Y,Tr="
Selectors
",Oa,nt,Mr=`You can specify nested selectors with different types using pairs of
+ parentheses. The first character (or two) inside the parentheses can be a
+ type: "&", "!&", "|", "!|", or "!" (the same as "!&").`,Pa,at,qr="Here are some examples of nested selectors.",Ua,Zt,br=`Either enabled is truthy and abilities contains "subscriber", or abilities contains "lifelong-subscriber".
+
+(| ([enabled] abilities<"subscriber">) abilities<"lifeline-subscriber">)
+
+
+Published is not truthy and cdate is not greater than 6 months ago.
+
+(! [published] cdate>"6 months ago")`,Ia,Aa,X,wr="
Default Fields
",Ra,ot,kr=`Anything contained in the query (including in selector parentheses) that
+ doesn't match any of the options or clause syntaxes listed above (bare query
+ parts) will be added (at the appropriate nesting level) to a selector with
+ an "|" type in an ilike clause surrounded by "%"
+ characters for each field passed in to the defaultFields argument.`,Sa,G,Dr="
Bare Query Handler
",ja,rt,Or=`You can also supply a function in the option bareHandler that
+ will handle bare query parts instead of the "Default Fields" behavior
+ described above. It will receive three arguments, the query parts, the
+ entity class, and the default fields entry for that class. It should return
+ a partial selector that will replace or extend the "|" selector.`,ll;return k=new gi({props:{language:Ui,code:"npm install --save @nymphjs/query-parser"}}),O=new gi({props:{language:Ii,code:`import queryParser from '@nymphjs/query-parser';
+
+import BlogPost from './BlogPost';
+import Category from './Category';
+
+async function doQuery() {
+ const [options, ...selectors] = queryParser({
+ query:
+ 'limit:4 sort:mdate foobar (| [archived] mdate<"2 weeks ago") category<{cat Tech}>',
+ entityClass: BlogPost,
+ defaultFields: ['title', 'body'],
+ qrefMap: {
+ cat: {
+ class: Category,
+ defaultFields: ['name'],
+ },
+ },
+ });
+ /*
+ Options will be
+ {
+ class: BlogPost,
+ limit: 4,
+ sort: 'mdate'
+ }
+
+ And selectors will be (equivalent to)
+ [
+ {
+ type: "|",
+ truthy: [
+ "archived"
+ ],
+ lt: [
+ ["mdate", null, "2 weeks ago"]
+ ]
+ },
+ {
+ type: "&",
+ qref: [
+ "category",
+ [
+ {
+ class: Category
+ },
+ {
+ type: "|",
+ ilike: ["name", "%Tech%"]
+ }
+ ]
+ ]
+ },
+ {
+ type: "|",
+ ilike: [
+ ["title", "%foobar%"],
+ ["body", "%foobar%"]
+ ]
+ }
+ ]
+ */
+ const entities = await nymph.getEntities(options, ...selectors);
+}`}}),{c(){q=new qi(!1),pt=pi(),tl=o(),t=l("section"),b=l("header"),b.innerHTML=Na,Cl=o(),K=l("p"),K.textContent=$a,pl=o(),w=l("header"),w.innerHTML=za,_l=o(),mi(k.$$.fragment),ml=o(),D=l("header"),D.innerHTML=Ja,xl=o(),V=l("p"),V.innerHTML=Ba,El=o(),mi(O.$$.fragment),Ll=o(),P=l("header"),P.innerHTML=Fa,yl=o(),W=l("p"),W.textContent=Qa,Hl=o(),Z=l("ul"),Z.innerHTML=Ya,gl=o(),ee=l("p"),ee.textContent=Xa,Tl=o(),U=l("header"),U.innerHTML=Ga,Ml=o(),te=l("p"),te.textContent=Ka,ql=o(),le=l("header"),le.innerHTML=Va,bl=o(),ne=l("p"),ne.textContent=Wa,wl=o(),_=l("ul"),ae=l("li"),ae.innerHTML=Za,kl=o(),oe=l("li"),oe.innerHTML=eo,Dl=o(),m=l("li"),re=l("code"),re.textContent=to,Ol=c(" or "),ie=l("code"),ie.textContent=lo,Pl=o(),_t=l("ul"),h=l("li"),Ul=c("(Match a JSON encoded value (like "),se=l("code"),se.textContent=no,Il=c(", "),de=l("code"),de.textContent=ao,Al=c(`,
+ `),ce=l("code"),ce.textContent=oo,Rl=c(", or "),mt=l("code"),Sl=c(ro),jl=c(").)"),Nl=o(),ue=l("header"),ue.innerHTML=io,$l=o(),he=l("p"),he.textContent=so,zl=o(),xt=l("ul"),I=l("li"),Et=l("code"),Jl=c(co),Bl=c(" or "),Lt=l("code"),Fl=c(uo),Ql=o(),ve=l("header"),ve.innerHTML=ho,Yl=o(),fe=l("p"),fe.textContent=vo,Xl=o(),yt=l("ul"),A=l("li"),Ht=l("code"),Gl=c(fo),Kl=c(" or "),gt=l("code"),Vl=c(Co),Wl=o(),Ce=l("header"),Ce.innerHTML=po,Zl=o(),pe=l("p"),pe.textContent=_o,en=o(),_e=l("ul"),_e.innerHTML=mo,tn=o(),me=l("header"),me.innerHTML=xo,ln=o(),xe=l("p"),xe.textContent=Eo,nn=o(),Tt=l("ul"),R=l("li"),Mt=l("code"),an=c(Lo),on=c(" or "),qt=l("code"),rn=c(yo),sn=o(),Ee=l("header"),Ee.innerHTML=Ho,dn=o(),Le=l("p"),Le.textContent=go,cn=o(),bt=l("ul"),x=l("li"),wt=l("code"),un=c(To),hn=c(` or
+ `),kt=l("code"),vn=c(Mo),fn=o(),ye=l("ul"),ye.innerHTML=qo,Cn=o(),He=l("header"),He.innerHTML=bo,pn=o(),ge=l("p"),ge.textContent=wo,_n=o(),S=l("ul"),E=l("li"),Dt=l("code"),mn=c(ko),xn=c(` or
+ `),Ot=l("code"),En=c(Do),Ln=o(),Te=l("ul"),Te.innerHTML=Oo,yn=o(),L=l("li"),Pt=l("code"),Hn=c(Po),gn=c(` or
+ `),Ut=l("code"),Tn=c(Uo),Mn=o(),It=l("ul"),v=l("li"),qn=c("(Search for a JSON encoded value (like "),Me=l("code"),Me.textContent=Io,bn=c(`,
+ `),qe=l("code"),qe.textContent=Ao,wn=c(`,
+ `),be=l("code"),be.textContent=Ro,kn=c(", or "),At=l("code"),Dn=c(So),On=c(").)"),Pn=o(),we=l("header"),we.innerHTML=jo,Un=o(),ke=l("p"),ke.textContent=No,In=o(),De=l("ul"),De.innerHTML=$o,An=o(),Oe=l("header"),Oe.innerHTML=zo,Rn=o(),Pe=l("p"),Pe.textContent=Jo,Sn=o(),Ue=l("ul"),Ue.innerHTML=Bo,jn=o(),Ie=l("header"),Ie.innerHTML=Fo,Nn=o(),Ae=l("p"),Ae.textContent=Qo,$n=o(),Re=l("ul"),Re.innerHTML=Yo,zn=o(),Se=l("header"),Se.innerHTML=Xo,Jn=o(),je=l("p"),je.textContent=Go,Bn=o(),Ne=l("ul"),Ne.innerHTML=Ko,Fn=o(),$e=l("header"),$e.innerHTML=Vo,Qn=o(),ze=l("p"),ze.textContent=Wo,Yn=o(),y=l("ul"),Rt=l("li"),St=l("code"),Xn=c(Zo),Gn=o(),j=l("li"),jt=l("code"),Kn=c(er),Vn=o(),Je=l("ul"),Je.innerHTML=tr,Wn=o(),N=l("li"),Nt=l("code"),Zn=c(lr),ea=o(),Be=l("ul"),Be.innerHTML=nr,ta=o(),Fe=l("header"),Fe.innerHTML=ar,la=o(),Qe=l("p"),Qe.textContent=or,na=o(),H=l("ul"),$t=l("li"),zt=l("code"),aa=c(rr),oa=o(),$=l("li"),Jt=l("code"),ra=c(ir),ia=o(),Ye=l("ul"),Ye.innerHTML=sr,sa=o(),z=l("li"),Bt=l("code"),da=c(dr),ca=o(),Xe=l("ul"),Xe.innerHTML=cr,ua=o(),Ge=l("header"),Ge.innerHTML=ur,ha=o(),Ke=l("p"),Ke.textContent=hr,va=o(),g=l("ul"),Ft=l("li"),Qt=l("code"),fa=c(vr),Ca=o(),J=l("li"),Yt=l("code"),pa=c(fr),_a=o(),Ve=l("ul"),Ve.innerHTML=Cr,ma=o(),B=l("li"),Xt=l("code"),xa=c(pr),Ea=o(),We=l("ul"),We.innerHTML=_r,La=o(),Ze=l("header"),Ze.innerHTML=mr,ya=o(),et=l("p"),et.textContent=xr,Ha=o(),T=l("ul"),Gt=l("li"),Kt=l("code"),ga=c(Er),Ta=o(),F=l("li"),Vt=l("code"),Ma=c(Lr),qa=o(),tt=l("ul"),tt.innerHTML=yr,ba=o(),Q=l("li"),Wt=l("code"),wa=c(Hr),ka=o(),lt=l("ul"),lt.innerHTML=gr,Da=o(),Y=l("header"),Y.innerHTML=Tr,Oa=o(),nt=l("p"),nt.textContent=Mr,Pa=o(),at=l("p"),at.textContent=qr,Ua=o(),Zt=l("pre"),Ia=c(br),Aa=o(),X=l("header"),X.innerHTML=wr,Ra=o(),ot=l("p"),ot.innerHTML=kr,Sa=o(),G=l("header"),G.innerHTML=Dr,ja=o(),rt=l("p"),rt.innerHTML=Or,this.h()},l(f){const el=bi("svelte-18iv594",document.head);q=wi(el,!1),pt=pi(),el.forEach(s),tl=r(f),t=n(f,"SECTION",{});var a=d(t);b=n(a,"HEADER",{class:!0,"data-svelte-h":!0}),i(b)!=="svelte-ilghid"&&(b.innerHTML=Na),Cl=r(a),K=n(a,"P",{"data-svelte-h":!0}),i(K)!=="svelte-1u54ey9"&&(K.textContent=$a),pl=r(a),w=n(a,"HEADER",{class:!0,"data-svelte-h":!0}),i(w)!=="svelte-1hx9pnb"&&(w.innerHTML=za),_l=r(a),xi(k.$$.fragment,a),ml=r(a),D=n(a,"HEADER",{class:!0,"data-svelte-h":!0}),i(D)!=="svelte-n87w0o"&&(D.innerHTML=Ja),xl=r(a),V=n(a,"P",{"data-svelte-h":!0}),i(V)!=="svelte-d576tz"&&(V.innerHTML=Ba),El=r(a),xi(O.$$.fragment,a),Ll=r(a),P=n(a,"HEADER",{class:!0,"data-svelte-h":!0}),i(P)!=="svelte-1v13hnh"&&(P.innerHTML=Fa),yl=r(a),W=n(a,"P",{"data-svelte-h":!0}),i(W)!=="svelte-k61ukp"&&(W.textContent=Qa),Hl=r(a),Z=n(a,"UL",{"data-svelte-h":!0}),i(Z)!=="svelte-w3ncnj"&&(Z.innerHTML=Ya),gl=r(a),ee=n(a,"P",{"data-svelte-h":!0}),i(ee)!=="svelte-1vvt3ch"&&(ee.textContent=Xa),Tl=r(a),U=n(a,"HEADER",{class:!0,"data-svelte-h":!0}),i(U)!=="svelte-zyiri5"&&(U.innerHTML=Ga),Ml=r(a),te=n(a,"P",{"data-svelte-h":!0}),i(te)!=="svelte-1bkl19t"&&(te.textContent=Ka),ql=r(a),le=n(a,"HEADER",{"data-svelte-h":!0}),i(le)!=="svelte-1wpx9it"&&(le.innerHTML=Va),bl=r(a),ne=n(a,"P",{"data-svelte-h":!0}),i(ne)!=="svelte-1j94u4c"&&(ne.textContent=Wa),wl=r(a),_=n(a,"UL",{});var it=d(_);ae=n(it,"LI",{"data-svelte-h":!0}),i(ae)!=="svelte-1vnagpw"&&(ae.innerHTML=Za),kl=r(it),oe=n(it,"LI",{"data-svelte-h":!0}),i(oe)!=="svelte-1dirgw6"&&(oe.innerHTML=eo),Dl=r(it),m=n(it,"LI",{});var st=d(m);re=n(st,"CODE",{"data-svelte-h":!0}),i(re)!=="svelte-19pdxk6"&&(re.textContent=to),Ol=u(st," or "),ie=n(st,"CODE",{"data-svelte-h":!0}),i(ie)!=="svelte-3pupn"&&(ie.textContent=lo),Pl=r(st),_t=n(st,"UL",{});var Pr=d(_t);h=n(Pr,"LI",{});var C=d(h);Ul=u(C,"(Match a JSON encoded value (like "),se=n(C,"CODE",{"data-svelte-h":!0}),i(se)!=="svelte-1b4w2dk"&&(se.textContent=no),Il=u(C,", "),de=n(C,"CODE",{"data-svelte-h":!0}),i(de)!=="svelte-1rarbq3"&&(de.textContent=ao),Al=u(C,`,
+ `),ce=n(C,"CODE",{"data-svelte-h":!0}),i(ce)!=="svelte-ntdzrg"&&(ce.textContent=oo),Rl=u(C,", or "),mt=n(C,"CODE",{});var Ur=d(mt);Sl=u(Ur,ro),Ur.forEach(s),jl=u(C,").)"),C.forEach(s),Pr.forEach(s),st.forEach(s),it.forEach(s),Nl=r(a),ue=n(a,"HEADER",{"data-svelte-h":!0}),i(ue)!=="svelte-1v1minp"&&(ue.innerHTML=io),$l=r(a),he=n(a,"P",{"data-svelte-h":!0}),i(he)!=="svelte-1du67hd"&&(he.textContent=so),zl=r(a),xt=n(a,"UL",{});var Ir=d(xt);I=n(Ir,"LI",{});var nl=d(I);Et=n(nl,"CODE",{});var Ar=d(Et);Jl=u(Ar,co),Ar.forEach(s),Bl=u(nl," or "),Lt=n(nl,"CODE",{});var Rr=d(Lt);Fl=u(Rr,uo),Rr.forEach(s),nl.forEach(s),Ir.forEach(s),Ql=r(a),ve=n(a,"HEADER",{"data-svelte-h":!0}),i(ve)!=="svelte-1y925f9"&&(ve.innerHTML=ho),Yl=r(a),fe=n(a,"P",{"data-svelte-h":!0}),i(fe)!=="svelte-681s5m"&&(fe.textContent=vo),Xl=r(a),yt=n(a,"UL",{});var Sr=d(yt);A=n(Sr,"LI",{});var al=d(A);Ht=n(al,"CODE",{});var jr=d(Ht);Gl=u(jr,fo),jr.forEach(s),Kl=u(al," or "),gt=n(al,"CODE",{});var Nr=d(gt);Vl=u(Nr,Co),Nr.forEach(s),al.forEach(s),Sr.forEach(s),Wl=r(a),Ce=n(a,"HEADER",{"data-svelte-h":!0}),i(Ce)!=="svelte-1vzgm5l"&&(Ce.innerHTML=po),Zl=r(a),pe=n(a,"P",{"data-svelte-h":!0}),i(pe)!=="svelte-p4ruy4"&&(pe.textContent=_o),en=r(a),_e=n(a,"UL",{"data-svelte-h":!0}),i(_e)!=="svelte-1dq8v2h"&&(_e.innerHTML=mo),tn=r(a),me=n(a,"HEADER",{"data-svelte-h":!0}),i(me)!=="svelte-181n01z"&&(me.innerHTML=xo),ln=r(a),xe=n(a,"P",{"data-svelte-h":!0}),i(xe)!=="svelte-1m7ce6y"&&(xe.textContent=Eo),nn=r(a),Tt=n(a,"UL",{});var $r=d(Tt);R=n($r,"LI",{});var ol=d(R);Mt=n(ol,"CODE",{});var zr=d(Mt);an=u(zr,Lo),zr.forEach(s),on=u(ol," or "),qt=n(ol,"CODE",{});var Jr=d(qt);rn=u(Jr,yo),Jr.forEach(s),ol.forEach(s),$r.forEach(s),sn=r(a),Ee=n(a,"HEADER",{"data-svelte-h":!0}),i(Ee)!=="svelte-yp3f1"&&(Ee.innerHTML=Ho),dn=r(a),Le=n(a,"P",{"data-svelte-h":!0}),i(Le)!=="svelte-gnya5t"&&(Le.textContent=go),cn=r(a),bt=n(a,"UL",{});var Br=d(bt);x=n(Br,"LI",{});var dt=d(x);wt=n(dt,"CODE",{});var Fr=d(wt);un=u(Fr,To),Fr.forEach(s),hn=u(dt,` or
+ `),kt=n(dt,"CODE",{});var Qr=d(kt);vn=u(Qr,Mo),Qr.forEach(s),fn=r(dt),ye=n(dt,"UL",{"data-svelte-h":!0}),i(ye)!=="svelte-1rnvygs"&&(ye.innerHTML=qo),dt.forEach(s),Br.forEach(s),Cn=r(a),He=n(a,"HEADER",{"data-svelte-h":!0}),i(He)!=="svelte-zaqzad"&&(He.innerHTML=bo),pn=r(a),ge=n(a,"P",{"data-svelte-h":!0}),i(ge)!=="svelte-j3asv6"&&(ge.textContent=wo),_n=r(a),S=n(a,"UL",{});var rl=d(S);E=n(rl,"LI",{});var ct=d(E);Dt=n(ct,"CODE",{});var Yr=d(Dt);mn=u(Yr,ko),Yr.forEach(s),xn=u(ct,` or
+ `),Ot=n(ct,"CODE",{});var Xr=d(Ot);En=u(Xr,Do),Xr.forEach(s),Ln=r(ct),Te=n(ct,"UL",{"data-svelte-h":!0}),i(Te)!=="svelte-2dutyq"&&(Te.innerHTML=Oo),ct.forEach(s),yn=r(rl),L=n(rl,"LI",{});var ut=d(L);Pt=n(ut,"CODE",{});var Gr=d(Pt);Hn=u(Gr,Po),Gr.forEach(s),gn=u(ut,` or
+ `),Ut=n(ut,"CODE",{});var Kr=d(Ut);Tn=u(Kr,Uo),Kr.forEach(s),Mn=r(ut),It=n(ut,"UL",{});var Vr=d(It);v=n(Vr,"LI",{});var p=d(v);qn=u(p,"(Search for a JSON encoded value (like "),Me=n(p,"CODE",{"data-svelte-h":!0}),i(Me)!=="svelte-1b4w2dk"&&(Me.textContent=Io),bn=u(p,`,
+ `),qe=n(p,"CODE",{"data-svelte-h":!0}),i(qe)!=="svelte-1rarbq3"&&(qe.textContent=Ao),wn=u(p,`,
+ `),be=n(p,"CODE",{"data-svelte-h":!0}),i(be)!=="svelte-ntdzrg"&&(be.textContent=Ro),kn=u(p,", or "),At=n(p,"CODE",{});var Wr=d(At);Dn=u(Wr,So),Wr.forEach(s),On=u(p,").)"),p.forEach(s),Vr.forEach(s),ut.forEach(s),rl.forEach(s),Pn=r(a),we=n(a,"HEADER",{"data-svelte-h":!0}),i(we)!=="svelte-bua55r"&&(we.innerHTML=jo),Un=r(a),ke=n(a,"P",{"data-svelte-h":!0}),i(ke)!=="svelte-uwu0uk"&&(ke.textContent=No),In=r(a),De=n(a,"UL",{"data-svelte-h":!0}),i(De)!=="svelte-1ndwe67"&&(De.innerHTML=$o),An=r(a),Oe=n(a,"HEADER",{"data-svelte-h":!0}),i(Oe)!=="svelte-1rhkq09"&&(Oe.innerHTML=zo),Rn=r(a),Pe=n(a,"P",{"data-svelte-h":!0}),i(Pe)!=="svelte-7b6wj1"&&(Pe.textContent=Jo),Sn=r(a),Ue=n(a,"UL",{"data-svelte-h":!0}),i(Ue)!=="svelte-11m7ek5"&&(Ue.innerHTML=Bo),jn=r(a),Ie=n(a,"HEADER",{"data-svelte-h":!0}),i(Ie)!=="svelte-1rqgjcl"&&(Ie.innerHTML=Fo),Nn=r(a),Ae=n(a,"P",{"data-svelte-h":!0}),i(Ae)!=="svelte-1ue8bv6"&&(Ae.textContent=Qo),$n=r(a),Re=n(a,"UL",{"data-svelte-h":!0}),i(Re)!=="svelte-1tly68z"&&(Re.innerHTML=Yo),zn=r(a),Se=n(a,"HEADER",{"data-svelte-h":!0}),i(Se)!=="svelte-btuyo5"&&(Se.innerHTML=Xo),Jn=r(a),je=n(a,"P",{"data-svelte-h":!0}),i(je)!=="svelte-1m62xd1"&&(je.textContent=Go),Bn=r(a),Ne=n(a,"UL",{"data-svelte-h":!0}),i(Ne)!=="svelte-3tcf7p"&&(Ne.innerHTML=Ko),Fn=r(a),$e=n(a,"HEADER",{"data-svelte-h":!0}),i($e)!=="svelte-1565k96"&&($e.innerHTML=Vo),Qn=r(a),ze=n(a,"P",{"data-svelte-h":!0}),i(ze)!=="svelte-1st2fkl"&&(ze.textContent=Wo),Yn=r(a),y=n(a,"UL",{});var ht=d(y);Rt=n(ht,"LI",{});var Zr=d(Rt);St=n(Zr,"CODE",{});var ei=d(St);Xn=u(ei,Zo),ei.forEach(s),Zr.forEach(s),Gn=r(ht),j=n(ht,"LI",{});var il=d(j);jt=n(il,"CODE",{});var ti=d(jt);Kn=u(ti,er),ti.forEach(s),Vn=r(il),Je=n(il,"UL",{"data-svelte-h":!0}),i(Je)!=="svelte-1svbsw1"&&(Je.innerHTML=tr),il.forEach(s),Wn=r(ht),N=n(ht,"LI",{});var sl=d(N);Nt=n(sl,"CODE",{});var li=d(Nt);Zn=u(li,lr),li.forEach(s),ea=r(sl),Be=n(sl,"UL",{"data-svelte-h":!0}),i(Be)!=="svelte-1bn8y3i"&&(Be.innerHTML=nr),sl.forEach(s),ht.forEach(s),ta=r(a),Fe=n(a,"HEADER",{"data-svelte-h":!0}),i(Fe)!=="svelte-ijyrzj"&&(Fe.innerHTML=ar),la=r(a),Qe=n(a,"P",{"data-svelte-h":!0}),i(Qe)!=="svelte-1mrui9r"&&(Qe.textContent=or),na=r(a),H=n(a,"UL",{});var vt=d(H);$t=n(vt,"LI",{});var ni=d($t);zt=n(ni,"CODE",{});var ai=d(zt);aa=u(ai,rr),ai.forEach(s),ni.forEach(s),oa=r(vt),$=n(vt,"LI",{});var dl=d($);Jt=n(dl,"CODE",{});var oi=d(Jt);ra=u(oi,ir),oi.forEach(s),ia=r(dl),Ye=n(dl,"UL",{"data-svelte-h":!0}),i(Ye)!=="svelte-1svbsw1"&&(Ye.innerHTML=sr),dl.forEach(s),sa=r(vt),z=n(vt,"LI",{});var cl=d(z);Bt=n(cl,"CODE",{});var ri=d(Bt);da=u(ri,dr),ri.forEach(s),ca=r(cl),Xe=n(cl,"UL",{"data-svelte-h":!0}),i(Xe)!=="svelte-1bn8y3i"&&(Xe.innerHTML=cr),cl.forEach(s),vt.forEach(s),ua=r(a),Ge=n(a,"HEADER",{"data-svelte-h":!0}),i(Ge)!=="svelte-1qzfhtr"&&(Ge.innerHTML=ur),ha=r(a),Ke=n(a,"P",{"data-svelte-h":!0}),i(Ke)!=="svelte-1oswxdc"&&(Ke.textContent=hr),va=r(a),g=n(a,"UL",{});var ft=d(g);Ft=n(ft,"LI",{});var ii=d(Ft);Qt=n(ii,"CODE",{});var si=d(Qt);fa=u(si,vr),si.forEach(s),ii.forEach(s),Ca=r(ft),J=n(ft,"LI",{});var ul=d(J);Yt=n(ul,"CODE",{});var di=d(Yt);pa=u(di,fr),di.forEach(s),_a=r(ul),Ve=n(ul,"UL",{"data-svelte-h":!0}),i(Ve)!=="svelte-1svbsw1"&&(Ve.innerHTML=Cr),ul.forEach(s),ma=r(ft),B=n(ft,"LI",{});var hl=d(B);Xt=n(hl,"CODE",{});var ci=d(Xt);xa=u(ci,pr),ci.forEach(s),Ea=r(hl),We=n(hl,"UL",{"data-svelte-h":!0}),i(We)!=="svelte-1bn8y3i"&&(We.innerHTML=_r),hl.forEach(s),ft.forEach(s),La=r(a),Ze=n(a,"HEADER",{"data-svelte-h":!0}),i(Ze)!=="svelte-1o8n18a"&&(Ze.innerHTML=mr),ya=r(a),et=n(a,"P",{"data-svelte-h":!0}),i(et)!=="svelte-p4b7pu"&&(et.textContent=xr),Ha=r(a),T=n(a,"UL",{});var Ct=d(T);Gt=n(Ct,"LI",{});var ui=d(Gt);Kt=n(ui,"CODE",{});var hi=d(Kt);ga=u(hi,Er),hi.forEach(s),ui.forEach(s),Ta=r(Ct),F=n(Ct,"LI",{});var vl=d(F);Vt=n(vl,"CODE",{});var vi=d(Vt);Ma=u(vi,Lr),vi.forEach(s),qa=r(vl),tt=n(vl,"UL",{"data-svelte-h":!0}),i(tt)!=="svelte-1svbsw1"&&(tt.innerHTML=yr),vl.forEach(s),ba=r(Ct),Q=n(Ct,"LI",{});var fl=d(Q);Wt=n(fl,"CODE",{});var fi=d(Wt);wa=u(fi,Hr),fi.forEach(s),ka=r(fl),lt=n(fl,"UL",{"data-svelte-h":!0}),i(lt)!=="svelte-1bn8y3i"&&(lt.innerHTML=gr),fl.forEach(s),Ct.forEach(s),Da=r(a),Y=n(a,"HEADER",{class:!0,"data-svelte-h":!0}),i(Y)!=="svelte-o2bzkl"&&(Y.innerHTML=Tr),Oa=r(a),nt=n(a,"P",{"data-svelte-h":!0}),i(nt)!=="svelte-1ego8n1"&&(nt.textContent=Mr),Pa=r(a),at=n(a,"P",{"data-svelte-h":!0}),i(at)!=="svelte-jrvukd"&&(at.textContent=qr),Ua=r(a),Zt=n(a,"PRE",{});var Ci=d(Zt);Ia=u(Ci,br),Ci.forEach(s),Aa=r(a),X=n(a,"HEADER",{class:!0,"data-svelte-h":!0}),i(X)!=="svelte-1o84pgh"&&(X.innerHTML=wr),Ra=r(a),ot=n(a,"P",{"data-svelte-h":!0}),i(ot)!=="svelte-6nx9nn"&&(ot.innerHTML=kr),Sa=r(a),G=n(a,"HEADER",{class:!0,"data-svelte-h":!0}),i(G)!=="svelte-g58mlz"&&(G.innerHTML=Dr),ja=r(a),rt=n(a,"P",{"data-svelte-h":!0}),i(rt)!=="svelte-15xz686"&&(rt.innerHTML=Or),a.forEach(s),this.h()},h(){document.title="Query Parser - Packages - Nymph.js",q.a=pt,M(b,"class","major"),M(w,"class","major"),M(D,"class","major"),M(P,"class","major"),M(U,"class","major"),M(Y,"class","major"),M(X,"class","major"),M(G,"class","major")},m(f,el){q.m(Pi,document.head),e(document.head,pt),_i(f,tl,el),_i(f,t,el),e(t,b),e(t,Cl),e(t,K),e(t,pl),e(t,w),e(t,_l),Ei(k,t,null),e(t,ml),e(t,D),e(t,xl),e(t,V),e(t,El),Ei(O,t,null),e(t,Ll),e(t,P),e(t,yl),e(t,W),e(t,Hl),e(t,Z),e(t,gl),e(t,ee),e(t,Tl),e(t,U),e(t,Ml),e(t,te),e(t,ql),e(t,le),e(t,bl),e(t,ne),e(t,wl),e(t,_),e(_,ae),e(_,kl),e(_,oe),e(_,Dl),e(_,m),e(m,re),e(m,Ol),e(m,ie),e(m,Pl),e(m,_t),e(_t,h),e(h,Ul),e(h,se),e(h,Il),e(h,de),e(h,Al),e(h,ce),e(h,Rl),e(h,mt),e(mt,Sl),e(h,jl),e(t,Nl),e(t,ue),e(t,$l),e(t,he),e(t,zl),e(t,xt),e(xt,I),e(I,Et),e(Et,Jl),e(I,Bl),e(I,Lt),e(Lt,Fl),e(t,Ql),e(t,ve),e(t,Yl),e(t,fe),e(t,Xl),e(t,yt),e(yt,A),e(A,Ht),e(Ht,Gl),e(A,Kl),e(A,gt),e(gt,Vl),e(t,Wl),e(t,Ce),e(t,Zl),e(t,pe),e(t,en),e(t,_e),e(t,tn),e(t,me),e(t,ln),e(t,xe),e(t,nn),e(t,Tt),e(Tt,R),e(R,Mt),e(Mt,an),e(R,on),e(R,qt),e(qt,rn),e(t,sn),e(t,Ee),e(t,dn),e(t,Le),e(t,cn),e(t,bt),e(bt,x),e(x,wt),e(wt,un),e(x,hn),e(x,kt),e(kt,vn),e(x,fn),e(x,ye),e(t,Cn),e(t,He),e(t,pn),e(t,ge),e(t,_n),e(t,S),e(S,E),e(E,Dt),e(Dt,mn),e(E,xn),e(E,Ot),e(Ot,En),e(E,Ln),e(E,Te),e(S,yn),e(S,L),e(L,Pt),e(Pt,Hn),e(L,gn),e(L,Ut),e(Ut,Tn),e(L,Mn),e(L,It),e(It,v),e(v,qn),e(v,Me),e(v,bn),e(v,qe),e(v,wn),e(v,be),e(v,kn),e(v,At),e(At,Dn),e(v,On),e(t,Pn),e(t,we),e(t,Un),e(t,ke),e(t,In),e(t,De),e(t,An),e(t,Oe),e(t,Rn),e(t,Pe),e(t,Sn),e(t,Ue),e(t,jn),e(t,Ie),e(t,Nn),e(t,Ae),e(t,$n),e(t,Re),e(t,zn),e(t,Se),e(t,Jn),e(t,je),e(t,Bn),e(t,Ne),e(t,Fn),e(t,$e),e(t,Qn),e(t,ze),e(t,Yn),e(t,y),e(y,Rt),e(Rt,St),e(St,Xn),e(y,Gn),e(y,j),e(j,jt),e(jt,Kn),e(j,Vn),e(j,Je),e(y,Wn),e(y,N),e(N,Nt),e(Nt,Zn),e(N,ea),e(N,Be),e(t,ta),e(t,Fe),e(t,la),e(t,Qe),e(t,na),e(t,H),e(H,$t),e($t,zt),e(zt,aa),e(H,oa),e(H,$),e($,Jt),e(Jt,ra),e($,ia),e($,Ye),e(H,sa),e(H,z),e(z,Bt),e(Bt,da),e(z,ca),e(z,Xe),e(t,ua),e(t,Ge),e(t,ha),e(t,Ke),e(t,va),e(t,g),e(g,Ft),e(Ft,Qt),e(Qt,fa),e(g,Ca),e(g,J),e(J,Yt),e(Yt,pa),e(J,_a),e(J,Ve),e(g,ma),e(g,B),e(B,Xt),e(Xt,xa),e(B,Ea),e(B,We),e(t,La),e(t,Ze),e(t,ya),e(t,et),e(t,Ha),e(t,T),e(T,Gt),e(Gt,Kt),e(Kt,ga),e(T,Ta),e(T,F),e(F,Vt),e(Vt,Ma),e(F,qa),e(F,tt),e(T,ba),e(T,Q),e(Q,Wt),e(Wt,wa),e(Q,ka),e(Q,lt),e(t,Da),e(t,Y),e(t,Oa),e(t,nt),e(t,Pa),e(t,at),e(t,Ua),e(t,Zt),e(Zt,Ia),e(t,Aa),e(t,X),e(t,Ra),e(t,ot),e(t,Sa),e(t,G),e(t,ja),e(t,rt),ll=!0},p:ki,i(f){ll||(Li(k.$$.fragment,f),Li(O.$$.fragment,f),ll=!0)},o(f){yi(k.$$.fragment,f),yi(O.$$.fragment,f),ll=!1},d(f){f&&(q.d(),s(tl),s(t)),s(pt),Hi(k),Hi(O)}}}class zi extends Di{constructor(q){super(),Oi(this,q,null,Ai,Mi,{})}}export{zi as component};
diff --git a/docs/_app/immutable/nodes/12.5662eea9.js b/docs/_app/immutable/nodes/12.5662eea9.js
deleted file mode 100644
index a66250d..0000000
--- a/docs/_app/immutable/nodes/12.5662eea9.js
+++ /dev/null
@@ -1,120 +0,0 @@
-import{S as be,i as Re,s as je,R as Me,e as xe,a as l,k as a,q as p,y as k,F as De,T as He,h as n,c as h,l as o,m as i,r as m,z as I,p as Ae,n as ue,C as e,b as Ce,A as U,D as Pe,g as q,d as L,B as Q}from"../chunks/index.d7cc8d8b.js";import{H as F,g as ke}from"../chunks/github.df9008b1.js";import{b as Ie}from"../chunks/bash.2b754df6.js";import{t as ye}from"../chunks/typescript.7dd1ec19.js";function Ue(Ne){let u,$,D,t,E,w,O,Y,T,z,X,_,x,B,G,y,J,S,C,K,V,N,W,Z,d,ee,b,te,re,c,se,R,ne,ae,oe,f,ie,v,le,j,pe,he,me,g,H;return y=new F({props:{language:Ie,code:"npm install --save @nymphjs/server"}}),d=new F({props:{language:ye,code:`import express from 'express';
-import { Nymph } from '@nymphjs/nymph';
-import SQLite3Driver from '@nymphjs/driver-sqlite3';
-import createServer from '@nymphjs/server';
-
-// Import all the entities you will be using on the server.
-import MyEntityClass from './entities/MyEntity';
-
-// Configure Nymph.
-const nymph = new Nymph(
- {},
- new SQLite3Driver({
- filename: ':memory:',
- }),
-);
-const MyEntity = nymph.addEntityClass(MyEntityClass);
-
-// Create your Express app.
-const app = express();
-
-// Create and use the REST server (with an optional path).
-app.use('/rest', createServer(nymph));
-
-// Do anything else you need to do...
-
-// Start your server.
-app.listen(80);`}}),f=new F({props:{language:ye,code:`import { Nymph } from '@nymphjs/client';
-
-import MyEntityClass from './entities/MyEntityClient';
-
-const nymph = new Nymph({
- // You should configure your Express server to
- // use HTTPS, but you don't have to.
- restUrl: 'https://mydomain.tld/rest',
-});
-const MyEntity = nymph.addEntityClass(MyEntityClass);`}}),g=new F({props:{language:ye,code:`import express from 'express';
-import { Nymph } from '@nymphjs/nymph';
-import SQLite3Driver from '@nymphjs/driver-sqlite3';
-import { Tilmeld } from '@nymphjs/tilmeld';
-import createServer from '@nymphjs/server';
-import setup from '@nymphjs/tilmeld-setup';
-
-// Import all the entities you will be using on the server.
-import MyEntityClass from './entities/MyEntity';
-
-// Consfigure Tilmeld.
-const tilmeld = new Tilmeld({
- appName: 'My Awesome App',
- appUrl: 'https://mydomain.tld',
- setupPath: '/user',
-});
-
-// Configure Nymph.
-const nymph = new Nymph(
- {},
- new SQLite3Driver({
- filename: ':memory:',
- }),
- tilmeld,
-);
-const MyEntity = nymph.addEntityClass(MyEntityClass);
-
-// Create your Express app.
-const app = express();
-
-// Authenticate the user manually.
-app.use('/rest', async (request, response, next) => {
- const { User } = tilmeld;
-
- try {
- // Somehow authenticate the user...
- const user = await User.factoryUsername(username);
-
- if (user.guid != null && user.enabled) {
- response.locals.user = user;
- }
-
- next();
- } catch (e: any) {
- response.status(500);
- response.send('Internal server error.');
- }
-});
-
-// Create and use the REST server (with an optional path).
-app.use('/rest', createServer(nymph));
-
-// Create Tilmeld setup app.
-app.user(
- '/user',
- setup(
- {
- restUrl: 'https://mydomain.tld/rest',
- },
- nymph,
- ),
-);
-
-// Do anything else you need to do...
-
-// Start your server.
-app.listen(80);`}}),{c(){u=new Me(!1),$=xe(),D=l(),t=a("section"),E=a("header"),w=a("h1"),O=p("REST Server"),Y=l(),T=a("p"),z=p(`The REST server lets you configure an endpoint for the Nymph client to query
- and push data to. The server provides this endpoint as an Express
- middleware, which can be used in a new or existing Express (or compatible)
- server.`),X=l(),_=a("header"),x=a("h2"),B=p("Installation"),G=l(),k(y.$$.fragment),J=l(),S=a("header"),C=a("h2"),K=p("Usage"),V=l(),N=a("p"),W=p(`You need to install Express, Nymph, and a Nymph driver, then you can use the
- REST server with an optional path. For this example, I'll use the SQLite3
- driver with an in-memory database.`),Z=l(),k(d.$$.fragment),ee=l(),b=a("p"),te=p(`You will need to import any entities you use on the server, so they are
- available to Nymph.`),re=l(),c=a("p"),se=p("Now you can configure your "),R=a("strong"),ne=p("client"),ae=p(`, using your server's
- address (and the optional path, if set).`),oe=l(),k(f.$$.fragment),ie=l(),v=a("p"),le=p(`The REST server will authenticate for you using the Tilmeld auth cookie and
- XSRF token, but if you need to, you can authenticate in some other way (like
- OAuth2), and place the user in `),j=a("code"),pe=p("response.locals.user"),he=p("."),me=l(),k(g.$$.fragment),this.h()},l(s){const M=De("svelte-vfb9fs",document.head);u=He(M,!1),$=xe(),M.forEach(n),D=h(s),t=o(s,"SECTION",{});var r=i(t);E=o(r,"HEADER",{class:!0});var de=i(E);w=o(de,"H1",{style:!0});var ce=i(w);O=m(ce,"REST Server"),ce.forEach(n),de.forEach(n),Y=h(r),T=o(r,"P",{});var fe=i(T);z=m(fe,`The REST server lets you configure an endpoint for the Nymph client to query
- and push data to. The server provides this endpoint as an Express
- middleware, which can be used in a new or existing Express (or compatible)
- server.`),fe.forEach(n),X=h(r),_=o(r,"HEADER",{class:!0});var ve=i(_);x=o(ve,"H2",{});var ge=i(x);B=m(ge,"Installation"),ge.forEach(n),ve.forEach(n),G=h(r),I(y.$$.fragment,r),J=h(r),S=o(r,"HEADER",{class:!0});var Ee=i(S);C=o(Ee,"H2",{});var we=i(C);K=m(we,"Usage"),we.forEach(n),Ee.forEach(n),V=h(r),N=o(r,"P",{});var _e=i(N);W=m(_e,`You need to install Express, Nymph, and a Nymph driver, then you can use the
- REST server with an optional path. For this example, I'll use the SQLite3
- driver with an in-memory database.`),_e.forEach(n),Z=h(r),I(d.$$.fragment,r),ee=h(r),b=o(r,"P",{});var Se=i(b);te=m(Se,`You will need to import any entities you use on the server, so they are
- available to Nymph.`),Se.forEach(n),re=h(r),c=o(r,"P",{});var A=i(c);se=m(A,"Now you can configure your "),R=o(A,"STRONG",{});var $e=i(R);ne=m($e,"client"),$e.forEach(n),ae=m(A,`, using your server's
- address (and the optional path, if set).`),A.forEach(n),oe=h(r),I(f.$$.fragment,r),ie=h(r),v=o(r,"P",{});var P=i(v);le=m(P,`The REST server will authenticate for you using the Tilmeld auth cookie and
- XSRF token, but if you need to, you can authenticate in some other way (like
- OAuth2), and place the user in `),j=o(P,"CODE",{});var Te=i(j);pe=m(Te,"response.locals.user"),Te.forEach(n),he=m(P,"."),P.forEach(n),me=h(r),I(g.$$.fragment,r),r.forEach(n),this.h()},h(){document.title="REST Server - Packages - Nymph.js",u.a=$,Ae(w,"font-size","3em"),ue(E,"class","major"),ue(_,"class","major"),ue(S,"class","major")},m(s,M){u.m(ke,document.head),e(document.head,$),Ce(s,D,M),Ce(s,t,M),e(t,E),e(E,w),e(w,O),e(t,Y),e(t,T),e(T,z),e(t,X),e(t,_),e(_,x),e(x,B),e(t,G),U(y,t,null),e(t,J),e(t,S),e(S,C),e(C,K),e(t,V),e(t,N),e(N,W),e(t,Z),U(d,t,null),e(t,ee),e(t,b),e(b,te),e(t,re),e(t,c),e(c,se),e(c,R),e(R,ne),e(c,ae),e(t,oe),U(f,t,null),e(t,ie),e(t,v),e(v,le),e(v,j),e(j,pe),e(v,he),e(t,me),U(g,t,null),H=!0},p:Pe,i(s){H||(q(y.$$.fragment,s),q(d.$$.fragment,s),q(f.$$.fragment,s),q(g.$$.fragment,s),H=!0)},o(s){L(y.$$.fragment,s),L(d.$$.fragment,s),L(f.$$.fragment,s),L(g.$$.fragment,s),H=!1},d(s){n($),s&&u.d(),s&&n(D),s&&n(t),Q(y),Q(d),Q(f),Q(g)}}}class Oe extends be{constructor(u){super(),Re(this,u,null,Ue,je,{})}}export{Oe as component};
diff --git a/docs/_app/immutable/nodes/12.b900fcff.js b/docs/_app/immutable/nodes/12.b900fcff.js
new file mode 100644
index 0000000..5e34b02
--- /dev/null
+++ b/docs/_app/immutable/nodes/12.b900fcff.js
@@ -0,0 +1,111 @@
+import{s as re,I as ae,e as te,a as r,f as o,x as oe,J as ie,d as T,c as a,g as i,h as le,r as l,j as O,u as n,i as ne,v as pe}from"../chunks/scheduler.d7e45cc8.js";import{S as me,i as he,b as M,d as H,m as b,a as N,t as j,e as L}from"../chunks/index.77720afb.js";import{H as R,g as ue}from"../chunks/github.64534d2c.js";import{b as ye}from"../chunks/bash.7e4226ac.js";import{t as J}from"../chunks/typescript.09c48802.js";function de(se){let p,$,_,e,m,X='
REST Server
',D,g,B=`The REST server lets you configure an endpoint for the Nymph client to query
+ and push data to. The server provides this endpoint as an Express
+ middleware, which can be used in a new or existing Express (or compatible)
+ server.`,P,h,G="
Installation
",A,u,I,y,K="
Usage
",U,v,V=`You need to install Express, Nymph, and a Nymph driver, then you can use the
+ REST server with an optional path. For this example, I'll use the SQLite3
+ driver with an in-memory database.`,q,d,Q,E,W=`You will need to import any entities you use on the server, so they are
+ available to Nymph.`,k,x,Z=`Now you can configure your client, using your server's
+ address (and the optional path, if set).`,Y,c,z,C,ee=`The REST server will authenticate for you using the Tilmeld auth cookie and
+ XSRF token, but if you need to, you can authenticate in some other way (like
+ OAuth2), and place the user in response.locals.user.`,F,f,S;return u=new R({props:{language:ye,code:"npm install --save @nymphjs/server"}}),d=new R({props:{language:J,code:`import express from 'express';
+import { Nymph } from '@nymphjs/nymph';
+import SQLite3Driver from '@nymphjs/driver-sqlite3';
+import createServer from '@nymphjs/server';
+
+// Import all the entities you will be using on the server.
+import MyEntityClass from './entities/MyEntity';
+
+// Configure Nymph.
+const nymph = new Nymph(
+ {},
+ new SQLite3Driver({
+ filename: ':memory:',
+ }),
+);
+const MyEntity = nymph.addEntityClass(MyEntityClass);
+
+// Create your Express app.
+const app = express();
+
+// Create and use the REST server (with an optional path).
+app.use('/rest', createServer(nymph));
+
+// Do anything else you need to do...
+
+// Start your server.
+app.listen(80);`}}),c=new R({props:{language:J,code:`import { Nymph } from '@nymphjs/client';
+
+import MyEntityClass from './entities/MyEntityClient';
+
+const nymph = new Nymph({
+ // You should configure your Express server to
+ // use HTTPS, but you don't have to.
+ restUrl: 'https://mydomain.tld/rest',
+});
+const MyEntity = nymph.addEntityClass(MyEntityClass);`}}),f=new R({props:{language:J,code:`import express from 'express';
+import { Nymph } from '@nymphjs/nymph';
+import SQLite3Driver from '@nymphjs/driver-sqlite3';
+import { Tilmeld } from '@nymphjs/tilmeld';
+import createServer from '@nymphjs/server';
+import setup from '@nymphjs/tilmeld-setup';
+
+// Import all the entities you will be using on the server.
+import MyEntityClass from './entities/MyEntity';
+
+// Consfigure Tilmeld.
+const tilmeld = new Tilmeld({
+ appName: 'My Awesome App',
+ appUrl: 'https://mydomain.tld',
+ setupPath: '/user',
+});
+
+// Configure Nymph.
+const nymph = new Nymph(
+ {},
+ new SQLite3Driver({
+ filename: ':memory:',
+ }),
+ tilmeld,
+);
+const MyEntity = nymph.addEntityClass(MyEntityClass);
+
+// Create your Express app.
+const app = express();
+
+// Authenticate the user manually.
+app.use('/rest', async (request, response, next) => {
+ const { User } = tilmeld;
+
+ try {
+ // Somehow authenticate the user...
+ const user = await User.factoryUsername(username);
+
+ if (user.guid != null && user.enabled) {
+ response.locals.user = user;
+ }
+
+ next();
+ } catch (e: any) {
+ response.status(500);
+ response.send('Internal server error.');
+ }
+});
+
+// Create and use the REST server (with an optional path).
+app.use('/rest', createServer(nymph));
+
+// Create Tilmeld setup app.
+app.user(
+ '/user',
+ setup(
+ {
+ restUrl: 'https://mydomain.tld/rest',
+ },
+ nymph,
+ ),
+);
+
+// Do anything else you need to do...
+
+// Start your server.
+app.listen(80);`}}),{c(){p=new ae(!1),$=te(),_=r(),e=o("section"),m=o("header"),m.innerHTML=X,D=r(),g=o("p"),g.textContent=B,P=r(),h=o("header"),h.innerHTML=G,A=r(),M(u.$$.fragment),I=r(),y=o("header"),y.innerHTML=K,U=r(),v=o("p"),v.textContent=V,q=r(),M(d.$$.fragment),Q=r(),E=o("p"),E.textContent=W,k=r(),x=o("p"),x.innerHTML=Z,Y=r(),M(c.$$.fragment),z=r(),C=o("p"),C.innerHTML=ee,F=r(),M(f.$$.fragment),this.h()},l(s){const w=oe("svelte-vfb9fs",document.head);p=ie(w,!1),$=te(),w.forEach(T),_=a(s),e=i(s,"SECTION",{});var t=le(e);m=i(t,"HEADER",{class:!0,"data-svelte-h":!0}),l(m)!=="svelte-n2t05f"&&(m.innerHTML=X),D=a(t),g=i(t,"P",{"data-svelte-h":!0}),l(g)!=="svelte-1t43z4b"&&(g.textContent=B),P=a(t),h=i(t,"HEADER",{class:!0,"data-svelte-h":!0}),l(h)!=="svelte-1hx9pnb"&&(h.innerHTML=G),A=a(t),H(u.$$.fragment,t),I=a(t),y=i(t,"HEADER",{class:!0,"data-svelte-h":!0}),l(y)!=="svelte-n87w0o"&&(y.innerHTML=K),U=a(t),v=i(t,"P",{"data-svelte-h":!0}),l(v)!=="svelte-5fapv"&&(v.textContent=V),q=a(t),H(d.$$.fragment,t),Q=a(t),E=i(t,"P",{"data-svelte-h":!0}),l(E)!=="svelte-ihx1p9"&&(E.textContent=W),k=a(t),x=i(t,"P",{"data-svelte-h":!0}),l(x)!=="svelte-5wdfo3"&&(x.innerHTML=Z),Y=a(t),H(c.$$.fragment,t),z=a(t),C=i(t,"P",{"data-svelte-h":!0}),l(C)!=="svelte-1f1uhip"&&(C.innerHTML=ee),F=a(t),H(f.$$.fragment,t),t.forEach(T),this.h()},h(){document.title="REST Server - Packages - Nymph.js",p.a=$,O(m,"class","major"),O(h,"class","major"),O(y,"class","major")},m(s,w){p.m(ue,document.head),n(document.head,$),ne(s,_,w),ne(s,e,w),n(e,m),n(e,D),n(e,g),n(e,P),n(e,h),n(e,A),b(u,e,null),n(e,I),n(e,y),n(e,U),n(e,v),n(e,q),b(d,e,null),n(e,Q),n(e,E),n(e,k),n(e,x),n(e,Y),b(c,e,null),n(e,z),n(e,C),n(e,F),b(f,e,null),S=!0},p:pe,i(s){S||(N(u.$$.fragment,s),N(d.$$.fragment,s),N(c.$$.fragment,s),N(f.$$.fragment,s),S=!0)},o(s){j(u.$$.fragment,s),j(d.$$.fragment,s),j(c.$$.fragment,s),j(f.$$.fragment,s),S=!1},d(s){s&&(p.d(),T(_),T(e)),T($),L(u),L(d),L(c),L(f)}}}class xe extends me{constructor(p){super(),he(this,p,null,de,re,{})}}export{xe as component};
diff --git a/docs/_app/immutable/nodes/13.f8c5ad83.js b/docs/_app/immutable/nodes/13.f8c5ad83.js
new file mode 100644
index 0000000..5c1ceb0
--- /dev/null
+++ b/docs/_app/immutable/nodes/13.f8c5ad83.js
@@ -0,0 +1,72 @@
+import{s as J,I as Y,e as O,a as m,f as d,x as B,J as G,d as _,c as p,g as y,h as K,r as b,j as S,u as s,i as A,v as Q}from"../chunks/scheduler.d7e45cc8.js";import{S as V,i as W,b as D,d as F,m as I,a as R,t as U,e as k}from"../chunks/index.77720afb.js";import{H as q,g as X}from"../chunks/github.64534d2c.js";import{b as Z}from"../chunks/bash.7e4226ac.js";import{t as ee}from"../chunks/typescript.09c48802.js";function te(z){let r,u,w,e,n,T='
Entity Sorter
',P,h,j=`The Nymph Entity Sorter lets you sort entities by their properties,
+ including hierarchically.`,$,o,N="
Installation
",H,i,x,l,L="
Usage
",C,g,M="Here's an overview:",E,c,v;return i=new q({props:{language:Z,code:"npm install --save @nymphjs/sorter"}}),c=new q({props:{language:ee,code:`import { Nymph } from '@nymphjs/nymph';
+// or
+import { Nymph } from '@nymphjs/client';
+import PageClass from 'Page';
+
+import { Sorter } from '@nymphjs/sorter';
+
+const nymphOptions = {
+ // the options for your Nymph instance.
+};
+const nymph = new Nymph(nymphOptions);
+const Page = nymph.addEntityClass(PageClass);
+
+let pages = await nymph.getEntities({ class: Page });
+
+const sorter = new Sorter(pages);
+
+//
+// ## Simple sort by some property.
+//
+
+sorter.sort('name');
+// Pages are now sorted by name, with locale aware sorting.
+console.log(pages);
+
+sorter.sort('cdate');
+// Pages are now sorted by creation date.
+console.log(pages);
+
+sorter.sort('cdate', { reverse: true });
+// Pages are now sorted by creation date, newest first.
+console.log(pages);
+
+// Specifying your own comparator.
+sorter.sort('name', { comparator: (a, b) => (a < b ? -1 : a > b ? 1 : 0) });
+// Pages are now sorted by name, based on UTF-16 code points.
+console.log(pages);
+
+// Specifying options to the collator.
+sorter.sort('name', {
+ collatorOptions: {
+ sensitivity: 'case',
+ caseFirst: 'upper',
+ numeric: true,
+ },
+});
+// Pages are now sorted by name, with uppercase coming first in case of
+// otherwise identical entries, and numbers being sorted logically (2 < 10).
+console.log(pages);
+
+//
+// ## Hierarchical sorting.
+//
+
+sorter.hsort('name', 'parent');
+// Pages are now sorted by name, hierarchically. (All child pages come
+// immediately after their parent.)
+console.log(pages);
+
+// You can specify the same options as before.
+sorter.hsort('name', 'parent', {
+ collatorOptions: {
+ sensitivity: 'case',
+ caseFirst: 'upper',
+ numeric: true,
+ },
+});
+// Pages are now sorted by name, hierarchically, with uppercase coming first
+// in case of otherwise identical entries, and numbers being sorted
+// logically (2 < 10).
+console.log(pages);`}}),{c(){r=new Y(!1),u=O(),w=m(),e=d("section"),n=d("header"),n.innerHTML=T,P=m(),h=d("p"),h.textContent=j,$=m(),o=d("header"),o.innerHTML=N,H=m(),D(i.$$.fragment),x=m(),l=d("header"),l.innerHTML=L,C=m(),g=d("p"),g.textContent=M,E=m(),D(c.$$.fragment),this.h()},l(a){const f=B("svelte-1wc9pbr",document.head);r=G(f,!1),u=O(),f.forEach(_),w=p(a),e=y(a,"SECTION",{});var t=K(e);n=y(t,"HEADER",{class:!0,"data-svelte-h":!0}),b(n)!=="svelte-uo1y54"&&(n.innerHTML=T),P=p(t),h=y(t,"P",{"data-svelte-h":!0}),b(h)!=="svelte-1nd7e5o"&&(h.textContent=j),$=p(t),o=y(t,"HEADER",{class:!0,"data-svelte-h":!0}),b(o)!=="svelte-1hx9pnb"&&(o.innerHTML=N),H=p(t),F(i.$$.fragment,t),x=p(t),l=y(t,"HEADER",{class:!0,"data-svelte-h":!0}),b(l)!=="svelte-n87w0o"&&(l.innerHTML=L),C=p(t),g=y(t,"P",{"data-svelte-h":!0}),b(g)!=="svelte-deeya8"&&(g.textContent=M),E=p(t),F(c.$$.fragment,t),t.forEach(_),this.h()},h(){document.title="Entity Sorter - Packages - Nymph.js",r.a=u,S(n,"class","major"),S(o,"class","major"),S(l,"class","major")},m(a,f){r.m(X,document.head),s(document.head,u),A(a,w,f),A(a,e,f),s(e,n),s(e,P),s(e,h),s(e,$),s(e,o),s(e,H),I(i,e,null),s(e,x),s(e,l),s(e,C),s(e,g),s(e,E),I(c,e,null),v=!0},p:Q,i(a){v||(R(i.$$.fragment,a),R(c.$$.fragment,a),v=!0)},o(a){U(i.$$.fragment,a),U(c.$$.fragment,a),v=!1},d(a){a&&(r.d(),_(w),_(e)),_(u),k(i),k(c)}}}class ie extends V{constructor(r){super(),W(this,r,null,te,J,{})}}export{ie as component};
diff --git a/docs/_app/immutable/nodes/13.fda82904.js b/docs/_app/immutable/nodes/13.fda82904.js
deleted file mode 100644
index 41e717d..0000000
--- a/docs/_app/immutable/nodes/13.fda82904.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import{S as re,i as se,s as oe,R as ne,e as L,a as m,k as o,q as P,y as M,F as ie,T as le,h as s,c as p,l as n,m as i,r as $,z as Q,p as ce,n as U,C as e,b as V,A as W,D as he,g as X,d as Z,B as ee}from"../chunks/index.d7cc8d8b.js";import{H as te,g as me}from"../chunks/github.df9008b1.js";import{b as pe}from"../chunks/bash.2b754df6.js";import{t as ge}from"../chunks/typescript.7dd1ec19.js";function de(ae){let l,u,H,t,g,d,j,N,_,C,T,y,b,x,A,c,O,f,w,D,F,E,R,I,h,S;return c=new te({props:{language:pe,code:"npm install --save @nymphjs/sorter"}}),h=new te({props:{language:ge,code:`import { Nymph } from '@nymphjs/nymph';
-// or
-import { Nymph } from '@nymphjs/client';
-import PageClass from 'Page';
-
-import { Sorter } from '@nymphjs/sorter';
-
-const nymphOptions = {
- // the options for your Nymph instance.
-};
-const nymph = new Nymph(nymphOptions);
-const Page = nymph.addEntityClass(PageClass);
-
-let pages = await nymph.getEntities({ class: Page });
-
-const sorter = new Sorter(pages);
-
-//
-// ## Simple sort by some property.
-//
-
-sorter.sort('name');
-// Pages are now sorted by name, with locale aware sorting.
-console.log(pages);
-
-sorter.sort('cdate');
-// Pages are now sorted by creation date.
-console.log(pages);
-
-sorter.sort('cdate', { reverse: true });
-// Pages are now sorted by creation date, newest first.
-console.log(pages);
-
-// Specifying your own comparator.
-sorter.sort('name', { comparator: (a, b) => (a < b ? -1 : a > b ? 1 : 0) });
-// Pages are now sorted by name, based on UTF-16 code points.
-console.log(pages);
-
-// Specifying options to the collator.
-sorter.sort('name', {
- collatorOptions: {
- sensitivity: 'case',
- caseFirst: 'upper',
- numeric: true,
- },
-});
-// Pages are now sorted by name, with uppercase coming first in case of
-// otherwise identical entries, and numbers being sorted logically (2 < 10).
-console.log(pages);
-
-//
-// ## Hierarchical sorting.
-//
-
-sorter.hsort('name', 'parent');
-// Pages are now sorted by name, hierarchically. (All child pages come
-// immediately after their parent.)
-console.log(pages);
-
-// You can specify the same options as before.
-sorter.hsort('name', 'parent', {
- collatorOptions: {
- sensitivity: 'case',
- caseFirst: 'upper',
- numeric: true,
- },
-});
-// Pages are now sorted by name, hierarchically, with uppercase coming first
-// in case of otherwise identical entries, and numbers being sorted
-// logically (2 < 10).
-console.log(pages);`}}),{c(){l=new ne(!1),u=L(),H=m(),t=o("section"),g=o("header"),d=o("h1"),j=P("Entity Sorter"),N=m(),_=o("p"),C=P(`The Nymph Entity Sorter lets you sort entities by their properties,
- including hierarchically.`),T=m(),y=o("header"),b=o("h2"),x=P("Installation"),A=m(),M(c.$$.fragment),O=m(),f=o("header"),w=o("h2"),D=P("Usage"),F=m(),E=o("p"),R=P("Here's an overview:"),I=m(),M(h.$$.fragment),this.h()},l(a){const v=ie("svelte-1wc9pbr",document.head);l=le(v,!1),u=L(),v.forEach(s),H=p(a),t=n(a,"SECTION",{});var r=i(t);g=n(r,"HEADER",{class:!0});var k=i(g);d=n(k,"H1",{style:!0});var q=i(d);j=$(q,"Entity Sorter"),q.forEach(s),k.forEach(s),N=p(r),_=n(r,"P",{});var z=i(_);C=$(z,`The Nymph Entity Sorter lets you sort entities by their properties,
- including hierarchically.`),z.forEach(s),T=p(r),y=n(r,"HEADER",{class:!0});var B=i(y);b=n(B,"H2",{});var Y=i(b);x=$(Y,"Installation"),Y.forEach(s),B.forEach(s),A=p(r),Q(c.$$.fragment,r),O=p(r),f=n(r,"HEADER",{class:!0});var G=i(f);w=n(G,"H2",{});var J=i(w);D=$(J,"Usage"),J.forEach(s),G.forEach(s),F=p(r),E=n(r,"P",{});var K=i(E);R=$(K,"Here's an overview:"),K.forEach(s),I=p(r),Q(h.$$.fragment,r),r.forEach(s),this.h()},h(){document.title="Entity Sorter - Packages - Nymph.js",l.a=u,ce(d,"font-size","3em"),U(g,"class","major"),U(y,"class","major"),U(f,"class","major")},m(a,v){l.m(me,document.head),e(document.head,u),V(a,H,v),V(a,t,v),e(t,g),e(g,d),e(d,j),e(t,N),e(t,_),e(_,C),e(t,T),e(t,y),e(y,b),e(b,x),e(t,A),W(c,t,null),e(t,O),e(t,f),e(f,w),e(w,D),e(t,F),e(t,E),e(E,R),e(t,I),W(h,t,null),S=!0},p:he,i(a){S||(X(c.$$.fragment,a),X(h.$$.fragment,a),S=!0)},o(a){Z(c.$$.fragment,a),Z(h.$$.fragment,a),S=!1},d(a){s(u),a&&l.d(),a&&s(H),a&&s(t),ee(c),ee(h)}}}class be extends re{constructor(l){super(),se(this,l,null,de,oe,{})}}export{be as component};
diff --git a/docs/_app/immutable/nodes/14.0448e6e5.js b/docs/_app/immutable/nodes/14.0448e6e5.js
new file mode 100644
index 0000000..9383b0d
--- /dev/null
+++ b/docs/_app/immutable/nodes/14.0448e6e5.js
@@ -0,0 +1,37 @@
+import{s as me,I as de,e as te,a as n,f as i,x as pe,J as ue,d as L,c as s,g as o,h as fe,r,j,u as a,i as ae,v as ge}from"../chunks/scheduler.d7e45cc8.js";import{S as ve,i as _e,b as ne,d as se,m as le,a as ie,t as oe,e as re}from"../chunks/index.77720afb.js";import{H as he,g as ye}from"../chunks/github.64534d2c.js";import{b as xe}from"../chunks/bash.7e4226ac.js";import{t as Te}from"../chunks/typescript.09c48802.js";function we(ce){let h,H,$,e,c,O='
Tilmeld
',A,v,Q=`Tilmeld (the d is silent) is a user and group management system for Nymph.
+ It provides strict access controls to protect entities from unauthorized
+ access/modification. It allows for granting and revoking ad hoc abilities to
+ users and groups, then checking for those abilities. It provides
+ authentication services and features protection against XSRF attacks.`,E,m,F="
Installation
",k,d,D,p,J="
Usage
",P,_,W=`When you initialize Nymph, provide it with an instance of the Tilmeld class
+ from this package. You now have access to the User and Group classes that
+ are specific to that instance of Nymph/Tilmeld.`,I,y,X="Here's an overview.",R,u,N,f,Y="
",z,T,V="There are a few abilities that Tilmeld uses internally:",q,w,Z=`
system/admin - A user with this ability has
+ all abilities.
tilmeld/admin - Allow the user to manage and edit other user's
+ account and group information and grant/revoke abilities.
tilmeld/switch - Allow the user to switch to other users (log
+ in as them without their password).
uid/get/[name] - Allow the user to read the named UID.
uid/new/[name] - Allow the user to read, create, and increment
+ the named UID.
uid/set/[name] - Allow the user to read, create, increment, set,
+ and delete the named UID.
`,G,C,ee="The admin and switch abilities cannot be inherited from groups.",M;return d=new he({props:{language:xe,code:"npm install --save @nymphjs/tilmeld"}}),u=new he({props:{language:Te,code:`import SQLite3Driver from '@nymphjs/driver-sqlite3';
+import { Tilmeld } from '@nymphjs/tilmeld';
+import { Nymph } from '@nymphjs/nymph';
+
+const tilmeld = new Tilmeld({
+ appName: 'My App',
+ appUrl: 'http://localhost',
+ cookieDomain: 'localhost',
+ cookiePath: '/',
+ setupPath: '/user',
+ verifyRedirect: 'http://localhost',
+ verifyChangeRedirect: 'http://localhost',
+ cancelChangeRedirect: 'http://localhost',
+ jwtSecret: 'shhhhh',
+});
+
+const nymph = new Nymph(
+ {},
+ new SQLite3Driver({
+ filename: ':memory:',
+ }),
+ tilmeld,
+);
+
+// These are the classes specific to this instance of Tilmeld.
+const { User, Group } = tilmeld;`}}),{c(){h=new de(!1),H=te(),$=n(),e=i("section"),c=i("header"),c.innerHTML=O,A=n(),v=i("p"),v.textContent=Q,E=n(),m=i("header"),m.innerHTML=F,k=n(),ne(d.$$.fragment),D=n(),p=i("header"),p.innerHTML=J,P=n(),_=i("p"),_.textContent=W,I=n(),y=i("p"),y.textContent=X,R=n(),ne(u.$$.fragment),N=n(),f=i("header"),f.innerHTML=Y,S=n(),x=i("p"),x.innerHTML=B,U=n(),g=i("header"),g.innerHTML=K,z=n(),T=i("p"),T.textContent=V,q=n(),w=i("ul"),w.innerHTML=Z,G=n(),C=i("p"),C.textContent=ee,this.h()},l(l){const b=pe("svelte-u4tysy",document.head);h=ue(b,!1),H=te(),b.forEach(L),$=s(l),e=o(l,"SECTION",{});var t=fe(e);c=o(t,"HEADER",{class:!0,"data-svelte-h":!0}),r(c)!=="svelte-wbnjet"&&(c.innerHTML=O),A=s(t),v=o(t,"P",{"data-svelte-h":!0}),r(v)!=="svelte-1dec0km"&&(v.textContent=Q),E=s(t),m=o(t,"HEADER",{class:!0,"data-svelte-h":!0}),r(m)!=="svelte-1hx9pnb"&&(m.innerHTML=F),k=s(t),se(d.$$.fragment,t),D=s(t),p=o(t,"HEADER",{class:!0,"data-svelte-h":!0}),r(p)!=="svelte-n87w0o"&&(p.innerHTML=J),P=s(t),_=o(t,"P",{"data-svelte-h":!0}),r(_)!=="svelte-g7y6bt"&&(_.textContent=W),I=s(t),y=o(t,"P",{"data-svelte-h":!0}),r(y)!=="svelte-1a308lw"&&(y.textContent=X),R=s(t),se(u.$$.fragment,t),N=s(t),f=o(t,"HEADER",{class:!0,"data-svelte-h":!0}),r(f)!=="svelte-1v13hnh"&&(f.innerHTML=Y),S=s(t),x=o(t,"P",{"data-svelte-h":!0}),r(x)!=="svelte-1hvv6m0"&&(x.innerHTML=B),U=s(t),g=o(t,"HEADER",{class:!0,"data-svelte-h":!0}),r(g)!=="svelte-pmakbp"&&(g.innerHTML=K),z=s(t),T=o(t,"P",{"data-svelte-h":!0}),r(T)!=="svelte-1uc2fjp"&&(T.textContent=V),q=s(t),w=o(t,"UL",{"data-svelte-h":!0}),r(w)!=="svelte-1pgzxq0"&&(w.innerHTML=Z),G=s(t),C=o(t,"P",{"data-svelte-h":!0}),r(C)!=="svelte-1f1xj6z"&&(C.textContent=ee),t.forEach(L),this.h()},h(){document.title="Tilmeld - Packages - Nymph.js",h.a=H,j(c,"class","major"),j(m,"class","major"),j(p,"class","major"),j(f,"class","major"),j(g,"class","major")},m(l,b){h.m(ye,document.head),a(document.head,H),ae(l,$,b),ae(l,e,b),a(e,c),a(e,A),a(e,v),a(e,E),a(e,m),a(e,k),le(d,e,null),a(e,D),a(e,p),a(e,P),a(e,_),a(e,I),a(e,y),a(e,R),le(u,e,null),a(e,N),a(e,f),a(e,S),a(e,x),a(e,U),a(e,g),a(e,z),a(e,T),a(e,q),a(e,w),a(e,G),a(e,C),M=!0},p:ge,i(l){M||(ie(d.$$.fragment,l),ie(u.$$.fragment,l),M=!0)},o(l){oe(d.$$.fragment,l),oe(u.$$.fragment,l),M=!1},d(l){l&&(h.d(),L($),L(e)),L(H),re(d),re(u)}}}class $e extends ve{constructor(h){super(),_e(this,h,null,we,me,{})}}export{$e as component};
diff --git a/docs/_app/immutable/nodes/14.cf29e398.js b/docs/_app/immutable/nodes/14.cf29e398.js
deleted file mode 100644
index dbff3e7..0000000
--- a/docs/_app/immutable/nodes/14.cf29e398.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import{S as $t,i as Ut,s as jt,R as Nt,e as Et,a as h,k as s,q as i,y as wt,F as Rt,T as Ct,h as t,c,l as o,m as r,r as n,z as yt,p as St,n as g,C as e,b as bt,A as Tt,D as Ot,g as At,d as Dt,B as It}from"../chunks/index.d7cc8d8b.js";import{H as kt,g as Pt}from"../chunks/github.df9008b1.js";import{b as Lt}from"../chunks/bash.2b754df6.js";import{t as xt}from"../chunks/typescript.7dd1ec19.js";function zt(Ht){let v,N,K,a,y,b,ee,te,R,ae,se,T,C,oe,re,_,le,A,S,ie,ne,O,he,ce,P,de,me,E,pe,D,L,fe,ue,w,ge,f,ve,_e,Ee,I,x,we,ye,z,be,Te,d,u,G,Ae,De,q,Ie,ke,He,k,F,$e,Ue,je,H,Q,Ne,Re,Ce,$,W,Se,Oe,Pe,U,X,Le,xe,ze,j,Y,Ge,qe,Fe,B,Qe,V;return _=new kt({props:{language:Lt,code:"npm install --save @nymphjs/tilmeld"}}),E=new kt({props:{language:xt,code:`import SQLite3Driver from '@nymphjs/driver-sqlite3';
-import { Tilmeld } from '@nymphjs/tilmeld';
-import { Nymph } from '@nymphjs/nymph';
-
-const tilmeld = new Tilmeld({
- appName: 'My App',
- appUrl: 'http://localhost',
- cookieDomain: 'localhost',
- cookiePath: '/',
- setupPath: '/user',
- verifyRedirect: 'http://localhost',
- verifyChangeRedirect: 'http://localhost',
- cancelChangeRedirect: 'http://localhost',
- jwtSecret: 'shhhhh',
-});
-
-const nymph = new Nymph(
- {},
- new SQLite3Driver({
- filename: ':memory:',
- }),
- tilmeld,
-);
-
-// These are the classes specific to this instance of Tilmeld.
-const { User, Group } = tilmeld;`}}),{c(){v=new Nt(!1),N=Et(),K=h(),a=s("section"),y=s("header"),b=s("h1"),ee=i("Tilmeld"),te=h(),R=s("p"),ae=i(`Tilmeld (the d is silent) is a user and group management system for Nymph.
- It provides strict access controls to protect entities from unauthorized
- access/modification. It allows for granting and revoking ad hoc abilities to
- users and groups, then checking for those abilities. It provides
- authentication services and features protection against XSRF attacks.`),se=h(),T=s("header"),C=s("h2"),oe=i("Installation"),re=h(),wt(_.$$.fragment),le=h(),A=s("header"),S=s("h2"),ie=i("Usage"),ne=h(),O=s("p"),he=i(`When you initialize Nymph, provide it with an instance of the Tilmeld class
- from this package. You now have access to the User and Group classes that
- are specific to that instance of Nymph/Tilmeld.`),ce=h(),P=s("p"),de=i("Here's an overview."),me=h(),wt(E.$$.fragment),pe=h(),D=s("header"),L=s("h2"),fe=i("Options"),ue=h(),w=s("p"),ge=i("See the "),f=s("a"),ve=i("config declaration file"),_e=i("."),Ee=h(),I=s("header"),x=s("h2"),we=i("Abilities"),ye=h(),z=s("p"),be=i("There are a few abilities that Tilmeld uses internally:"),Te=h(),d=s("ul"),u=s("li"),G=s("code"),Ae=i("system/admin"),De=i(` - A user with this ability has
- `),q=s("strong"),Ie=i("all"),ke=i(" abilities."),He=h(),k=s("li"),F=s("code"),$e=i("tilmeld/admin"),Ue=i(` - Allow the user to manage and edit other user's
- account and group information and grant/revoke abilities.`),je=h(),H=s("li"),Q=s("code"),Ne=i("tilmeld/switch"),Re=i(` - Allow the user to switch to other users (log
- in as them without their password).`),Ce=h(),$=s("li"),W=s("code"),Se=i("uid/get/[name]"),Oe=i(" - Allow the user to read the named UID."),Pe=h(),U=s("li"),X=s("code"),Le=i("uid/new/[name]"),xe=i(` - Allow the user to read, create, and increment
- the named UID.`),ze=h(),j=s("li"),Y=s("code"),Ge=i("uid/set/[name]"),qe=i(` - Allow the user to read, create, increment, set,
- and delete the named UID.`),Fe=h(),B=s("p"),Qe=i("The admin and switch abilities cannot be inherited from groups."),this.h()},l(m){const M=Rt("svelte-u4tysy",document.head);v=Ct(M,!1),N=Et(),M.forEach(t),K=c(m),a=o(m,"SECTION",{});var l=r(a);y=o(l,"HEADER",{class:!0});var Je=r(y);b=o(Je,"H1",{style:!0});var Ke=r(b);ee=n(Ke,"Tilmeld"),Ke.forEach(t),Je.forEach(t),te=c(l),R=o(l,"P",{});var Ve=r(R);ae=n(Ve,`Tilmeld (the d is silent) is a user and group management system for Nymph.
- It provides strict access controls to protect entities from unauthorized
- access/modification. It allows for granting and revoking ad hoc abilities to
- users and groups, then checking for those abilities. It provides
- authentication services and features protection against XSRF attacks.`),Ve.forEach(t),se=c(l),T=o(l,"HEADER",{class:!0});var Ze=r(T);C=o(Ze,"H2",{});var et=r(C);oe=n(et,"Installation"),et.forEach(t),Ze.forEach(t),re=c(l),yt(_.$$.fragment,l),le=c(l),A=o(l,"HEADER",{class:!0});var tt=r(A);S=o(tt,"H2",{});var at=r(S);ie=n(at,"Usage"),at.forEach(t),tt.forEach(t),ne=c(l),O=o(l,"P",{});var st=r(O);he=n(st,`When you initialize Nymph, provide it with an instance of the Tilmeld class
- from this package. You now have access to the User and Group classes that
- are specific to that instance of Nymph/Tilmeld.`),st.forEach(t),ce=c(l),P=o(l,"P",{});var ot=r(P);de=n(ot,"Here's an overview."),ot.forEach(t),me=c(l),yt(E.$$.fragment,l),pe=c(l),D=o(l,"HEADER",{class:!0});var rt=r(D);L=o(rt,"H2",{});var lt=r(L);fe=n(lt,"Options"),lt.forEach(t),rt.forEach(t),ue=c(l),w=o(l,"P",{});var Z=r(w);ge=n(Z,"See the "),f=o(Z,"A",{href:!0,target:!0,rel:!0});var it=r(f);ve=n(it,"config declaration file"),it.forEach(t),_e=n(Z,"."),Z.forEach(t),Ee=c(l),I=o(l,"HEADER",{class:!0});var nt=r(I);x=o(nt,"H2",{});var ht=r(x);we=n(ht,"Abilities"),ht.forEach(t),nt.forEach(t),ye=c(l),z=o(l,"P",{});var ct=r(z);be=n(ct,"There are a few abilities that Tilmeld uses internally:"),ct.forEach(t),Te=c(l),d=o(l,"UL",{});var p=r(d);u=o(p,"LI",{});var J=r(u);G=o(J,"CODE",{});var dt=r(G);Ae=n(dt,"system/admin"),dt.forEach(t),De=n(J,` - A user with this ability has
- `),q=o(J,"STRONG",{});var mt=r(q);Ie=n(mt,"all"),mt.forEach(t),ke=n(J," abilities."),J.forEach(t),He=c(p),k=o(p,"LI",{});var We=r(k);F=o(We,"CODE",{});var pt=r(F);$e=n(pt,"tilmeld/admin"),pt.forEach(t),Ue=n(We,` - Allow the user to manage and edit other user's
- account and group information and grant/revoke abilities.`),We.forEach(t),je=c(p),H=o(p,"LI",{});var Xe=r(H);Q=o(Xe,"CODE",{});var ft=r(Q);Ne=n(ft,"tilmeld/switch"),ft.forEach(t),Re=n(Xe,` - Allow the user to switch to other users (log
- in as them without their password).`),Xe.forEach(t),Ce=c(p),$=o(p,"LI",{});var Ye=r($);W=o(Ye,"CODE",{});var ut=r(W);Se=n(ut,"uid/get/[name]"),ut.forEach(t),Oe=n(Ye," - Allow the user to read the named UID."),Ye.forEach(t),Pe=c(p),U=o(p,"LI",{});var Be=r(U);X=o(Be,"CODE",{});var gt=r(X);Le=n(gt,"uid/new/[name]"),gt.forEach(t),xe=n(Be,` - Allow the user to read, create, and increment
- the named UID.`),Be.forEach(t),ze=c(p),j=o(p,"LI",{});var Me=r(j);Y=o(Me,"CODE",{});var vt=r(Y);Ge=n(vt,"uid/set/[name]"),vt.forEach(t),qe=n(Me,` - Allow the user to read, create, increment, set,
- and delete the named UID.`),Me.forEach(t),p.forEach(t),Fe=c(l),B=o(l,"P",{});var _t=r(B);Qe=n(_t,"The admin and switch abilities cannot be inherited from groups."),_t.forEach(t),l.forEach(t),this.h()},h(){document.title="Tilmeld - Packages - Nymph.js",v.a=N,St(b,"font-size","3em"),g(y,"class","major"),g(T,"class","major"),g(A,"class","major"),g(D,"class","major"),g(f,"href","https://github.com/sciactive/nymphjs/tree/master/packages/tilmeld/src/conf/d.ts"),g(f,"target","_blank"),g(f,"rel","external"),g(I,"class","major")},m(m,M){v.m(Pt,document.head),e(document.head,N),bt(m,K,M),bt(m,a,M),e(a,y),e(y,b),e(b,ee),e(a,te),e(a,R),e(R,ae),e(a,se),e(a,T),e(T,C),e(C,oe),e(a,re),Tt(_,a,null),e(a,le),e(a,A),e(A,S),e(S,ie),e(a,ne),e(a,O),e(O,he),e(a,ce),e(a,P),e(P,de),e(a,me),Tt(E,a,null),e(a,pe),e(a,D),e(D,L),e(L,fe),e(a,ue),e(a,w),e(w,ge),e(w,f),e(f,ve),e(w,_e),e(a,Ee),e(a,I),e(I,x),e(x,we),e(a,ye),e(a,z),e(z,be),e(a,Te),e(a,d),e(d,u),e(u,G),e(G,Ae),e(u,De),e(u,q),e(q,Ie),e(u,ke),e(d,He),e(d,k),e(k,F),e(F,$e),e(k,Ue),e(d,je),e(d,H),e(H,Q),e(Q,Ne),e(H,Re),e(d,Ce),e(d,$),e($,W),e(W,Se),e($,Oe),e(d,Pe),e(d,U),e(U,X),e(X,Le),e(U,xe),e(d,ze),e(d,j),e(j,Y),e(Y,Ge),e(j,qe),e(a,Fe),e(a,B),e(B,Qe),V=!0},p:Ot,i(m){V||(At(_.$$.fragment,m),At(E.$$.fragment,m),V=!0)},o(m){Dt(_.$$.fragment,m),Dt(E.$$.fragment,m),V=!1},d(m){t(N),m&&v.d(),m&&t(K),m&&t(a),It(_),It(E)}}}class Wt extends $t{constructor(v){super(),Ut(this,v,null,zt,jt,{})}}export{Wt as component};
diff --git a/docs/_app/immutable/nodes/15.4cc074e7.js b/docs/_app/immutable/nodes/15.4cc074e7.js
deleted file mode 100644
index 5767f89..0000000
--- a/docs/_app/immutable/nodes/15.4cc074e7.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import{S as Ke,i as Le,s as Qe,R as Ve,e as Se,a as m,k as r,q as n,y as ke,F as We,T as Xe,h as s,c as p,l,m as i,r as a,z as Ae,p as Ze,n as ve,C as e,b as Re,A as qe,D as et,g as Me,d as Ye,B as Be}from"../chunks/index.d7cc8d8b.js";import{H as Fe,g as tt}from"../chunks/github.df9008b1.js";import{b as nt}from"../chunks/bash.2b754df6.js";import{t as st}from"../chunks/typescript.7dd1ec19.js";function at(Je){let f,$,k,t,g,v,q,M,D,Y,B,C,N,F,J,y,K,u,L,b,Q,V,O,W,X,Z,T,w,ee,te,c,ne,H,se,ae,j,oe,re,G,le,ie,I,ce,he,P,de,me,pe,z,ue,fe,_,ye,E,_e,x,Ee,ge,A;return y=new Fe({props:{language:nt,code:"npm install --save @nymphjs/tilmeld-client"}}),_=new Fe({props:{language:st,code:`import { Nymph } from '@nymphjs/client';
-import {
- User as UserClass,
- Group as GroupClass,
-} from '@nymphjs/tilmeld-client';
-
-const nymph = new Nymph({
- restUrl: 'https://yournymphrestserver/path/to/your/endpoint',
-});
-const User = nymph.addEntityClass(UserClass);
-const Group = nymph.addEntityClass(GroupClass);
-User.init(nymph);`}}),{c(){f=new Ve(!1),$=Se(),k=m(),t=r("section"),g=r("header"),v=r("h1"),q=n("Tilmeld Client"),M=m(),D=r("p"),Y=n(`The Tilmeld Client lets you register, login, and perform user account
- related functions remotely on a Nymph server.`),B=m(),C=r("header"),N=r("h2"),F=n("Installation"),J=m(),ke(y.$$.fragment),K=m(),u=r("p"),L=n("You can find UMD in "),b=r("code"),Q=n("dist"),V=n(", or TS source in "),O=r("code"),W=n("src"),X=n("."),Z=m(),T=r("header"),w=r("h2"),ee=n("Usage"),te=m(),c=r("p"),ne=n("The Tilmeld client contains the client versions of the "),H=r("code"),se=n("User"),ae=n(` and
- `),j=r("code"),oe=n("Group"),re=n(`
- entities. It also contains helpers, `),G=r("code"),le=n("login"),ie=n(`,
- `),I=r("code"),ce=n("register"),he=n(", and "),P=r("code"),de=n("checkUsername"),me=n("."),pe=m(),z=r("p"),ue=n(`Once you've initialized Nymph Client, set the User and Group classes on it.
- Then initialize the new User class with the Nymph instance. (This allows the
- class to set up authentication listeners.)`),fe=m(),ke(_.$$.fragment),ye=m(),E=r("p"),_e=n(`If you're running more than one instance of Nymph client, be sure to use the
- classes returned by `),x=r("code"),Ee=n("addEntityClass"),ge=n(`, so as not to accidentally
- submit entities from one instances to another instance.`),this.h()},l(h){const S=We("svelte-1baconj",document.head);f=Xe(S,!1),$=Se(),S.forEach(s),k=p(h),t=l(h,"SECTION",{});var o=i(t);g=l(o,"HEADER",{class:!0});var Ce=i(g);v=l(Ce,"H1",{style:!0});var Te=i(v);q=a(Te,"Tilmeld Client"),Te.forEach(s),Ce.forEach(s),M=p(o),D=l(o,"P",{});var Ue=i(D);Y=a(Ue,`The Tilmeld Client lets you register, login, and perform user account
- related functions remotely on a Nymph server.`),Ue.forEach(s),B=p(o),C=l(o,"HEADER",{class:!0});var $e=i(C);N=l($e,"H2",{});var De=i(N);F=a(De,"Installation"),De.forEach(s),$e.forEach(s),J=p(o),Ae(y.$$.fragment,o),K=p(o),u=l(o,"P",{});var U=i(u);L=a(U,"You can find UMD in "),b=l(U,"CODE",{});var Ne=i(b);Q=a(Ne,"dist"),Ne.forEach(s),V=a(U,", or TS source in "),O=l(U,"CODE",{});var be=i(O);W=a(be,"src"),be.forEach(s),X=a(U,"."),U.forEach(s),Z=p(o),T=l(o,"HEADER",{class:!0});var Oe=i(T);w=l(Oe,"H2",{});var we=i(w);ee=a(we,"Usage"),we.forEach(s),Oe.forEach(s),te=p(o),c=l(o,"P",{});var d=i(c);ne=a(d,"The Tilmeld client contains the client versions of the "),H=l(d,"CODE",{});var He=i(H);se=a(He,"User"),He.forEach(s),ae=a(d,` and
- `),j=l(d,"CODE",{});var je=i(j);oe=a(je,"Group"),je.forEach(s),re=a(d,`
- entities. It also contains helpers, `),G=l(d,"CODE",{});var Ge=i(G);le=a(Ge,"login"),Ge.forEach(s),ie=a(d,`,
- `),I=l(d,"CODE",{});var Ie=i(I);ce=a(Ie,"register"),Ie.forEach(s),he=a(d,", and "),P=l(d,"CODE",{});var Pe=i(P);de=a(Pe,"checkUsername"),Pe.forEach(s),me=a(d,"."),d.forEach(s),pe=p(o),z=l(o,"P",{});var ze=i(z);ue=a(ze,`Once you've initialized Nymph Client, set the User and Group classes on it.
- Then initialize the new User class with the Nymph instance. (This allows the
- class to set up authentication listeners.)`),ze.forEach(s),fe=p(o),Ae(_.$$.fragment,o),ye=p(o),E=l(o,"P",{});var R=i(E);_e=a(R,`If you're running more than one instance of Nymph client, be sure to use the
- classes returned by `),x=l(R,"CODE",{});var xe=i(x);Ee=a(xe,"addEntityClass"),xe.forEach(s),ge=a(R,`, so as not to accidentally
- submit entities from one instances to another instance.`),R.forEach(s),o.forEach(s),this.h()},h(){document.title="Tilmeld Client - Packages - Nymph.js",f.a=$,Ze(v,"font-size","3em"),ve(g,"class","major"),ve(C,"class","major"),ve(T,"class","major")},m(h,S){f.m(tt,document.head),e(document.head,$),Re(h,k,S),Re(h,t,S),e(t,g),e(g,v),e(v,q),e(t,M),e(t,D),e(D,Y),e(t,B),e(t,C),e(C,N),e(N,F),e(t,J),qe(y,t,null),e(t,K),e(t,u),e(u,L),e(u,b),e(b,Q),e(u,V),e(u,O),e(O,W),e(u,X),e(t,Z),e(t,T),e(T,w),e(w,ee),e(t,te),e(t,c),e(c,ne),e(c,H),e(H,se),e(c,ae),e(c,j),e(j,oe),e(c,re),e(c,G),e(G,le),e(c,ie),e(c,I),e(I,ce),e(c,he),e(c,P),e(P,de),e(c,me),e(t,pe),e(t,z),e(z,ue),e(t,fe),qe(_,t,null),e(t,ye),e(t,E),e(E,_e),e(E,x),e(x,Ee),e(E,ge),A=!0},p:et,i(h){A||(Me(y.$$.fragment,h),Me(_.$$.fragment,h),A=!0)},o(h){Ye(y.$$.fragment,h),Ye(_.$$.fragment,h),A=!1},d(h){s($),h&&f.d(),h&&s(k),h&&s(t),Be(y),Be(_)}}}class ct extends Ke{constructor(f){super(),Le(this,f,null,at,Qe,{})}}export{ct as component};
diff --git a/docs/_app/immutable/nodes/15.d517831e.js b/docs/_app/immutable/nodes/15.d517831e.js
new file mode 100644
index 0000000..78ee230
--- /dev/null
+++ b/docs/_app/immutable/nodes/15.d517831e.js
@@ -0,0 +1,20 @@
+import{s as Z,I as ee,e as O,a,f as o,x as te,J as ne,d as H,c as l,g as r,h as se,r as i,j as G,u as n,i as J,v as ae}from"../chunks/scheduler.d7e45cc8.js";import{S as le,i as oe,b as Y,d as B,m as F,a as K,t as Q,e as V}from"../chunks/index.77720afb.js";import{H as W,g as re}from"../chunks/github.64534d2c.js";import{b as ie}from"../chunks/bash.7e4226ac.js";import{t as ce}from"../chunks/typescript.09c48802.js";function he(X){let c,C,x,e,h,I='
Tilmeld Client
',M,f,q=`The Tilmeld Client lets you register, login, and perform user account
+ related functions remotely on a Nymph server.`,E,m,z="
Installation
",L,d,U,g,D="You can find UMD in dist, or TS source in src.",b,p,S="
Usage
",j,y,k=`The Tilmeld client contains the client versions of the User and
+ Group
+ entities. It also contains helpers, login,
+ register, and checkUsername.`,w,_,A=`Once you've initialized Nymph Client, set the User and Group classes on it.
+ Then initialize the new User class with the Nymph instance. (This allows the
+ class to set up authentication listeners.)`,N,u,P,v,R=`If you're running more than one instance of Nymph client, be sure to use the
+ classes returned by addEntityClass, so as not to accidentally
+ submit entities from one instances to another instance.`,$;return d=new W({props:{language:ie,code:"npm install --save @nymphjs/tilmeld-client"}}),u=new W({props:{language:ce,code:`import { Nymph } from '@nymphjs/client';
+import {
+ User as UserClass,
+ Group as GroupClass,
+} from '@nymphjs/tilmeld-client';
+
+const nymph = new Nymph({
+ restUrl: 'https://yournymphrestserver/path/to/your/endpoint',
+});
+const User = nymph.addEntityClass(UserClass);
+const Group = nymph.addEntityClass(GroupClass);
+User.init(nymph);`}}),{c(){c=new ee(!1),C=O(),x=a(),e=o("section"),h=o("header"),h.innerHTML=I,M=a(),f=o("p"),f.textContent=q,E=a(),m=o("header"),m.innerHTML=z,L=a(),Y(d.$$.fragment),U=a(),g=o("p"),g.innerHTML=D,b=a(),p=o("header"),p.innerHTML=S,j=a(),y=o("p"),y.innerHTML=k,w=a(),_=o("p"),_.textContent=A,N=a(),Y(u.$$.fragment),P=a(),v=o("p"),v.innerHTML=R,this.h()},l(s){const T=te("svelte-1baconj",document.head);c=ne(T,!1),C=O(),T.forEach(H),x=l(s),e=r(s,"SECTION",{});var t=se(e);h=r(t,"HEADER",{class:!0,"data-svelte-h":!0}),i(h)!=="svelte-isekeu"&&(h.innerHTML=I),M=l(t),f=r(t,"P",{"data-svelte-h":!0}),i(f)!=="svelte-13mrlh4"&&(f.textContent=q),E=l(t),m=r(t,"HEADER",{class:!0,"data-svelte-h":!0}),i(m)!=="svelte-1hx9pnb"&&(m.innerHTML=z),L=l(t),B(d.$$.fragment,t),U=l(t),g=r(t,"P",{"data-svelte-h":!0}),i(g)!=="svelte-h28vnv"&&(g.innerHTML=D),b=l(t),p=r(t,"HEADER",{class:!0,"data-svelte-h":!0}),i(p)!=="svelte-n87w0o"&&(p.innerHTML=S),j=l(t),y=r(t,"P",{"data-svelte-h":!0}),i(y)!=="svelte-g39yzf"&&(y.innerHTML=k),w=l(t),_=r(t,"P",{"data-svelte-h":!0}),i(_)!=="svelte-1f69b11"&&(_.textContent=A),N=l(t),B(u.$$.fragment,t),P=l(t),v=r(t,"P",{"data-svelte-h":!0}),i(v)!=="svelte-qtqrq3"&&(v.innerHTML=R),t.forEach(H),this.h()},h(){document.title="Tilmeld Client - Packages - Nymph.js",c.a=C,G(h,"class","major"),G(m,"class","major"),G(p,"class","major")},m(s,T){c.m(re,document.head),n(document.head,C),J(s,x,T),J(s,e,T),n(e,h),n(e,M),n(e,f),n(e,E),n(e,m),n(e,L),F(d,e,null),n(e,U),n(e,g),n(e,b),n(e,p),n(e,j),n(e,y),n(e,w),n(e,_),n(e,N),F(u,e,null),n(e,P),n(e,v),$=!0},p:ae,i(s){$||(K(d.$$.fragment,s),K(u.$$.fragment,s),$=!0)},o(s){Q(d.$$.fragment,s),Q(u.$$.fragment,s),$=!1},d(s){s&&(c.d(),H(x),H(e)),H(C),V(d),V(u)}}}class ge extends le{constructor(c){super(),oe(this,c,null,he,Z,{})}}export{ge as component};
diff --git a/docs/_app/immutable/nodes/16.d3ee0c7c.js b/docs/_app/immutable/nodes/16.d3ee0c7c.js
deleted file mode 100644
index ba7b680..0000000
--- a/docs/_app/immutable/nodes/16.d3ee0c7c.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import{S as ae,i as ne,s as oe,R as se,e as Z,a as S,k as s,q as d,y as re,F as le,T as he,h as a,c as T,l as r,m as l,r as c,z as de,p as ce,n as f,C as e,b as ee,A as ie,D as me,g as pe,d as ue,B as fe}from"../chunks/index.d7cc8d8b.js";import{H as _e,g as ge}from"../chunks/github.df9008b1.js";import{b as ve}from"../chunks/bash.2b754df6.js";function ye(te){let i,H,j,t,_,g,w,A,h,U,m,x,D,p,M,P,R,v,I,q,z,u,N,y,b,Y,B,C,F,k;return u=new _e({props:{language:ve,code:"npm install --save @nymphjs/tilmeld-components"}}),{c(){i=new se(!1),H=Z(),j=S(),t=s("section"),_=s("header"),g=s("h1"),w=d("Tilmeld Components"),A=S(),h=s("p"),U=d(`The Tilmeld Components are front end registration/login, account recovery,
- account details, and password change components built with `),m=s("a"),x=d("Svelte"),D=d(`
- and `),p=s("a"),M=d("SMUI"),P=d("."),R=S(),v=s("header"),I=s("h2"),q=d("Installation"),z=S(),re(u.$$.fragment),N=S(),y=s("header"),b=s("h2"),Y=d("Usage"),B=S(),C=s("p"),F=d(`You need to have an SMUI theme compiled and installed on your front end app.
- If you're using Svelte, you need to have TypeScript support and you should
- use the 'svelte' mainfield from package.json.`),this.h()},l(n){const $=le("svelte-n3h9ha",document.head);i=he($,!1),H=Z(),$.forEach(a),j=T(n),t=r(n,"SECTION",{});var o=l(t);_=r(o,"HEADER",{class:!0});var O=l(_);g=r(O,"H1",{style:!0});var G=l(g);w=c(G,"Tilmeld Components"),G.forEach(a),O.forEach(a),A=T(o),h=r(o,"P",{});var E=l(h);U=c(E,`The Tilmeld Components are front end registration/login, account recovery,
- account details, and password change components built with `),m=r(E,"A",{href:!0,target:!0});var J=l(m);x=c(J,"Svelte"),J.forEach(a),D=c(E,`
- and `),p=r(E,"A",{href:!0,target:!0});var K=l(p);M=c(K,"SMUI"),K.forEach(a),P=c(E,"."),E.forEach(a),R=T(o),v=r(o,"HEADER",{class:!0});var L=l(v);I=r(L,"H2",{});var Q=l(I);q=c(Q,"Installation"),Q.forEach(a),L.forEach(a),z=T(o),de(u.$$.fragment,o),N=T(o),y=r(o,"HEADER",{class:!0});var V=l(y);b=r(V,"H2",{});var W=l(b);Y=c(W,"Usage"),W.forEach(a),V.forEach(a),B=T(o),C=r(o,"P",{});var X=l(C);F=c(X,`You need to have an SMUI theme compiled and installed on your front end app.
- If you're using Svelte, you need to have TypeScript support and you should
- use the 'svelte' mainfield from package.json.`),X.forEach(a),o.forEach(a),this.h()},h(){document.title="Tilmeld Components - Packages - Nymph.js",i.a=H,ce(g,"font-size","3em"),f(_,"class","major"),f(m,"href","https://svelte.dev/"),f(m,"target","_blank"),f(p,"href","https://sveltematerialui.com/"),f(p,"target","_blank"),f(v,"class","major"),f(y,"class","major")},m(n,$){i.m(ge,document.head),e(document.head,H),ee(n,j,$),ee(n,t,$),e(t,_),e(_,g),e(g,w),e(t,A),e(t,h),e(h,U),e(h,m),e(m,x),e(h,D),e(h,p),e(p,M),e(h,P),e(t,R),e(t,v),e(v,I),e(I,q),e(t,z),ie(u,t,null),e(t,N),e(t,y),e(y,b),e(b,Y),e(t,B),e(t,C),e(C,F),k=!0},p:me,i(n){k||(pe(u.$$.fragment,n),k=!0)},o(n){ue(u.$$.fragment,n),k=!1},d(n){a(H),n&&i.d(),n&&a(j),n&&a(t),fe(u)}}}class He extends ae{constructor(i){super(),ne(this,i,null,ye,oe,{})}}export{He as component};
diff --git a/docs/_app/immutable/nodes/16.de906698.js b/docs/_app/immutable/nodes/16.de906698.js
new file mode 100644
index 0000000..7eeaf07
--- /dev/null
+++ b/docs/_app/immutable/nodes/16.de906698.js
@@ -0,0 +1,5 @@
+import{s as A,I as D,e as w,a as d,f as c,x as R,J as U,d as g,c as p,g as u,h as N,r as v,j as E,u as n,i as I,v as q}from"../chunks/scheduler.d7e45cc8.js";import{S as z,i as J,b as O,d as Y,m as B,a as F,t as G,e as K}from"../chunks/index.77720afb.js";import{H as Q,g as V}from"../chunks/github.64534d2c.js";import{b as W}from"../chunks/bash.7e4226ac.js";function X(P){let s,f,H,e,l,L='
Tilmeld Components
',y,h,S=`The Tilmeld Components are front end registration/login, account recovery,
+ account details, and password change components built with Svelte
+ and SMUI.`,x,o,$="
Installation
",C,r,M,i,j="
Usage
",b,m,k=`You need to have an SMUI theme compiled and installed on your front end app.
+ If you're using Svelte, you need to have TypeScript support and you should
+ use the 'svelte' mainfield from package.json.`,T;return r=new Q({props:{language:W,code:"npm install --save @nymphjs/tilmeld-components"}}),{c(){s=new D(!1),f=w(),H=d(),e=c("section"),l=c("header"),l.innerHTML=L,y=d(),h=c("p"),h.innerHTML=S,x=d(),o=c("header"),o.innerHTML=$,C=d(),O(r.$$.fragment),M=d(),i=c("header"),i.innerHTML=j,b=d(),m=c("p"),m.textContent=k,this.h()},l(a){const _=R("svelte-n3h9ha",document.head);s=U(_,!1),f=w(),_.forEach(g),H=p(a),e=u(a,"SECTION",{});var t=N(e);l=u(t,"HEADER",{class:!0,"data-svelte-h":!0}),v(l)!=="svelte-1k6vxf3"&&(l.innerHTML=L),y=p(t),h=u(t,"P",{"data-svelte-h":!0}),v(h)!=="svelte-71lkmd"&&(h.innerHTML=S),x=p(t),o=u(t,"HEADER",{class:!0,"data-svelte-h":!0}),v(o)!=="svelte-1hx9pnb"&&(o.innerHTML=$),C=p(t),Y(r.$$.fragment,t),M=p(t),i=u(t,"HEADER",{class:!0,"data-svelte-h":!0}),v(i)!=="svelte-n87w0o"&&(i.innerHTML=j),b=p(t),m=u(t,"P",{"data-svelte-h":!0}),v(m)!=="svelte-15wbd4n"&&(m.textContent=k),t.forEach(g),this.h()},h(){document.title="Tilmeld Components - Packages - Nymph.js",s.a=f,E(l,"class","major"),E(o,"class","major"),E(i,"class","major")},m(a,_){s.m(V,document.head),n(document.head,f),I(a,H,_),I(a,e,_),n(e,l),n(e,y),n(e,h),n(e,x),n(e,o),n(e,C),B(r,e,null),n(e,M),n(e,i),n(e,b),n(e,m),T=!0},p:q,i(a){T||(F(r.$$.fragment,a),T=!0)},o(a){G(r.$$.fragment,a),T=!1},d(a){a&&(s.d(),g(H),g(e)),g(f),K(r)}}}class ne extends z{constructor(s){super(),J(this,s,null,X,A,{})}}export{ne as component};
diff --git a/docs/_app/immutable/nodes/17.61cc7221.js b/docs/_app/immutable/nodes/17.61cc7221.js
new file mode 100644
index 0000000..9bb7994
--- /dev/null
+++ b/docs/_app/immutable/nodes/17.61cc7221.js
@@ -0,0 +1,55 @@
+import{s as G,I as K,e as q,a,f as o,x as V,J as Z,d as T,c as r,g as l,h as ee,r as c,j as M,u as n,i as F,v as te}from"../chunks/scheduler.d7e45cc8.js";import{S as ne,i as se,b as Q,d as O,m as X,a as z,t as J,e as W}from"../chunks/index.77720afb.js";import{H as Y,g as ae}from"../chunks/github.64534d2c.js";import{b as re}from"../chunks/bash.7e4226ac.js";import{t as oe}from"../chunks/typescript.09c48802.js";function le(B){let i,_,C,e,p,P='
Tilmeld Setup
',w,f,k=`The Tilmeld Setup App allows administrators to create, modify, and delete
+ users and groups and configure how Tilmeld works. It also acts as the
+ endpoint for email address verification.`,$,h,N="
Installation
",E,m,H,d,A="
Usage
",j,g,D=`You need to setup a Nymph REST endpoint, then you can use the Tilmeld Setup
+ App as another endpoint in your Express server.`,R,y,I=`IMPORTANT: Within the setup app, Tilmeld does not check for
+ XSRF tokens, so do not put your REST endpoint under the setup
+ app's path, or you will be vulnerable to XSRF attacks!`,b,v,U="For this example, I'll use the SQLite3 driver with an in-memory database.",L,u,S;return m=new Y({props:{language:re,code:"npm install --save @nymphjs/tilmeld-setup"}}),u=new Y({props:{language:oe,code:`import express from 'express';
+import SQLite3Driver from '@nymphjs/driver-sqlite3';
+import { Nymph } from '@nymphjs/nymph';
+import { Tilmeld } from '@nymphjs/tilmeld';
+import createServer from '@nymphjs/server';
+import setup from '@nymphjs/tilmeld-setup';
+
+// Import all the entities you will be using on the server.
+import './entities/MyEntity';
+
+// Configure Nymph.
+const nymph = new Nymph(
+ {},
+ new SQLite3Driver({
+ filename: ':memory:',
+ }),
+ new Tilmeld({
+ appName: 'My App',
+ appUrl: 'http://localhost',
+ cookieDomain: 'localhost',
+ cookiePath: '/',
+ setupPath: '/user',
+ verifyRedirect: 'http://localhost',
+ verifyChangeRedirect: 'http://localhost',
+ cancelChangeRedirect: 'http://localhost',
+ jwtSecret: 'shhhhh',
+ }),
+);
+
+// Create your Express app.
+const app = express();
+
+// Use the REST server.
+app.use('/rest', createServer(nymph));
+
+// Create Tilmeld setup app.
+app.use(
+ '/user',
+ setup(
+ {
+ restUrl: 'http://localhost/rest',
+ },
+ nymph,
+ ),
+);
+
+// Do anything else you need to do...
+
+// Start your server.
+app.listen(80);`}}),{c(){i=new K(!1),_=q(),C=a(),e=o("section"),p=o("header"),p.innerHTML=P,w=a(),f=o("p"),f.textContent=k,$=a(),h=o("header"),h.innerHTML=N,E=a(),Q(m.$$.fragment),H=a(),d=o("header"),d.innerHTML=A,j=a(),g=o("p"),g.textContent=D,R=a(),y=o("p"),y.innerHTML=I,b=a(),v=o("p"),v.textContent=U,L=a(),Q(u.$$.fragment),this.h()},l(s){const x=V("svelte-k7q6er",document.head);i=Z(x,!1),_=q(),x.forEach(T),C=r(s),e=l(s,"SECTION",{});var t=ee(e);p=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),c(p)!=="svelte-osove8"&&(p.innerHTML=P),w=r(t),f=l(t,"P",{"data-svelte-h":!0}),c(f)!=="svelte-1w25xsb"&&(f.textContent=k),$=r(t),h=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),c(h)!=="svelte-1hx9pnb"&&(h.innerHTML=N),E=r(t),O(m.$$.fragment,t),H=r(t),d=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),c(d)!=="svelte-n87w0o"&&(d.innerHTML=A),j=r(t),g=l(t,"P",{"data-svelte-h":!0}),c(g)!=="svelte-1ym3n7x"&&(g.textContent=D),R=r(t),y=l(t,"P",{"data-svelte-h":!0}),c(y)!=="svelte-gwm2u9"&&(y.innerHTML=I),b=r(t),v=l(t,"P",{"data-svelte-h":!0}),c(v)!=="svelte-ar0pb9"&&(v.textContent=U),L=r(t),O(u.$$.fragment,t),t.forEach(T),this.h()},h(){document.title="Tilmeld Setup - Packages - Nymph.js",i.a=_,M(p,"class","major"),M(h,"class","major"),M(d,"class","major")},m(s,x){i.m(ae,document.head),n(document.head,_),F(s,C,x),F(s,e,x),n(e,p),n(e,w),n(e,f),n(e,$),n(e,h),n(e,E),X(m,e,null),n(e,H),n(e,d),n(e,j),n(e,g),n(e,R),n(e,y),n(e,b),n(e,v),n(e,L),X(u,e,null),S=!0},p:te,i(s){S||(z(m.$$.fragment,s),z(u.$$.fragment,s),S=!0)},o(s){J(m.$$.fragment,s),J(u.$$.fragment,s),S=!1},d(s){s&&(i.d(),T(C),T(e)),T(_),W(m),W(u)}}}class ue extends ne{constructor(i){super(),se(this,i,null,le,G,{})}}export{ue as component};
diff --git a/docs/_app/immutable/nodes/17.83da61bb.js b/docs/_app/immutable/nodes/17.83da61bb.js
deleted file mode 100644
index e12dd56..0000000
--- a/docs/_app/immutable/nodes/17.83da61bb.js
+++ /dev/null
@@ -1,60 +0,0 @@
-import{S as _e,i as Ee,s as Te,R as Se,e as ie,a as m,k as o,q as p,y as he,F as Re,T as we,h as s,c as d,l as n,m as l,r as i,z as me,p as $e,n as K,C as e,b as de,A as ce,D as ke,g as ue,d as fe,B as ye}from"../chunks/index.d7cc8d8b.js";import{H as ge,g as xe}from"../chunks/github.df9008b1.js";import{b as Ne}from"../chunks/bash.2b754df6.js";import{t as be}from"../chunks/typescript.7dd1ec19.js";function je(ve){let c,T,j,t,y,g,H,I,S,P,C,v,R,D,F,u,O,_,w,U,q,$,L,M,h,Q,k,X,z,x,G,W,Y,N,B,J,f,A;return u=new ge({props:{language:Ne,code:"npm install --save @nymphjs/tilmeld-setup"}}),f=new ge({props:{language:be,code:`import express from 'express';
-import SQLite3Driver from '@nymphjs/driver-sqlite3';
-import { Nymph } from '@nymphjs/nymph';
-import { Tilmeld } from '@nymphjs/tilmeld';
-import createServer from '@nymphjs/server';
-import setup from '@nymphjs/tilmeld-setup';
-
-// Import all the entities you will be using on the server.
-import './entities/MyEntity';
-
-// Configure Nymph.
-const nymph = new Nymph(
- {},
- new SQLite3Driver({
- filename: ':memory:',
- }),
- new Tilmeld({
- appName: 'My App',
- appUrl: 'http://localhost',
- cookieDomain: 'localhost',
- cookiePath: '/',
- setupPath: '/user',
- verifyRedirect: 'http://localhost',
- verifyChangeRedirect: 'http://localhost',
- cancelChangeRedirect: 'http://localhost',
- jwtSecret: 'shhhhh',
- }),
-);
-
-// Create your Express app.
-const app = express();
-
-// Use the REST server.
-app.use('/rest', createServer(nymph));
-
-// Create Tilmeld setup app.
-app.use(
- '/user',
- setup(
- {
- restUrl: 'http://localhost/rest',
- },
- nymph,
- ),
-);
-
-// Do anything else you need to do...
-
-// Start your server.
-app.listen(80);`}}),{c(){c=new Se(!1),T=ie(),j=m(),t=o("section"),y=o("header"),g=o("h1"),H=p("Tilmeld Setup"),I=m(),S=o("p"),P=p(`The Tilmeld Setup App allows administrators to create, modify, and delete
- users and groups and configure how Tilmeld works. It also acts as the
- endpoint for email address verification.`),C=m(),v=o("header"),R=o("h2"),D=p("Installation"),F=m(),he(u.$$.fragment),O=m(),_=o("header"),w=o("h2"),U=p("Usage"),q=m(),$=o("p"),L=p(`You need to setup a Nymph REST endpoint, then you can use the Tilmeld Setup
- App as another endpoint in your Express server.`),M=m(),h=o("p"),Q=p("IMPORTANT: Within the setup app, Tilmeld "),k=o("strong"),X=p("does not"),z=p(` check for
- XSRF tokens, so `),x=o("strong"),G=p("do not"),W=p(` put your REST endpoint under the setup
- app's path, or you will be vulnerable to XSRF attacks!`),Y=m(),N=o("p"),B=p("For this example, I'll use the SQLite3 driver with an in-memory database."),J=m(),he(f.$$.fragment),this.h()},l(r){const b=Re("svelte-k7q6er",document.head);c=we(b,!1),T=ie(),b.forEach(s),j=d(r),t=n(r,"SECTION",{});var a=l(t);y=n(a,"HEADER",{class:!0});var V=l(y);g=n(V,"H1",{style:!0});var Z=l(g);H=i(Z,"Tilmeld Setup"),Z.forEach(s),V.forEach(s),I=d(a),S=n(a,"P",{});var ee=l(S);P=i(ee,`The Tilmeld Setup App allows administrators to create, modify, and delete
- users and groups and configure how Tilmeld works. It also acts as the
- endpoint for email address verification.`),ee.forEach(s),C=d(a),v=n(a,"HEADER",{class:!0});var te=l(v);R=n(te,"H2",{});var ae=l(R);D=i(ae,"Installation"),ae.forEach(s),te.forEach(s),F=d(a),me(u.$$.fragment,a),O=d(a),_=n(a,"HEADER",{class:!0});var se=l(_);w=n(se,"H2",{});var re=l(w);U=i(re,"Usage"),re.forEach(s),se.forEach(s),q=d(a),$=n(a,"P",{});var oe=l($);L=i(oe,`You need to setup a Nymph REST endpoint, then you can use the Tilmeld Setup
- App as another endpoint in your Express server.`),oe.forEach(s),M=d(a),h=n(a,"P",{});var E=l(h);Q=i(E,"IMPORTANT: Within the setup app, Tilmeld "),k=n(E,"STRONG",{});var ne=l(k);X=i(ne,"does not"),ne.forEach(s),z=i(E,` check for
- XSRF tokens, so `),x=n(E,"STRONG",{});var le=l(x);G=i(le,"do not"),le.forEach(s),W=i(E,` put your REST endpoint under the setup
- app's path, or you will be vulnerable to XSRF attacks!`),E.forEach(s),Y=d(a),N=n(a,"P",{});var pe=l(N);B=i(pe,"For this example, I'll use the SQLite3 driver with an in-memory database."),pe.forEach(s),J=d(a),me(f.$$.fragment,a),a.forEach(s),this.h()},h(){document.title="Tilmeld Setup - Packages - Nymph.js",c.a=T,$e(g,"font-size","3em"),K(y,"class","major"),K(v,"class","major"),K(_,"class","major")},m(r,b){c.m(xe,document.head),e(document.head,T),de(r,j,b),de(r,t,b),e(t,y),e(y,g),e(g,H),e(t,I),e(t,S),e(S,P),e(t,C),e(t,v),e(v,R),e(R,D),e(t,F),ce(u,t,null),e(t,O),e(t,_),e(_,w),e(w,U),e(t,q),e(t,$),e($,L),e(t,M),e(t,h),e(h,Q),e(h,k),e(k,X),e(h,z),e(h,x),e(x,G),e(h,W),e(t,Y),e(t,N),e(N,B),e(t,J),ce(f,t,null),A=!0},p:ke,i(r){A||(ue(u.$$.fragment,r),ue(f.$$.fragment,r),A=!0)},o(r){fe(u.$$.fragment,r),fe(f.$$.fragment,r),A=!1},d(r){s(T),r&&c.d(),r&&s(j),r&&s(t),ye(u),ye(f)}}}class Ce extends _e{constructor(c){super(),Ee(this,c,null,je,Te,{})}}export{Ce as component};
diff --git a/docs/_app/immutable/nodes/18.c2536513.js b/docs/_app/immutable/nodes/18.c2536513.js
deleted file mode 100644
index df442d5..0000000
--- a/docs/_app/immutable/nodes/18.c2536513.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import{S as ht,i as dt,s as yt,R as ft,e as rt,a as h,k as i,q as n,y as X,F as ut,T as gt,h as t,c as d,l as r,m as l,r as a,z as Z,p as Ve,n as N,C as e,b as ee,A as te,D as pt,g as ne,d as ae,B as se}from"../chunks/index.d7cc8d8b.js";import{H as oe,g as mt}from"../chunks/github.df9008b1.js";import{t as ie}from"../chunks/typescript.7dd1ec19.js";import{b as lt}from"../chunks/paths.d307dac8.js";function vt(ct){let E,O,z,o,P,S,re,le,y,ce,A,he,de,x,ye,fe,R,ue,ge,pe,$,me,B,ve,Ee,w,$e,G,we,_e,_,g,be,W,ke,Ie,Te,b,De,k,p,Ce,q,Pe,Se,Ne,I,Oe,U,Ae,xe,f,Re,H,Be,Ge,Y,We,qe,j,Ue,He,V,u,T,Ye,je,D,ze,F;return $=new oe({props:{language:ie,code:`// BlogPost extends the Entity class.
-let blogPost = await BlogPost.factory();
-
-// Check that the entity is new.
-if (someBlogPost.guid == null) {
- alert("This blog post hasn't been saved yet!");
-}`}}),w=new oe({props:{language:ie,code:`blogPost.$addTag('super-post');
-await blogPost.$save();
-
-let superPosts = await nymph.getEntities(
- { class: BlogPost },
- { type: '&', tag: 'super-post' }
-);
-
-blogPost.$inArray(superPosts); // true`}}),b=new oe({props:{language:ie,code:`let entity = await Entity.factory();
-entity.foo = await Entity.factory();
-
-entity.foo.bar = 'It works!';
-await entity.foo.$save(); // Saving the referenced entity first! :)
-await entity.$save(); // now foo has been saved.
-
-const guid = entity.guid;
-entity = await Entity.factory(guid);
-
-entity.foo.guid == null; // False
-console.log(entity.foo.bar); // Outputs 'It works!'.`}}),I=new oe({props:{language:ie,code:`let entity = await Entity.factory();
-entity.foo = await Entity.factory();
-
-await entity.$save(); // foo hasn't been saved yet!
-
-entity.foo.bar = 'It works!';
-await entity.foo.$save();
-
-const guid = entity.guid;
-entity = await Entity.factory(guid);
-
-entity.foo.guid == null; // True
-console.log(entity.foo.bar); // Outputs undefined.`}}),{c(){E=new ft(!1),O=rt(),z=h(),o=i("section"),P=i("header"),S=i("h1"),re=n("Creating Entities"),le=h(),y=i("p"),ce=n("To create or retrieve an entity, you can call the "),A=i("code"),he=n("factory"),de=n(`
- static method of an entity's class and pass in an optional GUID. You can also
- use the `),x=i("code"),ye=n("factorySync"),fe=n(` method if you need to create a new entity
- synchronously. The benefit of using the factory methods is that they can
- return the correct type in TypeScript. To check that an entity hasn't been
- saved yet, check that the GUID is null (`),R=i("code"),ue=n("entity.guid == null"),ge=n(")."),pe=h(),X($.$$.fragment),me=h(),B=i("p"),ve=n(`Much like entries in many blogging systems, entities can be organized using
- tags. The tags provide a fast way to query entities.`),Ee=h(),X(w.$$.fragment),$e=h(),G=i("p"),we=n(`Be cautious when saving an entity in another entity's property. If the
- referenced entity is newly created and does not have a GUID, Nymph will not
- be able to retrieve it later. Always save the referenced entity first.`),_e=h(),_=i("div"),g=i("div"),be=n("Saving a Referenced Entity the "),W=i("strong"),ke=n("Right"),Ie=n(" Way"),Te=h(),X(b.$$.fragment),De=h(),k=i("div"),p=i("div"),Ce=n("Saving a Referenced Entity the "),q=i("strong"),Pe=n("Wrong"),Se=n(" Way"),Ne=h(),X(I.$$.fragment),Oe=h(),U=i("p"),Ae=n(`Caution: Since the referenced entity's class name is stored in the reference
- on the parent entity, if you change the class name in an update, you need to
- reassign all referenced entities of that class and resave.`),xe=h(),f=i("p"),Re=n('When an entity is loaded, it does not request its referenced entities from\n Nymph. Instead, it creates instances without data called "sleeping\n references". You can use `$wake` on the entity or `$wakeAll` on the parent\n entity to get the entity\'s data from the DB. The '),H=i("code"),Be=n("$wakeAll"),Ge=n(`
- method will awaken all sleeping references in the entity's data. You can call
- `),Y=i("code"),We=n("$clearCache"),qe=n(`
- in Node.js or `),j=i("code"),Ue=n("$refresh"),He=n(` in the client to turn all the entities back
- into sleeping references.`),V=h(),u=i("section"),T=i("a"),Ye=n("Previous: Introduction"),je=h(),D=i("a"),ze=n("Next: Entity Querying"),this.h()},l(s){const C=ut("svelte-1eabkgd",document.head);E=gt(C,!1),O=rt(),C.forEach(t),z=d(s),o=r(s,"SECTION",{});var c=l(o);P=r(c,"HEADER",{class:!0});var Fe=l(P);S=r(Fe,"H1",{style:!0});var Me=l(S);re=a(Me,"Creating Entities"),Me.forEach(t),Fe.forEach(t),le=d(c),y=r(c,"P",{});var m=l(y);ce=a(m,"To create or retrieve an entity, you can call the "),A=r(m,"CODE",{});var Qe=l(A);he=a(Qe,"factory"),Qe.forEach(t),de=a(m,`
- static method of an entity's class and pass in an optional GUID. You can also
- use the `),x=r(m,"CODE",{});var Je=l(x);ye=a(Je,"factorySync"),Je.forEach(t),fe=a(m,` method if you need to create a new entity
- synchronously. The benefit of using the factory methods is that they can
- return the correct type in TypeScript. To check that an entity hasn't been
- saved yet, check that the GUID is null (`),R=r(m,"CODE",{});var Ke=l(R);ue=a(Ke,"entity.guid == null"),Ke.forEach(t),ge=a(m,")."),m.forEach(t),pe=d(c),Z($.$$.fragment,c),me=d(c),B=r(c,"P",{});var Le=l(B);ve=a(Le,`Much like entries in many blogging systems, entities can be organized using
- tags. The tags provide a fast way to query entities.`),Le.forEach(t),Ee=d(c),Z(w.$$.fragment,c),$e=d(c),G=r(c,"P",{});var Xe=l(G);we=a(Xe,`Be cautious when saving an entity in another entity's property. If the
- referenced entity is newly created and does not have a GUID, Nymph will not
- be able to retrieve it later. Always save the referenced entity first.`),Xe.forEach(t),_e=d(c),_=r(c,"DIV",{});var M=l(_);g=r(M,"DIV",{style:!0});var Q=l(g);be=a(Q,"Saving a Referenced Entity the "),W=r(Q,"STRONG",{});var Ze=l(W);ke=a(Ze,"Right"),Ze.forEach(t),Ie=a(Q," Way"),Q.forEach(t),Te=d(M),Z(b.$$.fragment,M),M.forEach(t),De=d(c),k=r(c,"DIV",{});var J=l(k);p=r(J,"DIV",{style:!0});var K=l(p);Ce=a(K,"Saving a Referenced Entity the "),q=r(K,"STRONG",{});var et=l(q);Pe=a(et,"Wrong"),et.forEach(t),Se=a(K," Way"),K.forEach(t),Ne=d(J),Z(I.$$.fragment,J),J.forEach(t),Oe=d(c),U=r(c,"P",{});var tt=l(U);Ae=a(tt,`Caution: Since the referenced entity's class name is stored in the reference
- on the parent entity, if you change the class name in an update, you need to
- reassign all referenced entities of that class and resave.`),tt.forEach(t),xe=d(c),f=r(c,"P",{});var v=l(f);Re=a(v,'When an entity is loaded, it does not request its referenced entities from\n Nymph. Instead, it creates instances without data called "sleeping\n references". You can use `$wake` on the entity or `$wakeAll` on the parent\n entity to get the entity\'s data from the DB. The '),H=r(v,"CODE",{});var nt=l(H);Be=a(nt,"$wakeAll"),nt.forEach(t),Ge=a(v,`
- method will awaken all sleeping references in the entity's data. You can call
- `),Y=r(v,"CODE",{});var at=l(Y);We=a(at,"$clearCache"),at.forEach(t),qe=a(v,`
- in Node.js or `),j=r(v,"CODE",{});var st=l(j);Ue=a(st,"$refresh"),st.forEach(t),He=a(v,` in the client to turn all the entities back
- into sleeping references.`),v.forEach(t),c.forEach(t),V=d(s),u=r(s,"SECTION",{class:!0});var L=l(u);T=r(L,"A",{href:!0,class:!0});var ot=l(T);Ye=a(ot,"Previous: Introduction"),ot.forEach(t),je=d(L),D=r(L,"A",{href:!0,class:!0});var it=l(D);ze=a(it,"Next: Entity Querying"),it.forEach(t),L.forEach(t),this.h()},h(){document.title="Creating Entities - User Guide - Nymph.js",E.a=O,Ve(S,"font-size","3em"),N(P,"class","major"),Ve(g,"text-align","end"),Ve(p,"text-align","end"),N(T,"href",lt+"/user-guide/introduction"),N(T,"class","button"),N(D,"href",lt+"/user-guide/entity-querying"),N(D,"class","button"),N(u,"class","page-steps")},m(s,C){E.m(mt,document.head),e(document.head,O),ee(s,z,C),ee(s,o,C),e(o,P),e(P,S),e(S,re),e(o,le),e(o,y),e(y,ce),e(y,A),e(A,he),e(y,de),e(y,x),e(x,ye),e(y,fe),e(y,R),e(R,ue),e(y,ge),e(o,pe),te($,o,null),e(o,me),e(o,B),e(B,ve),e(o,Ee),te(w,o,null),e(o,$e),e(o,G),e(G,we),e(o,_e),e(o,_),e(_,g),e(g,be),e(g,W),e(W,ke),e(g,Ie),e(_,Te),te(b,_,null),e(o,De),e(o,k),e(k,p),e(p,Ce),e(p,q),e(q,Pe),e(p,Se),e(k,Ne),te(I,k,null),e(o,Oe),e(o,U),e(U,Ae),e(o,xe),e(o,f),e(f,Re),e(f,H),e(H,Be),e(f,Ge),e(f,Y),e(Y,We),e(f,qe),e(f,j),e(j,Ue),e(f,He),ee(s,V,C),ee(s,u,C),e(u,T),e(T,Ye),e(u,je),e(u,D),e(D,ze),F=!0},p:pt,i(s){F||(ne($.$$.fragment,s),ne(w.$$.fragment,s),ne(b.$$.fragment,s),ne(I.$$.fragment,s),F=!0)},o(s){ae($.$$.fragment,s),ae(w.$$.fragment,s),ae(b.$$.fragment,s),ae(I.$$.fragment,s),F=!1},d(s){t(O),s&&E.d(),s&&t(z),s&&t(o),se($),se(w),se(b),se(I),s&&t(V),s&&t(u)}}}class bt extends ht{constructor(E){super(),dt(this,E,null,vt,yt,{})}}export{bt as component};
diff --git a/docs/_app/immutable/nodes/18.cae0e6d0.js b/docs/_app/immutable/nodes/18.cae0e6d0.js
new file mode 100644
index 0000000..ac6a002
--- /dev/null
+++ b/docs/_app/immutable/nodes/18.cae0e6d0.js
@@ -0,0 +1,55 @@
+import{s as bt,I as Et,e as pt,a as s,f as i,l as vt,x as Ct,J as Tt,d as l,c as o,g as r,h as k,r as d,m as $t,j as H,k as wt,u as t,i as q,v as Pt}from"../chunks/scheduler.d7e45cc8.js";import{S as It,i as kt,b as B,d as z,m as G,a as O,t as R,e as U}from"../chunks/index.77720afb.js";import{H as V,g as Ht}from"../chunks/github.64534d2c.js";import{t as W}from"../chunks/typescript.09c48802.js";import{b as _t}from"../chunks/paths.d4a6803e.js";function Mt(xt){let h,M,L,e,u,rt='
Creating Entities
',Y,E,lt=`To create or retrieve an entity, you can call the factory
+ static method of an entity's class and pass in an optional GUID. You can also
+ use the factorySync method if you need to create a new entity
+ synchronously. The benefit of using the factory methods is that they can
+ return the correct type in TypeScript. To check that an entity hasn't been
+ saved yet, check that the GUID is null (entity.guid == null).`,Q,g,F,C,ct=`Much like entries in many blogging systems, entities can be organized using
+ tags. The tags provide a fast way to query entities.`,J,f,K,T,dt=`Be cautious when saving an entity in another entity's property. If the
+ referenced entity is newly created and does not have a GUID, Nymph will not
+ be able to retrieve it later. Always save the referenced entity first.`,X,y,m,ht="Saving a Referenced Entity the Right Way",Z,p,tt,v,$,ut="Saving a Referenced Entity the Wrong Way",et,w,nt,P,gt=`Caution: Since the referenced entity's class name is stored in the reference
+ on the parent entity, if you change the class name in an update, you need to
+ reassign all referenced entities of that class and resave.`,at,I,ft=`When an entity is loaded, it does not request its referenced entities from
+ Nymph. Instead, it creates instances without data called "sleeping
+ references". You can use \`$wake\` on the entity or \`$wakeAll\` on the parent
+ entity to get the entity's data from the DB. The $wakeAll
+ method will awaken all sleeping references in the entity's data. You can call
+ $clearCache
+ in Node.js or $refresh in the client to turn all the entities back
+ into sleeping references.`,S,c,_,st,it,x,ot,D;return g=new V({props:{language:W,code:`// BlogPost extends the Entity class.
+let blogPost = await BlogPost.factory();
+
+// Check that the entity is new.
+if (someBlogPost.guid == null) {
+ alert("This blog post hasn't been saved yet!");
+}`}}),f=new V({props:{language:W,code:`blogPost.$addTag('super-post');
+await blogPost.$save();
+
+let superPosts = await nymph.getEntities(
+ { class: BlogPost },
+ { type: '&', tag: 'super-post' }
+);
+
+blogPost.$inArray(superPosts); // true`}}),p=new V({props:{language:W,code:`let entity = await Entity.factory();
+entity.foo = await Entity.factory();
+
+entity.foo.bar = 'It works!';
+await entity.foo.$save(); // Saving the referenced entity first! :)
+await entity.$save(); // now foo has been saved.
+
+const guid = entity.guid;
+entity = await Entity.factory(guid);
+
+entity.foo.guid == null; // False
+console.log(entity.foo.bar); // Outputs 'It works!'.`}}),w=new V({props:{language:W,code:`let entity = await Entity.factory();
+entity.foo = await Entity.factory();
+
+await entity.$save(); // foo hasn't been saved yet!
+
+entity.foo.bar = 'It works!';
+await entity.foo.$save();
+
+const guid = entity.guid;
+entity = await Entity.factory(guid);
+
+entity.foo.guid == null; // True
+console.log(entity.foo.bar); // Outputs undefined.`}}),{c(){h=new Et(!1),M=pt(),L=s(),e=i("section"),u=i("header"),u.innerHTML=rt,Y=s(),E=i("p"),E.innerHTML=lt,Q=s(),B(g.$$.fragment),F=s(),C=i("p"),C.textContent=ct,J=s(),B(f.$$.fragment),K=s(),T=i("p"),T.textContent=dt,X=s(),y=i("div"),m=i("div"),m.innerHTML=ht,Z=s(),B(p.$$.fragment),tt=s(),v=i("div"),$=i("div"),$.innerHTML=ut,et=s(),B(w.$$.fragment),nt=s(),P=i("p"),P.textContent=gt,at=s(),I=i("p"),I.innerHTML=ft,S=s(),c=i("section"),_=i("a"),st=vt("Previous: Introduction"),it=s(),x=i("a"),ot=vt("Next: Entity Querying"),this.h()},l(n){const b=Ct("svelte-1eabkgd",document.head);h=Tt(b,!1),M=pt(),b.forEach(l),L=o(n),e=r(n,"SECTION",{});var a=k(e);u=r(a,"HEADER",{class:!0,"data-svelte-h":!0}),d(u)!=="svelte-1r4zxlg"&&(u.innerHTML=rt),Y=o(a),E=r(a,"P",{"data-svelte-h":!0}),d(E)!=="svelte-1jwh69x"&&(E.innerHTML=lt),Q=o(a),z(g.$$.fragment,a),F=o(a),C=r(a,"P",{"data-svelte-h":!0}),d(C)!=="svelte-go5m5m"&&(C.textContent=ct),J=o(a),z(f.$$.fragment,a),K=o(a),T=r(a,"P",{"data-svelte-h":!0}),d(T)!=="svelte-k2lz97"&&(T.textContent=dt),X=o(a),y=r(a,"DIV",{});var N=k(y);m=r(N,"DIV",{style:!0,"data-svelte-h":!0}),d(m)!=="svelte-1jxvgmh"&&(m.innerHTML=ht),Z=o(N),z(p.$$.fragment,N),N.forEach(l),tt=o(a),v=r(a,"DIV",{});var A=k(v);$=r(A,"DIV",{style:!0,"data-svelte-h":!0}),d($)!=="svelte-1s82s64"&&($.innerHTML=ut),et=o(A),z(w.$$.fragment,A),A.forEach(l),nt=o(a),P=r(a,"P",{"data-svelte-h":!0}),d(P)!=="svelte-v88prl"&&(P.textContent=gt),at=o(a),I=r(a,"P",{"data-svelte-h":!0}),d(I)!=="svelte-1v43csb"&&(I.innerHTML=ft),a.forEach(l),S=o(n),c=r(n,"SECTION",{class:!0});var j=k(c);_=r(j,"A",{href:!0,class:!0});var yt=k(_);st=$t(yt,"Previous: Introduction"),yt.forEach(l),it=o(j),x=r(j,"A",{href:!0,class:!0});var mt=k(x);ot=$t(mt,"Next: Entity Querying"),mt.forEach(l),j.forEach(l),this.h()},h(){document.title="Creating Entities - User Guide - Nymph.js",h.a=M,H(u,"class","major"),wt(m,"text-align","end"),wt($,"text-align","end"),H(_,"href",_t+"/user-guide/introduction"),H(_,"class","button"),H(x,"href",_t+"/user-guide/entity-querying"),H(x,"class","button"),H(c,"class","page-steps")},m(n,b){h.m(Ht,document.head),t(document.head,M),q(n,L,b),q(n,e,b),t(e,u),t(e,Y),t(e,E),t(e,Q),G(g,e,null),t(e,F),t(e,C),t(e,J),G(f,e,null),t(e,K),t(e,T),t(e,X),t(e,y),t(y,m),t(y,Z),G(p,y,null),t(e,tt),t(e,v),t(v,$),t(v,et),G(w,v,null),t(e,nt),t(e,P),t(e,at),t(e,I),q(n,S,b),q(n,c,b),t(c,_),t(_,st),t(c,it),t(c,x),t(x,ot),D=!0},p:Pt,i(n){D||(O(g.$$.fragment,n),O(f.$$.fragment,n),O(p.$$.fragment,n),O(w.$$.fragment,n),D=!0)},o(n){R(g.$$.fragment,n),R(f.$$.fragment,n),R(p.$$.fragment,n),R(w.$$.fragment,n),D=!1},d(n){n&&(h.d(),l(L),l(e),l(S),l(c)),l(M),U(g),U(f),U(p),U(w)}}}class jt extends It{constructor(h){super(),kt(this,h,null,Mt,bt,{})}}export{jt as component};
diff --git a/docs/_app/immutable/nodes/19.bdc12e86.js b/docs/_app/immutable/nodes/19.bdc12e86.js
new file mode 100644
index 0000000..2d11984
--- /dev/null
+++ b/docs/_app/immutable/nodes/19.bdc12e86.js
@@ -0,0 +1,140 @@
+import{s as He,I as Me,e as ye,a as i,f as n,l as fe,x as je,J as Ie,d as l,c as r,g as o,h as j,r as d,m as ge,j as I,k as z,u as e,i as S,v as Le}from"../chunks/scheduler.d7e45cc8.js";import{S as De,i as Pe,b as ve,d as Te,m as $e,a as we,t as Ee,e as xe}from"../chunks/index.77720afb.js";import{H as _e,g as qe}from"../chunks/github.64534d2c.js";import{t as Ce}from"../chunks/typescript.09c48802.js";import{b as be}from"../chunks/paths.d4a6803e.js";function ke(Ne){let p,L,D,t,u,ae='
Defining Entities
',V,E,se=`To create a new type of data object in Nymph, you extend the Entity class. This is equivalent to creating a new table in a relational database.
+ If you are going to use the class on the client side, you also need to create
+ a corresponding client class. Below are two examples, one for Node.js, and one
+ for the client. A more in depth explanation follows the examples.`,A,y,f,ne="Extending Entity in Node.js",O,g,Y,v,T,oe="Extending Entity in the Client",B,$,G,x,ie=`In both cases, defaults are set in the constructor (the done
+ property is set to false and the name property is set to an
+ empty string). You can see that from within the methods of an entity, the
+ entity's data (other than guid, cdate, mdate, and tags) are accessed from
+ this.$data. The
+ $data part is not necessary outside of the entity's own methods.`,R,_,re=`You'll also notice that when using Nymph from within an entity's methods,
+ there is an instance of Nymph available in this.$nymph (or
+ this.nymph in static methods). In Node.js, these instances will
+ know which user is logged in and add appropriate permission checks, and will
+ maintain a persistent DB connection during a transaction. On the client,
+ these instances will know how to communicate with the configured REST
+ server. Basically, you have to use these instances. You can also use
+ this.$nymph.getEntityClass
+ and this.nymph.getEntityClass to get the right class for Nymph queries.`,W,C,le=`In Node.js, the etype is set to "todo". The etype of an entity
+ determines which table(s) the entity will be placed in. When you search for
+ an entity, you give Nymph a class. Nymph will use that class' etype to
+ determine where to search for entities. If you don't provide a class, the
+ Entity class and the "entity" etype will be used.`,F,b,de=`The $clientEnabledMethods property and the
+ clientEnabledStaticMethods
+ static property in Node.js determine which methods and static methods can be
+ called from the client using $serverCall and
+ serverCallStatic. In the client class, the
+ return await this.$serverCall('$archive', []); statement takes advantage
+ of this feature.`,K,N,he=`On both the Node.js class and the client class, the class name is set in the class static property. This class name should match on each side. It is how Nymph
+ maps the client class to the Node.js class and vice versa.`,Q,H,ce=`Nymph provides a mechanism to ensure uniqueness among entities. Any strings
+ returned by the $getUniques method will have a uniqueness
+ constraint enforced by the database across this entity's etype. The
+ Todo class returns a string containing both the user's GUID and
+ the todo name. This ensures that the user can't have two todos with the same
+ name. The $save method checks for a thrown
+ EntityUniqueConstraintError
+ when calling the super class' $save.`,X,M,me=`Finally, in Node.js, the Todo class validates all of its data
+ in the $save method using
+ Joi. Without
+ this validation, a malicious user could send invalid data types or even
+ megabytes worth of data in an entity. Any validation library should support
+ validation in Nymph using the $getValidatable method. The
+ $allowlistData property will ensure no extra properties are set.`,P,h,c,Z,ee,m,te,q;return g=new _e({props:{language:Ce,code:`import {
+ Entity,
+ EntityUniqueConstraintError,
+ nymphJoiProps,
+} from '@nymphjs/nymph';
+import { tilmeldJoiProps } from '@nymphjs/tilmeld';
+import Joi from 'joi';
+
+export type TodoData = {
+ name?: string;
+ done?: boolean;
+};
+
+export class Todo extends Entity {
+ static ETYPE = 'todo';
+ static class = 'Todo';
+
+ protected $clientEnabledMethods = ['$archive'];
+ protected $allowlistData? = ['name', 'done'];
+ protected $protectedTags = ['archived'];
+ protected $allowlistTags? = [];
+
+ constructor() {
+ super();
+
+ this.$data.name = '';
+ this.$data.done = false;
+ }
+
+ async $getUniques() {
+ // Make sure this isn't a duplicate Todo for this user.
+ return [\`\${this.$data.user.guid}:\${this.$data.name}\`];
+ }
+
+ async $archive() {
+ if (this.$hasTag('archived')) {
+ return true;
+ }
+ this.$addTag('archived');
+ return await this.$save();
+ }
+
+ async $save() {
+ if (!this.$nymph.tilmeld?.gatekeeper()) {
+ // Only allow logged in users to save.
+ throw new Error('You are not logged in.');
+ }
+
+ // Validate the entity's data.
+ Joi.attempt(
+ this.$getValidatable(),
+ Joi.object().keys({
+ ...nymphJoiProps,
+ ...tilmeldJoiProps,
+
+ name: Joi.string().trim(false).max(500, 'utf8').required(),
+ done: Joi.boolean().required(),
+ }),
+ 'Invalid Todo: '
+ );
+
+ try {
+ return await super.$save();
+ } catch (e: any) {
+ if (e instanceof EntityUniqueConstraintError) {
+ throw new Error('There is already a todo for that.');
+ }
+ throw e;
+ }
+ }
+}
+
+// Elsewhere, after initializing Nymph.
+import { Todo as TodoClass } from './Todo.js';
+const Todo = nymph.addEntityClass(TodoClass);`}}),$=new _e({props:{language:Ce,code:`import { Entity } from '@nymphjs/client';
+
+export type TodoData = {
+ name?: string;
+ done?: boolean;
+};
+
+export class Todo extends Entity {
+ // The name of the server class
+ public static class = 'Todo';
+
+ constructor() {
+ super();
+
+ this.$data.name = '';
+ this.$data.done = false;
+ }
+
+ async $archive(): Promise {
+ return await this.$serverCall('$archive', []);
+ }
+}
+
+// Elsewhere, after initializing Nymph.
+import { Todo as TodoClass } from './Todo.js';
+const Todo = nymph.addEntityClass(TodoClass);`}}),{c(){p=new Me(!1),L=ye(),D=i(),t=n("section"),u=n("header"),u.innerHTML=ae,V=i(),E=n("p"),E.innerHTML=se,A=i(),y=n("div"),f=n("div"),f.textContent=ne,O=i(),ve(g.$$.fragment),Y=i(),v=n("div"),T=n("div"),T.textContent=oe,B=i(),ve($.$$.fragment),G=i(),x=n("p"),x.innerHTML=ie,R=i(),_=n("p"),_.innerHTML=re,W=i(),C=n("p"),C.innerHTML=le,F=i(),b=n("p"),b.innerHTML=de,K=i(),N=n("p"),N.innerHTML=he,Q=i(),H=n("p"),H.innerHTML=ce,X=i(),M=n("p"),M.innerHTML=me,P=i(),h=n("section"),c=n("a"),Z=fe("Previous: Entity Class"),ee=i(),m=n("a"),te=fe("Next: UIDs"),this.h()},l(s){const w=je("svelte-1kddyis",document.head);p=Ie(w,!1),L=ye(),w.forEach(l),D=r(s),t=o(s,"SECTION",{});var a=j(t);u=o(a,"HEADER",{class:!0,"data-svelte-h":!0}),d(u)!=="svelte-m0pwuh"&&(u.innerHTML=ae),V=r(a),E=o(a,"P",{"data-svelte-h":!0}),d(E)!=="svelte-1ga4ymg"&&(E.innerHTML=se),A=r(a),y=o(a,"DIV",{});var k=j(y);f=o(k,"DIV",{style:!0,"data-svelte-h":!0}),d(f)!=="svelte-x4a4x6"&&(f.textContent=ne),O=r(k),Te(g.$$.fragment,k),k.forEach(l),Y=r(a),v=o(a,"DIV",{});var J=j(v);T=o(J,"DIV",{style:!0,"data-svelte-h":!0}),d(T)!=="svelte-cz2e9p"&&(T.textContent=oe),B=r(J),Te($.$$.fragment,J),J.forEach(l),G=r(a),x=o(a,"P",{"data-svelte-h":!0}),d(x)!=="svelte-i2s6a"&&(x.innerHTML=ie),R=r(a),_=o(a,"P",{"data-svelte-h":!0}),d(_)!=="svelte-1dyi7tz"&&(_.innerHTML=re),W=r(a),C=o(a,"P",{"data-svelte-h":!0}),d(C)!=="svelte-gi493t"&&(C.innerHTML=le),F=r(a),b=o(a,"P",{"data-svelte-h":!0}),d(b)!=="svelte-tt0ehe"&&(b.innerHTML=de),K=r(a),N=o(a,"P",{"data-svelte-h":!0}),d(N)!=="svelte-xvwhoh"&&(N.innerHTML=he),Q=r(a),H=o(a,"P",{"data-svelte-h":!0}),d(H)!=="svelte-zzn5k9"&&(H.innerHTML=ce),X=r(a),M=o(a,"P",{"data-svelte-h":!0}),d(M)!=="svelte-16ufu2w"&&(M.innerHTML=me),a.forEach(l),P=r(s),h=o(s,"SECTION",{class:!0});var U=j(h);c=o(U,"A",{href:!0,class:!0,style:!0});var pe=j(c);Z=ge(pe,"Previous: Entity Class"),pe.forEach(l),ee=r(U),m=o(U,"A",{href:!0,class:!0,style:!0});var ue=j(m);te=ge(ue,"Next: UIDs"),ue.forEach(l),U.forEach(l),this.h()},h(){document.title="Defining Entities - User Guide - Nymph.js",p.a=L,I(u,"class","major"),z(f,"text-align","end"),z(T,"text-align","end"),I(c,"href",be+"/user-guide/entity-class"),I(c,"class","button"),z(c,"margin",".5em"),I(m,"href",be+"/user-guide/uids"),I(m,"class","button"),z(m,"margin",".5em"),I(h,"class","page-steps")},m(s,w){p.m(qe,document.head),e(document.head,L),S(s,D,w),S(s,t,w),e(t,u),e(t,V),e(t,E),e(t,A),e(t,y),e(y,f),e(y,O),$e(g,y,null),e(t,Y),e(t,v),e(v,T),e(v,B),$e($,v,null),e(t,G),e(t,x),e(t,R),e(t,_),e(t,W),e(t,C),e(t,F),e(t,b),e(t,K),e(t,N),e(t,Q),e(t,H),e(t,X),e(t,M),S(s,P,w),S(s,h,w),e(h,c),e(c,Z),e(h,ee),e(h,m),e(m,te),q=!0},p:Le,i(s){q||(we(g.$$.fragment,s),we($.$$.fragment,s),q=!0)},o(s){Ee(g.$$.fragment,s),Ee($.$$.fragment,s),q=!1},d(s){s&&(p.d(),l(D),l(t),l(P),l(h)),l(L),xe(g),xe($)}}}class Ae extends De{constructor(p){super(),Pe(this,p,null,ke,He,{})}}export{Ae as component};
diff --git a/docs/_app/immutable/nodes/19.fefd0bc2.js b/docs/_app/immutable/nodes/19.fefd0bc2.js
deleted file mode 100644
index a470f29..0000000
--- a/docs/_app/immutable/nodes/19.fefd0bc2.js
+++ /dev/null
@@ -1,180 +0,0 @@
-import{S as Ya,i as Ba,s as Ha,R as Ma,e as xa,a as m,k as s,q as t,y as ja,F as za,T as Ra,h as n,c as u,l as o,m as i,r as a,z as Ia,p as ue,n as C,C as e,b as Te,A as qa,D as Wa,g as Pa,d as ka,B as Ua}from"../chunks/index.d7cc8d8b.js";import{H as Aa,g as Fa}from"../chunks/github.df9008b1.js";import{t as Ja}from"../chunks/typescript.7dd1ec19.js";import{b as Sa}from"../chunks/paths.d307dac8.js";function Ga(Va){let O,B,ye,r,A,J,Ce,be,x,De,H,Ne,Oe,xe,j,S,je,Ie,I,qe,q,V,Pe,ke,P,Ue,y,Ae,M,Je,Se,z,Ve,Ye,R,Be,He,W,Me,ze,Re,f,We,F,Fe,Ge,G,Ke,Le,K,Qe,Xe,L,Ze,et,tt,_,at,Q,nt,st,X,ot,it,rt,h,lt,Z,dt,ht,ee,ct,pt,te,mt,ut,ae,yt,ft,ne,vt,Et,gt,k,wt,se,$t,_t,Tt,c,Ct,oe,bt,Dt,ie,Nt,Ot,re,xt,jt,le,It,qt,de,Pt,kt,Ut,p,At,he,Jt,St,ce,Vt,Yt,b,Bt,Ht,pe,Mt,zt,me,Rt,Wt,fe,T,D,Ft,Gt,N,Kt,ve;return I=new Aa({props:{language:Ja,code:`import {
- Entity,
- EntityUniqueConstraintError,
- nymphJoiProps,
-} from '@nymphjs/nymph';
-import { tilmeldJoiProps } from '@nymphjs/tilmeld';
-import Joi from 'joi';
-
-export type TodoData = {
- name?: string;
- done?: boolean;
-};
-
-export class Todo extends Entity {
- static ETYPE = 'todo';
- static class = 'Todo';
-
- protected $clientEnabledMethods = ['$archive'];
- protected $allowlistData? = ['name', 'done'];
- protected $protectedTags = ['archived'];
- protected $allowlistTags? = [];
-
- constructor() {
- super();
-
- this.$data.name = '';
- this.$data.done = false;
- }
-
- async $getUniques() {
- // Make sure this isn't a duplicate Todo for this user.
- return [\`\${this.$data.user.guid}:\${this.$data.name}\`];
- }
-
- async $archive() {
- if (this.$hasTag('archived')) {
- return true;
- }
- this.$addTag('archived');
- return await this.$save();
- }
-
- async $save() {
- if (!this.$nymph.tilmeld?.gatekeeper()) {
- // Only allow logged in users to save.
- throw new Error('You are not logged in.');
- }
-
- // Validate the entity's data.
- Joi.attempt(
- this.$getValidatable(),
- Joi.object().keys({
- ...nymphJoiProps,
- ...tilmeldJoiProps,
-
- name: Joi.string().trim(false).max(500, 'utf8').required(),
- done: Joi.boolean().required(),
- }),
- 'Invalid Todo: '
- );
-
- try {
- return await super.$save();
- } catch (e: any) {
- if (e instanceof EntityUniqueConstraintError) {
- throw new Error('There is already a todo for that.');
- }
- throw e;
- }
- }
-}
-
-// Elsewhere, after initializing Nymph.
-import { Todo as TodoClass } from './Todo.js';
-const Todo = nymph.addEntityClass(TodoClass);`}}),P=new Aa({props:{language:Ja,code:`import { Entity } from '@nymphjs/client';
-
-export type TodoData = {
- name?: string;
- done?: boolean;
-};
-
-export class Todo extends Entity {
- // The name of the server class
- public static class = 'Todo';
-
- constructor() {
- super();
-
- this.$data.name = '';
- this.$data.done = false;
- }
-
- async $archive(): Promise {
- return await this.$serverCall('$archive', []);
- }
-}
-
-// Elsewhere, after initializing Nymph.
-import { Todo as TodoClass } from './Todo.js';
-const Todo = nymph.addEntityClass(TodoClass);`}}),{c(){O=new Ma(!1),B=xa(),ye=m(),r=s("section"),A=s("header"),J=s("h1"),Ce=t("Defining Entities"),be=m(),x=s("p"),De=t("To create a new type of data object in Nymph, you extend the "),H=s("code"),Ne=t("Entity"),Oe=t(` class. This is equivalent to creating a new table in a relational database.
- If you are going to use the class on the client side, you also need to create
- a corresponding client class. Below are two examples, one for Node.js, and one
- for the client. A more in depth explanation follows the examples.`),xe=m(),j=s("div"),S=s("div"),je=t("Extending Entity in Node.js"),Ie=m(),ja(I.$$.fragment),qe=m(),q=s("div"),V=s("div"),Pe=t("Extending Entity in the Client"),ke=m(),ja(P.$$.fragment),Ue=m(),y=s("p"),Ae=t("In both cases, defaults are set in the constructor (the "),M=s("code"),Je=t("done"),Se=t(`
- property is set to false and the `),z=s("code"),Ve=t("name"),Ye=t(` property is set to an
- empty string). You can see that from within the methods of an entity, the
- entity's data (other than guid, cdate, mdate, and tags) are accessed from
- `),R=s("code"),Be=t("this.$data"),He=t(`. The
- `),W=s("code"),Me=t("$data"),ze=t(" part is not necessary outside of the entity's own methods."),Re=m(),f=s("p"),We=t(`You'll also notice that when using Nymph from within an entity's methods,
- there is an instance of Nymph available in `),F=s("code"),Fe=t("this.$nymph"),Ge=t(` (or
- `),G=s("code"),Ke=t("this.nymph"),Le=t(` in static methods). In Node.js, these instances will
- know which user is logged in and add appropriate permission checks, and will
- maintain a persistent DB connection during a transaction. On the client,
- these instances will know how to communicate with the configured REST
- server. Basically, you have to use these instances. You can also use
- `),K=s("code"),Qe=t("this.$nymph.getEntityClass"),Xe=t(`
- and `),L=s("code"),Ze=t("this.nymph.getEntityClass"),et=t(" to get the right class for Nymph queries."),tt=m(),_=s("p"),at=t("In Node.js, the etype is set to "),Q=s("code"),nt=t('"todo"'),st=t(`. The etype of an entity
- determines which table(s) the entity will be placed in. When you search for
- an entity, you give Nymph a class. Nymph will use that class' etype to
- determine where to search for entities. If you don't provide a class, the
- `),X=s("code"),ot=t("Entity"),it=t(' class and the "entity" etype will be used.'),rt=m(),h=s("p"),lt=t("The "),Z=s("code"),dt=t("$clientEnabledMethods"),ht=t(` property and the
- `),ee=s("code"),ct=t("clientEnabledStaticMethods"),pt=t(`
- static property in Node.js determine which methods and static methods can be
- called from the client using `),te=s("code"),mt=t("$serverCall"),ut=t(` and
- `),ae=s("code"),yt=t("serverCallStatic"),ft=t(`. In the client class, the
- `),ne=s("code"),vt=t("return await this.$serverCall('$archive', []);"),Et=t(` statement takes advantage
- of this feature.`),gt=m(),k=s("p"),wt=t("On both the Node.js class and the client class, the class name is set in the "),se=s("code"),$t=t("class"),_t=t(` static property. This class name should match on each side. It is how Nymph
- maps the client class to the Node.js class and vice versa.`),Tt=m(),c=s("p"),Ct=t(`Nymph provides a mechanism to ensure uniqueness among entities. Any strings
- returned by the `),oe=s("code"),bt=t("$getUniques"),Dt=t(` method will have a uniqueness
- constraint enforced by the database across this entity's etype. The
- `),ie=s("code"),Nt=t("Todo"),Ot=t(` class returns a string containing both the user's GUID and
- the todo name. This ensures that the user can't have two todos with the same
- name. The `),re=s("code"),xt=t("$save"),jt=t(` method checks for a thrown
- `),le=s("code"),It=t("EntityUniqueConstraintError"),qt=t(`
- when calling the super class' `),de=s("code"),Pt=t("$save"),kt=t("."),Ut=m(),p=s("p"),At=t("Finally, in Node.js, the "),he=s("code"),Jt=t("Todo"),St=t(` class validates all of its data
- in the `),ce=s("code"),Vt=t("$save"),Yt=t(` method using
- `),b=s("a"),Bt=t("Joi"),Ht=t(`. Without
- this validation, a malicious user could send invalid data types or even
- megabytes worth of data in an entity. Any validation library should support
- validation in Nymph using the `),pe=s("code"),Mt=t("$getValidatable"),zt=t(` method. The
- `),me=s("code"),Rt=t("$allowlistData"),Wt=t(" property will ensure no extra properties are set."),fe=m(),T=s("section"),D=s("a"),Ft=t("Previous: Entity Class"),Gt=m(),N=s("a"),Kt=t("Next: UIDs"),this.h()},l(d){const U=za("svelte-1kddyis",document.head);O=Ra(U,!1),B=xa(),U.forEach(n),ye=u(d),r=o(d,"SECTION",{});var l=i(r);A=o(l,"HEADER",{class:!0});var Lt=i(A);J=o(Lt,"H1",{style:!0});var Qt=i(J);Ce=a(Qt,"Defining Entities"),Qt.forEach(n),Lt.forEach(n),be=u(l),x=o(l,"P",{});var Ee=i(x);De=a(Ee,"To create a new type of data object in Nymph, you extend the "),H=o(Ee,"CODE",{});var Xt=i(H);Ne=a(Xt,"Entity"),Xt.forEach(n),Oe=a(Ee,` class. This is equivalent to creating a new table in a relational database.
- If you are going to use the class on the client side, you also need to create
- a corresponding client class. Below are two examples, one for Node.js, and one
- for the client. A more in depth explanation follows the examples.`),Ee.forEach(n),xe=u(l),j=o(l,"DIV",{});var ge=i(j);S=o(ge,"DIV",{style:!0});var Zt=i(S);je=a(Zt,"Extending Entity in Node.js"),Zt.forEach(n),Ie=u(ge),Ia(I.$$.fragment,ge),ge.forEach(n),qe=u(l),q=o(l,"DIV",{});var we=i(q);V=o(we,"DIV",{style:!0});var ea=i(V);Pe=a(ea,"Extending Entity in the Client"),ea.forEach(n),ke=u(we),Ia(P.$$.fragment,we),we.forEach(n),Ue=u(l),y=o(l,"P",{});var w=i(y);Ae=a(w,"In both cases, defaults are set in the constructor (the "),M=o(w,"CODE",{});var ta=i(M);Je=a(ta,"done"),ta.forEach(n),Se=a(w,`
- property is set to false and the `),z=o(w,"CODE",{});var aa=i(z);Ve=a(aa,"name"),aa.forEach(n),Ye=a(w,` property is set to an
- empty string). You can see that from within the methods of an entity, the
- entity's data (other than guid, cdate, mdate, and tags) are accessed from
- `),R=o(w,"CODE",{});var na=i(R);Be=a(na,"this.$data"),na.forEach(n),He=a(w,`. The
- `),W=o(w,"CODE",{});var sa=i(W);Me=a(sa,"$data"),sa.forEach(n),ze=a(w," part is not necessary outside of the entity's own methods."),w.forEach(n),Re=u(l),f=o(l,"P",{});var $=i(f);We=a($,`You'll also notice that when using Nymph from within an entity's methods,
- there is an instance of Nymph available in `),F=o($,"CODE",{});var oa=i(F);Fe=a(oa,"this.$nymph"),oa.forEach(n),Ge=a($,` (or
- `),G=o($,"CODE",{});var ia=i(G);Ke=a(ia,"this.nymph"),ia.forEach(n),Le=a($,` in static methods). In Node.js, these instances will
- know which user is logged in and add appropriate permission checks, and will
- maintain a persistent DB connection during a transaction. On the client,
- these instances will know how to communicate with the configured REST
- server. Basically, you have to use these instances. You can also use
- `),K=o($,"CODE",{});var ra=i(K);Qe=a(ra,"this.$nymph.getEntityClass"),ra.forEach(n),Xe=a($,`
- and `),L=o($,"CODE",{});var la=i(L);Ze=a(la,"this.nymph.getEntityClass"),la.forEach(n),et=a($," to get the right class for Nymph queries."),$.forEach(n),tt=u(l),_=o(l,"P",{});var Y=i(_);at=a(Y,"In Node.js, the etype is set to "),Q=o(Y,"CODE",{});var da=i(Q);nt=a(da,'"todo"'),da.forEach(n),st=a(Y,`. The etype of an entity
- determines which table(s) the entity will be placed in. When you search for
- an entity, you give Nymph a class. Nymph will use that class' etype to
- determine where to search for entities. If you don't provide a class, the
- `),X=o(Y,"CODE",{});var ha=i(X);ot=a(ha,"Entity"),ha.forEach(n),it=a(Y,' class and the "entity" etype will be used.'),Y.forEach(n),rt=u(l),h=o(l,"P",{});var v=i(h);lt=a(v,"The "),Z=o(v,"CODE",{});var ca=i(Z);dt=a(ca,"$clientEnabledMethods"),ca.forEach(n),ht=a(v,` property and the
- `),ee=o(v,"CODE",{});var pa=i(ee);ct=a(pa,"clientEnabledStaticMethods"),pa.forEach(n),pt=a(v,`
- static property in Node.js determine which methods and static methods can be
- called from the client using `),te=o(v,"CODE",{});var ma=i(te);mt=a(ma,"$serverCall"),ma.forEach(n),ut=a(v,` and
- `),ae=o(v,"CODE",{});var ua=i(ae);yt=a(ua,"serverCallStatic"),ua.forEach(n),ft=a(v,`. In the client class, the
- `),ne=o(v,"CODE",{});var ya=i(ne);vt=a(ya,"return await this.$serverCall('$archive', []);"),ya.forEach(n),Et=a(v,` statement takes advantage
- of this feature.`),v.forEach(n),gt=u(l),k=o(l,"P",{});var $e=i(k);wt=a($e,"On both the Node.js class and the client class, the class name is set in the "),se=o($e,"CODE",{});var fa=i(se);$t=a(fa,"class"),fa.forEach(n),_t=a($e,` static property. This class name should match on each side. It is how Nymph
- maps the client class to the Node.js class and vice versa.`),$e.forEach(n),Tt=u(l),c=o(l,"P",{});var E=i(c);Ct=a(E,`Nymph provides a mechanism to ensure uniqueness among entities. Any strings
- returned by the `),oe=o(E,"CODE",{});var va=i(oe);bt=a(va,"$getUniques"),va.forEach(n),Dt=a(E,` method will have a uniqueness
- constraint enforced by the database across this entity's etype. The
- `),ie=o(E,"CODE",{});var Ea=i(ie);Nt=a(Ea,"Todo"),Ea.forEach(n),Ot=a(E,` class returns a string containing both the user's GUID and
- the todo name. This ensures that the user can't have two todos with the same
- name. The `),re=o(E,"CODE",{});var ga=i(re);xt=a(ga,"$save"),ga.forEach(n),jt=a(E,` method checks for a thrown
- `),le=o(E,"CODE",{});var wa=i(le);It=a(wa,"EntityUniqueConstraintError"),wa.forEach(n),qt=a(E,`
- when calling the super class' `),de=o(E,"CODE",{});var $a=i(de);Pt=a($a,"$save"),$a.forEach(n),kt=a(E,"."),E.forEach(n),Ut=u(l),p=o(l,"P",{});var g=i(p);At=a(g,"Finally, in Node.js, the "),he=o(g,"CODE",{});var _a=i(he);Jt=a(_a,"Todo"),_a.forEach(n),St=a(g,` class validates all of its data
- in the `),ce=o(g,"CODE",{});var Ta=i(ce);Vt=a(Ta,"$save"),Ta.forEach(n),Yt=a(g,` method using
- `),b=o(g,"A",{href:!0,target:!0,rel:!0});var Ca=i(b);Bt=a(Ca,"Joi"),Ca.forEach(n),Ht=a(g,`. Without
- this validation, a malicious user could send invalid data types or even
- megabytes worth of data in an entity. Any validation library should support
- validation in Nymph using the `),pe=o(g,"CODE",{});var ba=i(pe);Mt=a(ba,"$getValidatable"),ba.forEach(n),zt=a(g,` method. The
- `),me=o(g,"CODE",{});var Da=i(me);Rt=a(Da,"$allowlistData"),Da.forEach(n),Wt=a(g," property will ensure no extra properties are set."),g.forEach(n),l.forEach(n),fe=u(d),T=o(d,"SECTION",{class:!0});var _e=i(T);D=o(_e,"A",{href:!0,class:!0,style:!0});var Na=i(D);Ft=a(Na,"Previous: Entity Class"),Na.forEach(n),Gt=u(_e),N=o(_e,"A",{href:!0,class:!0,style:!0});var Oa=i(N);Kt=a(Oa,"Next: UIDs"),Oa.forEach(n),_e.forEach(n),this.h()},h(){document.title="Defining Entities - User Guide - Nymph.js",O.a=B,ue(J,"font-size","3em"),C(A,"class","major"),ue(S,"text-align","end"),ue(V,"text-align","end"),C(b,"href","https://joi.dev/"),C(b,"target","_blank"),C(b,"rel","noreferrer"),C(D,"href",Sa+"/user-guide/entity-class"),C(D,"class","button"),ue(D,"margin",".5em"),C(N,"href",Sa+"/user-guide/uids"),C(N,"class","button"),ue(N,"margin",".5em"),C(T,"class","page-steps")},m(d,U){O.m(Fa,document.head),e(document.head,B),Te(d,ye,U),Te(d,r,U),e(r,A),e(A,J),e(J,Ce),e(r,be),e(r,x),e(x,De),e(x,H),e(H,Ne),e(x,Oe),e(r,xe),e(r,j),e(j,S),e(S,je),e(j,Ie),qa(I,j,null),e(r,qe),e(r,q),e(q,V),e(V,Pe),e(q,ke),qa(P,q,null),e(r,Ue),e(r,y),e(y,Ae),e(y,M),e(M,Je),e(y,Se),e(y,z),e(z,Ve),e(y,Ye),e(y,R),e(R,Be),e(y,He),e(y,W),e(W,Me),e(y,ze),e(r,Re),e(r,f),e(f,We),e(f,F),e(F,Fe),e(f,Ge),e(f,G),e(G,Ke),e(f,Le),e(f,K),e(K,Qe),e(f,Xe),e(f,L),e(L,Ze),e(f,et),e(r,tt),e(r,_),e(_,at),e(_,Q),e(Q,nt),e(_,st),e(_,X),e(X,ot),e(_,it),e(r,rt),e(r,h),e(h,lt),e(h,Z),e(Z,dt),e(h,ht),e(h,ee),e(ee,ct),e(h,pt),e(h,te),e(te,mt),e(h,ut),e(h,ae),e(ae,yt),e(h,ft),e(h,ne),e(ne,vt),e(h,Et),e(r,gt),e(r,k),e(k,wt),e(k,se),e(se,$t),e(k,_t),e(r,Tt),e(r,c),e(c,Ct),e(c,oe),e(oe,bt),e(c,Dt),e(c,ie),e(ie,Nt),e(c,Ot),e(c,re),e(re,xt),e(c,jt),e(c,le),e(le,It),e(c,qt),e(c,de),e(de,Pt),e(c,kt),e(r,Ut),e(r,p),e(p,At),e(p,he),e(he,Jt),e(p,St),e(p,ce),e(ce,Vt),e(p,Yt),e(p,b),e(b,Bt),e(p,Ht),e(p,pe),e(pe,Mt),e(p,zt),e(p,me),e(me,Rt),e(p,Wt),Te(d,fe,U),Te(d,T,U),e(T,D),e(D,Ft),e(T,Gt),e(T,N),e(N,Kt),ve=!0},p:Wa,i(d){ve||(Pa(I.$$.fragment,d),Pa(P.$$.fragment,d),ve=!0)},o(d){ka(I.$$.fragment,d),ka(P.$$.fragment,d),ve=!1},d(d){n(B),d&&O.d(),d&&n(ye),d&&n(r),Ua(I),Ua(P),d&&n(fe),d&&n(T)}}}class Za extends Ya{constructor(O){super(),Ba(this,O,null,Ga,Ha,{})}}export{Za as component};
diff --git a/docs/_app/immutable/nodes/2.60fef664.js b/docs/_app/immutable/nodes/2.60fef664.js
deleted file mode 100644
index b75fa1f..0000000
--- a/docs/_app/immutable/nodes/2.60fef664.js
+++ /dev/null
@@ -1,49 +0,0 @@
-import{S as ka,i as Aa,s as ja,a as i,k as a,q as o,y as Oe,F as La,h as t,c,l as r,m as n,r as l,z as Fe,n as h,b as y,C as e,A as Me,D as Ra,g as Ve,d as Je,B as ze}from"../chunks/index.d7cc8d8b.js";import{I as Be,e as Ha,f as Qa,g as Ta,h as qa}from"../chunks/Icon.b8c1070a.js";function Da($a){let M,k,p,A,Z,Ge,Ue,ee,We,Ke,te,Xe,Ze,ae,et,tt,V,re,v,at,_e,m,J,ne,rt,nt,se,st,ot,d,j,z,L,lt,E,oe,it,ct,le,ht,pt,R,B,H,dt,b,ie,ut,ft,ce,mt,yt,Q,G,T,vt,g,he,Et,bt,q,gt,pe,_t,Nt,wt,D,U,x,St,_,de,Pt,It,ue,$t,Ne,u,N,fe,kt,At,me,jt,Lt,ye,Rt,Ht,ve,Qt,Tt,Ee,qt,we,w,W,be,Dt,xt,Y,Yt,C,Ct,Ot,Se,S,K,ge,Ft,Mt,O,Vt,F,Jt,zt,Pe;return L=new Be({props:{path:Ha}}),H=new Be({props:{path:Qa}}),T=new Be({props:{path:Ta}}),x=new Be({props:{path:qa}}),{c(){M=i(),k=a("section"),p=a("div"),A=a("header"),Z=a("h1"),Ge=o("Nymph.js"),Ue=i(),ee=a("p"),We=o("JavaScript data objects for Node.js and the browser."),Ke=i(),te=a("p"),Xe=o(`Nymph is an object relational mapper for collaborative web apps. Nymph
- runs in Node.js and provides a REST server with clients built for Node.js
- and the browser. It allows rapid prototyping and production ready speed
- and features.`),Ze=i(),ae=a("p"),et=o(`Nymph can use SQLite3, MySQL, or PostgreSQL as its database backend. You
- can use SQLite in development, and MySQL or Postgres in production. You
- can even use Nymph with SQLite in an Electron app.`),tt=i(),V=a("ul"),re=a("li"),v=a("a"),at=o("Nymph.js on GitHub"),_e=i(),m=a("section"),J=a("header"),ne=a("h2"),rt=o("Features"),nt=i(),se=a("p"),st=o(`Picture writing a SQL query on the frontend and saying, "update this array
- whenever the results for this query change." Now instead of SQL, your query
- is a simple JSON structure and has automatic access control built right in.
- You can have all your logic on the frontend, or the backend if you prefer,
- because you work with the data all the same. That's Nymph.`),ot=i(),d=a("div"),j=a("article"),z=a("span"),Oe(L.$$.fragment),lt=i(),E=a("div"),oe=a("h3"),it=o("Speedy"),ct=i(),le=a("p"),ht=o(`Nymph is lean and fast. Not just in processing, but Nymph can be used
- for rapid prototyping.`),pt=i(),R=a("article"),B=a("span"),Oe(H.$$.fragment),dt=i(),b=a("div"),ie=a("h3"),ut=o("Open Source"),ft=i(),ce=a("p"),mt=o(`Nymph is licensed under the Apache-2 license. It provides all you need
- to build a backend for your app and the frontend tools you'll need as
- well.`),yt=i(),Q=a("article"),G=a("span"),Oe(T.$$.fragment),vt=i(),g=a("div"),he=a("h3"),Et=o("Reactive"),bt=i(),q=a("p"),gt=o("Nymph's publish/subscribe server makes it easy to build "),pe=a("strong"),_t=o("collaborative"),Nt=o(` apps. You can subscribe to complex queries from the client and be notified
- when the queries' results have changed.`),wt=i(),D=a("article"),U=a("span"),Oe(x.$$.fragment),St=i(),_=a("div"),de=a("h3"),Pt=o("Secure"),It=i(),ue=a("p"),$t=o(`Nymph provides an optional user and group manager called Tilmeld that
- secures your app based on granular permission controls.`),Ne=i(),u=a("section"),N=a("header"),fe=a("h2"),kt=o("Framework Agnostic"),At=i(),me=a("p"),jt=o(`Nymph is very easy to integrate into React, Svelte, Angular, Ember, and
- more.`),Lt=i(),ye=a("p"),Rt=o(`Nymph's easy querying on the server and client makes it perfect for building
- complex apps with any frontend framework. Because you don't have to write
- SQL, almost all of your logic can be on the client side, if you prefer. You
- can also use backend logic in the client as if it were written on the
- front-end with automatic asynchronous server calls.`),Ht=i(),ve=a("p"),Qt=o(`Nymph's REST server package makes it easy to integrate anywhere in your app.
- It provides an Express middleware that you can place on any arbitrary
- endpoint.`),Tt=i(),Ee=a("p"),qt=o(`Nymph's PubSub server package makes synchronizing your client with pushed
- changes from the server super easy. With a reactive framework on the
- frontend, your UI will update in near real time to changes to any entities
- that match your subscribed queries.`),we=i(),w=a("section"),W=a("header"),be=a("h2"),Dt=o("Full API Docs"),xt=i(),Y=a("p"),Yt=o("If you want to really dive deep into Nymph, you can also browse the "),C=a("a"),Ct=o("API docs"),Ot=o(", which covers every part of Nymph's API."),Se=i(),S=a("section"),K=a("header"),ge=a("h2"),Ft=o("Migration"),Mt=i(),O=a("p"),Vt=o("In 2021, Nymph was migrated from PHP to Node.js. You can also visit "),F=a("a"),Jt=o("the site for the legacy version"),zt=o("."),this.h()},l(s){La("svelte-o16nng",document.head).forEach(t),M=c(s),k=r(s,"SECTION",{id:!0});var Bt=n(k);p=r(Bt,"DIV",{class:!0});var P=n(p);A=r(P,"HEADER",{});var Ie=n(A);Z=r(Ie,"H1",{});var Gt=n(Z);Ge=l(Gt,"Nymph.js"),Gt.forEach(t),Ue=c(Ie),ee=r(Ie,"P",{});var Ut=n(ee);We=l(Ut,"JavaScript data objects for Node.js and the browser."),Ut.forEach(t),Ie.forEach(t),Ke=c(P),te=r(P,"P",{});var Wt=n(te);Xe=l(Wt,`Nymph is an object relational mapper for collaborative web apps. Nymph
- runs in Node.js and provides a REST server with clients built for Node.js
- and the browser. It allows rapid prototyping and production ready speed
- and features.`),Wt.forEach(t),Ze=c(P),ae=r(P,"P",{});var Kt=n(ae);et=l(Kt,`Nymph can use SQLite3, MySQL, or PostgreSQL as its database backend. You
- can use SQLite in development, and MySQL or Postgres in production. You
- can even use Nymph with SQLite in an Electron app.`),Kt.forEach(t),tt=c(P),V=r(P,"UL",{class:!0});var Xt=n(V);re=r(Xt,"LI",{});var Zt=n(re);v=r(Zt,"A",{href:!0,target:!0,rel:!0,class:!0});var ea=n(v);at=l(ea,"Nymph.js on GitHub"),ea.forEach(t),Zt.forEach(t),Xt.forEach(t),P.forEach(t),Bt.forEach(t),_e=c(s),m=r(s,"SECTION",{});var X=n(m);J=r(X,"HEADER",{class:!0});var ta=n(J);ne=r(ta,"H2",{});var aa=n(ne);rt=l(aa,"Features"),aa.forEach(t),ta.forEach(t),nt=c(X),se=r(X,"P",{});var ra=n(se);st=l(ra,`Picture writing a SQL query on the frontend and saying, "update this array
- whenever the results for this query change." Now instead of SQL, your query
- is a simple JSON structure and has automatic access control built right in.
- You can have all your logic on the frontend, or the backend if you prefer,
- because you work with the data all the same. That's Nymph.`),ra.forEach(t),ot=c(X),d=r(X,"DIV",{class:!0});var I=n(d);j=r(I,"ARTICLE",{});var $e=n(j);z=r($e,"SPAN",{class:!0});var na=n(z);Fe(L.$$.fragment,na),na.forEach(t),lt=c($e),E=r($e,"DIV",{class:!0});var ke=n(E);oe=r(ke,"H3",{});var sa=n(oe);it=l(sa,"Speedy"),sa.forEach(t),ct=c(ke),le=r(ke,"P",{});var oa=n(le);ht=l(oa,`Nymph is lean and fast. Not just in processing, but Nymph can be used
- for rapid prototyping.`),oa.forEach(t),ke.forEach(t),$e.forEach(t),pt=c(I),R=r(I,"ARTICLE",{});var Ae=n(R);B=r(Ae,"SPAN",{class:!0});var la=n(B);Fe(H.$$.fragment,la),la.forEach(t),dt=c(Ae),b=r(Ae,"DIV",{class:!0});var je=n(b);ie=r(je,"H3",{});var ia=n(ie);ut=l(ia,"Open Source"),ia.forEach(t),ft=c(je),ce=r(je,"P",{});var ca=n(ce);mt=l(ca,`Nymph is licensed under the Apache-2 license. It provides all you need
- to build a backend for your app and the frontend tools you'll need as
- well.`),ca.forEach(t),je.forEach(t),Ae.forEach(t),yt=c(I),Q=r(I,"ARTICLE",{});var Le=n(Q);G=r(Le,"SPAN",{class:!0});var ha=n(G);Fe(T.$$.fragment,ha),ha.forEach(t),vt=c(Le),g=r(Le,"DIV",{class:!0});var Re=n(g);he=r(Re,"H3",{});var pa=n(he);Et=l(pa,"Reactive"),pa.forEach(t),bt=c(Re),q=r(Re,"P",{});var He=n(q);gt=l(He,"Nymph's publish/subscribe server makes it easy to build "),pe=r(He,"STRONG",{});var da=n(pe);_t=l(da,"collaborative"),da.forEach(t),Nt=l(He,` apps. You can subscribe to complex queries from the client and be notified
- when the queries' results have changed.`),He.forEach(t),Re.forEach(t),Le.forEach(t),wt=c(I),D=r(I,"ARTICLE",{});var Qe=n(D);U=r(Qe,"SPAN",{class:!0});var ua=n(U);Fe(x.$$.fragment,ua),ua.forEach(t),St=c(Qe),_=r(Qe,"DIV",{class:!0});var Te=n(_);de=r(Te,"H3",{});var fa=n(de);Pt=l(fa,"Secure"),fa.forEach(t),It=c(Te),ue=r(Te,"P",{});var ma=n(ue);$t=l(ma,`Nymph provides an optional user and group manager called Tilmeld that
- secures your app based on granular permission controls.`),ma.forEach(t),Te.forEach(t),Qe.forEach(t),I.forEach(t),X.forEach(t),Ne=c(s),u=r(s,"SECTION",{});var $=n(u);N=r($,"HEADER",{class:!0});var qe=n(N);fe=r(qe,"H2",{});var ya=n(fe);kt=l(ya,"Framework Agnostic"),ya.forEach(t),At=c(qe),me=r(qe,"P",{});var va=n(me);jt=l(va,`Nymph is very easy to integrate into React, Svelte, Angular, Ember, and
- more.`),va.forEach(t),qe.forEach(t),Lt=c($),ye=r($,"P",{});var Ea=n(ye);Rt=l(Ea,`Nymph's easy querying on the server and client makes it perfect for building
- complex apps with any frontend framework. Because you don't have to write
- SQL, almost all of your logic can be on the client side, if you prefer. You
- can also use backend logic in the client as if it were written on the
- front-end with automatic asynchronous server calls.`),Ea.forEach(t),Ht=c($),ve=r($,"P",{});var ba=n(ve);Qt=l(ba,`Nymph's REST server package makes it easy to integrate anywhere in your app.
- It provides an Express middleware that you can place on any arbitrary
- endpoint.`),ba.forEach(t),Tt=c($),Ee=r($,"P",{});var ga=n(Ee);qt=l(ga,`Nymph's PubSub server package makes synchronizing your client with pushed
- changes from the server super easy. With a reactive framework on the
- frontend, your UI will update in near real time to changes to any entities
- that match your subscribed queries.`),ga.forEach(t),$.forEach(t),we=c(s),w=r(s,"SECTION",{});var De=n(w);W=r(De,"HEADER",{class:!0});var _a=n(W);be=r(_a,"H2",{});var Na=n(be);Dt=l(Na,"Full API Docs"),Na.forEach(t),_a.forEach(t),xt=c(De),Y=r(De,"P",{});var xe=n(Y);Yt=l(xe,"If you want to really dive deep into Nymph, you can also browse the "),C=r(xe,"A",{href:!0,rel:!0});var wa=n(C);Ct=l(wa,"API docs"),wa.forEach(t),Ot=l(xe,", which covers every part of Nymph's API."),xe.forEach(t),De.forEach(t),Se=c(s),S=r(s,"SECTION",{});var Ye=n(S);K=r(Ye,"HEADER",{class:!0});var Sa=n(K);ge=r(Sa,"H2",{});var Pa=n(ge);Ft=l(Pa,"Migration"),Pa.forEach(t),Sa.forEach(t),Mt=c(Ye),O=r(Ye,"P",{});var Ce=n(O);Vt=l(Ce,"In 2021, Nymph was migrated from PHP to Node.js. You can also visit "),F=r(Ce,"A",{href:!0,rel:!0});var Ia=n(F);Jt=l(Ia,"the site for the legacy version"),Ia.forEach(t),zt=l(Ce,"."),Ce.forEach(t),Ye.forEach(t),this.h()},h(){document.title="Nymph.js - JavaScript Data Objects",h(v,"href","https://github.com/sciactive/nymphjs"),h(v,"target","_blank"),h(v,"rel","noreferrer"),h(v,"class","button big"),h(V,"class","actions"),h(p,"class","content"),h(k,"id","banner"),h(J,"class","major"),h(z,"class","icon"),h(E,"class","content"),h(B,"class","icon"),h(b,"class","content"),h(G,"class","icon"),h(g,"class","content"),h(U,"class","icon"),h(_,"class","content"),h(d,"class","features"),h(N,"class","major"),h(W,"class","major"),h(C,"href","/api/latest/"),h(C,"rel","external"),h(K,"class","major"),h(F,"href","/legacy/"),h(F,"rel","external")},m(s,f){y(s,M,f),y(s,k,f),e(k,p),e(p,A),e(A,Z),e(Z,Ge),e(A,Ue),e(A,ee),e(ee,We),e(p,Ke),e(p,te),e(te,Xe),e(p,Ze),e(p,ae),e(ae,et),e(p,tt),e(p,V),e(V,re),e(re,v),e(v,at),y(s,_e,f),y(s,m,f),e(m,J),e(J,ne),e(ne,rt),e(m,nt),e(m,se),e(se,st),e(m,ot),e(m,d),e(d,j),e(j,z),Me(L,z,null),e(j,lt),e(j,E),e(E,oe),e(oe,it),e(E,ct),e(E,le),e(le,ht),e(d,pt),e(d,R),e(R,B),Me(H,B,null),e(R,dt),e(R,b),e(b,ie),e(ie,ut),e(b,ft),e(b,ce),e(ce,mt),e(d,yt),e(d,Q),e(Q,G),Me(T,G,null),e(Q,vt),e(Q,g),e(g,he),e(he,Et),e(g,bt),e(g,q),e(q,gt),e(q,pe),e(pe,_t),e(q,Nt),e(d,wt),e(d,D),e(D,U),Me(x,U,null),e(D,St),e(D,_),e(_,de),e(de,Pt),e(_,It),e(_,ue),e(ue,$t),y(s,Ne,f),y(s,u,f),e(u,N),e(N,fe),e(fe,kt),e(N,At),e(N,me),e(me,jt),e(u,Lt),e(u,ye),e(ye,Rt),e(u,Ht),e(u,ve),e(ve,Qt),e(u,Tt),e(u,Ee),e(Ee,qt),y(s,we,f),y(s,w,f),e(w,W),e(W,be),e(be,Dt),e(w,xt),e(w,Y),e(Y,Yt),e(Y,C),e(C,Ct),e(Y,Ot),y(s,Se,f),y(s,S,f),e(S,K),e(K,ge),e(ge,Ft),e(S,Mt),e(S,O),e(O,Vt),e(O,F),e(F,Jt),e(O,zt),Pe=!0},p:Ra,i(s){Pe||(Ve(L.$$.fragment,s),Ve(H.$$.fragment,s),Ve(T.$$.fragment,s),Ve(x.$$.fragment,s),Pe=!0)},o(s){Je(L.$$.fragment,s),Je(H.$$.fragment,s),Je(T.$$.fragment,s),Je(x.$$.fragment,s),Pe=!1},d(s){s&&t(M),s&&t(k),s&&t(_e),s&&t(m),ze(L),ze(H),ze(T),ze(x),s&&t(Ne),s&&t(u),s&&t(we),s&&t(w),s&&t(Se),s&&t(S)}}}class Ca extends ka{constructor(M){super(),Aa(this,M,null,Da,ja,{})}}export{Ca as component};
diff --git a/docs/_app/immutable/nodes/2.adc99557.js b/docs/_app/immutable/nodes/2.adc99557.js
new file mode 100644
index 0000000..25edf08
--- /dev/null
+++ b/docs/_app/immutable/nodes/2.adc99557.js
@@ -0,0 +1,25 @@
+import{s as Le,a as r,f as n,x as Te,d as a,c as o,g as s,r as h,h as d,j as c,i as u,u as t,v as Ee}from"../chunks/scheduler.d7e45cc8.js";import{S as Ie,i as xe,b as G,d as U,m as W,a as K,t as X,e as Z}from"../chunks/index.77720afb.js";import{I as ee,e as Ce,f as He,g as Me,h as je}from"../chunks/Icon.050ff215.js";function ke($e){let M,m,pe=`
Nymph.js
JavaScript data objects for Node.js and the browser.
Nymph is an object relational mapper for collaborative web apps. Nymph
+ runs in Node.js and provides a REST server with clients built for Node.js
+ and the browser. It allows rapid prototyping and production ready speed
+ and features.
Nymph can use SQLite3, MySQL, or PostgreSQL as its database backend. You
+ can use SQLite in development, and MySQL or Postgres in production. You
+ can even use Nymph with SQLite in an Electron app.
",te,j,de=`Picture writing a SQL query on the frontend and saying, "update this array
+ whenever the results for this query change." Now instead of SQL, your query
+ is a simple JSON structure and has automatic access control built right in.
+ You can have all your logic on the frontend, or the backend if you prefer,
+ because you work with the data all the same. That's Nymph.`,ae,i,y,k,g,ne,b,ue=`
Speedy
Nymph is lean and fast. Not just in processing, but Nymph can be used
+ for rapid prototyping.
`,se,_,A,w,re,N,me=`
Open Source
Nymph is licensed under the Apache-2 license. It provides all you need
+ to build a backend for your app and the frontend tools you'll need as
+ well.
`,oe,S,P,$,ie,L,fe=`
Reactive
Nymph's publish/subscribe server makes it easy to build collaborative apps. You can subscribe to complex queries from the client and be notified
+ when the queries' results have changed.
`,le,T,q,E,ce,I,ve=`
Secure
Nymph provides an optional user and group manager called Tilmeld that
+ secures your app based on granular permission controls.
`,D,x,ye=`
Framework Agnostic
Nymph is very easy to integrate into React, Svelte, Angular, Ember, and
+ more.
Nymph's easy querying on the server and client makes it perfect for building
+ complex apps with any frontend framework. Because you don't have to write
+ SQL, almost all of your logic can be on the client side, if you prefer. You
+ can also use backend logic in the client as if it were written on the
+ front-end with automatic asynchronous server calls.
Nymph's REST server package makes it easy to integrate anywhere in your app.
+ It provides an Express middleware that you can place on any arbitrary
+ endpoint.
Nymph's PubSub server package makes synchronizing your client with pushed
+ changes from the server super easy. With a reactive framework on the
+ frontend, your UI will update in near real time to changes to any entities
+ that match your subscribed queries.
`,O,C,ge='
Full API Docs
If you want to really dive deep into Nymph, you can also browse the API docs, which covers every part of Nymph's API.
',V;return g=new ee({props:{path:Ce}}),w=new ee({props:{path:He}}),$=new ee({props:{path:Me}}),E=new ee({props:{path:je}}),{c(){M=r(),m=n("section"),m.innerHTML=pe,Q=r(),p=n("section"),v=n("header"),v.innerHTML=he,te=r(),j=n("p"),j.textContent=de,ae=r(),i=n("div"),y=n("article"),k=n("span"),G(g.$$.fragment),ne=r(),b=n("div"),b.innerHTML=ue,se=r(),_=n("article"),A=n("span"),G(w.$$.fragment),re=r(),N=n("div"),N.innerHTML=me,oe=r(),S=n("article"),P=n("span"),G($.$$.fragment),ie=r(),L=n("div"),L.innerHTML=fe,le=r(),T=n("article"),q=n("span"),G(E.$$.fragment),ce=r(),I=n("div"),I.innerHTML=ve,D=r(),x=n("section"),x.innerHTML=ye,O=r(),C=n("section"),C.innerHTML=ge,Y=r(),H=n("section"),H.innerHTML=be,this.h()},l(e){Te("svelte-o16nng",document.head).forEach(a),M=o(e),m=s(e,"SECTION",{id:!0,"data-svelte-h":!0}),h(m)!=="svelte-sq7jw"&&(m.innerHTML=pe),Q=o(e),p=s(e,"SECTION",{});var R=d(p);v=s(R,"HEADER",{class:!0,"data-svelte-h":!0}),h(v)!=="svelte-1mw113u"&&(v.innerHTML=he),te=o(R),j=s(R,"P",{"data-svelte-h":!0}),h(j)!=="svelte-1twg9ow"&&(j.textContent=de),ae=o(R),i=s(R,"DIV",{class:!0});var f=d(i);y=s(f,"ARTICLE",{});var F=d(y);k=s(F,"SPAN",{class:!0});var _e=d(k);U(g.$$.fragment,_e),_e.forEach(a),ne=o(F),b=s(F,"DIV",{class:!0,"data-svelte-h":!0}),h(b)!=="svelte-gv6mah"&&(b.innerHTML=ue),F.forEach(a),se=o(f),_=s(f,"ARTICLE",{});var J=d(_);A=s(J,"SPAN",{class:!0});var we=d(A);U(w.$$.fragment,we),we.forEach(a),re=o(J),N=s(J,"DIV",{class:!0,"data-svelte-h":!0}),h(N)!=="svelte-1f7ku42"&&(N.innerHTML=me),J.forEach(a),oe=o(f),S=s(f,"ARTICLE",{});var z=d(S);P=s(z,"SPAN",{class:!0});var Ne=d(P);U($.$$.fragment,Ne),Ne.forEach(a),ie=o(z),L=s(z,"DIV",{class:!0,"data-svelte-h":!0}),h(L)!=="svelte-1qg7qmr"&&(L.innerHTML=fe),z.forEach(a),le=o(f),T=s(f,"ARTICLE",{});var B=d(T);q=s(B,"SPAN",{class:!0});var Se=d(q);U(E.$$.fragment,Se),Se.forEach(a),ce=o(B),I=s(B,"DIV",{class:!0,"data-svelte-h":!0}),h(I)!=="svelte-342cl6"&&(I.innerHTML=ve),B.forEach(a),f.forEach(a),R.forEach(a),D=o(e),x=s(e,"SECTION",{"data-svelte-h":!0}),h(x)!=="svelte-g5k3xt"&&(x.innerHTML=ye),O=o(e),C=s(e,"SECTION",{"data-svelte-h":!0}),h(C)!=="svelte-x9jtur"&&(C.innerHTML=ge),Y=o(e),H=s(e,"SECTION",{"data-svelte-h":!0}),h(H)!=="svelte-6rylbe"&&(H.innerHTML=be),this.h()},h(){document.title="Nymph.js - JavaScript Data Objects",c(m,"id","banner"),c(v,"class","major"),c(k,"class","icon"),c(b,"class","content"),c(A,"class","icon"),c(N,"class","content"),c(P,"class","icon"),c(L,"class","content"),c(q,"class","icon"),c(I,"class","content"),c(i,"class","features")},m(e,l){u(e,M,l),u(e,m,l),u(e,Q,l),u(e,p,l),t(p,v),t(p,te),t(p,j),t(p,ae),t(p,i),t(i,y),t(y,k),W(g,k,null),t(y,ne),t(y,b),t(i,se),t(i,_),t(_,A),W(w,A,null),t(_,re),t(_,N),t(i,oe),t(i,S),t(S,P),W($,P,null),t(S,ie),t(S,L),t(i,le),t(i,T),t(T,q),W(E,q,null),t(T,ce),t(T,I),u(e,D,l),u(e,x,l),u(e,O,l),u(e,C,l),u(e,Y,l),u(e,H,l),V=!0},p:Ee,i(e){V||(K(g.$$.fragment,e),K(w.$$.fragment,e),K($.$$.fragment,e),K(E.$$.fragment,e),V=!0)},o(e){X(g.$$.fragment,e),X(w.$$.fragment,e),X($.$$.fragment,e),X(E.$$.fragment,e),V=!1},d(e){e&&(a(M),a(m),a(Q),a(p),a(D),a(x),a(O),a(C),a(Y),a(H)),Z(g),Z(w),Z($),Z(E)}}}class Re extends Ie{constructor(M){super(),xe(this,M,null,ke,Le,{})}}export{Re as component};
diff --git a/docs/_app/immutable/nodes/20.5b87b0c3.js b/docs/_app/immutable/nodes/20.5b87b0c3.js
deleted file mode 100644
index f5764a0..0000000
--- a/docs/_app/immutable/nodes/20.5b87b0c3.js
+++ /dev/null
@@ -1,224 +0,0 @@
-import{S as ds,i as us,s as fs,R as ys,e as ls,a as h,k as o,q as t,y as le,F as ms,T as ps,h as n,c,l as s,m as r,r as a,z as he,p as so,n as ce,C as e,b as bt,A as de,D as Es,g as ue,d as fe,B as ye}from"../chunks/index.d7cc8d8b.js";import{H as me,g as vs}from"../chunks/github.df9008b1.js";import{t as pe}from"../chunks/typescript.7dd1ec19.js";import{b as hs}from"../chunks/paths.d307dac8.js";function gs(cs){let S,Ee,mt,i,J,K,Ct,Dt,ve,Ot,Tt,w,kt,ge,It,qt,$e,Nt,Ut,jt,E,Pt,we,At,St,_e,Gt,Lt,be,xt,Mt,Ft,G,zt,_,Ht,Ce,Yt,Bt,De,Qt,Rt,Jt,b,Kt,Oe,Vt,Wt,Te,Xt,Zt,ea,L,ta,x,aa,ke,na,oa,sa,M,ra,u,ia,Ie,la,ha,qe,ca,da,Ne,ua,fa,Ue,ya,ma,je,pa,Ea,Pe,va,ga,Ae,$a,wa,_a,F,ba,z,Ca,Se,Da,Oa,Ta,v,H,Ge,ka,Ia,C,Le,qa,Na,xe,Ua,ja,Me,Pa,Aa,D,Fe,Sa,Ga,ze,La,xa,O,He,Ma,Fa,Ye,za,Ha,Be,Ya,Ba,p,Qe,Qa,Ra,Re,Ja,Ka,Je,Va,Wa,Ke,Xa,Za,Ve,en,tn,an,f,We,nn,on,Xe,sn,rn,Ze,ln,hn,et,cn,dn,tt,un,fn,at,yn,mn,nt,pn,En,vn,Y,gn,T,$n,ot,wn,_n,st,bn,Cn,Dn,k,V,rt,On,Tn,kn,W,it,In,qn,Nn,X,lt,Un,jn,Pn,I,An,ht,Sn,Gn,ct,Ln,xn,Mn,B,Fn,dt,zn,Hn,Yn,g,Bn,ut,Qn,Rn,ft,Jn,Kn,yt,Vn,Wn,Xn,Q,pt,q,N,Zn,eo,U,to,Et;return G=new me({props:{language:pe,code:`const entity = await MyEntity.factory();
-
-entity.$addTag('foo', 'bar');
-entity.$hasTag('foo'); // True
-
-entity.$removeTag('foo', 'bar');
-entity.$hasTag('foo'); // False`}}),L=new me({props:{language:pe,code:`// Create some entities.
-let entity = await MyEntity.factory();
-entity.foo = await MyEntity.factory();
-entity.foo.bar = 'Old value.';
-await entity.foo.$save();
-await entity.$save();
-
-// Get a copy of the referenced entity.
-let instOfFoo = await nymph.getEntity(
- { class: MyEntity },
- { type: '&', guid: entity.foo.guid }
-);
-// And change a value on it.
-instOfFoo.bar = 'New value.';
-await instOfFoo.$save();
-
-console.log(entity.foo.bar); // Outputs 'Old value.'
-// If on Node.js
-entity.$clearCache();
-await entity.foo.$wake();
-// Else if on the client
-await entity.$refresh();
-await entity.foo.$wake();
-// End if
-console.log(entity.foo.bar); // Outputs 'New value.'`}}),M=new me({props:{language:pe,code:`// Create an entity.
-const entity = await MyEntity.factory();
-entity.foo = 'Old value.';
-await entity.$save();
-
-// Get a copy of the entity.
-const instOfEnt = await nymph.getEntity(
- { class: MyEntity },
- { type: '&', guid: entity.guid }
-);
-// And change a value on it.
-instOfEnt.foo = 'New value.';
-await instOfEnt.$save();
-
-console.log(entity.foo); // Outputs 'Old value.'
-await entity.$refresh();
-console.log(entity.foo); // Outputs 'New value.'`}}),F=new me({props:{language:pe,code:`const entity = await MyEntity.factory();
-
-// Save the entity.
-await entity.$save();
-// or
-await nymph.saveEntity(entity);
-// or
-await nymph.saveEntities([entity]);
-
-// (Client only.) Save only the data that has changed.
-await entity.$patch();
-// or
-await nymph.patchEntity(entity);
-// or
-await nymph.patchEntities([entity]);
-
-// Delete the entity.
-await entity.$delete();
-// or
-await nymph.deleteEntity(entity);
-// or
-await nymph.deleteEntities([entity]);`}}),Y=new me({props:{language:pe,code:`// Assuming the entity with GUID 'a4c1591d6ea91c8450d2d360' exists.
-let entity = await MyEntity.factory('a4c1591d6ea91c8450d2d360');
-let entity2 = await MyEntity.factory('a4c1591d6ea91c8450d2d360');
-
-entity.$is(entity2); // True
-entity.$equals(entity2); // True
-
-entity2.someProp = 'some new value';
-entity.$is(entity2); // True
-entity.$equals(entity2); // False
-
-const arr = [null, null, entity2];
-entity.$arraySearch(arr); // 2
-entity.$inArray(arr); // True
-entity.$arraySearch(arr, true); // -1
-entity.$inArray(arr, true); // false`}}),Q=new me({props:{language:pe,code:`// You can use $serverCall and serverCallStatic directly.
-try {
- const success: boolean = await todo.$serverCall('$archive', []);
- if (!success) {
- alert("Couldn't archive " + todo.name);
- }
-} catch (e) {
- alert('Error: ' + e.textStatus + "
-Couldn't archive " + todo.name);
-}
-
-// Or you can define methods like this in your client class.
-class Todo extends Entity {
- // ...
-
- static async archiveAllDone(onlyOlderThanDay: boolean): Promise {
- return await this.serverCallStatic('archiveAllDone', [onlyOlderThanDay]);
- }
-
- async $archive(): Promise {
- return await this.$serverCall('archive', []);
- }
-}
-
-// You'd use them like this.
-const success = await Todo.archiveAllDone(true);
-
-// And
-const todo = await Todo.factory(someGuid);
-const success = await todo.$archive();`}}),{c(){S=new ys(!1),Ee=ls(),mt=h(),i=o("section"),J=o("header"),K=o("h1"),Ct=t("Entity Class"),Dt=h(),ve=o("p"),Ot=t(`Entities in Nymph work pretty much like regular objects, and this is due to
- the Entity class. The Entity class constructor returns a proxy to allow
- accessing data on it just like a regular object while keeping track of
- changes and only unserializing data from the DB when it's first accessed.
- Instance methods and properties begin with "$" to differentiate them from
- data.`),Tt=h(),w=o("p"),kt=t(`In the client, assigning a property internally marks that property as
- "dirty", and calling `),ge=o("code"),It=t("$patch"),qt=t(` will push just the changed
- properties up to the server, whereas `),$e=o("code"),Nt=t("$save"),Ut=t(" would push all properties."),jt=h(),E=o("p"),Pt=t(`Entities can be organized using tags. To add, remove, and check tags, the
- methods `),we=o("code"),At=t("$addTag"),St=t(", "),_e=o("code"),Gt=t("$removeTag"),Lt=t(`, and
- `),be=o("code"),xt=t("$hasTag"),Mt=t(` are used, respectively. Each takes any number of tags as
- arguments.`),Ft=h(),le(G.$$.fragment),zt=h(),_=o("p"),Ht=t(`Entities that have been saved inside another entity's property are loaded as
- "sleeping references". This means their data is not actually pulled from the
- database/server. It will "wake up" when you use `),Ce=o("code"),Yt=t("$wake"),Bt=t(` on it or
- `),De=o("code"),Qt=t("$wakeAll"),Rt=t(" on the entity that contains it."),Jt=h(),b=o("p"),Kt=t(`To clear the cache of referenced entities, so that the next time one is
- awoken, it will be pulled from the database, use the `),Oe=o("code"),Vt=t("$clearCache"),Wt=t(`
- method in Node.js or the `),Te=o("code"),Xt=t("$refresh"),Zt=t(" method in the client."),ea=h(),le(L.$$.fragment),ta=h(),x=o("p"),aa=t(`Much like clearing the entity cache, you may need to refresh the entity's
- own data in Node.js. Use the `),ke=o("code"),na=t("$refresh"),oa=t(` method, just like in the client,
- for this.`),sa=h(),le(M.$$.fragment),ra=h(),u=o("p"),ia=t("To save an entity, use the "),Ie=o("code"),la=t("$save"),ha=t(` method. Likewise, to delete
- the entity, use the `),qe=o("code"),ca=t("$delete"),da=t(` method. You can also call the
- `),Ne=o("code"),ua=t("saveEntity"),fa=t(`,
- `),Ue=o("code"),ya=t("deleteEntity"),ma=t(", and "),je=o("code"),pa=t("deleteEntityByID"),Ea=t(` methods of
- `),Pe=o("code"),va=t("Nymph"),ga=t(". The "),Ae=o("code"),$a=t("Entity"),wa=t(" class uses these methods."),_a=h(),le(F.$$.fragment),ba=h(),z=o("p"),Ca=t("Entities can't be checked using the "),Se=o("code"),Da=t("=="),Oa=t(` operator. Instead, you can
- use the following entity methods.`),Ta=h(),v=o("ul"),H=o("li"),Ge=o("code"),ka=t("$is"),Ia=t(` - Perform a less strict comparison of two entities
- (basically a GUID check). To return true, the entities must meet the
- following criteria.
- `),C=o("ul"),Le=o("li"),qa=t("They must be entities."),Na=h(),xe=o("li"),Ua=t("They must have equal GUIDs, or both can have no GUID."),ja=h(),Me=o("li"),Pa=t("If they have no GUIDs, their data and tags must be equal."),Aa=h(),D=o("li"),Fe=o("code"),Sa=t("$equals"),Ga=t(` - Perform a more strict comparison of two entities
- (basically a GUID + data + tags check). To return true, the entities must
- meet the following criteria. Unlike `),ze=o("code"),La=t("$is"),xa=t(`, this method can't be
- used on sleeping references.
- `),O=o("ul"),He=o("li"),Ma=t("They must be entities."),Fa=h(),Ye=o("li"),za=t("They must have equal GUIDs, or both can have no GUID."),Ha=h(),Be=o("li"),Ya=t("Their data and tags must be equal."),Ba=h(),p=o("li"),Qe=o("code"),Qa=t("$inArray"),Ra=t(` - Check whether the entity is in an array. Takes two
- arguments, the array and a boolean `),Re=o("code"),Ja=t("strict"),Ka=t(`. If
- `),Je=o("code"),Va=t("strict"),Wa=t(`
- is false or undefined, the function uses `),Ke=o("code"),Xa=t("$is"),Za=t(` to compare, and
- if it's true, the function uses `),Ve=o("code"),en=t("$equals"),tn=t("."),an=h(),f=o("li"),We=o("code"),nn=t("$arraySearch"),on=t(` - Search an array for the entity and return its
- index, or `),Xe=o("code"),sn=t("-1"),rn=t(` if it's not found. Takes two arguments, the
- array and a boolean
- `),Ze=o("code"),ln=t("strict"),hn=t(". If "),et=o("code"),cn=t("strict"),dn=t(` is false or undefined, the
- function uses
- `),tt=o("code"),un=t("$is"),fn=t(`
- to compare, and if it's true, the function uses `),at=o("code"),yn=t("$equals"),mn=t(`. This
- method may return 0, which evaluates to false, so you should use
- `),nt=o("code"),pn=t("$inArray"),En=t(` if you are only checking whether the entity is in the
- array.`),vn=h(),le(Y.$$.fragment),gn=h(),T=o("p"),$n=t("Client side Nymph entities can use the "),ot=o("code"),wn=t("$serverCall"),_n=t(` method to
- call methods on a server side instance of the entity.
- `),st=o("code"),bn=t("$serverCall"),Cn=t(" expects three parameters."),Dn=h(),k=o("ul"),V=o("li"),rt=o("code"),On=t("method"),Tn=t(" - the name of the method to call on the server side object."),kn=h(),W=o("li"),it=o("code"),In=t("params"),qn=t(" - an array of the parameters to pass to the method."),Nn=h(),X=o("li"),lt=o("code"),Un=t("stateless"),jn=t(` - if set to true, the method won't update the entity
- with the returned server side representation.`),Pn=h(),I=o("p"),An=t(`Normally, when you use this method, just before the promise is fulfilled,
- the entity's data will be replaced with that of the entity on the server
- side after the method was run. This will cause any awoken entities in the
- data of your entity to be replaced with sleeping entities, so you will have
- to run `),ht=o("code"),Sn=t("$readyAll"),Gn=t(` again. If you know that the server side method
- will not change any of the data on the entity, you can set
- `),ct=o("code"),Ln=t("stateless"),xn=t(" to true."),Mn=h(),B=o("p"),Fn=t("You can also call static methods on the server with "),dt=o("code"),zn=t("serverCallStatic"),Hn=t("."),Yn=h(),g=o("p"),Bn=t(`In order to be called from the client side, the method must be listed in the
- `),ut=o("code"),Qn=t("$clientEnabledMethods"),Rn=t(` or
- `),ft=o("code"),Jn=t("clientEnabledStaticMethods"),Kn=t(` property in the Node.js class. This
- guards against a user submitting tailored requests to perform potentially
- dangerous tasks on the server side. If the method is not listed, the request
- will fail with a `),yt=o("code"),Vn=t("403 Forbidden"),Wn=t(" status."),Xn=h(),le(Q.$$.fragment),pt=h(),q=o("section"),N=o("a"),Zn=t("Previous: Subscribing to Queries"),eo=h(),U=o("a"),to=t("Next: Defining Entities"),this.h()},l(d){const R=ms("svelte-24q1tq",document.head);S=ps(R,!1),Ee=ls(),R.forEach(n),mt=c(d),i=s(d,"SECTION",{});var l=r(i);J=s(l,"HEADER",{class:!0});var ro=r(J);K=s(ro,"H1",{style:!0});var io=r(K);Ct=a(io,"Entity Class"),io.forEach(n),ro.forEach(n),Dt=c(l),ve=s(l,"P",{});var lo=r(ve);Ot=a(lo,`Entities in Nymph work pretty much like regular objects, and this is due to
- the Entity class. The Entity class constructor returns a proxy to allow
- accessing data on it just like a regular object while keeping track of
- changes and only unserializing data from the DB when it's first accessed.
- Instance methods and properties begin with "$" to differentiate them from
- data.`),lo.forEach(n),Tt=c(l),w=s(l,"P",{});var Z=r(w);kt=a(Z,`In the client, assigning a property internally marks that property as
- "dirty", and calling `),ge=s(Z,"CODE",{});var ho=r(ge);It=a(ho,"$patch"),ho.forEach(n),qt=a(Z,` will push just the changed
- properties up to the server, whereas `),$e=s(Z,"CODE",{});var co=r($e);Nt=a(co,"$save"),co.forEach(n),Ut=a(Z," would push all properties."),Z.forEach(n),jt=c(l),E=s(l,"P",{});var j=r(E);Pt=a(j,`Entities can be organized using tags. To add, remove, and check tags, the
- methods `),we=s(j,"CODE",{});var uo=r(we);At=a(uo,"$addTag"),uo.forEach(n),St=a(j,", "),_e=s(j,"CODE",{});var fo=r(_e);Gt=a(fo,"$removeTag"),fo.forEach(n),Lt=a(j,`, and
- `),be=s(j,"CODE",{});var yo=r(be);xt=a(yo,"$hasTag"),yo.forEach(n),Mt=a(j,` are used, respectively. Each takes any number of tags as
- arguments.`),j.forEach(n),Ft=c(l),he(G.$$.fragment,l),zt=c(l),_=s(l,"P",{});var ee=r(_);Ht=a(ee,`Entities that have been saved inside another entity's property are loaded as
- "sleeping references". This means their data is not actually pulled from the
- database/server. It will "wake up" when you use `),Ce=s(ee,"CODE",{});var mo=r(Ce);Yt=a(mo,"$wake"),mo.forEach(n),Bt=a(ee,` on it or
- `),De=s(ee,"CODE",{});var po=r(De);Qt=a(po,"$wakeAll"),po.forEach(n),Rt=a(ee," on the entity that contains it."),ee.forEach(n),Jt=c(l),b=s(l,"P",{});var te=r(b);Kt=a(te,`To clear the cache of referenced entities, so that the next time one is
- awoken, it will be pulled from the database, use the `),Oe=s(te,"CODE",{});var Eo=r(Oe);Vt=a(Eo,"$clearCache"),Eo.forEach(n),Wt=a(te,`
- method in Node.js or the `),Te=s(te,"CODE",{});var vo=r(Te);Xt=a(vo,"$refresh"),vo.forEach(n),Zt=a(te," method in the client."),te.forEach(n),ea=c(l),he(L.$$.fragment,l),ta=c(l),x=s(l,"P",{});var vt=r(x);aa=a(vt,`Much like clearing the entity cache, you may need to refresh the entity's
- own data in Node.js. Use the `),ke=s(vt,"CODE",{});var go=r(ke);na=a(go,"$refresh"),go.forEach(n),oa=a(vt,` method, just like in the client,
- for this.`),vt.forEach(n),sa=c(l),he(M.$$.fragment,l),ra=c(l),u=s(l,"P",{});var y=r(u);ia=a(y,"To save an entity, use the "),Ie=s(y,"CODE",{});var $o=r(Ie);la=a($o,"$save"),$o.forEach(n),ha=a(y,` method. Likewise, to delete
- the entity, use the `),qe=s(y,"CODE",{});var wo=r(qe);ca=a(wo,"$delete"),wo.forEach(n),da=a(y,` method. You can also call the
- `),Ne=s(y,"CODE",{});var _o=r(Ne);ua=a(_o,"saveEntity"),_o.forEach(n),fa=a(y,`,
- `),Ue=s(y,"CODE",{});var bo=r(Ue);ya=a(bo,"deleteEntity"),bo.forEach(n),ma=a(y,", and "),je=s(y,"CODE",{});var Co=r(je);pa=a(Co,"deleteEntityByID"),Co.forEach(n),Ea=a(y,` methods of
- `),Pe=s(y,"CODE",{});var Do=r(Pe);va=a(Do,"Nymph"),Do.forEach(n),ga=a(y,". The "),Ae=s(y,"CODE",{});var Oo=r(Ae);$a=a(Oo,"Entity"),Oo.forEach(n),wa=a(y," class uses these methods."),y.forEach(n),_a=c(l),he(F.$$.fragment,l),ba=c(l),z=s(l,"P",{});var gt=r(z);Ca=a(gt,"Entities can't be checked using the "),Se=s(gt,"CODE",{});var To=r(Se);Da=a(To,"=="),To.forEach(n),Oa=a(gt,` operator. Instead, you can
- use the following entity methods.`),gt.forEach(n),Ta=c(l),v=s(l,"UL",{});var P=r(v);H=s(P,"LI",{});var $t=r(H);Ge=s($t,"CODE",{});var ko=r(Ge);ka=a(ko,"$is"),ko.forEach(n),Ia=a($t,` - Perform a less strict comparison of two entities
- (basically a GUID check). To return true, the entities must meet the
- following criteria.
- `),C=s($t,"UL",{});var ae=r(C);Le=s(ae,"LI",{});var Io=r(Le);qa=a(Io,"They must be entities."),Io.forEach(n),Na=c(ae),xe=s(ae,"LI",{});var qo=r(xe);Ua=a(qo,"They must have equal GUIDs, or both can have no GUID."),qo.forEach(n),ja=c(ae),Me=s(ae,"LI",{});var No=r(Me);Pa=a(No,"If they have no GUIDs, their data and tags must be equal."),No.forEach(n),ae.forEach(n),$t.forEach(n),Aa=c(P),D=s(P,"LI",{});var ne=r(D);Fe=s(ne,"CODE",{});var Uo=r(Fe);Sa=a(Uo,"$equals"),Uo.forEach(n),Ga=a(ne,` - Perform a more strict comparison of two entities
- (basically a GUID + data + tags check). To return true, the entities must
- meet the following criteria. Unlike `),ze=s(ne,"CODE",{});var jo=r(ze);La=a(jo,"$is"),jo.forEach(n),xa=a(ne,`, this method can't be
- used on sleeping references.
- `),O=s(ne,"UL",{});var oe=r(O);He=s(oe,"LI",{});var Po=r(He);Ma=a(Po,"They must be entities."),Po.forEach(n),Fa=c(oe),Ye=s(oe,"LI",{});var Ao=r(Ye);za=a(Ao,"They must have equal GUIDs, or both can have no GUID."),Ao.forEach(n),Ha=c(oe),Be=s(oe,"LI",{});var So=r(Be);Ya=a(So,"Their data and tags must be equal."),So.forEach(n),oe.forEach(n),ne.forEach(n),Ba=c(P),p=s(P,"LI",{});var $=r(p);Qe=s($,"CODE",{});var Go=r(Qe);Qa=a(Go,"$inArray"),Go.forEach(n),Ra=a($,` - Check whether the entity is in an array. Takes two
- arguments, the array and a boolean `),Re=s($,"CODE",{});var Lo=r(Re);Ja=a(Lo,"strict"),Lo.forEach(n),Ka=a($,`. If
- `),Je=s($,"CODE",{});var xo=r(Je);Va=a(xo,"strict"),xo.forEach(n),Wa=a($,`
- is false or undefined, the function uses `),Ke=s($,"CODE",{});var Mo=r(Ke);Xa=a(Mo,"$is"),Mo.forEach(n),Za=a($,` to compare, and
- if it's true, the function uses `),Ve=s($,"CODE",{});var Fo=r(Ve);en=a(Fo,"$equals"),Fo.forEach(n),tn=a($,"."),$.forEach(n),an=c(P),f=s(P,"LI",{});var m=r(f);We=s(m,"CODE",{});var zo=r(We);nn=a(zo,"$arraySearch"),zo.forEach(n),on=a(m,` - Search an array for the entity and return its
- index, or `),Xe=s(m,"CODE",{});var Ho=r(Xe);sn=a(Ho,"-1"),Ho.forEach(n),rn=a(m,` if it's not found. Takes two arguments, the
- array and a boolean
- `),Ze=s(m,"CODE",{});var Yo=r(Ze);ln=a(Yo,"strict"),Yo.forEach(n),hn=a(m,". If "),et=s(m,"CODE",{});var Bo=r(et);cn=a(Bo,"strict"),Bo.forEach(n),dn=a(m,` is false or undefined, the
- function uses
- `),tt=s(m,"CODE",{});var Qo=r(tt);un=a(Qo,"$is"),Qo.forEach(n),fn=a(m,`
- to compare, and if it's true, the function uses `),at=s(m,"CODE",{});var Ro=r(at);yn=a(Ro,"$equals"),Ro.forEach(n),mn=a(m,`. This
- method may return 0, which evaluates to false, so you should use
- `),nt=s(m,"CODE",{});var Jo=r(nt);pn=a(Jo,"$inArray"),Jo.forEach(n),En=a(m,` if you are only checking whether the entity is in the
- array.`),m.forEach(n),P.forEach(n),vn=c(l),he(Y.$$.fragment,l),gn=c(l),T=s(l,"P",{});var se=r(T);$n=a(se,"Client side Nymph entities can use the "),ot=s(se,"CODE",{});var Ko=r(ot);wn=a(Ko,"$serverCall"),Ko.forEach(n),_n=a(se,` method to
- call methods on a server side instance of the entity.
- `),st=s(se,"CODE",{});var Vo=r(st);bn=a(Vo,"$serverCall"),Vo.forEach(n),Cn=a(se," expects three parameters."),se.forEach(n),Dn=c(l),k=s(l,"UL",{});var re=r(k);V=s(re,"LI",{});var ao=r(V);rt=s(ao,"CODE",{});var Wo=r(rt);On=a(Wo,"method"),Wo.forEach(n),Tn=a(ao," - the name of the method to call on the server side object."),ao.forEach(n),kn=c(re),W=s(re,"LI",{});var no=r(W);it=s(no,"CODE",{});var Xo=r(it);In=a(Xo,"params"),Xo.forEach(n),qn=a(no," - an array of the parameters to pass to the method."),no.forEach(n),Nn=c(re),X=s(re,"LI",{});var oo=r(X);lt=s(oo,"CODE",{});var Zo=r(lt);Un=a(Zo,"stateless"),Zo.forEach(n),jn=a(oo,` - if set to true, the method won't update the entity
- with the returned server side representation.`),oo.forEach(n),re.forEach(n),Pn=c(l),I=s(l,"P",{});var ie=r(I);An=a(ie,`Normally, when you use this method, just before the promise is fulfilled,
- the entity's data will be replaced with that of the entity on the server
- side after the method was run. This will cause any awoken entities in the
- data of your entity to be replaced with sleeping entities, so you will have
- to run `),ht=s(ie,"CODE",{});var es=r(ht);Sn=a(es,"$readyAll"),es.forEach(n),Gn=a(ie,` again. If you know that the server side method
- will not change any of the data on the entity, you can set
- `),ct=s(ie,"CODE",{});var ts=r(ct);Ln=a(ts,"stateless"),ts.forEach(n),xn=a(ie," to true."),ie.forEach(n),Mn=c(l),B=s(l,"P",{});var wt=r(B);Fn=a(wt,"You can also call static methods on the server with "),dt=s(wt,"CODE",{});var as=r(dt);zn=a(as,"serverCallStatic"),as.forEach(n),Hn=a(wt,"."),wt.forEach(n),Yn=c(l),g=s(l,"P",{});var A=r(g);Bn=a(A,`In order to be called from the client side, the method must be listed in the
- `),ut=s(A,"CODE",{});var ns=r(ut);Qn=a(ns,"$clientEnabledMethods"),ns.forEach(n),Rn=a(A,` or
- `),ft=s(A,"CODE",{});var os=r(ft);Jn=a(os,"clientEnabledStaticMethods"),os.forEach(n),Kn=a(A,` property in the Node.js class. This
- guards against a user submitting tailored requests to perform potentially
- dangerous tasks on the server side. If the method is not listed, the request
- will fail with a `),yt=s(A,"CODE",{});var ss=r(yt);Vn=a(ss,"403 Forbidden"),ss.forEach(n),Wn=a(A," status."),A.forEach(n),Xn=c(l),he(Q.$$.fragment,l),l.forEach(n),pt=c(d),q=s(d,"SECTION",{class:!0});var _t=r(q);N=s(_t,"A",{href:!0,class:!0,style:!0});var rs=r(N);Zn=a(rs,"Previous: Subscribing to Queries"),rs.forEach(n),eo=c(_t),U=s(_t,"A",{href:!0,class:!0,style:!0});var is=r(U);to=a(is,"Next: Defining Entities"),is.forEach(n),_t.forEach(n),this.h()},h(){document.title="Entity Class - User Guide - Nymph.js",S.a=Ee,so(K,"font-size","3em"),ce(J,"class","major"),ce(N,"href",hs+"/user-guide/subscribing-to-queries"),ce(N,"class","button"),so(N,"margin",".5em"),ce(U,"href",hs+"/user-guide/defining-entities"),ce(U,"class","button"),so(U,"margin",".5em"),ce(q,"class","page-steps")},m(d,R){S.m(vs,document.head),e(document.head,Ee),bt(d,mt,R),bt(d,i,R),e(i,J),e(J,K),e(K,Ct),e(i,Dt),e(i,ve),e(ve,Ot),e(i,Tt),e(i,w),e(w,kt),e(w,ge),e(ge,It),e(w,qt),e(w,$e),e($e,Nt),e(w,Ut),e(i,jt),e(i,E),e(E,Pt),e(E,we),e(we,At),e(E,St),e(E,_e),e(_e,Gt),e(E,Lt),e(E,be),e(be,xt),e(E,Mt),e(i,Ft),de(G,i,null),e(i,zt),e(i,_),e(_,Ht),e(_,Ce),e(Ce,Yt),e(_,Bt),e(_,De),e(De,Qt),e(_,Rt),e(i,Jt),e(i,b),e(b,Kt),e(b,Oe),e(Oe,Vt),e(b,Wt),e(b,Te),e(Te,Xt),e(b,Zt),e(i,ea),de(L,i,null),e(i,ta),e(i,x),e(x,aa),e(x,ke),e(ke,na),e(x,oa),e(i,sa),de(M,i,null),e(i,ra),e(i,u),e(u,ia),e(u,Ie),e(Ie,la),e(u,ha),e(u,qe),e(qe,ca),e(u,da),e(u,Ne),e(Ne,ua),e(u,fa),e(u,Ue),e(Ue,ya),e(u,ma),e(u,je),e(je,pa),e(u,Ea),e(u,Pe),e(Pe,va),e(u,ga),e(u,Ae),e(Ae,$a),e(u,wa),e(i,_a),de(F,i,null),e(i,ba),e(i,z),e(z,Ca),e(z,Se),e(Se,Da),e(z,Oa),e(i,Ta),e(i,v),e(v,H),e(H,Ge),e(Ge,ka),e(H,Ia),e(H,C),e(C,Le),e(Le,qa),e(C,Na),e(C,xe),e(xe,Ua),e(C,ja),e(C,Me),e(Me,Pa),e(v,Aa),e(v,D),e(D,Fe),e(Fe,Sa),e(D,Ga),e(D,ze),e(ze,La),e(D,xa),e(D,O),e(O,He),e(He,Ma),e(O,Fa),e(O,Ye),e(Ye,za),e(O,Ha),e(O,Be),e(Be,Ya),e(v,Ba),e(v,p),e(p,Qe),e(Qe,Qa),e(p,Ra),e(p,Re),e(Re,Ja),e(p,Ka),e(p,Je),e(Je,Va),e(p,Wa),e(p,Ke),e(Ke,Xa),e(p,Za),e(p,Ve),e(Ve,en),e(p,tn),e(v,an),e(v,f),e(f,We),e(We,nn),e(f,on),e(f,Xe),e(Xe,sn),e(f,rn),e(f,Ze),e(Ze,ln),e(f,hn),e(f,et),e(et,cn),e(f,dn),e(f,tt),e(tt,un),e(f,fn),e(f,at),e(at,yn),e(f,mn),e(f,nt),e(nt,pn),e(f,En),e(i,vn),de(Y,i,null),e(i,gn),e(i,T),e(T,$n),e(T,ot),e(ot,wn),e(T,_n),e(T,st),e(st,bn),e(T,Cn),e(i,Dn),e(i,k),e(k,V),e(V,rt),e(rt,On),e(V,Tn),e(k,kn),e(k,W),e(W,it),e(it,In),e(W,qn),e(k,Nn),e(k,X),e(X,lt),e(lt,Un),e(X,jn),e(i,Pn),e(i,I),e(I,An),e(I,ht),e(ht,Sn),e(I,Gn),e(I,ct),e(ct,Ln),e(I,xn),e(i,Mn),e(i,B),e(B,Fn),e(B,dt),e(dt,zn),e(B,Hn),e(i,Yn),e(i,g),e(g,Bn),e(g,ut),e(ut,Qn),e(g,Rn),e(g,ft),e(ft,Jn),e(g,Kn),e(g,yt),e(yt,Vn),e(g,Wn),e(i,Xn),de(Q,i,null),bt(d,pt,R),bt(d,q,R),e(q,N),e(N,Zn),e(q,eo),e(q,U),e(U,to),Et=!0},p:Es,i(d){Et||(ue(G.$$.fragment,d),ue(L.$$.fragment,d),ue(M.$$.fragment,d),ue(F.$$.fragment,d),ue(Y.$$.fragment,d),ue(Q.$$.fragment,d),Et=!0)},o(d){fe(G.$$.fragment,d),fe(L.$$.fragment,d),fe(M.$$.fragment,d),fe(F.$$.fragment,d),fe(Y.$$.fragment,d),fe(Q.$$.fragment,d),Et=!1},d(d){n(Ee),d&&S.d(),d&&n(mt),d&&n(i),ye(G),ye(L),ye(M),ye(F),ye(Y),ye(Q),d&&n(pt),d&&n(q)}}}class Cs extends ds{constructor(S){super(),us(this,S,null,gs,fs,{})}}export{Cs as component};
diff --git a/docs/_app/immutable/nodes/20.9069807c.js b/docs/_app/immutable/nodes/20.9069807c.js
new file mode 100644
index 0000000..5a7c38d
--- /dev/null
+++ b/docs/_app/immutable/nodes/20.9069807c.js
@@ -0,0 +1,168 @@
+import{s as Ye,I as Be,e as Ae,a as i,f as s,l as je,x as Qe,J as Je,d as c,c as o,g as r,h as V,r as l,m as Ue,j as N,k as Ge,u as a,i as W,v as Re}from"../chunks/scheduler.d7e45cc8.js";import{S as Ke,i as Ve,b as S,d as A,m as j,a as U,t as G,e as F}from"../chunks/index.77720afb.js";import{H as z,g as We}from"../chunks/github.64534d2c.js";import{t as Y}from"../chunks/typescript.09c48802.js";import{b as Fe}from"../chunks/paths.d4a6803e.js";function Xe(ze){let y,B,Q,e,f,Te='
Entity Class
',X,b,be=`Entities in Nymph work pretty much like regular objects, and this is due to
+ the Entity class. The Entity class constructor returns a proxy to allow
+ accessing data on it just like a regular object while keeping track of
+ changes and only unserializing data from the DB when it's first accessed.
+ Instance methods and properties begin with "$" to differentiate them from
+ data.`,Z,E,Ee=`In the client, assigning a property internally marks that property as
+ "dirty", and calling $patch will push just the changed
+ properties up to the server, whereas $save would push all properties.`,ee,_,_e=`Entities can be organized using tags. To add, remove, and check tags, the
+ methods $addTag, $removeTag, and
+ $hasTag are used, respectively. Each takes any number of tags as
+ arguments.`,te,m,ae,M,Me=`Entities that have been saved inside another entity's property are loaded as
+ "sleeping references". This means their data is not actually pulled from the
+ database/server. It will "wake up" when you use $wake on it or
+ $wakeAll on the entity that contains it.`,ne,C,Ce=`To clear the cache of referenced entities, so that the next time one is
+ awoken, it will be pulled from the database, use the $clearCache
+ method in Node.js or the $refresh method in the client.`,ie,p,oe,x,xe=`Much like clearing the entity cache, you may need to refresh the entity's
+ own data in Node.js. Use the $refresh method, just like in the client,
+ for this.`,se,g,re,k,ke=`To save an entity, use the $save method. Likewise, to delete
+ the entity, use the $delete method. You can also call the
+ saveEntity,
+ deleteEntity, and deleteEntityByID methods of
+ Nymph. The Entity class uses these methods.`,le,v,ce,H,He=`Entities can't be checked using the == operator. Instead, you can
+ use the following entity methods.`,de,L,Le=`
$is - Perform a less strict comparison of two entities
+ (basically a GUID check). To return true, the entities must meet the
+ following criteria.
+
They must be entities.
They must have equal GUIDs, or both can have no GUID.
If they have no GUIDs, their data and tags must be equal.
$equals - Perform a more strict comparison of two entities
+ (basically a GUID + data + tags check). To return true, the entities must
+ meet the following criteria. Unlike $is, this method can't be
+ used on sleeping references.
+
They must be entities.
They must have equal GUIDs, or both can have no GUID.
Their data and tags must be equal.
$inArray - Check whether the entity is in an array. Takes two
+ arguments, the array and a boolean strict. If
+ strict
+ is false or undefined, the function uses $is to compare, and
+ if it's true, the function uses $equals.
$arraySearch - Search an array for the entity and return its
+ index, or -1 if it's not found. Takes two arguments, the
+ array and a boolean
+ strict. If strict is false or undefined, the
+ function uses
+ $is
+ to compare, and if it's true, the function uses $equals. This
+ method may return 0, which evaluates to false, so you should use
+ $inArray if you are only checking whether the entity is in the
+ array.
`,he,$,ue,I,Ie=`Client side Nymph entities can use the $serverCall method to
+ call methods on a server side instance of the entity.
+ $serverCall expects three parameters.`,ye,q,qe=`
method - the name of the method to call on the server side object.
params - an array of the parameters to pass to the method.
stateless - if set to true, the method won't update the entity
+ with the returned server side representation.
`,fe,D,De=`Normally, when you use this method, just before the promise is fulfilled,
+ the entity's data will be replaced with that of the entity on the server
+ side after the method was run. This will cause any awoken entities in the
+ data of your entity to be replaced with sleeping entities, so you will have
+ to run $readyAll again. If you know that the server side method
+ will not change any of the data on the entity, you can set
+ stateless to true.`,me,P,Pe="You can also call static methods on the server with serverCallStatic.",pe,O,Oe=`In order to be called from the client side, the method must be listed in the
+ $clientEnabledMethods or
+ clientEnabledStaticMethods property in the Node.js class. This
+ guards against a user submitting tailored requests to perform potentially
+ dangerous tasks on the server side. If the method is not listed, the request
+ will fail with a 403 Forbidden status.`,ge,w,J,d,h,ve,$e,u,we,R;return m=new z({props:{language:Y,code:`const entity = await MyEntity.factory();
+
+entity.$addTag('foo', 'bar');
+entity.$hasTag('foo'); // True
+
+entity.$removeTag('foo', 'bar');
+entity.$hasTag('foo'); // False`}}),p=new z({props:{language:Y,code:`// Create some entities.
+let entity = await MyEntity.factory();
+entity.foo = await MyEntity.factory();
+entity.foo.bar = 'Old value.';
+await entity.foo.$save();
+await entity.$save();
+
+// Get a copy of the referenced entity.
+let instOfFoo = await nymph.getEntity(
+ { class: MyEntity },
+ { type: '&', guid: entity.foo.guid }
+);
+// And change a value on it.
+instOfFoo.bar = 'New value.';
+await instOfFoo.$save();
+
+console.log(entity.foo.bar); // Outputs 'Old value.'
+// If on Node.js
+entity.$clearCache();
+await entity.foo.$wake();
+// Else if on the client
+await entity.$refresh();
+await entity.foo.$wake();
+// End if
+console.log(entity.foo.bar); // Outputs 'New value.'`}}),g=new z({props:{language:Y,code:`// Create an entity.
+const entity = await MyEntity.factory();
+entity.foo = 'Old value.';
+await entity.$save();
+
+// Get a copy of the entity.
+const instOfEnt = await nymph.getEntity(
+ { class: MyEntity },
+ { type: '&', guid: entity.guid }
+);
+// And change a value on it.
+instOfEnt.foo = 'New value.';
+await instOfEnt.$save();
+
+console.log(entity.foo); // Outputs 'Old value.'
+await entity.$refresh();
+console.log(entity.foo); // Outputs 'New value.'`}}),v=new z({props:{language:Y,code:`const entity = await MyEntity.factory();
+
+// Save the entity.
+await entity.$save();
+// or
+await nymph.saveEntity(entity);
+// or
+await nymph.saveEntities([entity]);
+
+// (Client only.) Save only the data that has changed.
+await entity.$patch();
+// or
+await nymph.patchEntity(entity);
+// or
+await nymph.patchEntities([entity]);
+
+// Delete the entity.
+await entity.$delete();
+// or
+await nymph.deleteEntity(entity);
+// or
+await nymph.deleteEntities([entity]);`}}),$=new z({props:{language:Y,code:`// Assuming the entity with GUID 'a4c1591d6ea91c8450d2d360' exists.
+let entity = await MyEntity.factory('a4c1591d6ea91c8450d2d360');
+let entity2 = await MyEntity.factory('a4c1591d6ea91c8450d2d360');
+
+entity.$is(entity2); // True
+entity.$equals(entity2); // True
+
+entity2.someProp = 'some new value';
+entity.$is(entity2); // True
+entity.$equals(entity2); // False
+
+const arr = [null, null, entity2];
+entity.$arraySearch(arr); // 2
+entity.$inArray(arr); // True
+entity.$arraySearch(arr, true); // -1
+entity.$inArray(arr, true); // false`}}),w=new z({props:{language:Y,code:`// You can use $serverCall and serverCallStatic directly.
+try {
+ const success: boolean = await todo.$serverCall('$archive', []);
+ if (!success) {
+ alert("Couldn't archive " + todo.name);
+ }
+} catch (e) {
+ alert('Error: ' + e.textStatus + "
+Couldn't archive " + todo.name);
+}
+
+// Or you can define methods like this in your client class.
+class Todo extends Entity {
+ // ...
+
+ static async archiveAllDone(onlyOlderThanDay: boolean): Promise {
+ return await this.serverCallStatic('archiveAllDone', [onlyOlderThanDay]);
+ }
+
+ async $archive(): Promise {
+ return await this.$serverCall('archive', []);
+ }
+}
+
+// You'd use them like this.
+const success = await Todo.archiveAllDone(true);
+
+// And
+const todo = await Todo.factory(someGuid);
+const success = await todo.$archive();`}}),{c(){y=new Be(!1),B=Ae(),Q=i(),e=s("section"),f=s("header"),f.innerHTML=Te,X=i(),b=s("p"),b.textContent=be,Z=i(),E=s("p"),E.innerHTML=Ee,ee=i(),_=s("p"),_.innerHTML=_e,te=i(),S(m.$$.fragment),ae=i(),M=s("p"),M.innerHTML=Me,ne=i(),C=s("p"),C.innerHTML=Ce,ie=i(),S(p.$$.fragment),oe=i(),x=s("p"),x.innerHTML=xe,se=i(),S(g.$$.fragment),re=i(),k=s("p"),k.innerHTML=ke,le=i(),S(v.$$.fragment),ce=i(),H=s("p"),H.innerHTML=He,de=i(),L=s("ul"),L.innerHTML=Le,he=i(),S($.$$.fragment),ue=i(),I=s("p"),I.innerHTML=Ie,ye=i(),q=s("ul"),q.innerHTML=qe,fe=i(),D=s("p"),D.innerHTML=De,me=i(),P=s("p"),P.innerHTML=Pe,pe=i(),O=s("p"),O.innerHTML=Oe,ge=i(),S(w.$$.fragment),J=i(),d=s("section"),h=s("a"),ve=je("Previous: Subscribing to Queries"),$e=i(),u=s("a"),we=je("Next: Defining Entities"),this.h()},l(n){const T=Qe("svelte-24q1tq",document.head);y=Je(T,!1),B=Ae(),T.forEach(c),Q=o(n),e=r(n,"SECTION",{});var t=V(e);f=r(t,"HEADER",{class:!0,"data-svelte-h":!0}),l(f)!=="svelte-og671h"&&(f.innerHTML=Te),X=o(t),b=r(t,"P",{"data-svelte-h":!0}),l(b)!=="svelte-110h7us"&&(b.textContent=be),Z=o(t),E=r(t,"P",{"data-svelte-h":!0}),l(E)!=="svelte-y8afi6"&&(E.innerHTML=Ee),ee=o(t),_=r(t,"P",{"data-svelte-h":!0}),l(_)!=="svelte-i83m4k"&&(_.innerHTML=_e),te=o(t),A(m.$$.fragment,t),ae=o(t),M=r(t,"P",{"data-svelte-h":!0}),l(M)!=="svelte-ndkimk"&&(M.innerHTML=Me),ne=o(t),C=r(t,"P",{"data-svelte-h":!0}),l(C)!=="svelte-1b8l87g"&&(C.innerHTML=Ce),ie=o(t),A(p.$$.fragment,t),oe=o(t),x=r(t,"P",{"data-svelte-h":!0}),l(x)!=="svelte-bvqxix"&&(x.innerHTML=xe),se=o(t),A(g.$$.fragment,t),re=o(t),k=r(t,"P",{"data-svelte-h":!0}),l(k)!=="svelte-m1pah4"&&(k.innerHTML=ke),le=o(t),A(v.$$.fragment,t),ce=o(t),H=r(t,"P",{"data-svelte-h":!0}),l(H)!=="svelte-ofuybv"&&(H.innerHTML=He),de=o(t),L=r(t,"UL",{"data-svelte-h":!0}),l(L)!=="svelte-k6om4g"&&(L.innerHTML=Le),he=o(t),A($.$$.fragment,t),ue=o(t),I=r(t,"P",{"data-svelte-h":!0}),l(I)!=="svelte-17ufvy7"&&(I.innerHTML=Ie),ye=o(t),q=r(t,"UL",{"data-svelte-h":!0}),l(q)!=="svelte-11n6zj9"&&(q.innerHTML=qe),fe=o(t),D=r(t,"P",{"data-svelte-h":!0}),l(D)!=="svelte-7sz2fh"&&(D.innerHTML=De),me=o(t),P=r(t,"P",{"data-svelte-h":!0}),l(P)!=="svelte-h3sxmn"&&(P.innerHTML=Pe),pe=o(t),O=r(t,"P",{"data-svelte-h":!0}),l(O)!=="svelte-xe32i4"&&(O.innerHTML=Oe),ge=o(t),A(w.$$.fragment,t),t.forEach(c),J=o(n),d=r(n,"SECTION",{class:!0});var K=V(d);h=r(K,"A",{href:!0,class:!0,style:!0});var Ne=V(h);ve=Ue(Ne,"Previous: Subscribing to Queries"),Ne.forEach(c),$e=o(K),u=r(K,"A",{href:!0,class:!0,style:!0});var Se=V(u);we=Ue(Se,"Next: Defining Entities"),Se.forEach(c),K.forEach(c),this.h()},h(){document.title="Entity Class - User Guide - Nymph.js",y.a=B,N(f,"class","major"),N(h,"href",Fe+"/user-guide/subscribing-to-queries"),N(h,"class","button"),Ge(h,"margin",".5em"),N(u,"href",Fe+"/user-guide/defining-entities"),N(u,"class","button"),Ge(u,"margin",".5em"),N(d,"class","page-steps")},m(n,T){y.m(We,document.head),a(document.head,B),W(n,Q,T),W(n,e,T),a(e,f),a(e,X),a(e,b),a(e,Z),a(e,E),a(e,ee),a(e,_),a(e,te),j(m,e,null),a(e,ae),a(e,M),a(e,ne),a(e,C),a(e,ie),j(p,e,null),a(e,oe),a(e,x),a(e,se),j(g,e,null),a(e,re),a(e,k),a(e,le),j(v,e,null),a(e,ce),a(e,H),a(e,de),a(e,L),a(e,he),j($,e,null),a(e,ue),a(e,I),a(e,ye),a(e,q),a(e,fe),a(e,D),a(e,me),a(e,P),a(e,pe),a(e,O),a(e,ge),j(w,e,null),W(n,J,T),W(n,d,T),a(d,h),a(h,ve),a(d,$e),a(d,u),a(u,we),R=!0},p:Re,i(n){R||(U(m.$$.fragment,n),U(p.$$.fragment,n),U(g.$$.fragment,n),U(v.$$.fragment,n),U($.$$.fragment,n),U(w.$$.fragment,n),R=!0)},o(n){G(m.$$.fragment,n),G(p.$$.fragment,n),G(g.$$.fragment,n),G(v.$$.fragment,n),G($.$$.fragment,n),G(w.$$.fragment,n),R=!1},d(n){n&&(y.d(),c(Q),c(e),c(J),c(d)),c(B),F(m),F(p),F(g),F(v),F($),F(w)}}}class it extends Ke{constructor(y){super(),Ve(this,y,null,Xe,Ye,{})}}export{it as component};
diff --git a/docs/_app/immutable/nodes/21.2ea02312.js b/docs/_app/immutable/nodes/21.2ea02312.js
deleted file mode 100644
index 4bb51ec..0000000
--- a/docs/_app/immutable/nodes/21.2ea02312.js
+++ /dev/null
@@ -1,227 +0,0 @@
-import{S as uE,i as EE,s as vE,R as mE,e as hE,a as d,k as a,q as l,y as m,F as gE,T as pE,h as e,c as s,l as r,m as o,r as n,z as g,p as Uc,n as $,C as t,b as gl,A as p,D as _E,g as _,d as y,B as T}from"../chunks/index.d7cc8d8b.js";import{H as b,g as yE}from"../chunks/github.df9008b1.js";import{t as D}from"../chunks/typescript.7dd1ec19.js";import{b as cE}from"../chunks/paths.d307dac8.js";function TE(fE){let Jt,ze,nl,i,Ee,ve,pl,_l,Re,yl,Tl,me,qe,bl,Dl,w,$l,ke,wl,Cl,Ge,Ol,zl,Ae,Rl,ql,kl,jt,Gl,ge,Pe,Al,Pl,at,Nl,Ne,Bl,Fl,Be,Sl,Hl,Il,pe,Qt,Fe,C,Se,Ul,xl,He,Jl,jl,Ie,Ql,Ml,Ue,Ll,Yl,E,O,xe,Wl,Xl,Je,Vl,Kl,je,Zl,tn,Qe,en,an,z,Me,rn,on,Le,ln,nn,Ye,dn,sn,Mt,hn,We,cn,fn,un,R,Xe,En,vn,Ve,mn,gn,Ke,pn,_n,Ze,yn,Tn,q,ta,bn,Dn,ea,$n,wn,aa,Cn,On,Lt,zn,ra,Rn,qn,kn,k,oa,Gn,An,la,Pn,Nn,na,Bn,Fn,da,Sn,Hn,G,sa,In,Un,ia,xn,Jn,ha,jn,Qn,ca,Mn,Ln,A,fa,Yn,Wn,ua,Xn,Vn,Ea,Kn,Zn,va,td,ed,P,ma,ad,rd,ga,od,ld,pa,nd,dd,_a,sd,id,N,ya,hd,cd,Ta,fd,ud,ba,Ed,vd,Da,md,gd,Yt,pd,$a,_d,yd,Td,_e,Wt,wa,rt,Ca,bd,Dd,Oa,$d,wd,za,Cd,Od,B,ot,Ra,zd,Rd,qa,qd,kd,ka,Gd,Ad,lt,Ga,Pd,Nd,Aa,Bd,Fd,Pa,Sd,Hd,nt,Na,Id,Ud,Ba,xd,Jd,Fa,jd,Qd,dt,Sa,Md,Ld,Ha,Yd,Wd,Ia,Xd,Vd,F,Kd,Ua,Zd,ts,xa,es,as,Ja,rs,os,ls,ye,Xt,ja,S,Qa,ns,ds,Ma,ss,is,La,hs,cs,Ya,fs,us,f,H,Wa,Es,vs,Xa,ms,gs,Va,Ka,xc="{type: '&', guid: '790229ae527f1511b3120b71'}",ps,_s,Za,tr,Jc="entity.guid = '790229ae527f1511b3120b71'",ys,Ts,I,er,bs,Ds,ar,$s,ws,rr,or,jc="{type: '&', tag: 'foobar'}",Cs,Os,lr,nr,Qc="entity.$addTag('foobar')",zs,Rs,U,dr,qs,ks,sr,Gs,As,ir,hr,Mc="{type: '&', defined: 'foo'}",Ps,Ns,cr,fr,Lc="entity.foo = 0",Bs,Fs,x,ur,Ss,Hs,Er,Is,Us,vr,mr,Yc="{type: '&', truthy: 'foo'}",xs,Js,gr,pr,Wc="entity.foo = 1",js,Qs,J,_r,Ms,Ls,yr,Ys,Ws,Tr,br,Xc="{type: '&', equal: ['foo', 0]}",Xs,Vs,Dr,$r,Vc="entity.foo = 0",Ks,Zs,j,wr,ti,ei,Cr,ai,ri,Or,zr,Kc="{type: '&', contain: ['foo', 'bar']}",oi,li,Rr,qr,Zc="entity.foo = ['bar', 'baz']",ni,di,Q,kr,si,ii,Gr,hi,ci,Ar,Pr,tf="{type: '&', match: ['foo', 'bar.*z']}",fi,ui,Nr,Br,ef="entity.foo = 'foobarbaz'",Ei,vi,M,Fr,mi,gi,Sr,pi,_i,Hr,Ir,af="{type: '&', imatch: ['foo', 'BaR.*Z']}",yi,Ti,Ur,xr,rf="entity.foo = 'foobarbaz'",bi,Di,L,Jr,$i,wi,jr,Ci,Oi,Qr,Mr,of="{type: '&', like: ['foo', 'f%bar_az']}",zi,Ri,Lr,Yr,lf="entity.foo = 'foobarbaz'",qi,ki,Y,Wr,Gi,Ai,Xr,Pi,Ni,Vr,Kr,nf="{type: '&', ilike: ['foo', 'F%bAr_aZ']}",Bi,Fi,Zr,to,df="entity.foo = 'foobarbaz'",Si,Hi,W,eo,Ii,Ui,ao,xi,Ji,ro,oo,sf="{type: '&', gt: ['foo', 5]}",ji,Qi,lo,no,hf="entity.foo = 6",Mi,Li,X,so,Yi,Wi,io,Xi,Vi,ho,co,cf="{type: '&', gte: ['foo', 6]}",Ki,Zi,fo,uo,ff="entity.foo = 6",th,eh,V,Eo,ah,rh,vo,oh,lh,mo,go,uf="{type: '&', lt: ['foo', 7]}",nh,dh,po,_o,Ef="entity.foo = 6",sh,ih,K,yo,hh,ch,To,fh,uh,bo,Do,vf="{type: '&', lte: ['foo', 6]}",Eh,vh,$o,wo,mf="entity.foo = 6",mh,gh,Z,Co,ph,_h,Oo,yh,Th,zo,Ro,gf="{type: '&', ref: ['foo', '790229ae527f1511b3120b71']}",bh,Dh,qo,ko,pf="entity.foo = await Entity.factory('790229ae527f1511b3120b71')",$h,wh,tt,Go,Ch,Oh,Ao,zh,Rh,Po,No,_f="{type: '&', qref: ['foo', [{class: Entity}, {type: '&', equal: ['name', 'Foobar']}]]}",qh,kh,Bo,Fo,yf="entity.foo = await nymph.getEntity({class: Entity}, {type: '&', equal: ['name', 'Foobar']})",Gh,Ah,et,So,Ph,Nh,Ho,Bh,Fh,Io,Uo,Tf="{type: '&', selector: {type: '|', tag: ['foo', 'bar']}}",Sh,Hh,xo,Jo,bf="entity.$addTag('bar')",Ih,Uh,Vt,xh,it,Jh,jh,Qh,Kt,Mh,Te,jo,Lh,Yh,Qo,Wh,Xh,Mo,Vh,Kh,Zt,Zh,Lo,tc,ec,te,ac,Yo,rc,oc,ee,lc,Wo,nc,dc,ae,sc,Xo,ic,hc,re,cc,Vo,fc,uc,oe,Ec,Ko,vc,mc,le,gc,Zo,pc,_c,ne,yc,tl,Tc,bc,de,Dc,el,$c,wc,se,Cc,al,Oc,zc,ie,Rc,rl,qc,kc,he,Gc,ol,Ac,Pc,ce,Nc,ll,Bc,Fc,fe,dl,st,ht,Sc,Hc,ct,Ic,sl;return jt=new b({props:{language:D,code:`const baz = await FoobarBaz.factory(guid);
-if (baz.guid == null) {
- console.error("Can't find the Foobar Baz!");
-}
-
-// Tilmeld's User class has a username factory function.
-const cronUser = await User.factoryUsername('cron');
-if (cronUser.guid == null) {
- console.error("Can't find the cron user!");
-}`}}),Kt=new b({props:{language:D,code:`{
- type: '&',
- gte: ['cdate', null, '-1 day']
-}`}}),Zt=new b({props:{language:D,code:"const entity = await nymph.getEntity({ class: FoobarBaz });"}}),te=new b({props:{language:D,code:`const entity = await nymph.getEntity({
- class: FoobarBaz,
- reverse: true
-});`}}),ee=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz
- },
- {
- type: '&',
- tag: 'baz'
- }
-);`}}),ae=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz,
- reverse: true,
- limit: 5
- },
- {
- type: '&',
- tag: ['bar', 'baz']
- }
-);`}}),re=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz,
- reverse: true,
- limit: 5,
- sort: 'mdate'
- },
- {
- type: '&',
- tag: ['bar', 'baz']
- }
-);`}}),oe=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz,
- limit: 5,
- offset: 10,
- sort: 'name'
- },
- {
- type: '&',
- tag: ['baz']
- }
-);`}}),le=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz
- },
- {
- type: '&',
- tag: 'baz',
- defined: 'name'
- }
-);`}}),ne=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz
- },
- {
- type: '&',
- tag: 'baz',
- '!defined': 'name'
- }
-);`}}),de=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz
- },
- {
- type: '|',
- selector: [
- {
- type: '&',
- tag: 'baz',
- '!defined': 'name'
- },
- {
- type: '&',
- tag: 'bar',
- defined: 'name'
- }
- ]
- }
-);`}}),se=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz
- },
- {
- type: '&',
- tag: 'baz'
- },
- {
- type: '|',
- defined: ['firstName', 'lastName']
- }
-);`}}),ie=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz
- },
- {
- type: '&',
- tag: 'baz',
- gt: ['cdate', null, '-1 day']
- }
-);`}}),he=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- {
- class: FoobarBaz
- },
- { type: '&', tag: 'baz', defined: 'name' },
- {
- type: '!|', // at least one must be false
- gte: ['age', 22],
- gt: ['pay', 8]
- }
-);`}}),ce=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- { class: FoobarBaz },
- { type: '&', tag: 'baz' },
- {
- type: '|',
- equal: [
- ['firstName', 'Clark'],
- ['firstName', 'James']
- ],
- match: [
- ['firstName', '^Chris(topher)?$'],
- ['firstName', '^Ja(ke|cob)$']
- ]
- }
-);`}}),fe=new b({props:{language:D,code:`const entities = await nymph.getEntities(
- { class: FoobarBaz },
- {
- type: '&',
- tag: 'baz',
- qref: [
- 'user',
- [
- { class: User },
- {
- type: '|',
- like: [
- ['name', 'John %'],
- ['name', 'James %']
- ]
- }
- ]
- ]
- }
-);`}}),{c(){Jt=new mE(!1),ze=hE(),nl=d(),i=a("section"),Ee=a("header"),ve=a("h1"),pl=l("Entity Querying"),_l=d(),Re=a("p"),yl=l("The real power behind Nymph is the entity querying system."),Tl=d(),me=a("header"),qe=a("h2"),bl=l("Factory Method"),Dl=d(),w=a("p"),$l=l("The "),ke=a("code"),wl=l("Entity"),Cl=l(` class' factory method can take a GUID as an
- argument. You can provide other factory functions that can take things as
- well. For example, the `),Ge=a("code"),Ol=l("User"),zl=l(` class in Tilmeld has a
- `),Ae=a("code"),Rl=l("factoryUsername"),ql=l(` method that takes a username. The method will return
- a new entity if the queried entity is not found. You can determine if it was
- found by checking that its GUID is not null.`),kl=d(),m(jt.$$.fragment),Gl=d(),ge=a("header"),Pe=a("h2"),Al=l("Nymph's Query Language"),Pl=d(),at=a("p"),Nl=l("The powerful way of querying entities is Nymph's "),Ne=a("code"),Bl=l("getEntities"),Fl=l(`
- and `),Be=a("code"),Sl=l("getEntity"),Hl=l(" methods. The first argument is an Options object."),Il=d(),pe=a("div"),Qt=a("table"),Fe=a("thead"),C=a("tr"),Se=a("th"),Ul=l("Option"),xl=d(),He=a("th"),Jl=l("Type"),jl=d(),Ie=a("th"),Ql=l("Default"),Ml=d(),Ue=a("th"),Ll=l("Description"),Yl=d(),E=a("tbody"),O=a("tr"),xe=a("td"),Wl=l("class"),Xl=d(),Je=a("td"),Vl=l("typeof Entity"),Kl=d(),je=a("td"),Zl=l("Entity"),tn=d(),Qe=a("td"),en=l("The Entity class to query."),an=d(),z=a("tr"),Me=a("td"),rn=l("limit"),on=d(),Le=a("td"),ln=l("number"),nn=d(),Ye=a("td"),dn=l("undefined"),sn=d(),Mt=a("td"),hn=l("The limit of entities to be returned. Not needed when using "),We=a("code"),cn=l("getEntity"),fn=l(", as it always returns only one."),un=d(),R=a("tr"),Xe=a("td"),En=l("offset"),vn=d(),Ve=a("td"),mn=l("number"),gn=d(),Ke=a("td"),pn=l("0"),_n=d(),Ze=a("td"),yn=l(`The offset from the first matching entity, in order, to start
- retrieving.`),Tn=d(),q=a("tr"),ta=a("td"),bn=l("reverse"),Dn=d(),ea=a("td"),$n=l("boolean"),wn=d(),aa=a("td"),Cn=l("false"),On=d(),Lt=a("td"),zn=l(`If true, entities will be retrieved from newest to oldest/largest
- to smallest (with regard to `),ra=a("code"),Rn=l("sort"),qn=l(")."),kn=d(),k=a("tr"),oa=a("td"),Gn=l("sort"),An=d(),la=a("td"),Pn=l("'cdate' | 'mdate' | string"),Nn=d(),na=a("td"),Bn=l("'cdate'"),Fn=d(),da=a("td"),Sn=l(`How to sort the entities. Should be "cdate", "mdate", or the name
- of a property.`),Hn=d(),G=a("tr"),sa=a("td"),In=l("return"),Un=d(),ia=a("td"),xn=l("'entity' | 'guid' | 'count'"),Jn=d(),ha=a("td"),jn=l("'entity'"),Qn=d(),ca=a("td"),Mn=l(`What to return, the entities with their data, just the GUIDs, or
- just a count.`),Ln=d(),A=a("tr"),fa=a("td"),Yn=l("source"),Wn=d(),ua=a("td"),Xn=l("string"),Vn=d(),Ea=a("td"),Kn=l("undefined"),Zn=d(),va=a("td"),td=l(`Will be 'client' if the query came from a REST request or the
- PubSub server. (Mainly used in Tilmeld for access control.)`),ed=d(),P=a("tr"),ma=a("td"),ad=l("skipCache"),rd=d(),ga=a("td"),od=l("boolean"),ld=d(),pa=a("td"),nd=l("false"),dd=d(),_a=a("td"),sd=l(`If true, Nymph will skip the cache and retrieve the entity from the
- DB.`),id=d(),N=a("tr"),ya=a("td"),hd=l("skipAc"),cd=d(),Ta=a("td"),fd=l("boolean"),ud=d(),ba=a("td"),Ed=l("false"),vd=d(),Da=a("td"),md=l(`If true, Tilmeld will not filter returned entities according to
- access controls. (If Tilmeld is installed.) (This is always set to
- false by the REST endpoint and PubSub server.)`),gd=d(),Yt=a("p"),pd=l(`Every argument following the Options is a Selector object. They contain
- clauses and a type. An entity must match each selector to be returned. There
- are four selector types, and they are defined on the `),$a=a("code"),_d=l("type"),yd=l(" property."),Td=d(),_e=a("div"),Wt=a("table"),wa=a("thead"),rt=a("tr"),Ca=a("th"),bd=l("Type"),Dd=d(),Oa=a("th"),$d=l("Name"),wd=d(),za=a("th"),Cd=l("Description"),Od=d(),B=a("tbody"),ot=a("tr"),Ra=a("td"),zd=l("&"),Rd=d(),qa=a("td"),qd=l("And"),kd=d(),ka=a("td"),Gd=l("All clauses in the selector must match."),Ad=d(),lt=a("tr"),Ga=a("td"),Pd=l("|"),Nd=d(),Aa=a("td"),Bd=l("Or"),Fd=d(),Pa=a("td"),Sd=l("At least one clause in the selector must match."),Hd=d(),nt=a("tr"),Na=a("td"),Id=l("!&"),Ud=d(),Ba=a("td"),xd=l("Not And"),Jd=d(),Fa=a("td"),jd=l("All clauses in the selector must not match."),Qd=d(),dt=a("tr"),Sa=a("td"),Md=l("!|"),Ld=d(),Ha=a("td"),Yd=l("Not Or"),Wd=d(),Ia=a("td"),Xd=l("At least one clause in the selector must not match."),Vd=d(),F=a("p"),Kd=l("The other properties of the Selector are clauses. Clauses use the form "),Ua=a("code"),Zd=l("name: value"),ts=l(`, or
- `),xa=a("code"),es=l("name: [value1, value2, ...]"),as=l(`. They can be negated by prepending
- a bang (!) to the name, like `),Ja=a("code"),rs=l("'!name': value"),os=l(`. A clause that has
- multiple values is considered as multiple clauses in terms of matching for
- "or" selectors.`),ls=d(),ye=a("div"),Xt=a("table"),ja=a("thead"),S=a("tr"),Qa=a("th"),ns=l("Property"),ds=d(),Ma=a("th"),ss=l("Description"),is=d(),La=a("th"),hs=l("Example"),cs=d(),Ya=a("th"),fs=l("Works On"),us=d(),f=a("tbody"),H=a("tr"),Wa=a("td"),Es=l("guid"),vs=d(),Xa=a("td"),ms=l("The entity's GUID is equal."),gs=d(),Va=a("td"),Ka=a("code"),ps=l(xc),_s=d(),Za=a("td"),tr=a("code"),ys=l(Jc),Ts=d(),I=a("tr"),er=a("td"),bs=l("tag"),Ds=d(),ar=a("td"),$s=l("The entity has the tag."),ws=d(),rr=a("td"),or=a("code"),Cs=l(jc),Os=d(),lr=a("td"),nr=a("code"),zs=l(Qc),Rs=d(),U=a("tr"),dr=a("td"),qs=l("defined"),ks=d(),sr=a("td"),Gs=l("The named property is not undefined."),As=d(),ir=a("td"),hr=a("code"),Ps=l(Mc),Ns=d(),cr=a("td"),fr=a("code"),Bs=l(Lc),Fs=d(),x=a("tr"),ur=a("td"),Ss=l("truthy"),Hs=d(),Er=a("td"),Is=l("The named property evaluates to true."),Us=d(),vr=a("td"),mr=a("code"),xs=l(Yc),Js=d(),gr=a("td"),pr=a("code"),js=l(Wc),Qs=d(),J=a("tr"),_r=a("td"),Ms=l("equal"),Ls=d(),yr=a("td"),Ys=l(`The named property is defined and equals the value (their JSON
- strings are identical).`),Ws=d(),Tr=a("td"),br=a("code"),Xs=l(Xc),Vs=d(),Dr=a("td"),$r=a("code"),Ks=l(Vc),Zs=d(),j=a("tr"),wr=a("td"),ti=l("contain"),ei=d(),Cr=a("td"),ai=l(`The named property contains the value (its JSON string is found
- within the property's JSON string).`),ri=d(),Or=a("td"),zr=a("code"),oi=l(Kc),li=d(),Rr=a("td"),qr=a("code"),ni=l(Zc),di=d(),Q=a("tr"),kr=a("td"),si=l("match"),ii=d(),Gr=a("td"),hi=l(`The named property matches. Uses POSIX RegExp. Case sensitive. Must
- *not* be surrounded by any delimiters.`),ci=d(),Ar=a("td"),Pr=a("code"),fi=l(tf),ui=d(),Nr=a("td"),Br=a("code"),Ei=l(ef),vi=d(),M=a("tr"),Fr=a("td"),mi=l("imatch"),gi=d(),Sr=a("td"),pi=l(`The named property matches. Uses POSIX RegExp. Case insensitive.
- Must *not* be surrounded by any delimiters.`),_i=d(),Hr=a("td"),Ir=a("code"),yi=l(af),Ti=d(),Ur=a("td"),xr=a("code"),bi=l(rf),Di=d(),L=a("tr"),Jr=a("td"),$i=l("like"),wi=d(),jr=a("td"),Ci=l(`The named property matches. Uses % for variable length wildcard and
- _ for single character wildcard. Case sensitive.`),Oi=d(),Qr=a("td"),Mr=a("code"),zi=l(of),Ri=d(),Lr=a("td"),Yr=a("code"),qi=l(lf),ki=d(),Y=a("tr"),Wr=a("td"),Gi=l("ilike"),Ai=d(),Xr=a("td"),Pi=l(`The named property matches. Uses % for variable length wildcard and
- _ for single character wildcard. Case insensitive.`),Ni=d(),Vr=a("td"),Kr=a("code"),Bi=l(nf),Fi=d(),Zr=a("td"),to=a("code"),Si=l(df),Hi=d(),W=a("tr"),eo=a("td"),Ii=l("gt"),Ui=d(),ao=a("td"),xi=l("The named property is greater than the value."),Ji=d(),ro=a("td"),oo=a("code"),ji=l(sf),Qi=d(),lo=a("td"),no=a("code"),Mi=l(hf),Li=d(),X=a("tr"),so=a("td"),Yi=l("gte"),Wi=d(),io=a("td"),Xi=l("The named property is greater than or equal to the value."),Vi=d(),ho=a("td"),co=a("code"),Ki=l(cf),Zi=d(),fo=a("td"),uo=a("code"),th=l(ff),eh=d(),V=a("tr"),Eo=a("td"),ah=l("lt"),rh=d(),vo=a("td"),oh=l("The named property is less than the value."),lh=d(),mo=a("td"),go=a("code"),nh=l(uf),dh=d(),po=a("td"),_o=a("code"),sh=l(Ef),ih=d(),K=a("tr"),yo=a("td"),hh=l("lte"),ch=d(),To=a("td"),fh=l("The named property is less than or equal to the value."),uh=d(),bo=a("td"),Do=a("code"),Eh=l(vf),vh=d(),$o=a("td"),wo=a("code"),mh=l(mf),gh=d(),Z=a("tr"),Co=a("td"),ph=l("ref"),_h=d(),Oo=a("td"),yh=l("The named property is the entity or contains the entity."),Th=d(),zo=a("td"),Ro=a("code"),bh=l(gf),Dh=d(),qo=a("td"),ko=a("code"),$h=l(pf),wh=d(),tt=a("tr"),Go=a("td"),Ch=l("qref"),Oh=d(),Ao=a("td"),zh=l(`The named property is an entity that matches the query or contains
- an entity that matches the query.`),Rh=d(),Po=a("td"),No=a("code"),qh=l(_f),kh=d(),Bo=a("td"),Fo=a("code"),Gh=l(yf),Ah=d(),et=a("tr"),So=a("td"),Ph=l("selector"),Nh=d(),Ho=a("td"),Bh=l(`A selector. (Keep in mind, you can also use an array of these, just
- like any other clause.)`),Fh=d(),Io=a("td"),Uo=a("code"),Sh=l(Tf),Hh=d(),xo=a("td"),Jo=a("code"),Ih=l(bf),Uh=d(),Vt=a("p"),xh=l(`The clauses "equal", "contain", "gt", "gte", "lt", and "lte" can also accept
- a third element. If value is null and the third element is a string, the
- third element will be used with `),it=a("a"),Jh=l("Locutus' strtotime function"),jh=l(` to set the value to a relative timestamp. For example, the following selector
- will look for all entities that were created in the last day.`),Qh=d(),m(Kt.$$.fragment),Mh=d(),Te=a("header"),jo=a("h2"),Lh=l("Querying Examples"),Yh=d(),Qo=a("p"),Wh=l(`So putting it all together, you can specify the options and selectors to
- find the exact entities you want.`),Xh=d(),Mo=a("p"),Vh=l("Get the first FoobarBaz entity."),Kh=d(),m(Zt.$$.fragment),Zh=d(),Lo=a("p"),tc=l("Get the latest FoobarBaz entity."),ec=d(),m(te.$$.fragment),ac=d(),Yo=a("p"),rc=l("Get all baz tagged entities, using the FoobarBaz class."),oc=d(),m(ee.$$.fragment),lc=d(),Wo=a("p"),nc=l("Get the five last created bar and baz tagged entities."),dc=d(),m(ae.$$.fragment),sc=d(),Xo=a("p"),ic=l("Get the five last modified bar and baz tagged entities."),hc=d(),m(re.$$.fragment),cc=d(),Vo=a("p"),fc=l(`Get the third page of sorted by name, baz tagged entities (if pages are 5
- entities long).`),uc=d(),m(oe.$$.fragment),Ec=d(),Ko=a("p"),vc=l("Get baz tagged entities with names."),mc=d(),m(le.$$.fragment),gc=d(),Zo=a("p"),pc=l("Get baz tagged entities without names."),_c=d(),m(ne.$$.fragment),yc=d(),tl=a("p"),Tc=l("Get baz tagged entities without names or bar tagged entities with names."),bc=d(),m(de.$$.fragment),Dc=d(),el=a("p"),$c=l("Get baz tagged entities with either first names or last names."),wc=d(),m(se.$$.fragment),Cc=d(),al=a("p"),Oc=l("Get baz tagged entities created in the last day."),zc=d(),m(ie.$$.fragment),Rc=d(),rl=a("p"),qc=l(`Get baz tagged entities with names, who either make only up to 8 dollars pay
- or are under 22.`),kc=d(),m(he.$$.fragment),Gc=d(),ol=a("p"),Ac=l(`Get baz tagged entities named Clark, James, Chris, Christopher, Jake, or
- Jacob.`),Pc=d(),m(ce.$$.fragment),Nc=d(),ll=a("p"),Bc=l('Get baz tagged entities that belong to any user named "John" or "James".'),Fc=d(),m(fe.$$.fragment),dl=d(),st=a("section"),ht=a("a"),Sc=l("Previous: Creating Entities"),Hc=d(),ct=a("a"),Ic=l("Next: Subscribing to Queries"),this.h()},l(c){const ue=gE("svelte-13nmepq",document.head);Jt=pE(ue,!1),ze=hE(),ue.forEach(e),nl=s(c),i=r(c,"SECTION",{});var h=o(i);Ee=r(h,"HEADER",{class:!0});var Df=o(Ee);ve=r(Df,"H1",{style:!0});var $f=o(ve);pl=n($f,"Entity Querying"),$f.forEach(e),Df.forEach(e),_l=s(h),Re=r(h,"P",{});var wf=o(Re);yl=n(wf,"The real power behind Nymph is the entity querying system."),wf.forEach(e),Tl=s(h),me=r(h,"HEADER",{class:!0});var Cf=o(me);qe=r(Cf,"H2",{});var Of=o(qe);bl=n(Of,"Factory Method"),Of.forEach(e),Cf.forEach(e),Dl=s(h),w=r(h,"P",{});var ft=o(w);$l=n(ft,"The "),ke=r(ft,"CODE",{});var zf=o(ke);wl=n(zf,"Entity"),zf.forEach(e),Cl=n(ft,` class' factory method can take a GUID as an
- argument. You can provide other factory functions that can take things as
- well. For example, the `),Ge=r(ft,"CODE",{});var Rf=o(Ge);Ol=n(Rf,"User"),Rf.forEach(e),zl=n(ft,` class in Tilmeld has a
- `),Ae=r(ft,"CODE",{});var qf=o(Ae);Rl=n(qf,"factoryUsername"),qf.forEach(e),ql=n(ft,` method that takes a username. The method will return
- a new entity if the queried entity is not found. You can determine if it was
- found by checking that its GUID is not null.`),ft.forEach(e),kl=s(h),g(jt.$$.fragment,h),Gl=s(h),ge=r(h,"HEADER",{class:!0});var kf=o(ge);Pe=r(kf,"H2",{});var Gf=o(Pe);Al=n(Gf,"Nymph's Query Language"),Gf.forEach(e),kf.forEach(e),Pl=s(h),at=r(h,"P",{});var be=o(at);Nl=n(be,"The powerful way of querying entities is Nymph's "),Ne=r(be,"CODE",{});var Af=o(Ne);Bl=n(Af,"getEntities"),Af.forEach(e),Fl=n(be,`
- and `),Be=r(be,"CODE",{});var Pf=o(Be);Sl=n(Pf,"getEntity"),Pf.forEach(e),Hl=n(be," methods. The first argument is an Options object."),be.forEach(e),Il=s(h),pe=r(h,"DIV",{class:!0});var Nf=o(pe);Qt=r(Nf,"TABLE",{});var il=o(Qt);Fe=r(il,"THEAD",{});var Bf=o(Fe);C=r(Bf,"TR",{});var ut=o(C);Se=r(ut,"TH",{});var Ff=o(Se);Ul=n(Ff,"Option"),Ff.forEach(e),xl=s(ut),He=r(ut,"TH",{});var Sf=o(He);Jl=n(Sf,"Type"),Sf.forEach(e),jl=s(ut),Ie=r(ut,"TH",{});var Hf=o(Ie);Ql=n(Hf,"Default"),Hf.forEach(e),Ml=s(ut),Ue=r(ut,"TH",{});var If=o(Ue);Ll=n(If,"Description"),If.forEach(e),ut.forEach(e),Bf.forEach(e),Yl=s(il),E=r(il,"TBODY",{});var v=o(E);O=r(v,"TR",{});var Et=o(O);xe=r(Et,"TD",{});var Uf=o(xe);Wl=n(Uf,"class"),Uf.forEach(e),Xl=s(Et),Je=r(Et,"TD",{});var xf=o(Je);Vl=n(xf,"typeof Entity"),xf.forEach(e),Kl=s(Et),je=r(Et,"TD",{});var Jf=o(je);Zl=n(Jf,"Entity"),Jf.forEach(e),tn=s(Et),Qe=r(Et,"TD",{});var jf=o(Qe);en=n(jf,"The Entity class to query."),jf.forEach(e),Et.forEach(e),an=s(v),z=r(v,"TR",{});var vt=o(z);Me=r(vt,"TD",{});var Qf=o(Me);rn=n(Qf,"limit"),Qf.forEach(e),on=s(vt),Le=r(vt,"TD",{});var Mf=o(Le);ln=n(Mf,"number"),Mf.forEach(e),nn=s(vt),Ye=r(vt,"TD",{});var Lf=o(Ye);dn=n(Lf,"undefined"),Lf.forEach(e),sn=s(vt),Mt=r(vt,"TD",{});var hl=o(Mt);hn=n(hl,"The limit of entities to be returned. Not needed when using "),We=r(hl,"CODE",{});var Yf=o(We);cn=n(Yf,"getEntity"),Yf.forEach(e),fn=n(hl,", as it always returns only one."),hl.forEach(e),vt.forEach(e),un=s(v),R=r(v,"TR",{});var mt=o(R);Xe=r(mt,"TD",{});var Wf=o(Xe);En=n(Wf,"offset"),Wf.forEach(e),vn=s(mt),Ve=r(mt,"TD",{});var Xf=o(Ve);mn=n(Xf,"number"),Xf.forEach(e),gn=s(mt),Ke=r(mt,"TD",{});var Vf=o(Ke);pn=n(Vf,"0"),Vf.forEach(e),_n=s(mt),Ze=r(mt,"TD",{});var Kf=o(Ze);yn=n(Kf,`The offset from the first matching entity, in order, to start
- retrieving.`),Kf.forEach(e),mt.forEach(e),Tn=s(v),q=r(v,"TR",{});var gt=o(q);ta=r(gt,"TD",{});var Zf=o(ta);bn=n(Zf,"reverse"),Zf.forEach(e),Dn=s(gt),ea=r(gt,"TD",{});var t1=o(ea);$n=n(t1,"boolean"),t1.forEach(e),wn=s(gt),aa=r(gt,"TD",{});var e1=o(aa);Cn=n(e1,"false"),e1.forEach(e),On=s(gt),Lt=r(gt,"TD",{});var cl=o(Lt);zn=n(cl,`If true, entities will be retrieved from newest to oldest/largest
- to smallest (with regard to `),ra=r(cl,"CODE",{});var a1=o(ra);Rn=n(a1,"sort"),a1.forEach(e),qn=n(cl,")."),cl.forEach(e),gt.forEach(e),kn=s(v),k=r(v,"TR",{});var pt=o(k);oa=r(pt,"TD",{});var r1=o(oa);Gn=n(r1,"sort"),r1.forEach(e),An=s(pt),la=r(pt,"TD",{});var o1=o(la);Pn=n(o1,"'cdate' | 'mdate' | string"),o1.forEach(e),Nn=s(pt),na=r(pt,"TD",{});var l1=o(na);Bn=n(l1,"'cdate'"),l1.forEach(e),Fn=s(pt),da=r(pt,"TD",{});var n1=o(da);Sn=n(n1,`How to sort the entities. Should be "cdate", "mdate", or the name
- of a property.`),n1.forEach(e),pt.forEach(e),Hn=s(v),G=r(v,"TR",{});var _t=o(G);sa=r(_t,"TD",{});var d1=o(sa);In=n(d1,"return"),d1.forEach(e),Un=s(_t),ia=r(_t,"TD",{});var s1=o(ia);xn=n(s1,"'entity' | 'guid' | 'count'"),s1.forEach(e),Jn=s(_t),ha=r(_t,"TD",{});var i1=o(ha);jn=n(i1,"'entity'"),i1.forEach(e),Qn=s(_t),ca=r(_t,"TD",{});var h1=o(ca);Mn=n(h1,`What to return, the entities with their data, just the GUIDs, or
- just a count.`),h1.forEach(e),_t.forEach(e),Ln=s(v),A=r(v,"TR",{});var yt=o(A);fa=r(yt,"TD",{});var c1=o(fa);Yn=n(c1,"source"),c1.forEach(e),Wn=s(yt),ua=r(yt,"TD",{});var f1=o(ua);Xn=n(f1,"string"),f1.forEach(e),Vn=s(yt),Ea=r(yt,"TD",{});var u1=o(Ea);Kn=n(u1,"undefined"),u1.forEach(e),Zn=s(yt),va=r(yt,"TD",{});var E1=o(va);td=n(E1,`Will be 'client' if the query came from a REST request or the
- PubSub server. (Mainly used in Tilmeld for access control.)`),E1.forEach(e),yt.forEach(e),ed=s(v),P=r(v,"TR",{});var Tt=o(P);ma=r(Tt,"TD",{});var v1=o(ma);ad=n(v1,"skipCache"),v1.forEach(e),rd=s(Tt),ga=r(Tt,"TD",{});var m1=o(ga);od=n(m1,"boolean"),m1.forEach(e),ld=s(Tt),pa=r(Tt,"TD",{});var g1=o(pa);nd=n(g1,"false"),g1.forEach(e),dd=s(Tt),_a=r(Tt,"TD",{});var p1=o(_a);sd=n(p1,`If true, Nymph will skip the cache and retrieve the entity from the
- DB.`),p1.forEach(e),Tt.forEach(e),id=s(v),N=r(v,"TR",{});var bt=o(N);ya=r(bt,"TD",{});var _1=o(ya);hd=n(_1,"skipAc"),_1.forEach(e),cd=s(bt),Ta=r(bt,"TD",{});var y1=o(Ta);fd=n(y1,"boolean"),y1.forEach(e),ud=s(bt),ba=r(bt,"TD",{});var T1=o(ba);Ed=n(T1,"false"),T1.forEach(e),vd=s(bt),Da=r(bt,"TD",{});var b1=o(Da);md=n(b1,`If true, Tilmeld will not filter returned entities according to
- access controls. (If Tilmeld is installed.) (This is always set to
- false by the REST endpoint and PubSub server.)`),b1.forEach(e),bt.forEach(e),v.forEach(e),il.forEach(e),Nf.forEach(e),gd=s(h),Yt=r(h,"P",{});var fl=o(Yt);pd=n(fl,`Every argument following the Options is a Selector object. They contain
- clauses and a type. An entity must match each selector to be returned. There
- are four selector types, and they are defined on the `),$a=r(fl,"CODE",{});var D1=o($a);_d=n(D1,"type"),D1.forEach(e),yd=n(fl," property."),fl.forEach(e),Td=s(h),_e=r(h,"DIV",{class:!0});var $1=o(_e);Wt=r($1,"TABLE",{});var ul=o(Wt);wa=r(ul,"THEAD",{});var w1=o(wa);rt=r(w1,"TR",{});var De=o(rt);Ca=r(De,"TH",{});var C1=o(Ca);bd=n(C1,"Type"),C1.forEach(e),Dd=s(De),Oa=r(De,"TH",{});var O1=o(Oa);$d=n(O1,"Name"),O1.forEach(e),wd=s(De),za=r(De,"TH",{});var z1=o(za);Cd=n(z1,"Description"),z1.forEach(e),De.forEach(e),w1.forEach(e),Od=s(ul),B=r(ul,"TBODY",{});var Dt=o(B);ot=r(Dt,"TR",{});var $e=o(ot);Ra=r($e,"TD",{});var R1=o(Ra);zd=n(R1,"&"),R1.forEach(e),Rd=s($e),qa=r($e,"TD",{});var q1=o(qa);qd=n(q1,"And"),q1.forEach(e),kd=s($e),ka=r($e,"TD",{});var k1=o(ka);Gd=n(k1,"All clauses in the selector must match."),k1.forEach(e),$e.forEach(e),Ad=s(Dt),lt=r(Dt,"TR",{});var we=o(lt);Ga=r(we,"TD",{});var G1=o(Ga);Pd=n(G1,"|"),G1.forEach(e),Nd=s(we),Aa=r(we,"TD",{});var A1=o(Aa);Bd=n(A1,"Or"),A1.forEach(e),Fd=s(we),Pa=r(we,"TD",{});var P1=o(Pa);Sd=n(P1,"At least one clause in the selector must match."),P1.forEach(e),we.forEach(e),Hd=s(Dt),nt=r(Dt,"TR",{});var Ce=o(nt);Na=r(Ce,"TD",{});var N1=o(Na);Id=n(N1,"!&"),N1.forEach(e),Ud=s(Ce),Ba=r(Ce,"TD",{});var B1=o(Ba);xd=n(B1,"Not And"),B1.forEach(e),Jd=s(Ce),Fa=r(Ce,"TD",{});var F1=o(Fa);jd=n(F1,"All clauses in the selector must not match."),F1.forEach(e),Ce.forEach(e),Qd=s(Dt),dt=r(Dt,"TR",{});var Oe=o(dt);Sa=r(Oe,"TD",{});var S1=o(Sa);Md=n(S1,"!|"),S1.forEach(e),Ld=s(Oe),Ha=r(Oe,"TD",{});var H1=o(Ha);Yd=n(H1,"Not Or"),H1.forEach(e),Wd=s(Oe),Ia=r(Oe,"TD",{});var I1=o(Ia);Xd=n(I1,"At least one clause in the selector must not match."),I1.forEach(e),Oe.forEach(e),Dt.forEach(e),ul.forEach(e),$1.forEach(e),Vd=s(h),F=r(h,"P",{});var $t=o(F);Kd=n($t,"The other properties of the Selector are clauses. Clauses use the form "),Ua=r($t,"CODE",{});var U1=o(Ua);Zd=n(U1,"name: value"),U1.forEach(e),ts=n($t,`, or
- `),xa=r($t,"CODE",{});var x1=o(xa);es=n(x1,"name: [value1, value2, ...]"),x1.forEach(e),as=n($t,`. They can be negated by prepending
- a bang (!) to the name, like `),Ja=r($t,"CODE",{});var J1=o(Ja);rs=n(J1,"'!name': value"),J1.forEach(e),os=n($t,`. A clause that has
- multiple values is considered as multiple clauses in terms of matching for
- "or" selectors.`),$t.forEach(e),ls=s(h),ye=r(h,"DIV",{class:!0});var j1=o(ye);Xt=r(j1,"TABLE",{});var El=o(Xt);ja=r(El,"THEAD",{});var Q1=o(ja);S=r(Q1,"TR",{});var wt=o(S);Qa=r(wt,"TH",{});var M1=o(Qa);ns=n(M1,"Property"),M1.forEach(e),ds=s(wt),Ma=r(wt,"TH",{});var L1=o(Ma);ss=n(L1,"Description"),L1.forEach(e),is=s(wt),La=r(wt,"TH",{});var Y1=o(La);hs=n(Y1,"Example"),Y1.forEach(e),cs=s(wt),Ya=r(wt,"TH",{});var W1=o(Ya);fs=n(W1,"Works On"),W1.forEach(e),wt.forEach(e),Q1.forEach(e),us=s(El),f=r(El,"TBODY",{});var u=o(f);H=r(u,"TR",{});var Ct=o(H);Wa=r(Ct,"TD",{});var X1=o(Wa);Es=n(X1,"guid"),X1.forEach(e),vs=s(Ct),Xa=r(Ct,"TD",{});var V1=o(Xa);ms=n(V1,"The entity's GUID is equal."),V1.forEach(e),gs=s(Ct),Va=r(Ct,"TD",{});var K1=o(Va);Ka=r(K1,"CODE",{});var Z1=o(Ka);ps=n(Z1,xc),Z1.forEach(e),K1.forEach(e),_s=s(Ct),Za=r(Ct,"TD",{});var tu=o(Za);tr=r(tu,"CODE",{});var eu=o(tr);ys=n(eu,Jc),eu.forEach(e),tu.forEach(e),Ct.forEach(e),Ts=s(u),I=r(u,"TR",{});var Ot=o(I);er=r(Ot,"TD",{});var au=o(er);bs=n(au,"tag"),au.forEach(e),Ds=s(Ot),ar=r(Ot,"TD",{});var ru=o(ar);$s=n(ru,"The entity has the tag."),ru.forEach(e),ws=s(Ot),rr=r(Ot,"TD",{});var ou=o(rr);or=r(ou,"CODE",{});var lu=o(or);Cs=n(lu,jc),lu.forEach(e),ou.forEach(e),Os=s(Ot),lr=r(Ot,"TD",{});var nu=o(lr);nr=r(nu,"CODE",{});var du=o(nr);zs=n(du,Qc),du.forEach(e),nu.forEach(e),Ot.forEach(e),Rs=s(u),U=r(u,"TR",{});var zt=o(U);dr=r(zt,"TD",{});var su=o(dr);qs=n(su,"defined"),su.forEach(e),ks=s(zt),sr=r(zt,"TD",{});var iu=o(sr);Gs=n(iu,"The named property is not undefined."),iu.forEach(e),As=s(zt),ir=r(zt,"TD",{});var hu=o(ir);hr=r(hu,"CODE",{});var cu=o(hr);Ps=n(cu,Mc),cu.forEach(e),hu.forEach(e),Ns=s(zt),cr=r(zt,"TD",{});var fu=o(cr);fr=r(fu,"CODE",{});var uu=o(fr);Bs=n(uu,Lc),uu.forEach(e),fu.forEach(e),zt.forEach(e),Fs=s(u),x=r(u,"TR",{});var Rt=o(x);ur=r(Rt,"TD",{});var Eu=o(ur);Ss=n(Eu,"truthy"),Eu.forEach(e),Hs=s(Rt),Er=r(Rt,"TD",{});var vu=o(Er);Is=n(vu,"The named property evaluates to true."),vu.forEach(e),Us=s(Rt),vr=r(Rt,"TD",{});var mu=o(vr);mr=r(mu,"CODE",{});var gu=o(mr);xs=n(gu,Yc),gu.forEach(e),mu.forEach(e),Js=s(Rt),gr=r(Rt,"TD",{});var pu=o(gr);pr=r(pu,"CODE",{});var _u=o(pr);js=n(_u,Wc),_u.forEach(e),pu.forEach(e),Rt.forEach(e),Qs=s(u),J=r(u,"TR",{});var qt=o(J);_r=r(qt,"TD",{});var yu=o(_r);Ms=n(yu,"equal"),yu.forEach(e),Ls=s(qt),yr=r(qt,"TD",{});var Tu=o(yr);Ys=n(Tu,`The named property is defined and equals the value (their JSON
- strings are identical).`),Tu.forEach(e),Ws=s(qt),Tr=r(qt,"TD",{});var bu=o(Tr);br=r(bu,"CODE",{});var Du=o(br);Xs=n(Du,Xc),Du.forEach(e),bu.forEach(e),Vs=s(qt),Dr=r(qt,"TD",{});var $u=o(Dr);$r=r($u,"CODE",{});var wu=o($r);Ks=n(wu,Vc),wu.forEach(e),$u.forEach(e),qt.forEach(e),Zs=s(u),j=r(u,"TR",{});var kt=o(j);wr=r(kt,"TD",{});var Cu=o(wr);ti=n(Cu,"contain"),Cu.forEach(e),ei=s(kt),Cr=r(kt,"TD",{});var Ou=o(Cr);ai=n(Ou,`The named property contains the value (its JSON string is found
- within the property's JSON string).`),Ou.forEach(e),ri=s(kt),Or=r(kt,"TD",{});var zu=o(Or);zr=r(zu,"CODE",{});var Ru=o(zr);oi=n(Ru,Kc),Ru.forEach(e),zu.forEach(e),li=s(kt),Rr=r(kt,"TD",{});var qu=o(Rr);qr=r(qu,"CODE",{});var ku=o(qr);ni=n(ku,Zc),ku.forEach(e),qu.forEach(e),kt.forEach(e),di=s(u),Q=r(u,"TR",{});var Gt=o(Q);kr=r(Gt,"TD",{});var Gu=o(kr);si=n(Gu,"match"),Gu.forEach(e),ii=s(Gt),Gr=r(Gt,"TD",{});var Au=o(Gr);hi=n(Au,`The named property matches. Uses POSIX RegExp. Case sensitive. Must
- *not* be surrounded by any delimiters.`),Au.forEach(e),ci=s(Gt),Ar=r(Gt,"TD",{});var Pu=o(Ar);Pr=r(Pu,"CODE",{});var Nu=o(Pr);fi=n(Nu,tf),Nu.forEach(e),Pu.forEach(e),ui=s(Gt),Nr=r(Gt,"TD",{});var Bu=o(Nr);Br=r(Bu,"CODE",{});var Fu=o(Br);Ei=n(Fu,ef),Fu.forEach(e),Bu.forEach(e),Gt.forEach(e),vi=s(u),M=r(u,"TR",{});var At=o(M);Fr=r(At,"TD",{});var Su=o(Fr);mi=n(Su,"imatch"),Su.forEach(e),gi=s(At),Sr=r(At,"TD",{});var Hu=o(Sr);pi=n(Hu,`The named property matches. Uses POSIX RegExp. Case insensitive.
- Must *not* be surrounded by any delimiters.`),Hu.forEach(e),_i=s(At),Hr=r(At,"TD",{});var Iu=o(Hr);Ir=r(Iu,"CODE",{});var Uu=o(Ir);yi=n(Uu,af),Uu.forEach(e),Iu.forEach(e),Ti=s(At),Ur=r(At,"TD",{});var xu=o(Ur);xr=r(xu,"CODE",{});var Ju=o(xr);bi=n(Ju,rf),Ju.forEach(e),xu.forEach(e),At.forEach(e),Di=s(u),L=r(u,"TR",{});var Pt=o(L);Jr=r(Pt,"TD",{});var ju=o(Jr);$i=n(ju,"like"),ju.forEach(e),wi=s(Pt),jr=r(Pt,"TD",{});var Qu=o(jr);Ci=n(Qu,`The named property matches. Uses % for variable length wildcard and
- _ for single character wildcard. Case sensitive.`),Qu.forEach(e),Oi=s(Pt),Qr=r(Pt,"TD",{});var Mu=o(Qr);Mr=r(Mu,"CODE",{});var Lu=o(Mr);zi=n(Lu,of),Lu.forEach(e),Mu.forEach(e),Ri=s(Pt),Lr=r(Pt,"TD",{});var Yu=o(Lr);Yr=r(Yu,"CODE",{});var Wu=o(Yr);qi=n(Wu,lf),Wu.forEach(e),Yu.forEach(e),Pt.forEach(e),ki=s(u),Y=r(u,"TR",{});var Nt=o(Y);Wr=r(Nt,"TD",{});var Xu=o(Wr);Gi=n(Xu,"ilike"),Xu.forEach(e),Ai=s(Nt),Xr=r(Nt,"TD",{});var Vu=o(Xr);Pi=n(Vu,`The named property matches. Uses % for variable length wildcard and
- _ for single character wildcard. Case insensitive.`),Vu.forEach(e),Ni=s(Nt),Vr=r(Nt,"TD",{});var Ku=o(Vr);Kr=r(Ku,"CODE",{});var Zu=o(Kr);Bi=n(Zu,nf),Zu.forEach(e),Ku.forEach(e),Fi=s(Nt),Zr=r(Nt,"TD",{});var t2=o(Zr);to=r(t2,"CODE",{});var e2=o(to);Si=n(e2,df),e2.forEach(e),t2.forEach(e),Nt.forEach(e),Hi=s(u),W=r(u,"TR",{});var Bt=o(W);eo=r(Bt,"TD",{});var a2=o(eo);Ii=n(a2,"gt"),a2.forEach(e),Ui=s(Bt),ao=r(Bt,"TD",{});var r2=o(ao);xi=n(r2,"The named property is greater than the value."),r2.forEach(e),Ji=s(Bt),ro=r(Bt,"TD",{});var o2=o(ro);oo=r(o2,"CODE",{});var l2=o(oo);ji=n(l2,sf),l2.forEach(e),o2.forEach(e),Qi=s(Bt),lo=r(Bt,"TD",{});var n2=o(lo);no=r(n2,"CODE",{});var d2=o(no);Mi=n(d2,hf),d2.forEach(e),n2.forEach(e),Bt.forEach(e),Li=s(u),X=r(u,"TR",{});var Ft=o(X);so=r(Ft,"TD",{});var s2=o(so);Yi=n(s2,"gte"),s2.forEach(e),Wi=s(Ft),io=r(Ft,"TD",{});var i2=o(io);Xi=n(i2,"The named property is greater than or equal to the value."),i2.forEach(e),Vi=s(Ft),ho=r(Ft,"TD",{});var h2=o(ho);co=r(h2,"CODE",{});var c2=o(co);Ki=n(c2,cf),c2.forEach(e),h2.forEach(e),Zi=s(Ft),fo=r(Ft,"TD",{});var f2=o(fo);uo=r(f2,"CODE",{});var u2=o(uo);th=n(u2,ff),u2.forEach(e),f2.forEach(e),Ft.forEach(e),eh=s(u),V=r(u,"TR",{});var St=o(V);Eo=r(St,"TD",{});var E2=o(Eo);ah=n(E2,"lt"),E2.forEach(e),rh=s(St),vo=r(St,"TD",{});var v2=o(vo);oh=n(v2,"The named property is less than the value."),v2.forEach(e),lh=s(St),mo=r(St,"TD",{});var m2=o(mo);go=r(m2,"CODE",{});var g2=o(go);nh=n(g2,uf),g2.forEach(e),m2.forEach(e),dh=s(St),po=r(St,"TD",{});var p2=o(po);_o=r(p2,"CODE",{});var _2=o(_o);sh=n(_2,Ef),_2.forEach(e),p2.forEach(e),St.forEach(e),ih=s(u),K=r(u,"TR",{});var Ht=o(K);yo=r(Ht,"TD",{});var y2=o(yo);hh=n(y2,"lte"),y2.forEach(e),ch=s(Ht),To=r(Ht,"TD",{});var T2=o(To);fh=n(T2,"The named property is less than or equal to the value."),T2.forEach(e),uh=s(Ht),bo=r(Ht,"TD",{});var b2=o(bo);Do=r(b2,"CODE",{});var D2=o(Do);Eh=n(D2,vf),D2.forEach(e),b2.forEach(e),vh=s(Ht),$o=r(Ht,"TD",{});var $2=o($o);wo=r($2,"CODE",{});var w2=o(wo);mh=n(w2,mf),w2.forEach(e),$2.forEach(e),Ht.forEach(e),gh=s(u),Z=r(u,"TR",{});var It=o(Z);Co=r(It,"TD",{});var C2=o(Co);ph=n(C2,"ref"),C2.forEach(e),_h=s(It),Oo=r(It,"TD",{});var O2=o(Oo);yh=n(O2,"The named property is the entity or contains the entity."),O2.forEach(e),Th=s(It),zo=r(It,"TD",{});var z2=o(zo);Ro=r(z2,"CODE",{});var R2=o(Ro);bh=n(R2,gf),R2.forEach(e),z2.forEach(e),Dh=s(It),qo=r(It,"TD",{});var q2=o(qo);ko=r(q2,"CODE",{});var k2=o(ko);$h=n(k2,pf),k2.forEach(e),q2.forEach(e),It.forEach(e),wh=s(u),tt=r(u,"TR",{});var Ut=o(tt);Go=r(Ut,"TD",{});var G2=o(Go);Ch=n(G2,"qref"),G2.forEach(e),Oh=s(Ut),Ao=r(Ut,"TD",{});var A2=o(Ao);zh=n(A2,`The named property is an entity that matches the query or contains
- an entity that matches the query.`),A2.forEach(e),Rh=s(Ut),Po=r(Ut,"TD",{});var P2=o(Po);No=r(P2,"CODE",{});var N2=o(No);qh=n(N2,_f),N2.forEach(e),P2.forEach(e),kh=s(Ut),Bo=r(Ut,"TD",{});var B2=o(Bo);Fo=r(B2,"CODE",{});var F2=o(Fo);Gh=n(F2,yf),F2.forEach(e),B2.forEach(e),Ut.forEach(e),Ah=s(u),et=r(u,"TR",{});var xt=o(et);So=r(xt,"TD",{});var S2=o(So);Ph=n(S2,"selector"),S2.forEach(e),Nh=s(xt),Ho=r(xt,"TD",{});var H2=o(Ho);Bh=n(H2,`A selector. (Keep in mind, you can also use an array of these, just
- like any other clause.)`),H2.forEach(e),Fh=s(xt),Io=r(xt,"TD",{});var I2=o(Io);Uo=r(I2,"CODE",{});var U2=o(Uo);Sh=n(U2,Tf),U2.forEach(e),I2.forEach(e),Hh=s(xt),xo=r(xt,"TD",{});var x2=o(xo);Jo=r(x2,"CODE",{});var J2=o(Jo);Ih=n(J2,bf),J2.forEach(e),x2.forEach(e),xt.forEach(e),u.forEach(e),El.forEach(e),j1.forEach(e),Uh=s(h),Vt=r(h,"P",{});var vl=o(Vt);xh=n(vl,`The clauses "equal", "contain", "gt", "gte", "lt", and "lte" can also accept
- a third element. If value is null and the third element is a string, the
- third element will be used with `),it=r(vl,"A",{href:!0,target:!0,rel:!0});var j2=o(it);Jh=n(j2,"Locutus' strtotime function"),j2.forEach(e),jh=n(vl,` to set the value to a relative timestamp. For example, the following selector
- will look for all entities that were created in the last day.`),vl.forEach(e),Qh=s(h),g(Kt.$$.fragment,h),Mh=s(h),Te=r(h,"HEADER",{class:!0});var Q2=o(Te);jo=r(Q2,"H2",{});var M2=o(jo);Lh=n(M2,"Querying Examples"),M2.forEach(e),Q2.forEach(e),Yh=s(h),Qo=r(h,"P",{});var L2=o(Qo);Wh=n(L2,`So putting it all together, you can specify the options and selectors to
- find the exact entities you want.`),L2.forEach(e),Xh=s(h),Mo=r(h,"P",{});var Y2=o(Mo);Vh=n(Y2,"Get the first FoobarBaz entity."),Y2.forEach(e),Kh=s(h),g(Zt.$$.fragment,h),Zh=s(h),Lo=r(h,"P",{});var W2=o(Lo);tc=n(W2,"Get the latest FoobarBaz entity."),W2.forEach(e),ec=s(h),g(te.$$.fragment,h),ac=s(h),Yo=r(h,"P",{});var X2=o(Yo);rc=n(X2,"Get all baz tagged entities, using the FoobarBaz class."),X2.forEach(e),oc=s(h),g(ee.$$.fragment,h),lc=s(h),Wo=r(h,"P",{});var V2=o(Wo);nc=n(V2,"Get the five last created bar and baz tagged entities."),V2.forEach(e),dc=s(h),g(ae.$$.fragment,h),sc=s(h),Xo=r(h,"P",{});var K2=o(Xo);ic=n(K2,"Get the five last modified bar and baz tagged entities."),K2.forEach(e),hc=s(h),g(re.$$.fragment,h),cc=s(h),Vo=r(h,"P",{});var Z2=o(Vo);fc=n(Z2,`Get the third page of sorted by name, baz tagged entities (if pages are 5
- entities long).`),Z2.forEach(e),uc=s(h),g(oe.$$.fragment,h),Ec=s(h),Ko=r(h,"P",{});var tE=o(Ko);vc=n(tE,"Get baz tagged entities with names."),tE.forEach(e),mc=s(h),g(le.$$.fragment,h),gc=s(h),Zo=r(h,"P",{});var eE=o(Zo);pc=n(eE,"Get baz tagged entities without names."),eE.forEach(e),_c=s(h),g(ne.$$.fragment,h),yc=s(h),tl=r(h,"P",{});var aE=o(tl);Tc=n(aE,"Get baz tagged entities without names or bar tagged entities with names."),aE.forEach(e),bc=s(h),g(de.$$.fragment,h),Dc=s(h),el=r(h,"P",{});var rE=o(el);$c=n(rE,"Get baz tagged entities with either first names or last names."),rE.forEach(e),wc=s(h),g(se.$$.fragment,h),Cc=s(h),al=r(h,"P",{});var oE=o(al);Oc=n(oE,"Get baz tagged entities created in the last day."),oE.forEach(e),zc=s(h),g(ie.$$.fragment,h),Rc=s(h),rl=r(h,"P",{});var lE=o(rl);qc=n(lE,`Get baz tagged entities with names, who either make only up to 8 dollars pay
- or are under 22.`),lE.forEach(e),kc=s(h),g(he.$$.fragment,h),Gc=s(h),ol=r(h,"P",{});var nE=o(ol);Ac=n(nE,`Get baz tagged entities named Clark, James, Chris, Christopher, Jake, or
- Jacob.`),nE.forEach(e),Pc=s(h),g(ce.$$.fragment,h),Nc=s(h),ll=r(h,"P",{});var dE=o(ll);Bc=n(dE,'Get baz tagged entities that belong to any user named "John" or "James".'),dE.forEach(e),Fc=s(h),g(fe.$$.fragment,h),h.forEach(e),dl=s(c),st=r(c,"SECTION",{class:!0});var ml=o(st);ht=r(ml,"A",{href:!0,class:!0,style:!0});var sE=o(ht);Sc=n(sE,"Previous: Creating Entities"),sE.forEach(e),Hc=s(ml),ct=r(ml,"A",{href:!0,class:!0,style:!0});var iE=o(ct);Ic=n(iE,"Next: Subscribing to Queries"),iE.forEach(e),ml.forEach(e),this.h()},h(){document.title="Entity Querying - User Guide - Nymph.js",Jt.a=ze,Uc(ve,"font-size","3em"),$(Ee,"class","major"),$(me,"class","major"),$(ge,"class","major"),$(pe,"class","table-wrapper"),$(_e,"class","table-wrapper"),$(ye,"class","table-wrapper"),$(it,"href","https://locutus.io/php/datetime/strtotime/"),$(it,"target","_blank"),$(it,"rel","noreferrer"),$(Te,"class","major"),$(ht,"href",cE+"/user-guide/creating-entities"),$(ht,"class","button"),Uc(ht,"margin",".5em"),$(ct,"href",cE+"/user-guide/subscribing-to-queries"),$(ct,"class","button"),Uc(ct,"margin",".5em"),$(st,"class","page-steps")},m(c,ue){Jt.m(yE,document.head),t(document.head,ze),gl(c,nl,ue),gl(c,i,ue),t(i,Ee),t(Ee,ve),t(ve,pl),t(i,_l),t(i,Re),t(Re,yl),t(i,Tl),t(i,me),t(me,qe),t(qe,bl),t(i,Dl),t(i,w),t(w,$l),t(w,ke),t(ke,wl),t(w,Cl),t(w,Ge),t(Ge,Ol),t(w,zl),t(w,Ae),t(Ae,Rl),t(w,ql),t(i,kl),p(jt,i,null),t(i,Gl),t(i,ge),t(ge,Pe),t(Pe,Al),t(i,Pl),t(i,at),t(at,Nl),t(at,Ne),t(Ne,Bl),t(at,Fl),t(at,Be),t(Be,Sl),t(at,Hl),t(i,Il),t(i,pe),t(pe,Qt),t(Qt,Fe),t(Fe,C),t(C,Se),t(Se,Ul),t(C,xl),t(C,He),t(He,Jl),t(C,jl),t(C,Ie),t(Ie,Ql),t(C,Ml),t(C,Ue),t(Ue,Ll),t(Qt,Yl),t(Qt,E),t(E,O),t(O,xe),t(xe,Wl),t(O,Xl),t(O,Je),t(Je,Vl),t(O,Kl),t(O,je),t(je,Zl),t(O,tn),t(O,Qe),t(Qe,en),t(E,an),t(E,z),t(z,Me),t(Me,rn),t(z,on),t(z,Le),t(Le,ln),t(z,nn),t(z,Ye),t(Ye,dn),t(z,sn),t(z,Mt),t(Mt,hn),t(Mt,We),t(We,cn),t(Mt,fn),t(E,un),t(E,R),t(R,Xe),t(Xe,En),t(R,vn),t(R,Ve),t(Ve,mn),t(R,gn),t(R,Ke),t(Ke,pn),t(R,_n),t(R,Ze),t(Ze,yn),t(E,Tn),t(E,q),t(q,ta),t(ta,bn),t(q,Dn),t(q,ea),t(ea,$n),t(q,wn),t(q,aa),t(aa,Cn),t(q,On),t(q,Lt),t(Lt,zn),t(Lt,ra),t(ra,Rn),t(Lt,qn),t(E,kn),t(E,k),t(k,oa),t(oa,Gn),t(k,An),t(k,la),t(la,Pn),t(k,Nn),t(k,na),t(na,Bn),t(k,Fn),t(k,da),t(da,Sn),t(E,Hn),t(E,G),t(G,sa),t(sa,In),t(G,Un),t(G,ia),t(ia,xn),t(G,Jn),t(G,ha),t(ha,jn),t(G,Qn),t(G,ca),t(ca,Mn),t(E,Ln),t(E,A),t(A,fa),t(fa,Yn),t(A,Wn),t(A,ua),t(ua,Xn),t(A,Vn),t(A,Ea),t(Ea,Kn),t(A,Zn),t(A,va),t(va,td),t(E,ed),t(E,P),t(P,ma),t(ma,ad),t(P,rd),t(P,ga),t(ga,od),t(P,ld),t(P,pa),t(pa,nd),t(P,dd),t(P,_a),t(_a,sd),t(E,id),t(E,N),t(N,ya),t(ya,hd),t(N,cd),t(N,Ta),t(Ta,fd),t(N,ud),t(N,ba),t(ba,Ed),t(N,vd),t(N,Da),t(Da,md),t(i,gd),t(i,Yt),t(Yt,pd),t(Yt,$a),t($a,_d),t(Yt,yd),t(i,Td),t(i,_e),t(_e,Wt),t(Wt,wa),t(wa,rt),t(rt,Ca),t(Ca,bd),t(rt,Dd),t(rt,Oa),t(Oa,$d),t(rt,wd),t(rt,za),t(za,Cd),t(Wt,Od),t(Wt,B),t(B,ot),t(ot,Ra),t(Ra,zd),t(ot,Rd),t(ot,qa),t(qa,qd),t(ot,kd),t(ot,ka),t(ka,Gd),t(B,Ad),t(B,lt),t(lt,Ga),t(Ga,Pd),t(lt,Nd),t(lt,Aa),t(Aa,Bd),t(lt,Fd),t(lt,Pa),t(Pa,Sd),t(B,Hd),t(B,nt),t(nt,Na),t(Na,Id),t(nt,Ud),t(nt,Ba),t(Ba,xd),t(nt,Jd),t(nt,Fa),t(Fa,jd),t(B,Qd),t(B,dt),t(dt,Sa),t(Sa,Md),t(dt,Ld),t(dt,Ha),t(Ha,Yd),t(dt,Wd),t(dt,Ia),t(Ia,Xd),t(i,Vd),t(i,F),t(F,Kd),t(F,Ua),t(Ua,Zd),t(F,ts),t(F,xa),t(xa,es),t(F,as),t(F,Ja),t(Ja,rs),t(F,os),t(i,ls),t(i,ye),t(ye,Xt),t(Xt,ja),t(ja,S),t(S,Qa),t(Qa,ns),t(S,ds),t(S,Ma),t(Ma,ss),t(S,is),t(S,La),t(La,hs),t(S,cs),t(S,Ya),t(Ya,fs),t(Xt,us),t(Xt,f),t(f,H),t(H,Wa),t(Wa,Es),t(H,vs),t(H,Xa),t(Xa,ms),t(H,gs),t(H,Va),t(Va,Ka),t(Ka,ps),t(H,_s),t(H,Za),t(Za,tr),t(tr,ys),t(f,Ts),t(f,I),t(I,er),t(er,bs),t(I,Ds),t(I,ar),t(ar,$s),t(I,ws),t(I,rr),t(rr,or),t(or,Cs),t(I,Os),t(I,lr),t(lr,nr),t(nr,zs),t(f,Rs),t(f,U),t(U,dr),t(dr,qs),t(U,ks),t(U,sr),t(sr,Gs),t(U,As),t(U,ir),t(ir,hr),t(hr,Ps),t(U,Ns),t(U,cr),t(cr,fr),t(fr,Bs),t(f,Fs),t(f,x),t(x,ur),t(ur,Ss),t(x,Hs),t(x,Er),t(Er,Is),t(x,Us),t(x,vr),t(vr,mr),t(mr,xs),t(x,Js),t(x,gr),t(gr,pr),t(pr,js),t(f,Qs),t(f,J),t(J,_r),t(_r,Ms),t(J,Ls),t(J,yr),t(yr,Ys),t(J,Ws),t(J,Tr),t(Tr,br),t(br,Xs),t(J,Vs),t(J,Dr),t(Dr,$r),t($r,Ks),t(f,Zs),t(f,j),t(j,wr),t(wr,ti),t(j,ei),t(j,Cr),t(Cr,ai),t(j,ri),t(j,Or),t(Or,zr),t(zr,oi),t(j,li),t(j,Rr),t(Rr,qr),t(qr,ni),t(f,di),t(f,Q),t(Q,kr),t(kr,si),t(Q,ii),t(Q,Gr),t(Gr,hi),t(Q,ci),t(Q,Ar),t(Ar,Pr),t(Pr,fi),t(Q,ui),t(Q,Nr),t(Nr,Br),t(Br,Ei),t(f,vi),t(f,M),t(M,Fr),t(Fr,mi),t(M,gi),t(M,Sr),t(Sr,pi),t(M,_i),t(M,Hr),t(Hr,Ir),t(Ir,yi),t(M,Ti),t(M,Ur),t(Ur,xr),t(xr,bi),t(f,Di),t(f,L),t(L,Jr),t(Jr,$i),t(L,wi),t(L,jr),t(jr,Ci),t(L,Oi),t(L,Qr),t(Qr,Mr),t(Mr,zi),t(L,Ri),t(L,Lr),t(Lr,Yr),t(Yr,qi),t(f,ki),t(f,Y),t(Y,Wr),t(Wr,Gi),t(Y,Ai),t(Y,Xr),t(Xr,Pi),t(Y,Ni),t(Y,Vr),t(Vr,Kr),t(Kr,Bi),t(Y,Fi),t(Y,Zr),t(Zr,to),t(to,Si),t(f,Hi),t(f,W),t(W,eo),t(eo,Ii),t(W,Ui),t(W,ao),t(ao,xi),t(W,Ji),t(W,ro),t(ro,oo),t(oo,ji),t(W,Qi),t(W,lo),t(lo,no),t(no,Mi),t(f,Li),t(f,X),t(X,so),t(so,Yi),t(X,Wi),t(X,io),t(io,Xi),t(X,Vi),t(X,ho),t(ho,co),t(co,Ki),t(X,Zi),t(X,fo),t(fo,uo),t(uo,th),t(f,eh),t(f,V),t(V,Eo),t(Eo,ah),t(V,rh),t(V,vo),t(vo,oh),t(V,lh),t(V,mo),t(mo,go),t(go,nh),t(V,dh),t(V,po),t(po,_o),t(_o,sh),t(f,ih),t(f,K),t(K,yo),t(yo,hh),t(K,ch),t(K,To),t(To,fh),t(K,uh),t(K,bo),t(bo,Do),t(Do,Eh),t(K,vh),t(K,$o),t($o,wo),t(wo,mh),t(f,gh),t(f,Z),t(Z,Co),t(Co,ph),t(Z,_h),t(Z,Oo),t(Oo,yh),t(Z,Th),t(Z,zo),t(zo,Ro),t(Ro,bh),t(Z,Dh),t(Z,qo),t(qo,ko),t(ko,$h),t(f,wh),t(f,tt),t(tt,Go),t(Go,Ch),t(tt,Oh),t(tt,Ao),t(Ao,zh),t(tt,Rh),t(tt,Po),t(Po,No),t(No,qh),t(tt,kh),t(tt,Bo),t(Bo,Fo),t(Fo,Gh),t(f,Ah),t(f,et),t(et,So),t(So,Ph),t(et,Nh),t(et,Ho),t(Ho,Bh),t(et,Fh),t(et,Io),t(Io,Uo),t(Uo,Sh),t(et,Hh),t(et,xo),t(xo,Jo),t(Jo,Ih),t(i,Uh),t(i,Vt),t(Vt,xh),t(Vt,it),t(it,Jh),t(Vt,jh),t(i,Qh),p(Kt,i,null),t(i,Mh),t(i,Te),t(Te,jo),t(jo,Lh),t(i,Yh),t(i,Qo),t(Qo,Wh),t(i,Xh),t(i,Mo),t(Mo,Vh),t(i,Kh),p(Zt,i,null),t(i,Zh),t(i,Lo),t(Lo,tc),t(i,ec),p(te,i,null),t(i,ac),t(i,Yo),t(Yo,rc),t(i,oc),p(ee,i,null),t(i,lc),t(i,Wo),t(Wo,nc),t(i,dc),p(ae,i,null),t(i,sc),t(i,Xo),t(Xo,ic),t(i,hc),p(re,i,null),t(i,cc),t(i,Vo),t(Vo,fc),t(i,uc),p(oe,i,null),t(i,Ec),t(i,Ko),t(Ko,vc),t(i,mc),p(le,i,null),t(i,gc),t(i,Zo),t(Zo,pc),t(i,_c),p(ne,i,null),t(i,yc),t(i,tl),t(tl,Tc),t(i,bc),p(de,i,null),t(i,Dc),t(i,el),t(el,$c),t(i,wc),p(se,i,null),t(i,Cc),t(i,al),t(al,Oc),t(i,zc),p(ie,i,null),t(i,Rc),t(i,rl),t(rl,qc),t(i,kc),p(he,i,null),t(i,Gc),t(i,ol),t(ol,Ac),t(i,Pc),p(ce,i,null),t(i,Nc),t(i,ll),t(ll,Bc),t(i,Fc),p(fe,i,null),gl(c,dl,ue),gl(c,st,ue),t(st,ht),t(ht,Sc),t(st,Hc),t(st,ct),t(ct,Ic),sl=!0},p:_E,i(c){sl||(_(jt.$$.fragment,c),_(Kt.$$.fragment,c),_(Zt.$$.fragment,c),_(te.$$.fragment,c),_(ee.$$.fragment,c),_(ae.$$.fragment,c),_(re.$$.fragment,c),_(oe.$$.fragment,c),_(le.$$.fragment,c),_(ne.$$.fragment,c),_(de.$$.fragment,c),_(se.$$.fragment,c),_(ie.$$.fragment,c),_(he.$$.fragment,c),_(ce.$$.fragment,c),_(fe.$$.fragment,c),sl=!0)},o(c){y(jt.$$.fragment,c),y(Kt.$$.fragment,c),y(Zt.$$.fragment,c),y(te.$$.fragment,c),y(ee.$$.fragment,c),y(ae.$$.fragment,c),y(re.$$.fragment,c),y(oe.$$.fragment,c),y(le.$$.fragment,c),y(ne.$$.fragment,c),y(de.$$.fragment,c),y(se.$$.fragment,c),y(ie.$$.fragment,c),y(he.$$.fragment,c),y(ce.$$.fragment,c),y(fe.$$.fragment,c),sl=!1},d(c){e(ze),c&&Jt.d(),c&&e(nl),c&&e(i),T(jt),T(Kt),T(Zt),T(te),T(ee),T(ae),T(re),T(oe),T(le),T(ne),T(de),T(se),T(ie),T(he),T(ce),T(fe),c&&e(dl),c&&e(st)}}}class CE extends uE{constructor(Jt){super(),EE(this,Jt,null,TE,vE,{})}}export{CE as component};
diff --git a/docs/_app/immutable/nodes/21.f0d11c05.js b/docs/_app/immutable/nodes/21.f0d11c05.js
new file mode 100644
index 0000000..9e1ed1c
--- /dev/null
+++ b/docs/_app/immutable/nodes/21.f0d11c05.js
@@ -0,0 +1,191 @@
+import{s as Ks,I as ti,e as Ws,a as n,f as e,l as f,x as ei,J as ai,d as l,c as o,g as a,h as d,r as i,m as u,j as T,k as Ys,u as t,i as en,v as ni}from"../chunks/scheduler.d7e45cc8.js";import{S as oi,i as li,b as g,d as m,m as p,a as _,t as C,e as y}from"../chunks/index.77720afb.js";import{H as x,g as ri}from"../chunks/github.64534d2c.js";import{t as E}from"../chunks/typescript.09c48802.js";import{b as Xs}from"../chunks/paths.d4a6803e.js";function di(Zs){let dt,Le,Ya,r,st,Sl='
Entity Querying
',an,Ht,Ul="The real power behind Nymph is the entity querying system.",nn,it,Jl="
Factory Method
",on,Pt,Ql=`The Entity class' factory method can take a GUID as an
+ argument. You can provide other factory functions that can take things as
+ well. For example, the User class in Tilmeld has a
+ factoryUsername method that takes a username. The method will return
+ a new entity if the queried entity is not found. You can determine if it was
+ found by checking that its GUID is not null.`,ln,ht,rn,ct,Vl="
Nymph's Query Language
",dn,Mt,Wl=`The powerful way of querying entities is Nymph's getEntities
+ and getEntity methods. The first argument is an Options object.`,sn,ft,Yl=`
Option
Type
Default
Description
class
typeof Entity
Entity
The Entity class to query.
limit
number
undefined
The limit of entities to be returned. Not needed when using getEntity, as it always returns only one.
offset
number
0
The offset from the first matching entity, in order, to start
+ retrieving.
reverse
boolean
false
If true, entities will be retrieved from newest to oldest/largest
+ to smallest (with regard to sort).
sort
'cdate' | 'mdate' | string
'cdate'
How to sort the entities. Should be "cdate", "mdate", or the name
+ of a property.
return
'entity' | 'guid' | 'count'
'entity'
What to return, the entities with their data, just the GUIDs, or
+ just a count.
source
string
undefined
Will be 'client' if the query came from a REST request or the
+ PubSub server. (Mainly used in Tilmeld for access control.)
skipCache
boolean
false
If true, Nymph will skip the cache and retrieve the entity from the
+ DB.
skipAc
boolean
false
If true, Tilmeld will not filter returned entities according to
+ access controls. (If Tilmeld is installed.) (This is always set to
+ false by the REST endpoint and PubSub server.)
`,hn,Lt,Xl=`Every argument following the Options is a Selector object. They contain
+ clauses and a type. An entity must match each selector to be returned. There
+ are four selector types, and they are defined on the type property.`,cn,ut,Zl="
Type
Name
Description
&
And
All clauses in the selector must match.
|
Or
At least one clause in the selector must match.
!&
Not And
All clauses in the selector must not match.
!|
Not Or
At least one clause in the selector must not match.
",fn,Rt,Kl=`The other properties of the Selector are clauses. Clauses use the form name: value, or
+ name: [value1, value2, ...]. They can be negated by prepending
+ a bang (!) to the name, like '!name': value. A clause that has
+ multiple values is considered as multiple clauses in terms of matching for
+ "or" selectors.`,un,Ft,vt,Bt,tr="
Property
Description
Example
Works On
",vn,c,b,jt,er="guid",gn,Nt,ar="The entity's GUID is equal.",mn,Re,Fe,nr="{type: '&', guid: '790229ae527f1511b3120b71'}",pn,_n,Be,je,or="entity.guid = '790229ae527f1511b3120b71'",Cn,yn,$,At,lr="tag",xn,Gt,rr="The entity has the tag.",En,Ne,Ae,dr="{type: '&', tag: 'foobar'}",Tn,bn,Ge,Ie,sr="entity.$addTag('foobar')",$n,Dn,D,It,ir="defined",wn,St,hr="The named property is not undefined.",zn,Se,Ue,cr="{type: '&', defined: 'foo'}",qn,On,Je,Qe,fr="entity.foo = 0",kn,Hn,w,Ut,ur="truthy",Pn,Jt,vr="The named property evaluates to true.",Mn,Ve,We,gr="{type: '&', truthy: 'foo'}",Ln,Rn,Ye,Xe,mr="entity.foo = 1",Fn,Bn,z,Qt,pr="equal",jn,Vt,_r=`The named property is defined and equals the value (their JSON
+ strings are identical).`,Nn,Ze,Ke,Cr="{type: '&', equal: ['foo', 0]}",An,Gn,ta,ea,yr="entity.foo = 0",In,Sn,q,Wt,xr="contain",Un,Yt,Er="The named property is an array that contains the value.",Jn,aa,na,Tr="{type: '&', contain: ['foo', 'bar']}",Qn,Vn,oa,la,br="entity.foo = ['bar', 'baz']",Wn,Yn,O,Xt,$r="match",Xn,Zt,Dr=`The named property matches. Uses POSIX RegExp. Case sensitive. Must
+ *not* be surrounded by any delimiters.`,Zn,ra,da,wr="{type: '&', match: ['foo', 'bar.*z']}",Kn,to,sa,ia,zr="entity.foo = 'foobarbaz'",eo,ao,k,Kt,qr="imatch",no,te,Or=`The named property matches. Uses POSIX RegExp. Case insensitive.
+ Must *not* be surrounded by any delimiters.`,oo,ha,ca,kr="{type: '&', imatch: ['foo', 'BaR.*Z']}",lo,ro,fa,ua,Hr="entity.foo = 'foobarbaz'",so,io,H,ee,Pr="like",ho,ae,Mr=`The named property matches. Uses % for variable length wildcard and
+ _ for single character wildcard. Case sensitive.`,co,va,ga,Lr="{type: '&', like: ['foo', 'f%bar_az']}",fo,uo,ma,pa,Rr="entity.foo = 'foobarbaz'",vo,go,P,ne,Fr="ilike",mo,oe,Br=`The named property matches. Uses % for variable length wildcard and
+ _ for single character wildcard. Case insensitive.`,po,_a,Ca,jr="{type: '&', ilike: ['foo', 'F%bAr_aZ']}",_o,Co,ya,xa,Nr="entity.foo = 'foobarbaz'",yo,xo,M,le,Ar="gt",Eo,re,Gr="The named property is greater than the value.",To,Ea,Ta,Ir="{type: '&', gt: ['foo', 5]}",bo,$o,ba,$a,Sr="entity.foo = 6",Do,wo,L,de,Ur="gte",zo,se,Jr="The named property is greater than or equal to the value.",qo,Da,wa,Qr="{type: '&', gte: ['foo', 6]}",Oo,ko,za,qa,Vr="entity.foo = 6",Ho,Po,R,ie,Wr="lt",Mo,he,Yr="The named property is less than the value.",Lo,Oa,ka,Xr="{type: '&', lt: ['foo', 7]}",Ro,Fo,Ha,Pa,Zr="entity.foo = 6",Bo,jo,F,ce,Kr="lte",No,fe,td="The named property is less than or equal to the value.",Ao,Ma,La,ed="{type: '&', lte: ['foo', 6]}",Go,Io,Ra,Fa,ad="entity.foo = 6",So,Uo,B,ue,nd="ref",Jo,ve,od="The named property is the entity or contains the entity.",Qo,Ba,ja,ld="{type: '&', ref: ['foo', '790229ae527f1511b3120b71']}",Vo,Wo,Na,Aa,rd="entity.foo = await Entity.factory('790229ae527f1511b3120b71')",Yo,Xo,j,ge,dd="qref",Zo,me,sd=`The named property is an entity that matches the query or contains
+ an entity that matches the query.`,Ko,Ga,Ia,id="{type: '&', qref: ['foo', [{class: Entity}, {type: '&', equal: ['name', 'Foobar']}]]}",tl,el,Sa,Ua,hd="entity.foo = await nymph.getEntity({class: Entity}, {type: '&', equal: ['name', 'Foobar']})",al,nl,N,pe,cd="selector",ol,_e,fd=`A selector. (Keep in mind, you can also use an array of these, just
+ like any other clause.)`,ll,Ja,Qa,ud="{type: '&', selector: {type: '|', tag: ['foo', 'bar']}}",rl,dl,Va,Wa,vd="entity.$addTag('bar')",sl,il,Ce,gd=`The clauses "equal", "contain", "gt", "gte", "lt", and "lte" can also accept
+ a third element. If value is null and the third element is a string, the
+ third element will be used with Locutus' strtotime function to set the value to a relative timestamp. For example, the following selector
+ will look for all entities that were created in the last day.`,hl,gt,cl,mt,md="
Querying Examples
",fl,ye,pd=`So putting it all together, you can specify the options and selectors to
+ find the exact entities you want.`,ul,xe,_d="Get the first FoobarBaz entity.",vl,pt,gl,Ee,Cd="Get the latest FoobarBaz entity.",ml,_t,pl,Te,yd="Get all baz tagged entities, using the FoobarBaz class.",_l,Ct,Cl,be,xd="Get the five last created bar and baz tagged entities.",yl,yt,xl,$e,Ed="Get the five last modified bar and baz tagged entities.",El,xt,Tl,De,Td=`Get the third page of sorted by name, baz tagged entities (if pages are 5
+ entities long).`,bl,Et,$l,we,bd="Get baz tagged entities with names.",Dl,Tt,wl,ze,$d="Get baz tagged entities without names.",zl,bt,ql,qe,Dd="Get baz tagged entities without names or bar tagged entities with names.",Ol,$t,kl,Oe,wd="Get baz tagged entities with either first names or last names.",Hl,Dt,Pl,ke,zd="Get baz tagged entities created in the last day.",Ml,wt,Ll,He,qd=`Get baz tagged entities with names, who either make only up to 8 dollars pay
+ or are under 22.`,Rl,zt,Fl,Pe,Od=`Get baz tagged entities named Clark, James, Chris, Christopher, Jake, or
+ Jacob.`,Bl,qt,jl,Me,kd='Get baz tagged entities that belong to any user named "John" or "James".',Nl,Ot,Xa,A,G,Al,Gl,I,Il,Za;return ht=new x({props:{language:E,code:`const baz = await FoobarBaz.factory(guid);
+if (baz.guid == null) {
+ console.error("Can't find the Foobar Baz!");
+}
+
+// Tilmeld's User class has a username factory function.
+const cronUser = await User.factoryUsername('cron');
+if (cronUser.guid == null) {
+ console.error("Can't find the cron user!");
+}`}}),gt=new x({props:{language:E,code:`{
+ type: '&',
+ gte: ['cdate', null, '-1 day']
+}`}}),pt=new x({props:{language:E,code:"const entity = await nymph.getEntity({ class: FoobarBaz });"}}),_t=new x({props:{language:E,code:`const entity = await nymph.getEntity({
+ class: FoobarBaz,
+ reverse: true
+});`}}),Ct=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz
+ },
+ {
+ type: '&',
+ tag: 'baz'
+ }
+);`}}),yt=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz,
+ reverse: true,
+ limit: 5
+ },
+ {
+ type: '&',
+ tag: ['bar', 'baz']
+ }
+);`}}),xt=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz,
+ reverse: true,
+ limit: 5,
+ sort: 'mdate'
+ },
+ {
+ type: '&',
+ tag: ['bar', 'baz']
+ }
+);`}}),Et=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz,
+ limit: 5,
+ offset: 10,
+ sort: 'name'
+ },
+ {
+ type: '&',
+ tag: ['baz']
+ }
+);`}}),Tt=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz
+ },
+ {
+ type: '&',
+ tag: 'baz',
+ defined: 'name'
+ }
+);`}}),bt=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz
+ },
+ {
+ type: '&',
+ tag: 'baz',
+ '!defined': 'name'
+ }
+);`}}),$t=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz
+ },
+ {
+ type: '|',
+ selector: [
+ {
+ type: '&',
+ tag: 'baz',
+ '!defined': 'name'
+ },
+ {
+ type: '&',
+ tag: 'bar',
+ defined: 'name'
+ }
+ ]
+ }
+);`}}),Dt=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz
+ },
+ {
+ type: '&',
+ tag: 'baz'
+ },
+ {
+ type: '|',
+ defined: ['firstName', 'lastName']
+ }
+);`}}),wt=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz
+ },
+ {
+ type: '&',
+ tag: 'baz',
+ gt: ['cdate', null, '-1 day']
+ }
+);`}}),zt=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ {
+ class: FoobarBaz
+ },
+ { type: '&', tag: 'baz', defined: 'name' },
+ {
+ type: '!|', // at least one must be false
+ gte: ['age', 22],
+ gt: ['pay', 8]
+ }
+);`}}),qt=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ { class: FoobarBaz },
+ { type: '&', tag: 'baz' },
+ {
+ type: '|',
+ equal: [
+ ['firstName', 'Clark'],
+ ['firstName', 'James']
+ ],
+ match: [
+ ['firstName', '^Chris(topher)?$'],
+ ['firstName', '^Ja(ke|cob)$']
+ ]
+ }
+);`}}),Ot=new x({props:{language:E,code:`const entities = await nymph.getEntities(
+ { class: FoobarBaz },
+ {
+ type: '&',
+ tag: 'baz',
+ qref: [
+ 'user',
+ [
+ { class: User },
+ {
+ type: '|',
+ like: [
+ ['name', 'John %'],
+ ['name', 'James %']
+ ]
+ }
+ ]
+ ]
+ }
+);`}}),{c(){dt=new ti(!1),Le=Ws(),Ya=n(),r=e("section"),st=e("header"),st.innerHTML=Sl,an=n(),Ht=e("p"),Ht.textContent=Ul,nn=n(),it=e("header"),it.innerHTML=Jl,on=n(),Pt=e("p"),Pt.innerHTML=Ql,ln=n(),g(ht.$$.fragment),rn=n(),ct=e("header"),ct.innerHTML=Vl,dn=n(),Mt=e("p"),Mt.innerHTML=Wl,sn=n(),ft=e("div"),ft.innerHTML=Yl,hn=n(),Lt=e("p"),Lt.innerHTML=Xl,cn=n(),ut=e("div"),ut.innerHTML=Zl,fn=n(),Rt=e("p"),Rt.innerHTML=Kl,un=n(),Ft=e("div"),vt=e("table"),Bt=e("thead"),Bt.innerHTML=tr,vn=n(),c=e("tbody"),b=e("tr"),jt=e("td"),jt.textContent=er,gn=n(),Nt=e("td"),Nt.textContent=ar,mn=n(),Re=e("td"),Fe=e("code"),pn=f(nr),_n=n(),Be=e("td"),je=e("code"),Cn=f(or),yn=n(),$=e("tr"),At=e("td"),At.textContent=lr,xn=n(),Gt=e("td"),Gt.textContent=rr,En=n(),Ne=e("td"),Ae=e("code"),Tn=f(dr),bn=n(),Ge=e("td"),Ie=e("code"),$n=f(sr),Dn=n(),D=e("tr"),It=e("td"),It.textContent=ir,wn=n(),St=e("td"),St.textContent=hr,zn=n(),Se=e("td"),Ue=e("code"),qn=f(cr),On=n(),Je=e("td"),Qe=e("code"),kn=f(fr),Hn=n(),w=e("tr"),Ut=e("td"),Ut.textContent=ur,Pn=n(),Jt=e("td"),Jt.textContent=vr,Mn=n(),Ve=e("td"),We=e("code"),Ln=f(gr),Rn=n(),Ye=e("td"),Xe=e("code"),Fn=f(mr),Bn=n(),z=e("tr"),Qt=e("td"),Qt.textContent=pr,jn=n(),Vt=e("td"),Vt.textContent=_r,Nn=n(),Ze=e("td"),Ke=e("code"),An=f(Cr),Gn=n(),ta=e("td"),ea=e("code"),In=f(yr),Sn=n(),q=e("tr"),Wt=e("td"),Wt.textContent=xr,Un=n(),Yt=e("td"),Yt.textContent=Er,Jn=n(),aa=e("td"),na=e("code"),Qn=f(Tr),Vn=n(),oa=e("td"),la=e("code"),Wn=f(br),Yn=n(),O=e("tr"),Xt=e("td"),Xt.textContent=$r,Xn=n(),Zt=e("td"),Zt.textContent=Dr,Zn=n(),ra=e("td"),da=e("code"),Kn=f(wr),to=n(),sa=e("td"),ia=e("code"),eo=f(zr),ao=n(),k=e("tr"),Kt=e("td"),Kt.textContent=qr,no=n(),te=e("td"),te.textContent=Or,oo=n(),ha=e("td"),ca=e("code"),lo=f(kr),ro=n(),fa=e("td"),ua=e("code"),so=f(Hr),io=n(),H=e("tr"),ee=e("td"),ee.textContent=Pr,ho=n(),ae=e("td"),ae.textContent=Mr,co=n(),va=e("td"),ga=e("code"),fo=f(Lr),uo=n(),ma=e("td"),pa=e("code"),vo=f(Rr),go=n(),P=e("tr"),ne=e("td"),ne.textContent=Fr,mo=n(),oe=e("td"),oe.textContent=Br,po=n(),_a=e("td"),Ca=e("code"),_o=f(jr),Co=n(),ya=e("td"),xa=e("code"),yo=f(Nr),xo=n(),M=e("tr"),le=e("td"),le.textContent=Ar,Eo=n(),re=e("td"),re.textContent=Gr,To=n(),Ea=e("td"),Ta=e("code"),bo=f(Ir),$o=n(),ba=e("td"),$a=e("code"),Do=f(Sr),wo=n(),L=e("tr"),de=e("td"),de.textContent=Ur,zo=n(),se=e("td"),se.textContent=Jr,qo=n(),Da=e("td"),wa=e("code"),Oo=f(Qr),ko=n(),za=e("td"),qa=e("code"),Ho=f(Vr),Po=n(),R=e("tr"),ie=e("td"),ie.textContent=Wr,Mo=n(),he=e("td"),he.textContent=Yr,Lo=n(),Oa=e("td"),ka=e("code"),Ro=f(Xr),Fo=n(),Ha=e("td"),Pa=e("code"),Bo=f(Zr),jo=n(),F=e("tr"),ce=e("td"),ce.textContent=Kr,No=n(),fe=e("td"),fe.textContent=td,Ao=n(),Ma=e("td"),La=e("code"),Go=f(ed),Io=n(),Ra=e("td"),Fa=e("code"),So=f(ad),Uo=n(),B=e("tr"),ue=e("td"),ue.textContent=nd,Jo=n(),ve=e("td"),ve.textContent=od,Qo=n(),Ba=e("td"),ja=e("code"),Vo=f(ld),Wo=n(),Na=e("td"),Aa=e("code"),Yo=f(rd),Xo=n(),j=e("tr"),ge=e("td"),ge.textContent=dd,Zo=n(),me=e("td"),me.textContent=sd,Ko=n(),Ga=e("td"),Ia=e("code"),tl=f(id),el=n(),Sa=e("td"),Ua=e("code"),al=f(hd),nl=n(),N=e("tr"),pe=e("td"),pe.textContent=cd,ol=n(),_e=e("td"),_e.textContent=fd,ll=n(),Ja=e("td"),Qa=e("code"),rl=f(ud),dl=n(),Va=e("td"),Wa=e("code"),sl=f(vd),il=n(),Ce=e("p"),Ce.innerHTML=gd,hl=n(),g(gt.$$.fragment),cl=n(),mt=e("header"),mt.innerHTML=md,fl=n(),ye=e("p"),ye.textContent=pd,ul=n(),xe=e("p"),xe.textContent=_d,vl=n(),g(pt.$$.fragment),gl=n(),Ee=e("p"),Ee.textContent=Cd,ml=n(),g(_t.$$.fragment),pl=n(),Te=e("p"),Te.textContent=yd,_l=n(),g(Ct.$$.fragment),Cl=n(),be=e("p"),be.textContent=xd,yl=n(),g(yt.$$.fragment),xl=n(),$e=e("p"),$e.textContent=Ed,El=n(),g(xt.$$.fragment),Tl=n(),De=e("p"),De.textContent=Td,bl=n(),g(Et.$$.fragment),$l=n(),we=e("p"),we.textContent=bd,Dl=n(),g(Tt.$$.fragment),wl=n(),ze=e("p"),ze.textContent=$d,zl=n(),g(bt.$$.fragment),ql=n(),qe=e("p"),qe.textContent=Dd,Ol=n(),g($t.$$.fragment),kl=n(),Oe=e("p"),Oe.textContent=wd,Hl=n(),g(Dt.$$.fragment),Pl=n(),ke=e("p"),ke.textContent=zd,Ml=n(),g(wt.$$.fragment),Ll=n(),He=e("p"),He.textContent=qd,Rl=n(),g(zt.$$.fragment),Fl=n(),Pe=e("p"),Pe.textContent=Od,Bl=n(),g(qt.$$.fragment),jl=n(),Me=e("p"),Me.textContent=kd,Nl=n(),g(Ot.$$.fragment),Xa=n(),A=e("section"),G=e("a"),Al=f("Previous: Creating Entities"),Gl=n(),I=e("a"),Il=f("Next: Subscribing to Queries"),this.h()},l(h){const kt=ei("svelte-13nmepq",document.head);dt=ai(kt,!1),Le=Ws(),kt.forEach(l),Ya=o(h),r=a(h,"SECTION",{});var s=d(r);st=a(s,"HEADER",{class:!0,"data-svelte-h":!0}),i(st)!=="svelte-1icpcsf"&&(st.innerHTML=Sl),an=o(s),Ht=a(s,"P",{"data-svelte-h":!0}),i(Ht)!=="svelte-1fqfh7l"&&(Ht.textContent=Ul),nn=o(s),it=a(s,"HEADER",{class:!0,"data-svelte-h":!0}),i(it)!=="svelte-32rkd2"&&(it.innerHTML=Jl),on=o(s),Pt=a(s,"P",{"data-svelte-h":!0}),i(Pt)!=="svelte-573aj2"&&(Pt.innerHTML=Ql),ln=o(s),m(ht.$$.fragment,s),rn=o(s),ct=a(s,"HEADER",{class:!0,"data-svelte-h":!0}),i(ct)!=="svelte-1ueal5j"&&(ct.innerHTML=Vl),dn=o(s),Mt=a(s,"P",{"data-svelte-h":!0}),i(Mt)!=="svelte-3b2tnp"&&(Mt.innerHTML=Wl),sn=o(s),ft=a(s,"DIV",{class:!0,"data-svelte-h":!0}),i(ft)!=="svelte-dda39x"&&(ft.innerHTML=Yl),hn=o(s),Lt=a(s,"P",{"data-svelte-h":!0}),i(Lt)!=="svelte-rds32m"&&(Lt.innerHTML=Xl),cn=o(s),ut=a(s,"DIV",{class:!0,"data-svelte-h":!0}),i(ut)!=="svelte-c9fp49"&&(ut.innerHTML=Zl),fn=o(s),Rt=a(s,"P",{"data-svelte-h":!0}),i(Rt)!=="svelte-12ho7vi"&&(Rt.innerHTML=Kl),un=o(s),Ft=a(s,"DIV",{class:!0});var Hd=d(Ft);vt=a(Hd,"TABLE",{});var Ka=d(vt);Bt=a(Ka,"THEAD",{"data-svelte-h":!0}),i(Bt)!=="svelte-wlou51"&&(Bt.innerHTML=tr),vn=o(Ka),c=a(Ka,"TBODY",{});var v=d(c);b=a(v,"TR",{});var S=d(b);jt=a(S,"TD",{"data-svelte-h":!0}),i(jt)!=="svelte-zjrq6v"&&(jt.textContent=er),gn=o(S),Nt=a(S,"TD",{"data-svelte-h":!0}),i(Nt)!=="svelte-b3ee33"&&(Nt.textContent=ar),mn=o(S),Re=a(S,"TD",{});var Pd=d(Re);Fe=a(Pd,"CODE",{});var Md=d(Fe);pn=u(Md,nr),Md.forEach(l),Pd.forEach(l),_n=o(S),Be=a(S,"TD",{});var Ld=d(Be);je=a(Ld,"CODE",{});var Rd=d(je);Cn=u(Rd,or),Rd.forEach(l),Ld.forEach(l),S.forEach(l),yn=o(v),$=a(v,"TR",{});var U=d($);At=a(U,"TD",{"data-svelte-h":!0}),i(At)!=="svelte-utrf0q"&&(At.textContent=lr),xn=o(U),Gt=a(U,"TD",{"data-svelte-h":!0}),i(Gt)!=="svelte-zd5t41"&&(Gt.textContent=rr),En=o(U),Ne=a(U,"TD",{});var Fd=d(Ne);Ae=a(Fd,"CODE",{});var Bd=d(Ae);Tn=u(Bd,dr),Bd.forEach(l),Fd.forEach(l),bn=o(U),Ge=a(U,"TD",{});var jd=d(Ge);Ie=a(jd,"CODE",{});var Nd=d(Ie);$n=u(Nd,sr),Nd.forEach(l),jd.forEach(l),U.forEach(l),Dn=o(v),D=a(v,"TR",{});var J=d(D);It=a(J,"TD",{"data-svelte-h":!0}),i(It)!=="svelte-18x05u9"&&(It.textContent=ir),wn=o(J),St=a(J,"TD",{"data-svelte-h":!0}),i(St)!=="svelte-1sqmq84"&&(St.textContent=hr),zn=o(J),Se=a(J,"TD",{});var Ad=d(Se);Ue=a(Ad,"CODE",{});var Gd=d(Ue);qn=u(Gd,cr),Gd.forEach(l),Ad.forEach(l),On=o(J),Je=a(J,"TD",{});var Id=d(Je);Qe=a(Id,"CODE",{});var Sd=d(Qe);kn=u(Sd,fr),Sd.forEach(l),Id.forEach(l),J.forEach(l),Hn=o(v),w=a(v,"TR",{});var Q=d(w);Ut=a(Q,"TD",{"data-svelte-h":!0}),i(Ut)!=="svelte-q7284i"&&(Ut.textContent=ur),Pn=o(Q),Jt=a(Q,"TD",{"data-svelte-h":!0}),i(Jt)!=="svelte-10sz97g"&&(Jt.textContent=vr),Mn=o(Q),Ve=a(Q,"TD",{});var Ud=d(Ve);We=a(Ud,"CODE",{});var Jd=d(We);Ln=u(Jd,gr),Jd.forEach(l),Ud.forEach(l),Rn=o(Q),Ye=a(Q,"TD",{});var Qd=d(Ye);Xe=a(Qd,"CODE",{});var Vd=d(Xe);Fn=u(Vd,mr),Vd.forEach(l),Qd.forEach(l),Q.forEach(l),Bn=o(v),z=a(v,"TR",{});var V=d(z);Qt=a(V,"TD",{"data-svelte-h":!0}),i(Qt)!=="svelte-xyy646"&&(Qt.textContent=pr),jn=o(V),Vt=a(V,"TD",{"data-svelte-h":!0}),i(Vt)!=="svelte-1rng31s"&&(Vt.textContent=_r),Nn=o(V),Ze=a(V,"TD",{});var Wd=d(Ze);Ke=a(Wd,"CODE",{});var Yd=d(Ke);An=u(Yd,Cr),Yd.forEach(l),Wd.forEach(l),Gn=o(V),ta=a(V,"TD",{});var Xd=d(ta);ea=a(Xd,"CODE",{});var Zd=d(ea);In=u(Zd,yr),Zd.forEach(l),Xd.forEach(l),V.forEach(l),Sn=o(v),q=a(v,"TR",{});var W=d(q);Wt=a(W,"TD",{"data-svelte-h":!0}),i(Wt)!=="svelte-1dvad2e"&&(Wt.textContent=xr),Un=o(W),Yt=a(W,"TD",{"data-svelte-h":!0}),i(Yt)!=="svelte-15om4h9"&&(Yt.textContent=Er),Jn=o(W),aa=a(W,"TD",{});var Kd=d(aa);na=a(Kd,"CODE",{});var ts=d(na);Qn=u(ts,Tr),ts.forEach(l),Kd.forEach(l),Vn=o(W),oa=a(W,"TD",{});var es=d(oa);la=a(es,"CODE",{});var as=d(la);Wn=u(as,br),as.forEach(l),es.forEach(l),W.forEach(l),Yn=o(v),O=a(v,"TR",{});var Y=d(O);Xt=a(Y,"TD",{"data-svelte-h":!0}),i(Xt)!=="svelte-h38ctp"&&(Xt.textContent=$r),Xn=o(Y),Zt=a(Y,"TD",{"data-svelte-h":!0}),i(Zt)!=="svelte-1kk9bx5"&&(Zt.textContent=Dr),Zn=o(Y),ra=a(Y,"TD",{});var ns=d(ra);da=a(ns,"CODE",{});var os=d(da);Kn=u(os,wr),os.forEach(l),ns.forEach(l),to=o(Y),sa=a(Y,"TD",{});var ls=d(sa);ia=a(ls,"CODE",{});var rs=d(ia);eo=u(rs,zr),rs.forEach(l),ls.forEach(l),Y.forEach(l),ao=o(v),k=a(v,"TR",{});var X=d(k);Kt=a(X,"TD",{"data-svelte-h":!0}),i(Kt)!=="svelte-x6n2mu"&&(Kt.textContent=qr),no=o(X),te=a(X,"TD",{"data-svelte-h":!0}),i(te)!=="svelte-w9bvkk"&&(te.textContent=Or),oo=o(X),ha=a(X,"TD",{});var ds=d(ha);ca=a(ds,"CODE",{});var ss=d(ca);lo=u(ss,kr),ss.forEach(l),ds.forEach(l),ro=o(X),fa=a(X,"TD",{});var is=d(fa);ua=a(is,"CODE",{});var hs=d(ua);so=u(hs,Hr),hs.forEach(l),is.forEach(l),X.forEach(l),io=o(v),H=a(v,"TR",{});var Z=d(H);ee=a(Z,"TD",{"data-svelte-h":!0}),i(ee)!=="svelte-1kydywp"&&(ee.textContent=Pr),ho=o(Z),ae=a(Z,"TD",{"data-svelte-h":!0}),i(ae)!=="svelte-16sns6g"&&(ae.textContent=Mr),co=o(Z),va=a(Z,"TD",{});var cs=d(va);ga=a(cs,"CODE",{});var fs=d(ga);fo=u(fs,Lr),fs.forEach(l),cs.forEach(l),uo=o(Z),ma=a(Z,"TD",{});var us=d(ma);pa=a(us,"CODE",{});var vs=d(pa);vo=u(vs,Rr),vs.forEach(l),us.forEach(l),Z.forEach(l),go=o(v),P=a(v,"TR",{});var K=d(P);ne=a(K,"TD",{"data-svelte-h":!0}),i(ne)!=="svelte-1q4dvgq"&&(ne.textContent=Fr),mo=o(K),oe=a(K,"TD",{"data-svelte-h":!0}),i(oe)!=="svelte-qjzux9"&&(oe.textContent=Br),po=o(K),_a=a(K,"TD",{});var gs=d(_a);Ca=a(gs,"CODE",{});var ms=d(Ca);_o=u(ms,jr),ms.forEach(l),gs.forEach(l),Co=o(K),ya=a(K,"TD",{});var ps=d(ya);xa=a(ps,"CODE",{});var _s=d(xa);yo=u(_s,Nr),_s.forEach(l),ps.forEach(l),K.forEach(l),xo=o(v),M=a(v,"TR",{});var tt=d(M);le=a(tt,"TD",{"data-svelte-h":!0}),i(le)!=="svelte-q513jt"&&(le.textContent=Ar),Eo=o(tt),re=a(tt,"TD",{"data-svelte-h":!0}),i(re)!=="svelte-12almsc"&&(re.textContent=Gr),To=o(tt),Ea=a(tt,"TD",{});var Cs=d(Ea);Ta=a(Cs,"CODE",{});var ys=d(Ta);bo=u(ys,Ir),ys.forEach(l),Cs.forEach(l),$o=o(tt),ba=a(tt,"TD",{});var xs=d(ba);$a=a(xs,"CODE",{});var Es=d($a);Do=u(Es,Sr),Es.forEach(l),xs.forEach(l),tt.forEach(l),wo=o(v),L=a(v,"TR",{});var et=d(L);de=a(et,"TD",{"data-svelte-h":!0}),i(de)!=="svelte-1nllf6w"&&(de.textContent=Ur),zo=o(et),se=a(et,"TD",{"data-svelte-h":!0}),i(se)!=="svelte-1cr22em"&&(se.textContent=Jr),qo=o(et),Da=a(et,"TD",{});var Ts=d(Da);wa=a(Ts,"CODE",{});var bs=d(wa);Oo=u(bs,Qr),bs.forEach(l),Ts.forEach(l),ko=o(et),za=a(et,"TD",{});var $s=d(za);qa=a($s,"CODE",{});var Ds=d(qa);Ho=u(Ds,Vr),Ds.forEach(l),$s.forEach(l),et.forEach(l),Po=o(v),R=a(v,"TR",{});var at=d(R);ie=a(at,"TD",{"data-svelte-h":!0}),i(ie)!=="svelte-pznn9q"&&(ie.textContent=Wr),Mo=o(at),he=a(at,"TD",{"data-svelte-h":!0}),i(he)!=="svelte-f9fs8x"&&(he.textContent=Yr),Lo=o(at),Oa=a(at,"TD",{});var ws=d(Oa);ka=a(ws,"CODE",{});var zs=d(ka);Ro=u(zs,Xr),zs.forEach(l),ws.forEach(l),Fo=o(at),Ha=a(at,"TD",{});var qs=d(Ha);Pa=a(qs,"CODE",{});var Os=d(Pa);Bo=u(Os,Zr),Os.forEach(l),qs.forEach(l),at.forEach(l),jo=o(v),F=a(v,"TR",{});var nt=d(F);ce=a(nt,"TD",{"data-svelte-h":!0}),i(ce)!=="svelte-1noldbj"&&(ce.textContent=Kr),No=o(nt),fe=a(nt,"TD",{"data-svelte-h":!0}),i(fe)!=="svelte-1ys40pf"&&(fe.textContent=td),Ao=o(nt),Ma=a(nt,"TD",{});var ks=d(Ma);La=a(ks,"CODE",{});var Hs=d(La);Go=u(Hs,ed),Hs.forEach(l),ks.forEach(l),Io=o(nt),Ra=a(nt,"TD",{});var Ps=d(Ra);Fa=a(Ps,"CODE",{});var Ms=d(Fa);So=u(Ms,ad),Ms.forEach(l),Ps.forEach(l),nt.forEach(l),Uo=o(v),B=a(v,"TR",{});var ot=d(B);ue=a(ot,"TD",{"data-svelte-h":!0}),i(ue)!=="svelte-1f8pzwh"&&(ue.textContent=nd),Jo=o(ot),ve=a(ot,"TD",{"data-svelte-h":!0}),i(ve)!=="svelte-16nmna1"&&(ve.textContent=od),Qo=o(ot),Ba=a(ot,"TD",{});var Ls=d(Ba);ja=a(Ls,"CODE",{});var Rs=d(ja);Vo=u(Rs,ld),Rs.forEach(l),Ls.forEach(l),Wo=o(ot),Na=a(ot,"TD",{});var Fs=d(Na);Aa=a(Fs,"CODE",{});var Bs=d(Aa);Yo=u(Bs,rd),Bs.forEach(l),Fs.forEach(l),ot.forEach(l),Xo=o(v),j=a(v,"TR",{});var lt=d(j);ge=a(lt,"TD",{"data-svelte-h":!0}),i(ge)!=="svelte-qyl9gq"&&(ge.textContent=dd),Zo=o(lt),me=a(lt,"TD",{"data-svelte-h":!0}),i(me)!=="svelte-42cvq9"&&(me.textContent=sd),Ko=o(lt),Ga=a(lt,"TD",{});var js=d(Ga);Ia=a(js,"CODE",{});var Ns=d(Ia);tl=u(Ns,id),Ns.forEach(l),js.forEach(l),el=o(lt),Sa=a(lt,"TD",{});var As=d(Sa);Ua=a(As,"CODE",{});var Gs=d(Ua);al=u(Gs,hd),Gs.forEach(l),As.forEach(l),lt.forEach(l),nl=o(v),N=a(v,"TR",{});var rt=d(N);pe=a(rt,"TD",{"data-svelte-h":!0}),i(pe)!=="svelte-hxhsl7"&&(pe.textContent=cd),ol=o(rt),_e=a(rt,"TD",{"data-svelte-h":!0}),i(_e)!=="svelte-duos4g"&&(_e.textContent=fd),ll=o(rt),Ja=a(rt,"TD",{});var Is=d(Ja);Qa=a(Is,"CODE",{});var Ss=d(Qa);rl=u(Ss,ud),Ss.forEach(l),Is.forEach(l),dl=o(rt),Va=a(rt,"TD",{});var Us=d(Va);Wa=a(Us,"CODE",{});var Js=d(Wa);sl=u(Js,vd),Js.forEach(l),Us.forEach(l),rt.forEach(l),v.forEach(l),Ka.forEach(l),Hd.forEach(l),il=o(s),Ce=a(s,"P",{"data-svelte-h":!0}),i(Ce)!=="svelte-1kyrj43"&&(Ce.innerHTML=gd),hl=o(s),m(gt.$$.fragment,s),cl=o(s),mt=a(s,"HEADER",{class:!0,"data-svelte-h":!0}),i(mt)!=="svelte-jpfs90"&&(mt.innerHTML=md),fl=o(s),ye=a(s,"P",{"data-svelte-h":!0}),i(ye)!=="svelte-139klyl"&&(ye.textContent=pd),ul=o(s),xe=a(s,"P",{"data-svelte-h":!0}),i(xe)!=="svelte-1kgoqeo"&&(xe.textContent=_d),vl=o(s),m(pt.$$.fragment,s),gl=o(s),Ee=a(s,"P",{"data-svelte-h":!0}),i(Ee)!=="svelte-cp7oix"&&(Ee.textContent=Cd),ml=o(s),m(_t.$$.fragment,s),pl=o(s),Te=a(s,"P",{"data-svelte-h":!0}),i(Te)!=="svelte-359lmc"&&(Te.textContent=yd),_l=o(s),m(Ct.$$.fragment,s),Cl=o(s),be=a(s,"P",{"data-svelte-h":!0}),i(be)!=="svelte-y4dokz"&&(be.textContent=xd),yl=o(s),m(yt.$$.fragment,s),xl=o(s),$e=a(s,"P",{"data-svelte-h":!0}),i($e)!=="svelte-9ltm1a"&&($e.textContent=Ed),El=o(s),m(xt.$$.fragment,s),Tl=o(s),De=a(s,"P",{"data-svelte-h":!0}),i(De)!=="svelte-1earz9t"&&(De.textContent=Td),bl=o(s),m(Et.$$.fragment,s),$l=o(s),we=a(s,"P",{"data-svelte-h":!0}),i(we)!=="svelte-lhyg20"&&(we.textContent=bd),Dl=o(s),m(Tt.$$.fragment,s),wl=o(s),ze=a(s,"P",{"data-svelte-h":!0}),i(ze)!=="svelte-k44fog"&&(ze.textContent=$d),zl=o(s),m(bt.$$.fragment,s),ql=o(s),qe=a(s,"P",{"data-svelte-h":!0}),i(qe)!=="svelte-4jtw0z"&&(qe.textContent=Dd),Ol=o(s),m($t.$$.fragment,s),kl=o(s),Oe=a(s,"P",{"data-svelte-h":!0}),i(Oe)!=="svelte-1uwezc0"&&(Oe.textContent=wd),Hl=o(s),m(Dt.$$.fragment,s),Pl=o(s),ke=a(s,"P",{"data-svelte-h":!0}),i(ke)!=="svelte-1khclo2"&&(ke.textContent=zd),Ml=o(s),m(wt.$$.fragment,s),Ll=o(s),He=a(s,"P",{"data-svelte-h":!0}),i(He)!=="svelte-utkf3b"&&(He.textContent=qd),Rl=o(s),m(zt.$$.fragment,s),Fl=o(s),Pe=a(s,"P",{"data-svelte-h":!0}),i(Pe)!=="svelte-1sdwrs5"&&(Pe.textContent=Od),Bl=o(s),m(qt.$$.fragment,s),jl=o(s),Me=a(s,"P",{"data-svelte-h":!0}),i(Me)!=="svelte-1g02ke1"&&(Me.textContent=kd),Nl=o(s),m(Ot.$$.fragment,s),s.forEach(l),Xa=o(h),A=a(h,"SECTION",{class:!0});var tn=d(A);G=a(tn,"A",{href:!0,class:!0,style:!0});var Qs=d(G);Al=u(Qs,"Previous: Creating Entities"),Qs.forEach(l),Gl=o(tn),I=a(tn,"A",{href:!0,class:!0,style:!0});var Vs=d(I);Il=u(Vs,"Next: Subscribing to Queries"),Vs.forEach(l),tn.forEach(l),this.h()},h(){document.title="Entity Querying - User Guide - Nymph.js",dt.a=Le,T(st,"class","major"),T(it,"class","major"),T(ct,"class","major"),T(ft,"class","table-wrapper"),T(ut,"class","table-wrapper"),T(Ft,"class","table-wrapper"),T(mt,"class","major"),T(G,"href",Xs+"/user-guide/creating-entities"),T(G,"class","button"),Ys(G,"margin",".5em"),T(I,"href",Xs+"/user-guide/subscribing-to-queries"),T(I,"class","button"),Ys(I,"margin",".5em"),T(A,"class","page-steps")},m(h,kt){dt.m(ri,document.head),t(document.head,Le),en(h,Ya,kt),en(h,r,kt),t(r,st),t(r,an),t(r,Ht),t(r,nn),t(r,it),t(r,on),t(r,Pt),t(r,ln),p(ht,r,null),t(r,rn),t(r,ct),t(r,dn),t(r,Mt),t(r,sn),t(r,ft),t(r,hn),t(r,Lt),t(r,cn),t(r,ut),t(r,fn),t(r,Rt),t(r,un),t(r,Ft),t(Ft,vt),t(vt,Bt),t(vt,vn),t(vt,c),t(c,b),t(b,jt),t(b,gn),t(b,Nt),t(b,mn),t(b,Re),t(Re,Fe),t(Fe,pn),t(b,_n),t(b,Be),t(Be,je),t(je,Cn),t(c,yn),t(c,$),t($,At),t($,xn),t($,Gt),t($,En),t($,Ne),t(Ne,Ae),t(Ae,Tn),t($,bn),t($,Ge),t(Ge,Ie),t(Ie,$n),t(c,Dn),t(c,D),t(D,It),t(D,wn),t(D,St),t(D,zn),t(D,Se),t(Se,Ue),t(Ue,qn),t(D,On),t(D,Je),t(Je,Qe),t(Qe,kn),t(c,Hn),t(c,w),t(w,Ut),t(w,Pn),t(w,Jt),t(w,Mn),t(w,Ve),t(Ve,We),t(We,Ln),t(w,Rn),t(w,Ye),t(Ye,Xe),t(Xe,Fn),t(c,Bn),t(c,z),t(z,Qt),t(z,jn),t(z,Vt),t(z,Nn),t(z,Ze),t(Ze,Ke),t(Ke,An),t(z,Gn),t(z,ta),t(ta,ea),t(ea,In),t(c,Sn),t(c,q),t(q,Wt),t(q,Un),t(q,Yt),t(q,Jn),t(q,aa),t(aa,na),t(na,Qn),t(q,Vn),t(q,oa),t(oa,la),t(la,Wn),t(c,Yn),t(c,O),t(O,Xt),t(O,Xn),t(O,Zt),t(O,Zn),t(O,ra),t(ra,da),t(da,Kn),t(O,to),t(O,sa),t(sa,ia),t(ia,eo),t(c,ao),t(c,k),t(k,Kt),t(k,no),t(k,te),t(k,oo),t(k,ha),t(ha,ca),t(ca,lo),t(k,ro),t(k,fa),t(fa,ua),t(ua,so),t(c,io),t(c,H),t(H,ee),t(H,ho),t(H,ae),t(H,co),t(H,va),t(va,ga),t(ga,fo),t(H,uo),t(H,ma),t(ma,pa),t(pa,vo),t(c,go),t(c,P),t(P,ne),t(P,mo),t(P,oe),t(P,po),t(P,_a),t(_a,Ca),t(Ca,_o),t(P,Co),t(P,ya),t(ya,xa),t(xa,yo),t(c,xo),t(c,M),t(M,le),t(M,Eo),t(M,re),t(M,To),t(M,Ea),t(Ea,Ta),t(Ta,bo),t(M,$o),t(M,ba),t(ba,$a),t($a,Do),t(c,wo),t(c,L),t(L,de),t(L,zo),t(L,se),t(L,qo),t(L,Da),t(Da,wa),t(wa,Oo),t(L,ko),t(L,za),t(za,qa),t(qa,Ho),t(c,Po),t(c,R),t(R,ie),t(R,Mo),t(R,he),t(R,Lo),t(R,Oa),t(Oa,ka),t(ka,Ro),t(R,Fo),t(R,Ha),t(Ha,Pa),t(Pa,Bo),t(c,jo),t(c,F),t(F,ce),t(F,No),t(F,fe),t(F,Ao),t(F,Ma),t(Ma,La),t(La,Go),t(F,Io),t(F,Ra),t(Ra,Fa),t(Fa,So),t(c,Uo),t(c,B),t(B,ue),t(B,Jo),t(B,ve),t(B,Qo),t(B,Ba),t(Ba,ja),t(ja,Vo),t(B,Wo),t(B,Na),t(Na,Aa),t(Aa,Yo),t(c,Xo),t(c,j),t(j,ge),t(j,Zo),t(j,me),t(j,Ko),t(j,Ga),t(Ga,Ia),t(Ia,tl),t(j,el),t(j,Sa),t(Sa,Ua),t(Ua,al),t(c,nl),t(c,N),t(N,pe),t(N,ol),t(N,_e),t(N,ll),t(N,Ja),t(Ja,Qa),t(Qa,rl),t(N,dl),t(N,Va),t(Va,Wa),t(Wa,sl),t(r,il),t(r,Ce),t(r,hl),p(gt,r,null),t(r,cl),t(r,mt),t(r,fl),t(r,ye),t(r,ul),t(r,xe),t(r,vl),p(pt,r,null),t(r,gl),t(r,Ee),t(r,ml),p(_t,r,null),t(r,pl),t(r,Te),t(r,_l),p(Ct,r,null),t(r,Cl),t(r,be),t(r,yl),p(yt,r,null),t(r,xl),t(r,$e),t(r,El),p(xt,r,null),t(r,Tl),t(r,De),t(r,bl),p(Et,r,null),t(r,$l),t(r,we),t(r,Dl),p(Tt,r,null),t(r,wl),t(r,ze),t(r,zl),p(bt,r,null),t(r,ql),t(r,qe),t(r,Ol),p($t,r,null),t(r,kl),t(r,Oe),t(r,Hl),p(Dt,r,null),t(r,Pl),t(r,ke),t(r,Ml),p(wt,r,null),t(r,Ll),t(r,He),t(r,Rl),p(zt,r,null),t(r,Fl),t(r,Pe),t(r,Bl),p(qt,r,null),t(r,jl),t(r,Me),t(r,Nl),p(Ot,r,null),en(h,Xa,kt),en(h,A,kt),t(A,G),t(G,Al),t(A,Gl),t(A,I),t(I,Il),Za=!0},p:ni,i(h){Za||(_(ht.$$.fragment,h),_(gt.$$.fragment,h),_(pt.$$.fragment,h),_(_t.$$.fragment,h),_(Ct.$$.fragment,h),_(yt.$$.fragment,h),_(xt.$$.fragment,h),_(Et.$$.fragment,h),_(Tt.$$.fragment,h),_(bt.$$.fragment,h),_($t.$$.fragment,h),_(Dt.$$.fragment,h),_(wt.$$.fragment,h),_(zt.$$.fragment,h),_(qt.$$.fragment,h),_(Ot.$$.fragment,h),Za=!0)},o(h){C(ht.$$.fragment,h),C(gt.$$.fragment,h),C(pt.$$.fragment,h),C(_t.$$.fragment,h),C(Ct.$$.fragment,h),C(yt.$$.fragment,h),C(xt.$$.fragment,h),C(Et.$$.fragment,h),C(Tt.$$.fragment,h),C(bt.$$.fragment,h),C($t.$$.fragment,h),C(Dt.$$.fragment,h),C(wt.$$.fragment,h),C(zt.$$.fragment,h),C(qt.$$.fragment,h),C(Ot.$$.fragment,h),Za=!1},d(h){h&&(dt.d(),l(Ya),l(r),l(Xa),l(A)),l(Le),y(ht),y(gt),y(pt),y(_t),y(Ct),y(yt),y(xt),y(Et),y(Tt),y(bt),y($t),y(Dt),y(wt),y(zt),y(qt),y(Ot)}}}class ui extends oi{constructor(dt){super(),li(this,dt,null,di,Ks,{})}}export{ui as component};
diff --git a/docs/_app/immutable/nodes/22.49022b90.js b/docs/_app/immutable/nodes/22.49022b90.js
deleted file mode 100644
index 1fee58f..0000000
--- a/docs/_app/immutable/nodes/22.49022b90.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import{S as Ne,i as Pe,s as De,R as ke,e as ye,a as l,k as i,q as h,y as _e,F as Ce,T as Ae,h as t,c as p,l as s,m as r,r as m,z as Ee,p as ve,n as q,C as e,b as L,A as be,D as Ue,g as we,d as $e,B as Ie}from"../chunks/index.d7cc8d8b.js";import{H as Te,g as He}from"../chunks/github.df9008b1.js";import{t as Oe}from"../chunks/typescript.7dd1ec19.js";import{b as Se}from"../chunks/paths.d307dac8.js";function qe(le){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}const Le={name:"plaintext",register:qe},je=Le;function ze(le){let u,I,A,n,_,E,j,z,T,F,G,N,R,X,d,v,P,B,J,W,b,D,K,M,Q,w,k,V,Y,Z,g,ee,C,te,ae,x,U,c,f,ne,ie,H,O;return g=new Te({props:{language:Oe,code:`// Export entities to a file.
-nymph.export(filename);
-
-// Export entities to the console.
-nymph.exportPrint();
-
-// Import entities from a file.
-nymph.import(filename);`}}),x=new Te({props:{language:je,code:`#nex2
-# The above line must be the first thing in the file.
-# Comments begin with #
- # And can have white space before them.
-# This defines a UID.
-[5]
-[8000]
-# For UIDs, the name is in angle brackets (<>) and the value follows
-# in square brackets ([]).
-# This starts a new entity.
-{1234abcd}[tag,list,with,commas]
-# For entities, the GUID is in curly brackets ({}), then the etype in
-# angle brackets, then the comma separated tag list follows in square
-# brackets ([]).
-# Properties are stored like this:
-# propname=JSON.stringify(value)
- abilities=["system/all"]
- groups=[]
- inheritAbilities=false
- name="admin"
-# White space before/after "=" and at beginning/end of line is ignored.
- username = "admin"
-{2}[tag,list]
- another="This is another entity."
- newline="\\n"`}}),{c(){u=new ke(!1),I=ye(),A=l(),n=i("section"),_=i("header"),E=i("h1"),j=h("Export and Import"),z=l(),T=i("p"),F=h(`Nymph provides a method for exporting and importing its entities and UIDs,
- regardless of which driver is currently in use. This allows backup, restore,
- duplication, or transferring an entire database, even with different
- database drivers.`),G=l(),N=i("p"),R=h("Nymph has the following methods for exporting and importing entities."),X=l(),d=i("ul"),v=i("li"),P=i("code"),B=h("export"),J=h(" - Export entities to a file."),W=l(),b=i("li"),D=i("code"),K=h("exportPrint"),M=h(" - Export entities to the console."),Q=l(),w=i("li"),k=i("code"),V=h("import"),Y=h(" - Import entities from a file."),Z=l(),_e(g.$$.fragment),ee=l(),C=i("p"),te=h(`The format of a Nymph export file is simple, and readable by all drivers.
- The file extension, nex, stands for Nymph Entity eXchange.`),ae=l(),_e(x.$$.fragment),U=l(),c=i("section"),f=i("a"),ne=h("Previous: Transactions"),ie=l(),H=i("span"),this.h()},l(a){const y=Ce("svelte-efizmr",document.head);u=Ae(y,!1),I=ye(),y.forEach(t),A=p(a),n=s(a,"SECTION",{});var o=r(n);_=s(o,"HEADER",{class:!0});var he=r(_);E=s(he,"H1",{style:!0});var pe=r(E);j=m(pe,"Export and Import"),pe.forEach(t),he.forEach(t),z=p(o),T=s(o,"P",{});var me=r(T);F=m(me,`Nymph provides a method for exporting and importing its entities and UIDs,
- regardless of which driver is currently in use. This allows backup, restore,
- duplication, or transferring an entire database, even with different
- database drivers.`),me.forEach(t),G=p(o),N=s(o,"P",{});var de=r(N);R=m(de,"Nymph has the following methods for exporting and importing entities."),de.forEach(t),X=p(o),d=s(o,"UL",{});var $=r(d);v=s($,"LI",{});var se=r(v);P=s(se,"CODE",{});var ce=r(P);B=m(ce,"export"),ce.forEach(t),J=m(se," - Export entities to a file."),se.forEach(t),W=p($),b=s($,"LI",{});var re=r(b);D=s(re,"CODE",{});var fe=r(D);K=m(fe,"exportPrint"),fe.forEach(t),M=m(re," - Export entities to the console."),re.forEach(t),Q=p($),w=s($,"LI",{});var oe=r(w);k=s(oe,"CODE",{});var ue=r(k);V=m(ue,"import"),ue.forEach(t),Y=m(oe," - Import entities from a file."),oe.forEach(t),$.forEach(t),Z=p(o),Ee(g.$$.fragment,o),ee=p(o),C=s(o,"P",{});var ge=r(C);te=m(ge,`The format of a Nymph export file is simple, and readable by all drivers.
- The file extension, nex, stands for Nymph Entity eXchange.`),ge.forEach(t),ae=p(o),Ee(x.$$.fragment,o),o.forEach(t),U=p(a),c=s(a,"SECTION",{class:!0});var S=r(c);f=s(S,"A",{href:!0,class:!0,style:!0});var xe=r(f);ne=m(xe,"Previous: Transactions"),xe.forEach(t),ie=p(S),H=s(S,"SPAN",{}),r(H).forEach(t),S.forEach(t),this.h()},h(){document.title="Export and Import - User Guide - Nymph.js",u.a=I,ve(E,"font-size","3em"),q(_,"class","major"),q(f,"href",Se+"/user-guide/transactions"),q(f,"class","button"),ve(f,"margin",".5em"),q(c,"class","page-steps")},m(a,y){u.m(He,document.head),e(document.head,I),L(a,A,y),L(a,n,y),e(n,_),e(_,E),e(E,j),e(n,z),e(n,T),e(T,F),e(n,G),e(n,N),e(N,R),e(n,X),e(n,d),e(d,v),e(v,P),e(P,B),e(v,J),e(d,W),e(d,b),e(b,D),e(D,K),e(b,M),e(d,Q),e(d,w),e(w,k),e(k,V),e(w,Y),e(n,Z),be(g,n,null),e(n,ee),e(n,C),e(C,te),e(n,ae),be(x,n,null),L(a,U,y),L(a,c,y),e(c,f),e(f,ne),e(c,ie),e(c,H),O=!0},p:Ue,i(a){O||(we(g.$$.fragment,a),we(x.$$.fragment,a),O=!0)},o(a){$e(g.$$.fragment,a),$e(x.$$.fragment,a),O=!1},d(a){t(I),a&&u.d(),a&&t(A),a&&t(n),Ie(g),Ie(x),a&&t(U),a&&t(c)}}}class Be extends Ne{constructor(u){super(),Pe(this,u,null,ze,De,{})}}export{Be as component};
diff --git a/docs/_app/immutable/nodes/22.e80f4bca.js b/docs/_app/immutable/nodes/22.e80f4bca.js
new file mode 100644
index 0000000..739c846
--- /dev/null
+++ b/docs/_app/immutable/nodes/22.e80f4bca.js
@@ -0,0 +1,36 @@
+import{s as Z,I as ee,e as R,a as r,f as o,l as te,x as ne,J as ae,d as s,c as l,g as m,h as I,r as b,m as se,j as P,k as ie,u as n,i as H,v as re}from"../chunks/scheduler.d7e45cc8.js";import{S as oe,i as le,b as W,d as X,m as B,a as K,t as Q,e as V}from"../chunks/index.77720afb.js";import{H as Y,g as me}from"../chunks/github.64534d2c.js";import{t as he}from"../chunks/typescript.09c48802.js";import{b as pe}from"../chunks/paths.d4a6803e.js";function ce(L){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}const de={name:"plaintext",register:ce},fe=de;function ue(L){let p,y,$,e,c,M='
Export and Import
',N,g,z=`Nymph provides a method for exporting and importing its entities and UIDs,
+ regardless of which driver is currently in use. This allows backup, restore,
+ duplication, or transferring an entire database, even with different
+ database drivers.`,k,x,O="Nymph has the following methods for exporting and importing entities.",A,_,F="
export - Export entities to a file.
exportPrint - Export entities to the console.
import - Import entities from a file.
",S,d,U,v,G=`The format of a Nymph export file is simple, and readable by all drivers.
+ The file extension, nex, stands for Nymph Entity eXchange.`,j,f,E,i,h,q,D,T,C;return d=new Y({props:{language:he,code:`// Export entities to a file.
+nymph.export(filename);
+
+// Export entities to the console.
+nymph.exportPrint();
+
+// Import entities from a file.
+nymph.import(filename);`}}),f=new Y({props:{language:fe,code:`#nex2
+# The above line must be the first thing in the file.
+# Comments begin with #
+ # And can have white space before them.
+# This defines a UID.
+[5]
+[8000]
+# For UIDs, the name is in angle brackets (<>) and the value follows
+# in square brackets ([]).
+# This starts a new entity.
+{1234abcd}[tag,list,with,commas]
+# For entities, the GUID is in curly brackets ({}), then the etype in
+# angle brackets, then the comma separated tag list follows in square
+# brackets ([]).
+# Properties are stored like this:
+# propname=JSON.stringify(value)
+ abilities=["system/all"]
+ groups=[]
+ inheritAbilities=false
+ name="admin"
+# White space before/after "=" and at beginning/end of line is ignored.
+ username = "admin"
+{2}[tag,list]
+ another="This is another entity."
+ newline="\\n"`}}),{c(){p=new ee(!1),y=R(),$=r(),e=o("section"),c=o("header"),c.innerHTML=M,N=r(),g=o("p"),g.textContent=z,k=r(),x=o("p"),x.textContent=O,A=r(),_=o("ul"),_.innerHTML=F,S=r(),W(d.$$.fragment),U=r(),v=o("p"),v.textContent=G,j=r(),W(f.$$.fragment),E=r(),i=o("section"),h=o("a"),q=te("Previous: Transactions"),D=r(),T=o("span"),this.h()},l(t){const u=ne("svelte-efizmr",document.head);p=ae(u,!1),y=R(),u.forEach(s),$=l(t),e=m(t,"SECTION",{});var a=I(e);c=m(a,"HEADER",{class:!0,"data-svelte-h":!0}),b(c)!=="svelte-1g2nrve"&&(c.innerHTML=M),N=l(a),g=m(a,"P",{"data-svelte-h":!0}),b(g)!=="svelte-1j8yzcq"&&(g.textContent=z),k=l(a),x=m(a,"P",{"data-svelte-h":!0}),b(x)!=="svelte-1mscffm"&&(x.textContent=O),A=l(a),_=m(a,"UL",{"data-svelte-h":!0}),b(_)!=="svelte-1rx3iut"&&(_.innerHTML=F),S=l(a),X(d.$$.fragment,a),U=l(a),v=m(a,"P",{"data-svelte-h":!0}),b(v)!=="svelte-q1go0x"&&(v.textContent=G),j=l(a),X(f.$$.fragment,a),a.forEach(s),E=l(t),i=m(t,"SECTION",{class:!0});var w=I(i);h=m(w,"A",{href:!0,class:!0,style:!0});var J=I(h);q=se(J,"Previous: Transactions"),J.forEach(s),D=l(w),T=m(w,"SPAN",{}),I(T).forEach(s),w.forEach(s),this.h()},h(){document.title="Export and Import - User Guide - Nymph.js",p.a=y,P(c,"class","major"),P(h,"href",pe+"/user-guide/transactions"),P(h,"class","button"),ie(h,"margin",".5em"),P(i,"class","page-steps")},m(t,u){p.m(me,document.head),n(document.head,y),H(t,$,u),H(t,e,u),n(e,c),n(e,N),n(e,g),n(e,k),n(e,x),n(e,A),n(e,_),n(e,S),B(d,e,null),n(e,U),n(e,v),n(e,j),B(f,e,null),H(t,E,u),H(t,i,u),n(i,h),n(h,q),n(i,D),n(i,T),C=!0},p:re,i(t){C||(K(d.$$.fragment,t),K(f.$$.fragment,t),C=!0)},o(t){Q(d.$$.fragment,t),Q(f.$$.fragment,t),C=!1},d(t){t&&(p.d(),s($),s(e),s(E),s(i)),s(y),V(d),V(f)}}}class be extends oe{constructor(p){super(),le(this,p,null,ue,Z,{})}}export{be as component};
diff --git a/docs/_app/immutable/nodes/23.d5661c6c.js b/docs/_app/immutable/nodes/23.d5661c6c.js
deleted file mode 100644
index 268bc6f..0000000
--- a/docs/_app/immutable/nodes/23.d5661c6c.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import{S as st,i as it,s as rt,a as d,k as i,q as n,F as ot,h as t,c as p,l as r,m as o,r as a,p as nt,n as y,b as z,C as e,D as xe}from"../chunks/index.d7cc8d8b.js";import{b as lt}from"../chunks/paths.d307dac8.js";function ht(at){let E,s,N,_,F,B,P,K,L,I,T,Q,V,h,Z,k,ee,te,S,ne,ae,g,se,ie,j,re,oe,U,le,he,ce,C,de,pe,x,ue,ye,q,me,fe,m,ge,G,ve,be,O,we,Ee,Ne,$,_e,Ie,H,De,Ae,D,R,Pe,Te,b,ke,w,Se,je,J,f,Y,Ue,v,Ce;return{c(){E=d(),s=i("section"),N=i("header"),_=i("h1"),F=n("Introduction"),B=d(),P=i("p"),K=n(`Nymph is an ORM for Node.js and the browser, written in TypeScript. Nymph
- data objects, called entities, are accessed just like plain objects. Nymph
- includes a REST server and a Publish/Subscribe server.`),L=d(),I=i("header"),T=i("h2"),Q=n("Understanding Nymph Applications"),V=d(),h=i("p"),Z=n("Data in Nymph is stored and manipulated in objects called "),k=i("strong"),ee=n("entities"),te=n(`. Entities can hold most types of data available in JavaScript, including
- other entities. Entities are not strictly structured, so data of any type
- can be added and saved just by assigning a property on the entity and
- calling `),S=i("code"),ne=n("$save"),ae=n(`. This makes data manipulation and rapid
- prototyping in Nymph very easy. Then when you're ready to launch to
- production, you would use a validation library to enforce a schema for your
- entities.
- `),g=i("a"),se=n("Joi"),ie=n(`
- is a good one. You can do this in the
- `),j=i("code"),re=n("$save"),oe=n(`
- method on your entities before calling
- `),U=i("code"),le=n("return await super.$save();"),he=n(`. This means that during
- development, you don't need to worry about managing schemas at all, but you
- still get the benefit of strict checks in production.`),ce=d(),C=i("p"),de=n(`All entities are given a globally unique identifier (GUID), which is a
- random, cryptographically secure, 12 byte integer, encoded in a 24
- character, lowercase HEX string. Since these are random and quite large,
- there should never be any two entities in any Nymph installation with the
- same GUIDs (unless that's done on purpose). Nymph also provides UIDs, which
- are sequential and can be used to number entities (or anything else).`),pe=d(),x=i("p"),ue=n(`Using Nymph, nearly all of an app's business logic can be written on either
- the client side or the server side, since you interact with data the same
- way in each. Anything that relies on access control can be handled on the
- server side where Tilmeld, Nymph's optional user/group manager, provides
- access control.`),ye=d(),q=i("p"),me=n(`If an entity is referenced in another entity's property, the class name is
- saved along with the GUID. When this referenced entity is awoken, Nymph will
- retrieve it using the saved class.`),fe=d(),m=i("p"),ge=n(`When an entity containing a referenced entity is pulled from the database,
- the referenced entity will exist in the data as a "sleeping reference".
- Sleeping references have the right class and know their GUID, but other data
- is not accessible until its pulled from the database. This happens when you
- use the `),G=i("code"),ve=n("$wake"),be=n(" method on it, or the "),O=i("code"),we=n("$wakeAll"),Ee=n(` method
- on its parent.`),Ne=d(),$=i("p"),_e=n(`When querying entities with Nymph, the ETYPE constant on the class
- determines which database table(s) Nymph will look in.`),Ie=d(),H=i("p"),De=n(`Caution: When changing an entity's class name, any entities referencing it
- must be resaved after setting the reference again using the new class name.`),Ae=d(),D=i("header"),R=i("h2"),Pe=n("API Docs"),Te=d(),b=i("p"),ke=n("If you want to really dive deep into Nymph, you can also browse the "),w=i("a"),Se=n("API docs"),je=n(", which covers every part of Nymph's API."),J=d(),f=i("section"),Y=i("span"),Ue=d(),v=i("a"),Ce=n("Next: Creating Entities"),this.h()},l(c){ot("svelte-6cxoo7",document.head).forEach(t),E=p(c),s=r(c,"SECTION",{});var l=o(s);N=r(l,"HEADER",{class:!0});var qe=o(N);_=r(qe,"H1",{style:!0});var Ge=o(_);F=a(Ge,"Introduction"),Ge.forEach(t),qe.forEach(t),B=p(l),P=r(l,"P",{});var Oe=o(P);K=a(Oe,`Nymph is an ORM for Node.js and the browser, written in TypeScript. Nymph
- data objects, called entities, are accessed just like plain objects. Nymph
- includes a REST server and a Publish/Subscribe server.`),Oe.forEach(t),L=p(l),I=r(l,"HEADER",{class:!0});var $e=o(I);T=r($e,"H2",{});var He=o(T);Q=a(He,"Understanding Nymph Applications"),He.forEach(t),$e.forEach(t),V=p(l),h=r(l,"P",{});var u=o(h);Z=a(u,"Data in Nymph is stored and manipulated in objects called "),k=r(u,"STRONG",{});var Re=o(k);ee=a(Re,"entities"),Re.forEach(t),te=a(u,`. Entities can hold most types of data available in JavaScript, including
- other entities. Entities are not strictly structured, so data of any type
- can be added and saved just by assigning a property on the entity and
- calling `),S=r(u,"CODE",{});var We=o(S);ne=a(We,"$save"),We.forEach(t),ae=a(u,`. This makes data manipulation and rapid
- prototyping in Nymph very easy. Then when you're ready to launch to
- production, you would use a validation library to enforce a schema for your
- entities.
- `),g=r(u,"A",{href:!0,target:!0,rel:!0});var Je=o(g);se=a(Je,"Joi"),Je.forEach(t),ie=a(u,`
- is a good one. You can do this in the
- `),j=r(u,"CODE",{});var Ye=o(j);re=a(Ye,"$save"),Ye.forEach(t),oe=a(u,`
- method on your entities before calling
- `),U=r(u,"CODE",{});var Me=o(U);le=a(Me,"return await super.$save();"),Me.forEach(t),he=a(u,`. This means that during
- development, you don't need to worry about managing schemas at all, but you
- still get the benefit of strict checks in production.`),u.forEach(t),ce=p(l),C=r(l,"P",{});var Xe=o(C);de=a(Xe,`All entities are given a globally unique identifier (GUID), which is a
- random, cryptographically secure, 12 byte integer, encoded in a 24
- character, lowercase HEX string. Since these are random and quite large,
- there should never be any two entities in any Nymph installation with the
- same GUIDs (unless that's done on purpose). Nymph also provides UIDs, which
- are sequential and can be used to number entities (or anything else).`),Xe.forEach(t),pe=p(l),x=r(l,"P",{});var ze=o(x);ue=a(ze,`Using Nymph, nearly all of an app's business logic can be written on either
- the client side or the server side, since you interact with data the same
- way in each. Anything that relies on access control can be handled on the
- server side where Tilmeld, Nymph's optional user/group manager, provides
- access control.`),ze.forEach(t),ye=p(l),q=r(l,"P",{});var Fe=o(q);me=a(Fe,`If an entity is referenced in another entity's property, the class name is
- saved along with the GUID. When this referenced entity is awoken, Nymph will
- retrieve it using the saved class.`),Fe.forEach(t),fe=p(l),m=r(l,"P",{});var A=o(m);ge=a(A,`When an entity containing a referenced entity is pulled from the database,
- the referenced entity will exist in the data as a "sleeping reference".
- Sleeping references have the right class and know their GUID, but other data
- is not accessible until its pulled from the database. This happens when you
- use the `),G=r(A,"CODE",{});var Be=o(G);ve=a(Be,"$wake"),Be.forEach(t),be=a(A," method on it, or the "),O=r(A,"CODE",{});var Ke=o(O);we=a(Ke,"$wakeAll"),Ke.forEach(t),Ee=a(A,` method
- on its parent.`),A.forEach(t),Ne=p(l),$=r(l,"P",{});var Le=o($);_e=a(Le,`When querying entities with Nymph, the ETYPE constant on the class
- determines which database table(s) Nymph will look in.`),Le.forEach(t),Ie=p(l),H=r(l,"P",{});var Qe=o(H);De=a(Qe,`Caution: When changing an entity's class name, any entities referencing it
- must be resaved after setting the reference again using the new class name.`),Qe.forEach(t),Ae=p(l),D=r(l,"HEADER",{class:!0});var Ve=o(D);R=r(Ve,"H2",{});var Ze=o(R);Pe=a(Ze,"API Docs"),Ze.forEach(t),Ve.forEach(t),Te=p(l),b=r(l,"P",{});var M=o(b);ke=a(M,"If you want to really dive deep into Nymph, you can also browse the "),w=r(M,"A",{href:!0,rel:!0});var et=o(w);Se=a(et,"API docs"),et.forEach(t),je=a(M,", which covers every part of Nymph's API."),M.forEach(t),l.forEach(t),J=p(c),f=r(c,"SECTION",{class:!0});var X=o(f);Y=r(X,"SPAN",{}),o(Y).forEach(t),Ue=p(X),v=r(X,"A",{href:!0,class:!0,style:!0});var tt=o(v);Ce=a(tt,"Next: Creating Entities"),tt.forEach(t),X.forEach(t),this.h()},h(){document.title="Introduction - User Guide - Nymph.js",nt(_,"font-size","3em"),y(N,"class","major"),y(I,"class","major"),y(g,"href","https://joi.dev/"),y(g,"target","_blank"),y(g,"rel","noreferrer"),y(D,"class","major"),y(w,"href","/api/latest/"),y(w,"rel","external"),y(v,"href",lt+"/user-guide/creating-entities"),y(v,"class","button"),nt(v,"margin",".5em"),y(f,"class","page-steps")},m(c,W){z(c,E,W),z(c,s,W),e(s,N),e(N,_),e(_,F),e(s,B),e(s,P),e(P,K),e(s,L),e(s,I),e(I,T),e(T,Q),e(s,V),e(s,h),e(h,Z),e(h,k),e(k,ee),e(h,te),e(h,S),e(S,ne),e(h,ae),e(h,g),e(g,se),e(h,ie),e(h,j),e(j,re),e(h,oe),e(h,U),e(U,le),e(h,he),e(s,ce),e(s,C),e(C,de),e(s,pe),e(s,x),e(x,ue),e(s,ye),e(s,q),e(q,me),e(s,fe),e(s,m),e(m,ge),e(m,G),e(G,ve),e(m,be),e(m,O),e(O,we),e(m,Ee),e(s,Ne),e(s,$),e($,_e),e(s,Ie),e(s,H),e(H,De),e(s,Ae),e(s,D),e(D,R),e(R,Pe),e(s,Te),e(s,b),e(b,ke),e(b,w),e(w,Se),e(b,je),z(c,J,W),z(c,f,W),e(f,Y),e(f,Ue),e(f,v),e(v,Ce)},p:xe,i:xe,o:xe,d(c){c&&t(E),c&&t(s),c&&t(J),c&&t(f)}}}class pt extends st{constructor(E){super(),it(this,E,null,ht,rt,{})}}export{pt as component};
diff --git a/docs/_app/immutable/nodes/23.e56d922d.js b/docs/_app/immutable/nodes/23.e56d922d.js
new file mode 100644
index 0000000..bcf91ef
--- /dev/null
+++ b/docs/_app/immutable/nodes/23.e56d922d.js
@@ -0,0 +1,34 @@
+import{s as I,a as g,f as c,l as j,x,d as n,c as f,g as d,r as T,h as b,m as S,j as v,k,i as p,u,v as w}from"../chunks/scheduler.d7e45cc8.js";import{S as A,i as U}from"../chunks/index.77720afb.js";import{b as q}from"../chunks/paths.d4a6803e.js";function C(E){let i,s,N=`
Introduction
Nymph is an ORM for Node.js and the browser, written in TypeScript. Nymph
+ data objects, called entities, are accessed just like plain objects. Nymph
+ includes a REST server and a Publish/Subscribe server.
Understanding Nymph Applications
Data in Nymph is stored and manipulated in objects called entities. Entities can hold most types of data available in JavaScript, including
+ other entities. Entities are not strictly structured, so data of any type
+ can be added and saved just by assigning a property on the entity and
+ calling $save. This makes data manipulation and rapid
+ prototyping in Nymph very easy. Then when you're ready to launch to
+ production, you would use a validation library to enforce a schema for your
+ entities.
+ Joi
+ is a good one. You can do this in the
+ $save
+ method on your entities before calling
+ return await super.$save();. This means that during
+ development, you don't need to worry about managing schemas at all, but you
+ still get the benefit of strict checks in production.
All entities are given a globally unique identifier (GUID), which is a
+ random, cryptographically secure, 12 byte integer, encoded in a 24
+ character, lowercase HEX string. Since these are random and quite large,
+ there should never be any two entities in any Nymph installation with the
+ same GUIDs (unless that's done on purpose). Nymph also provides UIDs, which
+ are sequential and can be used to number entities (or anything else).
Using Nymph, nearly all of an app's business logic can be written on either
+ the client side or the server side, since you interact with data the same
+ way in each. Anything that relies on access control can be handled on the
+ server side where Tilmeld, Nymph's optional user/group manager, provides
+ access control.
If an entity is referenced in another entity's property, the class name is
+ saved along with the GUID. When this referenced entity is awoken, Nymph will
+ retrieve it using the saved class.
When an entity containing a referenced entity is pulled from the database,
+ the referenced entity will exist in the data as a "sleeping reference".
+ Sleeping references have the right class and know their GUID, but other data
+ is not accessible until its pulled from the database. This happens when you
+ use the $wake method on it, or the $wakeAll method
+ on its parent.
When querying entities with Nymph, the ETYPE constant on the class
+ determines which database table(s) Nymph will look in.
Caution: When changing an entity's class name, any entities referencing it
+ must be resaved after setting the reference again using the new class name.
API Docs
If you want to really dive deep into Nymph, you can also browse the API docs, which covers every part of Nymph's API.
`,o,t,h,y,a,m;return{c(){i=g(),s=c("section"),s.innerHTML=N,o=g(),t=c("section"),h=c("span"),y=g(),a=c("a"),m=j("Next: Creating Entities"),this.h()},l(e){x("svelte-6cxoo7",document.head).forEach(n),i=f(e),s=d(e,"SECTION",{"data-svelte-h":!0}),T(s)!=="svelte-gi5e61"&&(s.innerHTML=N),o=f(e),t=d(e,"SECTION",{class:!0});var l=b(t);h=d(l,"SPAN",{}),b(h).forEach(n),y=f(l),a=d(l,"A",{href:!0,class:!0,style:!0});var _=b(a);m=S(_,"Next: Creating Entities"),_.forEach(n),l.forEach(n),this.h()},h(){document.title="Introduction - User Guide - Nymph.js",v(a,"href",q+"/user-guide/creating-entities"),v(a,"class","button"),k(a,"margin",".5em"),v(t,"class","page-steps")},m(e,r){p(e,i,r),p(e,s,r),p(e,o,r),p(e,t,r),u(t,h),u(t,y),u(t,a),u(a,m)},p:w,i:w,o:w,d(e){e&&(n(i),n(s),n(o),n(t))}}}class $ extends A{constructor(i){super(),U(this,i,null,C,I,{})}}export{$ as component};
diff --git a/docs/_app/immutable/nodes/24.82606410.js b/docs/_app/immutable/nodes/24.82606410.js
new file mode 100644
index 0000000..46aeae4
--- /dev/null
+++ b/docs/_app/immutable/nodes/24.82606410.js
@@ -0,0 +1,98 @@
+import{s as Pe,I as Ce,e as xe,a as n,f as i,l as H,x as ke,J as qe,d as u,c as r,g as o,h as q,r as m,m as M,j as _,k as Ee,u as e,i as I,v as je}from"../chunks/scheduler.d7e45cc8.js";import{S as He,i as Me,b as z,d as Q,m as W,a as Y,t as B,e as O}from"../chunks/index.77720afb.js";import{H as G,g as Ue}from"../chunks/github.64534d2c.js";import{t as J}from"../chunks/typescript.09c48802.js";import{b as me}from"../chunks/paths.d4a6803e.js";function Ae(Te){let b,j,U,t,p,be='
Subscribing to Queries
',R,$,pe=`Subscribing to a query lets you receive updates to that query. This is a
+ powerful tool for collaborative apps. It's also just as easy as making a
+ regular entity query.`,F,d,K,S,V,X,Z,x,de=`You can use the subscribeEntities method on PubSub to subscribe
+ to a query. It will return a function you can call to subscribe to the
+ query. That function accepts a resolve and reject callback, similar to a
+ promise. The resolve function will receive an update, which will at first be
+ an array of entities, then will be an update object with instructions that
+ updateArray uses to update the original array.`,ee,g,te,E,ge=`You can also receive a count of how many subscribers there are to that
+ query. The count is given to a third callback.`,ae,f,se,T,fe=`To unsubscribe from the query, use the unsubscribe method on
+ the
+ PubSubSubscription object returned by the function.`,ne,y,re,P,ye=`You can subscribe to changes to an entity with the subscribeWith
+ method. This method accepts the callbacks directly and returns a
+ PubSubSubscription
+ object.`,ie,v,oe,C,ve=`Warning: Subscriptions can lead to resource leaks if left open. Take care to
+ unsubscribe to every query you are no longer watching.`,ue,k,we=`Warning: The PubSub server is smart about removing entities that no longer
+ match when a new entity matches, but there are some queries that can have
+ changes in their matching entities without any change to the server (like
+ relative time queries). These queries won't necessarily be updated correctly
+ in due time by the PubSub server.`,A,l,c,le,ce,h,he,L;return g=new G({props:{language:J,code:`let smiths: (User & UserData)[] = [];
+pubsub.subscribeEntities(
+ {
+ class: User
+ },
+ {
+ type: '&',
+ like: ['name', '% Smith']
+ }
+)(
+ (update) => {
+ // This function will be called once initially with an array of
+ // entities, then again every time there's a change with an
+ // update object.
+ // The updateArray function will add any newly matching entities,
+ // update any existing entities that have changed, and remove any
+ // entities that no longer match (including deleted entities).
+ pubsub.updateArray(smiths, update);
+ },
+ (e) => {
+ alert('Error: ' + e.textStatus);
+ }
+);`}}),f=new G({props:{language:J,code:`let smiths: (User & UserData)[] = [];
+pubsub.subscribeEntities(
+ {
+ class: User
+ },
+ {
+ type: '&',
+ like: ['name', '% Smith']
+ }
+)(
+ (update) => {
+ pubsub.updateArray(smiths, update);
+ },
+ (e) => {
+ alert('Error: ' + e.textStatus);
+ },
+ (count) => {
+ // This function will be called each time the count of
+ // subscribers to this query changes.
+ console.log(\`There are now \${count} users watching the Smiths.\`);
+ }
+);`}}),y=new G({props:{language:J,code:`let smiths: (User & UserData)[] = [];
+let subscription = pubsub.subscribeEntities(
+ {
+ class: User
+ },
+ {
+ type: '&',
+ like: ['name', '% Smith']
+ }
+)((update) => {
+ pubsub.updateArray(smiths, update);
+});
+
+onDestroy(() => {
+ subscription.unsubscribe();
+});`}}),v=new G({props:{language:J,code:`let subscription = pubsub.subscribeWith(
+ smithEntity,
+ () => {
+ if (smithEntity.guid == null) {
+ if (confirm('Someone deleted Mr. Smith! Do you want to restore him?')) {
+ smithEntity.$save();
+ }
+ } else {
+ alert("Mr. Smith's entity has changed!");
+ }
+ },
+ (e) => {
+ alert('Error: ' + e.textStatus);
+ },
+ (count) => {
+ console.log(\`There are now \${count} users watching Mr. Smith.\`);
+ }
+);
+
+onDestroy(() => {
+ subscription.unsubscribe();
+});`}}),{c(){b=new Ce(!1),j=xe(),U=n(),t=i("section"),p=i("header"),p.innerHTML=be,R=n(),$=i("p"),$.textContent=pe,F=n(),d=i("p"),K=H("Before we get started, you can follow the "),S=i("a"),V=H("PubSub Server Package"),X=H(" page to set up a Nymph PubSub server."),Z=n(),x=i("p"),x.innerHTML=de,ee=n(),z(g.$$.fragment),te=n(),E=i("p"),E.textContent=ge,ae=n(),z(f.$$.fragment),se=n(),T=i("p"),T.innerHTML=fe,ne=n(),z(y.$$.fragment),re=n(),P=i("p"),P.innerHTML=ye,ie=n(),z(v.$$.fragment),oe=n(),C=i("p"),C.textContent=ve,ue=n(),k=i("p"),k.textContent=we,A=n(),l=i("section"),c=i("a"),le=H("Previous: Entity Querying"),ce=n(),h=i("a"),he=H("Next: Entity Class"),this.h()},l(s){const w=ke("svelte-4wlam7",document.head);b=qe(w,!1),j=xe(),w.forEach(u),U=r(s),t=o(s,"SECTION",{});var a=q(t);p=o(a,"HEADER",{class:!0,"data-svelte-h":!0}),m(p)!=="svelte-1wxvjwc"&&(p.innerHTML=be),R=r(a),$=o(a,"P",{"data-svelte-h":!0}),m($)!=="svelte-zptfod"&&($.textContent=pe),F=r(a),d=o(a,"P",{});var D=q(d);K=M(D,"Before we get started, you can follow the "),S=o(D,"A",{href:!0});var _e=q(S);V=M(_e,"PubSub Server Package"),_e.forEach(u),X=M(D," page to set up a Nymph PubSub server."),D.forEach(u),Z=r(a),x=o(a,"P",{"data-svelte-h":!0}),m(x)!=="svelte-1nwoqjz"&&(x.innerHTML=de),ee=r(a),Q(g.$$.fragment,a),te=r(a),E=o(a,"P",{"data-svelte-h":!0}),m(E)!=="svelte-sbbhjn"&&(E.textContent=ge),ae=r(a),Q(f.$$.fragment,a),se=r(a),T=o(a,"P",{"data-svelte-h":!0}),m(T)!=="svelte-107lklx"&&(T.innerHTML=fe),ne=r(a),Q(y.$$.fragment,a),re=r(a),P=o(a,"P",{"data-svelte-h":!0}),m(P)!=="svelte-1hyvonj"&&(P.innerHTML=ye),ie=r(a),Q(v.$$.fragment,a),oe=r(a),C=o(a,"P",{"data-svelte-h":!0}),m(C)!=="svelte-1uz9efr"&&(C.textContent=ve),ue=r(a),k=o(a,"P",{"data-svelte-h":!0}),m(k)!=="svelte-1p6g7on"&&(k.textContent=we),a.forEach(u),A=r(s),l=o(s,"SECTION",{class:!0});var N=q(l);c=o(N,"A",{href:!0,class:!0,style:!0});var $e=q(c);le=M($e,"Previous: Entity Querying"),$e.forEach(u),ce=r(N),h=o(N,"A",{href:!0,class:!0,style:!0});var Se=q(h);he=M(Se,"Next: Entity Class"),Se.forEach(u),N.forEach(u),this.h()},h(){document.title="Subscribing to Queries - User Guide - Nymph.js",b.a=j,_(p,"class","major"),_(S,"href",me+"/packages/pubsub/"),_(c,"href",me+"/user-guide/entity-querying"),_(c,"class","button"),Ee(c,"margin",".5em"),_(h,"href",me+"/user-guide/entity-class"),_(h,"class","button"),Ee(h,"margin",".5em"),_(l,"class","page-steps")},m(s,w){b.m(Ue,document.head),e(document.head,j),I(s,U,w),I(s,t,w),e(t,p),e(t,R),e(t,$),e(t,F),e(t,d),e(d,K),e(d,S),e(S,V),e(d,X),e(t,Z),e(t,x),e(t,ee),W(g,t,null),e(t,te),e(t,E),e(t,ae),W(f,t,null),e(t,se),e(t,T),e(t,ne),W(y,t,null),e(t,re),e(t,P),e(t,ie),W(v,t,null),e(t,oe),e(t,C),e(t,ue),e(t,k),I(s,A,w),I(s,l,w),e(l,c),e(c,le),e(l,ce),e(l,h),e(h,he),L=!0},p:je,i(s){L||(Y(g.$$.fragment,s),Y(f.$$.fragment,s),Y(y.$$.fragment,s),Y(v.$$.fragment,s),L=!0)},o(s){B(g.$$.fragment,s),B(f.$$.fragment,s),B(y.$$.fragment,s),B(v.$$.fragment,s),L=!1},d(s){s&&(b.d(),u(U),u(t),u(A),u(l)),u(j),O(g),O(f),O(y),O(v)}}}class Qe extends He{constructor(b){super(),Me(this,b,null,Ae,Pe,{})}}export{Qe as component};
diff --git a/docs/_app/immutable/nodes/24.c4d2b8e8.js b/docs/_app/immutable/nodes/24.c4d2b8e8.js
deleted file mode 100644
index c34b47e..0000000
--- a/docs/_app/immutable/nodes/24.c4d2b8e8.js
+++ /dev/null
@@ -1,116 +0,0 @@
-import{S as it,i as ot,s as ut,R as ct,e as rt,a as l,k as o,q as n,y as J,F as lt,T as ht,h as a,c as h,l as u,m as c,r as i,z as K,p as Qe,n as P,C as e,b as L,A as V,D as bt,g as X,d as Z,B as ee}from"../chunks/index.d7cc8d8b.js";import{H as te,g as dt}from"../chunks/github.df9008b1.js";import{t as ae}from"../chunks/typescript.7dd1ec19.js";import{b as Be}from"../chunks/paths.d307dac8.js";function pt(nt){let g,x,M,t,T,q,se,re,A,ne,ie,v,oe,k,ue,ce,le,b,he,U,be,de,O,pe,me,ye,w,fe,N,ge,ve,E,we,d,Ee,W,Se,_e,H,$e,Pe,Te,S,qe,p,ke,I,De,je,Y,Ce,xe,Ae,_,Ue,Q,Oe,Ne,B,We,z,m,y,He,Ie,f,Ye,R;return w=new te({props:{language:ae,code:`let smiths: (User & UserData)[] = [];
-pubsub.subscribeEntities(
- {
- class: User
- },
- {
- type: '&',
- like: ['name', '% Smith']
- }
-)(
- (update) => {
- // This function will be called once initially with an array of
- // entities, then again every time there's a change with an
- // update object.
- // The updateArray function will add any newly matching entities,
- // update any existing entities that have changed, and remove any
- // entities that no longer match (including deleted entities).
- pubsub.updateArray(smiths, update);
- },
- (e) => {
- alert('Error: ' + e.textStatus);
- }
-);`}}),E=new te({props:{language:ae,code:`let smiths: (User & UserData)[] = [];
-pubsub.subscribeEntities(
- {
- class: User
- },
- {
- type: '&',
- like: ['name', '% Smith']
- }
-)(
- (update) => {
- pubsub.updateArray(smiths, update);
- },
- (e) => {
- alert('Error: ' + e.textStatus);
- },
- (count) => {
- // This function will be called each time the count of
- // subscribers to this query changes.
- console.log(\`There are now \${count} users watching the Smiths.\`);
- }
-);`}}),S=new te({props:{language:ae,code:`let smiths: (User & UserData)[] = [];
-let subscription = pubsub.subscribeEntities(
- {
- class: User
- },
- {
- type: '&',
- like: ['name', '% Smith']
- }
-)((update) => {
- pubsub.updateArray(smiths, update);
-});
-
-onDestroy(() => {
- subscription.unsubscribe();
-});`}}),_=new te({props:{language:ae,code:`let subscription = pubsub.subscribeWith(
- smithEntity,
- () => {
- if (smithEntity.guid == null) {
- if (confirm('Someone deleted Mr. Smith! Do you want to restore him?')) {
- smithEntity.$save();
- }
- } else {
- alert("Mr. Smith's entity has changed!");
- }
- },
- (e) => {
- alert('Error: ' + e.textStatus);
- },
- (count) => {
- console.log(\`There are now \${count} users watching Mr. Smith.\`);
- }
-);
-
-onDestroy(() => {
- subscription.unsubscribe();
-});`}}),{c(){g=new ct(!1),x=rt(),M=l(),t=o("section"),T=o("header"),q=o("h1"),se=n("Subscribing to Queries"),re=l(),A=o("p"),ne=n(`Subscribing to a query lets you receive updates to that query. This is a
- powerful tool for collaborative apps. It's also just as easy as making a
- regular entity query.`),ie=l(),v=o("p"),oe=n("Before we get started, you can follow the "),k=o("a"),ue=n("PubSub Server Package"),ce=n(" page to set up a Nymph PubSub server."),le=l(),b=o("p"),he=n("You can use the "),U=o("code"),be=n("subscribeEntities"),de=n(` method on PubSub to subscribe
- to a query. It will return a function you can call to subscribe to the
- query. That function accepts a resolve and reject callback, similar to a
- promise. The resolve function will receive an update, which will at first be
- an array of entities, then will be an update object with instructions that
- `),O=o("code"),pe=n("updateArray"),me=n(" uses to update the original array."),ye=l(),J(w.$$.fragment),fe=l(),N=o("p"),ge=n(`You can also receive a count of how many subscribers there are to that
- query. The count is given to a third callback.`),ve=l(),J(E.$$.fragment),we=l(),d=o("p"),Ee=n("To unsubscribe from the query, use the "),W=o("code"),Se=n("unsubscribe"),_e=n(` method on
- the
- `),H=o("code"),$e=n("PubSubSubscription"),Pe=n(" object returned by the function."),Te=l(),J(S.$$.fragment),qe=l(),p=o("p"),ke=n("You can subscribe to changes to an entity with the "),I=o("code"),De=n("subscribeWith"),je=n(`
- method. This method accepts the callbacks directly and returns a
- `),Y=o("code"),Ce=n("PubSubSubscription"),xe=n(`
- object.`),Ae=l(),J(_.$$.fragment),Ue=l(),Q=o("p"),Oe=n(`Warning: Subscriptions can lead to resource leaks if left open. Take care to
- unsubscribe to every query you are no longer watching.`),Ne=l(),B=o("p"),We=n(`Warning: The PubSub server is smart about removing entities that no longer
- match when a new entity matches, but there are some queries that can have
- changes in their matching entities without any change to the server (like
- relative time queries). These queries won't necessarily be updated correctly
- in due time by the PubSub server.`),z=l(),m=o("section"),y=o("a"),He=n("Previous: Entity Querying"),Ie=l(),f=o("a"),Ye=n("Next: Entity Class"),this.h()},l(r){const $=lt("svelte-4wlam7",document.head);g=ht($,!1),x=rt(),$.forEach(a),M=h(r),t=u(r,"SECTION",{});var s=c(t);T=u(s,"HEADER",{class:!0});var Me=c(T);q=u(Me,"H1",{style:!0});var ze=c(q);se=i(ze,"Subscribing to Queries"),ze.forEach(a),Me.forEach(a),re=h(s),A=u(s,"P",{});var Re=c(A);ne=i(Re,`Subscribing to a query lets you receive updates to that query. This is a
- powerful tool for collaborative apps. It's also just as easy as making a
- regular entity query.`),Re.forEach(a),ie=h(s),v=u(s,"P",{});var F=c(v);oe=i(F,"Before we get started, you can follow the "),k=u(F,"A",{href:!0});var Fe=c(k);ue=i(Fe,"PubSub Server Package"),Fe.forEach(a),ce=i(F," page to set up a Nymph PubSub server."),F.forEach(a),le=h(s),b=u(s,"P",{});var D=c(b);he=i(D,"You can use the "),U=u(D,"CODE",{});var Ge=c(U);be=i(Ge,"subscribeEntities"),Ge.forEach(a),de=i(D,` method on PubSub to subscribe
- to a query. It will return a function you can call to subscribe to the
- query. That function accepts a resolve and reject callback, similar to a
- promise. The resolve function will receive an update, which will at first be
- an array of entities, then will be an update object with instructions that
- `),O=u(D,"CODE",{});var Je=c(O);pe=i(Je,"updateArray"),Je.forEach(a),me=i(D," uses to update the original array."),D.forEach(a),ye=h(s),K(w.$$.fragment,s),fe=h(s),N=u(s,"P",{});var Ke=c(N);ge=i(Ke,`You can also receive a count of how many subscribers there are to that
- query. The count is given to a third callback.`),Ke.forEach(a),ve=h(s),K(E.$$.fragment,s),we=h(s),d=u(s,"P",{});var j=c(d);Ee=i(j,"To unsubscribe from the query, use the "),W=u(j,"CODE",{});var Le=c(W);Se=i(Le,"unsubscribe"),Le.forEach(a),_e=i(j,` method on
- the
- `),H=u(j,"CODE",{});var Ve=c(H);$e=i(Ve,"PubSubSubscription"),Ve.forEach(a),Pe=i(j," object returned by the function."),j.forEach(a),Te=h(s),K(S.$$.fragment,s),qe=h(s),p=u(s,"P",{});var C=c(p);ke=i(C,"You can subscribe to changes to an entity with the "),I=u(C,"CODE",{});var Xe=c(I);De=i(Xe,"subscribeWith"),Xe.forEach(a),je=i(C,`
- method. This method accepts the callbacks directly and returns a
- `),Y=u(C,"CODE",{});var Ze=c(Y);Ce=i(Ze,"PubSubSubscription"),Ze.forEach(a),xe=i(C,`
- object.`),C.forEach(a),Ae=h(s),K(_.$$.fragment,s),Ue=h(s),Q=u(s,"P",{});var et=c(Q);Oe=i(et,`Warning: Subscriptions can lead to resource leaks if left open. Take care to
- unsubscribe to every query you are no longer watching.`),et.forEach(a),Ne=h(s),B=u(s,"P",{});var tt=c(B);We=i(tt,`Warning: The PubSub server is smart about removing entities that no longer
- match when a new entity matches, but there are some queries that can have
- changes in their matching entities without any change to the server (like
- relative time queries). These queries won't necessarily be updated correctly
- in due time by the PubSub server.`),tt.forEach(a),s.forEach(a),z=h(r),m=u(r,"SECTION",{class:!0});var G=c(m);y=u(G,"A",{href:!0,class:!0,style:!0});var at=c(y);He=i(at,"Previous: Entity Querying"),at.forEach(a),Ie=h(G),f=u(G,"A",{href:!0,class:!0,style:!0});var st=c(f);Ye=i(st,"Next: Entity Class"),st.forEach(a),G.forEach(a),this.h()},h(){document.title="Subscribing to Queries - User Guide - Nymph.js",g.a=x,Qe(q,"font-size","3em"),P(T,"class","major"),P(k,"href",Be+"/packages/pubsub/"),P(y,"href",Be+"/user-guide/entity-querying"),P(y,"class","button"),Qe(y,"margin",".5em"),P(f,"href",Be+"/user-guide/entity-class"),P(f,"class","button"),Qe(f,"margin",".5em"),P(m,"class","page-steps")},m(r,$){g.m(dt,document.head),e(document.head,x),L(r,M,$),L(r,t,$),e(t,T),e(T,q),e(q,se),e(t,re),e(t,A),e(A,ne),e(t,ie),e(t,v),e(v,oe),e(v,k),e(k,ue),e(v,ce),e(t,le),e(t,b),e(b,he),e(b,U),e(U,be),e(b,de),e(b,O),e(O,pe),e(b,me),e(t,ye),V(w,t,null),e(t,fe),e(t,N),e(N,ge),e(t,ve),V(E,t,null),e(t,we),e(t,d),e(d,Ee),e(d,W),e(W,Se),e(d,_e),e(d,H),e(H,$e),e(d,Pe),e(t,Te),V(S,t,null),e(t,qe),e(t,p),e(p,ke),e(p,I),e(I,De),e(p,je),e(p,Y),e(Y,Ce),e(p,xe),e(t,Ae),V(_,t,null),e(t,Ue),e(t,Q),e(Q,Oe),e(t,Ne),e(t,B),e(B,We),L(r,z,$),L(r,m,$),e(m,y),e(y,He),e(m,Ie),e(m,f),e(f,Ye),R=!0},p:bt,i(r){R||(X(w.$$.fragment,r),X(E.$$.fragment,r),X(S.$$.fragment,r),X(_.$$.fragment,r),R=!0)},o(r){Z(w.$$.fragment,r),Z(E.$$.fragment,r),Z(S.$$.fragment,r),Z(_.$$.fragment,r),R=!1},d(r){a(x),r&&g.d(),r&&a(M),r&&a(t),ee(w),ee(E),ee(S),ee(_),r&&a(z),r&&a(m)}}}class vt extends it{constructor(g){super(),ot(this,g,null,pt,ut,{})}}export{vt as component};
diff --git a/docs/_app/immutable/nodes/25.0a00f3be.js b/docs/_app/immutable/nodes/25.0a00f3be.js
new file mode 100644
index 0000000..6314b46
--- /dev/null
+++ b/docs/_app/immutable/nodes/25.0a00f3be.js
@@ -0,0 +1,151 @@
+import{s as ut,I as yt,e as lt,a as i,f as s,l as ct,x as ft,J as gt,d as c,c as r,g as o,h as j,r as l,m as ht,j as E,k as dt,u as e,i as I,v as vt}from"../chunks/scheduler.d7e45cc8.js";import{S as wt,i as $t,b as Tt,d as bt,m as xt,a as _t,t as Ct,e as Nt}from"../chunks/index.77720afb.js";import{H as Et,g as Ht}from"../chunks/github.64534d2c.js";import{t as Mt}from"../chunks/typescript.09c48802.js";import{b as mt}from"../chunks/paths.d4a6803e.js";function Pt(pt){let p,H,M,t,u,Q='
Transactions
',D,g,B=`In Node.js, Nymph supports nested transactions. Nothing will be permanently
+ written to the database's storage, and no PubSub subscribers will be
+ notified, until the highest level transaction is committed. When a nested
+ transaction is rolled back, the database will be in the state where the
+ transaction above it started that nested transaction.`,J,v,K=`When you start a transaction, you give it a name, then you can commit or
+ roll back that transaction, by name. This means if you're doing transactions
+ recursively, you should use a counter in your name. Nymph uses internal
+ transactions that start with the "nymph-" prefix, so don't use that. You
+ should be sure to commit or rollback transactions in the reverse order that
+ they were started, or you might run into trouble.`,S,w,X="Nymph has the following methods for managing transactions.",q,$,Z="
startTransaction - Start a named transaction.
commit - Commit a named transaction.
rollback - Rollback a named transaction.
inTransaction - Check if Nymph is currently running within a transaction.
",z,T,tt=`startTransaction will return a new instance of Nymph. For the rest
+ of the transaction, until it is committed or rolled back, you should use this
+ instance. It will be tied to a specific connection to the database.`,A,b,et=`The transaction instance of Nymph has its own set of classes. You can use
+ its getEntityClass method to get the proper classes for that instance
+ of Nymph.`,U,x,nt=`When you start a new transaction, entities retrieved from that transaction's
+ Nymph instance will have that instance within their static nymph
+ property and instance $nymph property. As long as the entity code
+ always uses these instances, every query and change should occur within that
+ transaction.`,Y,_,at=`Not all databases that Nymph supports (specifically, MySQL with an engine
+ that doesn't support transactions, like the MyISAM engine) can use
+ transactions. To ensure data consistency, it's highly recommended to use a
+ configuration that supports transactions.`,O,C,st=`Here is an example of a class that uses a transaction to delete all of its
+ children when it is deleted. If any of its children cannot be deleted, then
+ the transaction is rolled back, meaning none of its children get deleted.`,W,y,R,N,ot=`The $setNymph method is used to make sure the entity and all
+ referenced entities use the transactional Nymph instance. The
+ tnymph Nymph instance is used during the transaction, and the
+ children are retrieved using the proper class with
+ tnymph.getEntityClass(Todo).`,P,h,d,V,F,m,G,k;return y=new Et({props:{language:Mt,code:`import { EntityUniqueConstraintError, type Nymph } from '@nymphjs/nymph';
+import { Entity, nymphJoiProps } from '@nymphjs/nymph';
+import type { AccessControlData } from '@nymphjs/tilmeld';
+import { enforceTilmeld, tilmeldJoiProps } from '@nymphjs/tilmeld';
+import Joi from 'joi';
+
+export type TodoData = {
+ name: string;
+ done: boolean;
+ parent?: Todo & TodoData;
+} & AccessControlData;
+
+export class Todo extends Entity {
+ static ETYPE = 'todo';
+ static class = 'Todo';
+
+ protected $clientEnabledMethods = [];
+ protected $allowlistData? = ['name', 'done', 'parent'];
+ protected $protectedTags = [];
+ protected $allowlistTags? = [];
+
+ constructor() {
+ super();
+
+ this.$data.name = '';
+ this.$data.done = false;
+ }
+
+ async $getUniques() {
+ return [
+ \`\${this.$data.user?.guid}:\${this.$data.parent?.guid}:\${this.$data.name}\`,
+ ];
+ }
+
+ /**
+ * Set a new Nymph instance on this and all contained entities.
+ */
+ $setNymph(nymph: Nymph) {
+ this.$nymph = nymph;
+ if (!this.$asleep()) {
+ if (this.$data.user) {
+ this.$data.user.$setNymph(nymph);
+ }
+ if (this.$data.group) {
+ this.$data.group.$setNymph(nymph);
+ }
+ if (this.$data.parent) {
+ this.$data.parent.$setNymph(nymph);
+ }
+ }
+ }
+
+ async $save() {
+ const tilmeld = enforceTilmeld(this);
+ if (!tilmeld.gatekeeper()) {
+ // Only allow logged in users to save.
+ throw new Error('You are not logged in.');
+ }
+
+ // Validate the entity's data.
+ Joi.attempt(
+ this.$getValidatable(),
+ Joi.object().keys({
+ ...nymphJoiProps,
+ ...tilmeldJoiProps,
+
+ name: Joi.string().trim(false).max(500, 'utf8').required(),
+ done: Joi.boolean().required(),
+ parent: Joi.object().instance(Todo),
+ }),
+ 'Invalid Todo: ',
+ );
+
+ try {
+ return await super.$save();
+ } catch (e: any) {
+ if (e instanceof EntityUniqueConstraintError) {
+ throw new Error('There is already a todo for that.');
+ }
+ throw e;
+ }
+ }
+
+ async $delete() {
+ const transaction = 'todo-delete-' + this.guid;
+ const nymph = this.$nymph;
+ const tnymph = await nymph.startTransaction(transaction);
+ this.$setNymph(tnymph);
+
+ try {
+ // Delete this todo's children.
+ const children = await tnymph.getEntities(
+ {
+ class: tnymph.getEntityClass(Todo),
+ skipAc: true,
+ },
+ {
+ type: '&',
+ ref: ['parent', this],
+ },
+ );
+
+ for (let child of children) {
+ if (!(await child.$delete())) {
+ throw new Error("Couldn't delete child todo.");
+ }
+ }
+
+ // Delete todo.
+ let success = await super.$delete();
+ if (success) {
+ success = await tnymph.commit(transaction);
+ } else {
+ await tnymph.rollback(transaction);
+ }
+ this.$setNymph(nymph);
+ return success;
+ } catch (e: any) {
+ await tnymph.rollback(transaction);
+ this.$setNymph(nymph);
+ throw e;
+ }
+ }
+}
+`}}),{c(){p=new yt(!1),H=lt(),M=i(),t=s("section"),u=s("header"),u.innerHTML=Q,D=i(),g=s("p"),g.textContent=B,J=i(),v=s("p"),v.textContent=K,S=i(),w=s("p"),w.innerHTML=X,q=i(),$=s("ul"),$.innerHTML=Z,z=i(),T=s("p"),T.innerHTML=tt,A=i(),b=s("p"),b.innerHTML=et,U=i(),x=s("p"),x.innerHTML=nt,Y=i(),_=s("p"),_.textContent=at,O=i(),C=s("p"),C.textContent=st,W=i(),Tt(y.$$.fragment),R=i(),N=s("p"),N.innerHTML=ot,P=i(),h=s("section"),d=s("a"),V=ct("Previous: UIDs"),F=i(),m=s("a"),G=ct("Next: Export and Import"),this.h()},l(a){const f=ft("svelte-10lzn9g",document.head);p=gt(f,!1),H=lt(),f.forEach(c),M=r(a),t=o(a,"SECTION",{});var n=j(t);u=o(n,"HEADER",{class:!0,"data-svelte-h":!0}),l(u)!=="svelte-av4w2r"&&(u.innerHTML=Q),D=r(n),g=o(n,"P",{"data-svelte-h":!0}),l(g)!=="svelte-1rsslgi"&&(g.textContent=B),J=r(n),v=o(n,"P",{"data-svelte-h":!0}),l(v)!=="svelte-12zk7dr"&&(v.textContent=K),S=r(n),w=o(n,"P",{"data-svelte-h":!0}),l(w)!=="svelte-cl7x23"&&(w.innerHTML=X),q=r(n),$=o(n,"UL",{"data-svelte-h":!0}),l($)!=="svelte-11h7zup"&&($.innerHTML=Z),z=r(n),T=o(n,"P",{"data-svelte-h":!0}),l(T)!=="svelte-1yvjz3q"&&(T.innerHTML=tt),A=r(n),b=o(n,"P",{"data-svelte-h":!0}),l(b)!=="svelte-19zzbn9"&&(b.innerHTML=et),U=r(n),x=o(n,"P",{"data-svelte-h":!0}),l(x)!=="svelte-grajno"&&(x.innerHTML=nt),Y=r(n),_=o(n,"P",{"data-svelte-h":!0}),l(_)!=="svelte-15godzb"&&(_.textContent=at),O=r(n),C=o(n,"P",{"data-svelte-h":!0}),l(C)!=="svelte-wfsavt"&&(C.textContent=st),W=r(n),bt(y.$$.fragment,n),R=r(n),N=o(n,"P",{"data-svelte-h":!0}),l(N)!=="svelte-8ttwld"&&(N.innerHTML=ot),n.forEach(c),P=r(a),h=o(a,"SECTION",{class:!0});var L=j(h);d=o(L,"A",{href:!0,class:!0,style:!0});var it=j(d);V=ht(it,"Previous: UIDs"),it.forEach(c),F=r(L),m=o(L,"A",{href:!0,class:!0,style:!0});var rt=j(m);G=ht(rt,"Next: Export and Import"),rt.forEach(c),L.forEach(c),this.h()},h(){document.title="Transactions - User Guide - Nymph.js",p.a=H,E(u,"class","major"),E(d,"href",mt+"/user-guide/uids"),E(d,"class","button"),dt(d,"margin",".5em"),E(m,"href",mt+"/user-guide/export-and-import"),E(m,"class","button"),dt(m,"margin",".5em"),E(h,"class","page-steps")},m(a,f){p.m(Ht,document.head),e(document.head,H),I(a,M,f),I(a,t,f),e(t,u),e(t,D),e(t,g),e(t,J),e(t,v),e(t,S),e(t,w),e(t,q),e(t,$),e(t,z),e(t,T),e(t,A),e(t,b),e(t,U),e(t,x),e(t,Y),e(t,_),e(t,O),e(t,C),e(t,W),xt(y,t,null),e(t,R),e(t,N),I(a,P,f),I(a,h,f),e(h,d),e(d,V),e(h,F),e(h,m),e(m,G),k=!0},p:vt,i(a){k||(_t(y.$$.fragment,a),k=!0)},o(a){Ct(y.$$.fragment,a),k=!1},d(a){a&&(p.d(),c(M),c(t),c(P),c(h)),c(H),Nt(y)}}}class Jt extends wt{constructor(p){super(),$t(this,p,null,Pt,ut,{})}}export{Jt as component};
diff --git a/docs/_app/immutable/nodes/25.73bae614.js b/docs/_app/immutable/nodes/25.73bae614.js
deleted file mode 100644
index 9b7b39c..0000000
--- a/docs/_app/immutable/nodes/25.73bae614.js
+++ /dev/null
@@ -1,177 +0,0 @@
-import{S as De,i as Ie,s as Pe,R as xe,e as Te,a as h,k as s,q as a,y as Oe,F as Se,T as je,h as e,c as d,l as o,m as i,r as n,z as Ae,p as se,n as S,C as t,b as at,A as Je,D as qe,g as He,d as Le,B as Me}from"../chunks/index.d7cc8d8b.js";import{H as Ue,g as We}from"../chunks/github.df9008b1.js";import{t as Ye}from"../chunks/typescript.7dd1ec19.js";import{b as Ce}from"../chunks/paths.d307dac8.js";function Re(ke){let b,j,K,r,N,T,nt,st,A,ot,it,J,rt,lt,C,q,ct,ht,dt,m,k,H,mt,pt,ut,D,L,yt,ft,gt,I,M,Et,wt,bt,P,U,vt,_t,$t,x,W,Nt,Tt,Ct,v,kt,Y,Dt,It,Pt,u,xt,R,Ot,St,z,jt,At,Jt,F,qt,Ht,Q,Lt,Mt,_,Ut,p,Wt,V,Yt,Rt,B,zt,Ft,G,Qt,Vt,X,y,f,Bt,Gt,g,Kt,Z;return _=new Ue({props:{language:Ye,code:`import { EntityUniqueConstraintError, type Nymph } from '@nymphjs/nymph';
-import { Entity, nymphJoiProps } from '@nymphjs/nymph';
-import type { AccessControlData } from '@nymphjs/tilmeld';
-import { enforceTilmeld, tilmeldJoiProps } from '@nymphjs/tilmeld';
-import Joi from 'joi';
-
-export type TodoData = {
- name: string;
- done: boolean;
- parent?: Todo & TodoData;
-} & AccessControlData;
-
-export class Todo extends Entity {
- static ETYPE = 'todo';
- static class = 'Todo';
-
- protected $clientEnabledMethods = [];
- protected $allowlistData? = ['name', 'done', 'parent'];
- protected $protectedTags = [];
- protected $allowlistTags? = [];
-
- constructor() {
- super();
-
- this.$data.name = '';
- this.$data.done = false;
- }
-
- async $getUniques() {
- return [
- \`\${this.$data.user?.guid}:\${this.$data.parent?.guid}:\${this.$data.name}\`,
- ];
- }
-
- /**
- * Set a new Nymph instance on this and all contained entities.
- */
- $setNymph(nymph: Nymph) {
- this.$nymph = nymph;
- if (!this.$asleep()) {
- if (this.$data.user) {
- this.$data.user.$setNymph(nymph);
- }
- if (this.$data.group) {
- this.$data.group.$setNymph(nymph);
- }
- if (this.$data.parent) {
- this.$data.parent.$setNymph(nymph);
- }
- }
- }
-
- async $save() {
- const tilmeld = enforceTilmeld(this);
- if (!tilmeld.gatekeeper()) {
- // Only allow logged in users to save.
- throw new Error('You are not logged in.');
- }
-
- // Validate the entity's data.
- Joi.attempt(
- this.$getValidatable(),
- Joi.object().keys({
- ...nymphJoiProps,
- ...tilmeldJoiProps,
-
- name: Joi.string().trim(false).max(500, 'utf8').required(),
- done: Joi.boolean().required(),
- parent: Joi.object().instance(Todo),
- }),
- 'Invalid Todo: ',
- );
-
- try {
- return await super.$save();
- } catch (e: any) {
- if (e instanceof EntityUniqueConstraintError) {
- throw new Error('There is already a todo for that.');
- }
- throw e;
- }
- }
-
- async $delete() {
- const transaction = 'todo-delete-' + this.guid;
- const nymph = this.$nymph;
- const tnymph = await nymph.startTransaction(transaction);
- this.$setNymph(tnymph);
-
- try {
- // Delete this todo's children.
- const children = await tnymph.getEntities(
- {
- class: tnymph.getEntityClass(Todo),
- skipAc: true,
- },
- {
- type: '&',
- ref: ['parent', this],
- },
- );
-
- for (let child of children) {
- if (!(await child.$delete())) {
- throw new Error("Couldn't delete child todo.");
- }
- }
-
- // Delete todo.
- let success = await super.$delete();
- if (success) {
- success = await tnymph.commit(transaction);
- } else {
- await tnymph.rollback(transaction);
- }
- this.$setNymph(nymph);
- return success;
- } catch (e: any) {
- await tnymph.rollback(transaction);
- this.$setNymph(nymph);
- throw e;
- }
- }
-}
-`}}),{c(){b=new xe(!1),j=Te(),K=h(),r=s("section"),N=s("header"),T=s("h1"),nt=a("Transactions"),st=h(),A=s("p"),ot=a(`In Node.js, Nymph supports nested transactions. Nothing will be permanently
- written to the database's storage, and no PubSub subscribers will be
- notified, until the highest level transaction is committed. When a nested
- transaction is rolled back, the database will be in the state where the
- transaction above it started that nested transaction.`),it=h(),J=s("p"),rt=a(`When you start a transaction, you give it a name, then you can commit or
- roll back that transaction, by name. This means if you're doing transactions
- recursively, you should use a counter in your name. Nymph uses internal
- transactions that start with the "nymph-" prefix, so don't use that. You
- should be sure to commit or rollback transactions in the reverse order that
- they were started, or you might run into trouble.`),lt=h(),C=s("p"),q=s("code"),ct=a("Nymph"),ht=a(" has the following methods for managing transactions."),dt=h(),m=s("ul"),k=s("li"),H=s("code"),mt=a("startTransaction"),pt=a(" - Start a named transaction."),ut=h(),D=s("li"),L=s("code"),yt=a("commit"),ft=a(" - Commit a named transaction."),gt=h(),I=s("li"),M=s("code"),Et=a("rollback"),wt=a(" - Rollback a named transaction."),bt=h(),P=s("li"),U=s("code"),vt=a("inTransaction"),_t=a(" - Check if Nymph is currently running within a transaction."),$t=h(),x=s("p"),W=s("code"),Nt=a("startTransaction"),Tt=a(` will return a new instance of Nymph. For the rest
- of the transaction, until it is committed or rolled back, you should use this
- instance. It will be tied to a specific connection to the database.`),Ct=h(),v=s("p"),kt=a(`The transaction instance of Nymph has its own set of classes. You can use
- its `),Y=s("code"),Dt=a("getEntityClass"),It=a(` method to get the proper classes for that instance
- of Nymph.`),Pt=h(),u=s("p"),xt=a(`When you start a new transaction, entities retrieved from that transaction's
- Nymph instance will have that instance within their static `),R=s("code"),Ot=a("nymph"),St=a(`
- property and instance `),z=s("code"),jt=a("$nymph"),At=a(` property. As long as the entity code
- always uses these instances, every query and change should occur within that
- transaction.`),Jt=h(),F=s("p"),qt=a(`Not all databases that Nymph supports (specifically, MySQL with an engine
- that doesn't support transactions, like the MyISAM engine) can use
- transactions. To ensure data consistency, it's highly recommended to use a
- configuration that supports transactions.`),Ht=h(),Q=s("p"),Lt=a(`Here is an example of a class that uses a transaction to delete all of its
- children when it is deleted. If any of its children cannot be deleted, then
- the transaction is rolled back, meaning none of its children get deleted.`),Mt=h(),Oe(_.$$.fragment),Ut=h(),p=s("p"),Wt=a("The "),V=s("code"),Yt=a("$setNymph"),Rt=a(` method is used to make sure the entity and all
- referenced entities use the transactional Nymph instance. The
- `),B=s("code"),zt=a("tnymph"),Ft=a(` Nymph instance is used during the transaction, and the
- children are retrieved using the proper class with
- `),G=s("code"),Qt=a("tnymph.getEntityClass(Todo)"),Vt=a("."),X=h(),y=s("section"),f=s("a"),Bt=a("Previous: UIDs"),Gt=h(),g=s("a"),Kt=a("Next: Export and Import"),this.h()},l(c){const $=Se("svelte-10lzn9g",document.head);b=je($,!1),j=Te(),$.forEach(e),K=d(c),r=o(c,"SECTION",{});var l=i(r);N=o(l,"HEADER",{class:!0});var oe=i(N);T=o(oe,"H1",{style:!0});var ie=i(T);nt=n(ie,"Transactions"),ie.forEach(e),oe.forEach(e),st=d(l),A=o(l,"P",{});var re=i(A);ot=n(re,`In Node.js, Nymph supports nested transactions. Nothing will be permanently
- written to the database's storage, and no PubSub subscribers will be
- notified, until the highest level transaction is committed. When a nested
- transaction is rolled back, the database will be in the state where the
- transaction above it started that nested transaction.`),re.forEach(e),it=d(l),J=o(l,"P",{});var le=i(J);rt=n(le,`When you start a transaction, you give it a name, then you can commit or
- roll back that transaction, by name. This means if you're doing transactions
- recursively, you should use a counter in your name. Nymph uses internal
- transactions that start with the "nymph-" prefix, so don't use that. You
- should be sure to commit or rollback transactions in the reverse order that
- they were started, or you might run into trouble.`),le.forEach(e),lt=d(l),C=o(l,"P",{});var Xt=i(C);q=o(Xt,"CODE",{});var ce=i(q);ct=n(ce,"Nymph"),ce.forEach(e),ht=n(Xt," has the following methods for managing transactions."),Xt.forEach(e),dt=d(l),m=o(l,"UL",{});var E=i(m);k=o(E,"LI",{});var Zt=i(k);H=o(Zt,"CODE",{});var he=i(H);mt=n(he,"startTransaction"),he.forEach(e),pt=n(Zt," - Start a named transaction."),Zt.forEach(e),ut=d(E),D=o(E,"LI",{});var te=i(D);L=o(te,"CODE",{});var de=i(L);yt=n(de,"commit"),de.forEach(e),ft=n(te," - Commit a named transaction."),te.forEach(e),gt=d(E),I=o(E,"LI",{});var ee=i(I);M=o(ee,"CODE",{});var me=i(M);Et=n(me,"rollback"),me.forEach(e),wt=n(ee," - Rollback a named transaction."),ee.forEach(e),bt=d(E),P=o(E,"LI",{});var ae=i(P);U=o(ae,"CODE",{});var pe=i(U);vt=n(pe,"inTransaction"),pe.forEach(e),_t=n(ae," - Check if Nymph is currently running within a transaction."),ae.forEach(e),E.forEach(e),$t=d(l),x=o(l,"P",{});var ne=i(x);W=o(ne,"CODE",{});var ue=i(W);Nt=n(ue,"startTransaction"),ue.forEach(e),Tt=n(ne,` will return a new instance of Nymph. For the rest
- of the transaction, until it is committed or rolled back, you should use this
- instance. It will be tied to a specific connection to the database.`),ne.forEach(e),Ct=d(l),v=o(l,"P",{});var tt=i(v);kt=n(tt,`The transaction instance of Nymph has its own set of classes. You can use
- its `),Y=o(tt,"CODE",{});var ye=i(Y);Dt=n(ye,"getEntityClass"),ye.forEach(e),It=n(tt,` method to get the proper classes for that instance
- of Nymph.`),tt.forEach(e),Pt=d(l),u=o(l,"P",{});var O=i(u);xt=n(O,`When you start a new transaction, entities retrieved from that transaction's
- Nymph instance will have that instance within their static `),R=o(O,"CODE",{});var fe=i(R);Ot=n(fe,"nymph"),fe.forEach(e),St=n(O,`
- property and instance `),z=o(O,"CODE",{});var ge=i(z);jt=n(ge,"$nymph"),ge.forEach(e),At=n(O,` property. As long as the entity code
- always uses these instances, every query and change should occur within that
- transaction.`),O.forEach(e),Jt=d(l),F=o(l,"P",{});var Ee=i(F);qt=n(Ee,`Not all databases that Nymph supports (specifically, MySQL with an engine
- that doesn't support transactions, like the MyISAM engine) can use
- transactions. To ensure data consistency, it's highly recommended to use a
- configuration that supports transactions.`),Ee.forEach(e),Ht=d(l),Q=o(l,"P",{});var we=i(Q);Lt=n(we,`Here is an example of a class that uses a transaction to delete all of its
- children when it is deleted. If any of its children cannot be deleted, then
- the transaction is rolled back, meaning none of its children get deleted.`),we.forEach(e),Mt=d(l),Ae(_.$$.fragment,l),Ut=d(l),p=o(l,"P",{});var w=i(p);Wt=n(w,"The "),V=o(w,"CODE",{});var be=i(V);Yt=n(be,"$setNymph"),be.forEach(e),Rt=n(w,` method is used to make sure the entity and all
- referenced entities use the transactional Nymph instance. The
- `),B=o(w,"CODE",{});var ve=i(B);zt=n(ve,"tnymph"),ve.forEach(e),Ft=n(w,` Nymph instance is used during the transaction, and the
- children are retrieved using the proper class with
- `),G=o(w,"CODE",{});var _e=i(G);Qt=n(_e,"tnymph.getEntityClass(Todo)"),_e.forEach(e),Vt=n(w,"."),w.forEach(e),l.forEach(e),X=d(c),y=o(c,"SECTION",{class:!0});var et=i(y);f=o(et,"A",{href:!0,class:!0,style:!0});var $e=i(f);Bt=n($e,"Previous: UIDs"),$e.forEach(e),Gt=d(et),g=o(et,"A",{href:!0,class:!0,style:!0});var Ne=i(g);Kt=n(Ne,"Next: Export and Import"),Ne.forEach(e),et.forEach(e),this.h()},h(){document.title="Transactions - User Guide - Nymph.js",b.a=j,se(T,"font-size","3em"),S(N,"class","major"),S(f,"href",Ce+"/user-guide/uids"),S(f,"class","button"),se(f,"margin",".5em"),S(g,"href",Ce+"/user-guide/export-and-import"),S(g,"class","button"),se(g,"margin",".5em"),S(y,"class","page-steps")},m(c,$){b.m(We,document.head),t(document.head,j),at(c,K,$),at(c,r,$),t(r,N),t(N,T),t(T,nt),t(r,st),t(r,A),t(A,ot),t(r,it),t(r,J),t(J,rt),t(r,lt),t(r,C),t(C,q),t(q,ct),t(C,ht),t(r,dt),t(r,m),t(m,k),t(k,H),t(H,mt),t(k,pt),t(m,ut),t(m,D),t(D,L),t(L,yt),t(D,ft),t(m,gt),t(m,I),t(I,M),t(M,Et),t(I,wt),t(m,bt),t(m,P),t(P,U),t(U,vt),t(P,_t),t(r,$t),t(r,x),t(x,W),t(W,Nt),t(x,Tt),t(r,Ct),t(r,v),t(v,kt),t(v,Y),t(Y,Dt),t(v,It),t(r,Pt),t(r,u),t(u,xt),t(u,R),t(R,Ot),t(u,St),t(u,z),t(z,jt),t(u,At),t(r,Jt),t(r,F),t(F,qt),t(r,Ht),t(r,Q),t(Q,Lt),t(r,Mt),Je(_,r,null),t(r,Ut),t(r,p),t(p,Wt),t(p,V),t(V,Yt),t(p,Rt),t(p,B),t(B,zt),t(p,Ft),t(p,G),t(G,Qt),t(p,Vt),at(c,X,$),at(c,y,$),t(y,f),t(f,Bt),t(y,Gt),t(y,g),t(g,Kt),Z=!0},p:qe,i(c){Z||(He(_.$$.fragment,c),Z=!0)},o(c){Le(_.$$.fragment,c),Z=!1},d(c){e(j),c&&b.d(),c&&e(K),c&&e(r),Me(_),c&&e(X),c&&e(y)}}}class Be extends De{constructor(b){super(),Ie(this,b,null,Re,Pe,{})}}export{Be as component};
diff --git a/docs/_app/immutable/nodes/26.5aa95251.js b/docs/_app/immutable/nodes/26.5aa95251.js
deleted file mode 100644
index 820726e..0000000
--- a/docs/_app/immutable/nodes/26.5aa95251.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import{S as Ke,i as Me,s as Qe,R as Ve,e as Be,a as d,k as a,q as o,y as We,F as Xe,T as Ze,h as t,c as h,l as n,m as s,r as i,z as et,p as ke,n as k,C as e,b as F,A as tt,D as at,g as nt,d as st,B as ot}from"../chunks/index.d7cc8d8b.js";import{H as it,g as rt}from"../chunks/github.df9008b1.js";import{t as lt}from"../chunks/typescript.7dd1ec19.js";import{b as Fe}from"../chunks/paths.d307dac8.js";function ut(Je){let y,P,R,l,U,_,J,K,S,M,Q,j,V,W,c,w,N,X,Z,ee,E,O,te,ae,ne,b,$,se,oe,ie,q,x,re,le,ue,T,A,ce,de,he,v,fe,m,me,G,Ie,De,H,pe,ye,ve,L,ge,Y,I,D,Ue,_e,p,we,z;return v=new it({props:{language:lt,code:`let entity = await Post.factory();
-
-entity.id = await nymph.newUID('Blog/Post');
-await entity.$save();`}}),{c(){y=new Ve(!1),P=Be(),R=d(),l=a("section"),U=a("header"),_=a("h1"),J=o("UIDs"),K=d(),S=a("p"),M=o(`UIDs, or unique IDs, provide an easier way for users to identify entities.
- UIDs are just sequential numbers and can be used for anything you like, not
- just entities. As opposed to a GUID, which is a unique ID for all entities,
- a UID is only unique for its own sequence. Therefore, they are more visually
- appealing to be used as an ID. (Think Sale #615 vs Sale
- #790219d8fb67a1357707b71d.)`),Q=d(),j=a("p"),V=o("Nymph has the following methods for handling UIDs:"),W=d(),c=a("ul"),w=a("li"),N=a("code"),X=o("deleteUID"),Z=o(" - Delete a unique ID from the system."),ee=d(),E=a("li"),O=a("code"),te=o("getUID"),ae=o(" - Get the current value of a unique ID."),ne=d(),b=a("li"),$=a("code"),se=o("newUID"),oe=o(" - Increment or create a unique ID and return the new value."),ie=d(),q=a("li"),x=a("code"),re=o("renameUID"),le=o(" - Rename a unique ID."),ue=d(),T=a("li"),A=a("code"),ce=o("setUID"),de=o(" - Set the value of a unique ID."),he=d(),We(v.$$.fragment),fe=d(),m=a("p"),me=o(`You probably don't want to allow any UIDs from the client. Then a malicious
- user can mess with the UID. Instead, from the server side, you can create a
- UID when the entity is saved. You can also gate UIDs using abilities like
- "uid/get/nameofuid", "uid/new/nameofuid", and "uid/set/nameofuid". These
- abilities are `),G=a("strong"),Ie=o("only"),De=o(` checked for client queries. If you're
- using UIDs from Node.js and want to gate them, use the
- `),H=a("code"),pe=o("checkClientUIDPermissions"),ye=o(" method on Tilmeld."),ve=d(),L=a("p"),ge=o(`Caution: If a UID is incremented, and the entity you're using it on can't be
- saved, there is no safe way to decrement the UID back to its previous value.
- It's much better to just throw away that UID.`),Y=d(),I=a("section"),D=a("a"),Ue=o("Previous: Defining Entities"),_e=d(),p=a("a"),we=o("Next: Transactions"),this.h()},l(r){const g=Xe("svelte-qnlra6",document.head);y=Ze(g,!1),P=Be(),g.forEach(t),R=h(r),l=n(r,"SECTION",{});var u=s(l);U=n(u,"HEADER",{class:!0});var Pe=s(U);_=n(Pe,"H1",{style:!0});var Se=s(_);J=i(Se,"UIDs"),Se.forEach(t),Pe.forEach(t),K=h(u),S=n(u,"P",{});var je=s(S);M=i(je,`UIDs, or unique IDs, provide an easier way for users to identify entities.
- UIDs are just sequential numbers and can be used for anything you like, not
- just entities. As opposed to a GUID, which is a unique ID for all entities,
- a UID is only unique for its own sequence. Therefore, they are more visually
- appealing to be used as an ID. (Think Sale #615 vs Sale
- #790219d8fb67a1357707b71d.)`),je.forEach(t),Q=h(u),j=n(u,"P",{});var Ne=s(j);V=i(Ne,"Nymph has the following methods for handling UIDs:"),Ne.forEach(t),W=h(u),c=n(u,"UL",{});var f=s(c);w=n(f,"LI",{});var Ee=s(w);N=n(Ee,"CODE",{});var Oe=s(N);X=i(Oe,"deleteUID"),Oe.forEach(t),Z=i(Ee," - Delete a unique ID from the system."),Ee.forEach(t),ee=h(f),E=n(f,"LI",{});var be=s(E);O=n(be,"CODE",{});var $e=s(O);te=i($e,"getUID"),$e.forEach(t),ae=i(be," - Get the current value of a unique ID."),be.forEach(t),ne=h(f),b=n(f,"LI",{});var qe=s(b);$=n(qe,"CODE",{});var xe=s($);se=i(xe,"newUID"),xe.forEach(t),oe=i(qe," - Increment or create a unique ID and return the new value."),qe.forEach(t),ie=h(f),q=n(f,"LI",{});var Te=s(q);x=n(Te,"CODE",{});var Ae=s(x);re=i(Ae,"renameUID"),Ae.forEach(t),le=i(Te," - Rename a unique ID."),Te.forEach(t),ue=h(f),T=n(f,"LI",{});var Ce=s(T);A=n(Ce,"CODE",{});var Ge=s(A);ce=i(Ge,"setUID"),Ge.forEach(t),de=i(Ce," - Set the value of a unique ID."),Ce.forEach(t),f.forEach(t),he=h(u),et(v.$$.fragment,u),fe=h(u),m=n(u,"P",{});var C=s(m);me=i(C,`You probably don't want to allow any UIDs from the client. Then a malicious
- user can mess with the UID. Instead, from the server side, you can create a
- UID when the entity is saved. You can also gate UIDs using abilities like
- "uid/get/nameofuid", "uid/new/nameofuid", and "uid/set/nameofuid". These
- abilities are `),G=n(C,"STRONG",{});var He=s(G);Ie=i(He,"only"),He.forEach(t),De=i(C,` checked for client queries. If you're
- using UIDs from Node.js and want to gate them, use the
- `),H=n(C,"CODE",{});var Le=s(H);pe=i(Le,"checkClientUIDPermissions"),Le.forEach(t),ye=i(C," method on Tilmeld."),C.forEach(t),ve=h(u),L=n(u,"P",{});var Re=s(L);ge=i(Re,`Caution: If a UID is incremented, and the entity you're using it on can't be
- saved, there is no safe way to decrement the UID back to its previous value.
- It's much better to just throw away that UID.`),Re.forEach(t),u.forEach(t),Y=h(r),I=n(r,"SECTION",{class:!0});var B=s(I);D=n(B,"A",{href:!0,class:!0,style:!0});var Ye=s(D);Ue=i(Ye,"Previous: Defining Entities"),Ye.forEach(t),_e=h(B),p=n(B,"A",{href:!0,class:!0,style:!0});var ze=s(p);we=i(ze,"Next: Transactions"),ze.forEach(t),B.forEach(t),this.h()},h(){document.title="UIDs - User Guide - Nymph.js",y.a=P,ke(_,"font-size","3em"),k(U,"class","major"),k(D,"href",Fe+"/user-guide/defining-entities"),k(D,"class","button"),ke(D,"margin",".5em"),k(p,"href",Fe+"/user-guide/transactions"),k(p,"class","button"),ke(p,"margin",".5em"),k(I,"class","page-steps")},m(r,g){y.m(rt,document.head),e(document.head,P),F(r,R,g),F(r,l,g),e(l,U),e(U,_),e(_,J),e(l,K),e(l,S),e(S,M),e(l,Q),e(l,j),e(j,V),e(l,W),e(l,c),e(c,w),e(w,N),e(N,X),e(w,Z),e(c,ee),e(c,E),e(E,O),e(O,te),e(E,ae),e(c,ne),e(c,b),e(b,$),e($,se),e(b,oe),e(c,ie),e(c,q),e(q,x),e(x,re),e(q,le),e(c,ue),e(c,T),e(T,A),e(A,ce),e(T,de),e(l,he),tt(v,l,null),e(l,fe),e(l,m),e(m,me),e(m,G),e(G,Ie),e(m,De),e(m,H),e(H,pe),e(m,ye),e(l,ve),e(l,L),e(L,ge),F(r,Y,g),F(r,I,g),e(I,D),e(D,Ue),e(I,_e),e(I,p),e(p,we),z=!0},p:at,i(r){z||(nt(v.$$.fragment,r),z=!0)},o(r){st(v.$$.fragment,r),z=!1},d(r){t(P),r&&y.d(),r&&t(R),r&&t(l),ot(v),r&&t(Y),r&&t(I)}}}class mt extends Ke{constructor(y){super(),Me(this,y,null,ut,Qe,{})}}export{mt as component};
diff --git a/docs/_app/immutable/nodes/26.8d2d7854.js b/docs/_app/immutable/nodes/26.8d2d7854.js
new file mode 100644
index 0000000..ef7ebb8
--- /dev/null
+++ b/docs/_app/immutable/nodes/26.8d2d7854.js
@@ -0,0 +1,17 @@
+import{s as Z,I as ee,e as F,a as r,f as s,l as K,x as te,J as ne,d as i,c as u,g as o,h as T,r as _,m as Q,j as U,k as V,u as t,i as E,v as ae}from"../chunks/scheduler.d7e45cc8.js";import{S as se,i as ie,b as oe,d as le,m as re,a as ue,t as ce,e as de}from"../chunks/index.77720afb.js";import{H as he,g as me}from"../chunks/github.64534d2c.js";import{t as fe}from"../chunks/typescript.09c48802.js";import{b as W}from"../chunks/paths.d4a6803e.js";function pe(X){let h,q,b,e,m,A='
UIDs
',H,g,G=`UIDs, or unique IDs, provide an easier way for users to identify entities.
+ UIDs are just sequential numbers and can be used for anything you like, not
+ just entities. As opposed to a GUID, which is a unique ID for all entities,
+ a UID is only unique for its own sequence. Therefore, they are more visually
+ appealing to be used as an ID. (Think Sale #615 vs Sale
+ #790219d8fb67a1357707b71d.)`,P,I,O="Nymph has the following methods for handling UIDs:",$,v,R="
deleteUID - Delete a unique ID from the system.
getUID - Get the current value of a unique ID.
newUID - Increment or create a unique ID and return the new value.
renameUID - Rename a unique ID.
setUID - Set the value of a unique ID.
",j,f,k,y,Y=`You probably don't want to allow any UIDs from the client. Then a malicious
+ user can mess with the UID. Instead, from the server side, you can create a
+ UID when the entity is saved. You can also gate UIDs using abilities like
+ "uid/get/nameofuid", "uid/new/nameofuid", and "uid/set/nameofuid". These
+ abilities are only checked for client queries. If you're
+ using UIDs from Node.js and want to gate them, use the
+ checkClientUIDPermissions method on Tilmeld.`,L,D,z=`Caution: If a UID is incremented, and the entity you're using it on can't be
+ saved, there is no safe way to decrement the UID back to its previous value.
+ It's much better to just throw away that UID.`,w,l,c,N,S,d,M,x;return f=new he({props:{language:fe,code:`let entity = await Post.factory();
+
+entity.id = await nymph.newUID('Blog/Post');
+await entity.$save();`}}),{c(){h=new ee(!1),q=F(),b=r(),e=s("section"),m=s("header"),m.innerHTML=A,H=r(),g=s("p"),g.textContent=G,P=r(),I=s("p"),I.textContent=O,$=r(),v=s("ul"),v.innerHTML=R,j=r(),oe(f.$$.fragment),k=r(),y=s("p"),y.innerHTML=Y,L=r(),D=s("p"),D.textContent=z,w=r(),l=s("section"),c=s("a"),N=K("Previous: Defining Entities"),S=r(),d=s("a"),M=K("Next: Transactions"),this.h()},l(n){const p=te("svelte-qnlra6",document.head);h=ne(p,!1),q=F(),p.forEach(i),b=u(n),e=o(n,"SECTION",{});var a=T(e);m=o(a,"HEADER",{class:!0,"data-svelte-h":!0}),_(m)!=="svelte-1qo2qmx"&&(m.innerHTML=A),H=u(a),g=o(a,"P",{"data-svelte-h":!0}),_(g)!=="svelte-4vobrc"&&(g.textContent=G),P=u(a),I=o(a,"P",{"data-svelte-h":!0}),_(I)!=="svelte-dtbas7"&&(I.textContent=O),$=u(a),v=o(a,"UL",{"data-svelte-h":!0}),_(v)!=="svelte-ltuvp2"&&(v.innerHTML=R),j=u(a),le(f.$$.fragment,a),k=u(a),y=o(a,"P",{"data-svelte-h":!0}),_(y)!=="svelte-1o1nq16"&&(y.innerHTML=Y),L=u(a),D=o(a,"P",{"data-svelte-h":!0}),_(D)!=="svelte-unb6h4"&&(D.textContent=z),a.forEach(i),w=u(n),l=o(n,"SECTION",{class:!0});var C=T(l);c=o(C,"A",{href:!0,class:!0,style:!0});var B=T(c);N=Q(B,"Previous: Defining Entities"),B.forEach(i),S=u(C),d=o(C,"A",{href:!0,class:!0,style:!0});var J=T(d);M=Q(J,"Next: Transactions"),J.forEach(i),C.forEach(i),this.h()},h(){document.title="UIDs - User Guide - Nymph.js",h.a=q,U(m,"class","major"),U(c,"href",W+"/user-guide/defining-entities"),U(c,"class","button"),V(c,"margin",".5em"),U(d,"href",W+"/user-guide/transactions"),U(d,"class","button"),V(d,"margin",".5em"),U(l,"class","page-steps")},m(n,p){h.m(me,document.head),t(document.head,q),E(n,b,p),E(n,e,p),t(e,m),t(e,H),t(e,g),t(e,P),t(e,I),t(e,$),t(e,v),t(e,j),re(f,e,null),t(e,k),t(e,y),t(e,L),t(e,D),E(n,w,p),E(n,l,p),t(l,c),t(c,N),t(l,S),t(l,d),t(d,M),x=!0},p:ae,i(n){x||(ue(f.$$.fragment,n),x=!0)},o(n){ce(f.$$.fragment,n),x=!1},d(n){n&&(h.d(),i(b),i(e),i(w),i(l)),i(q),de(f)}}}class _e extends se{constructor(h){super(),ie(this,h,null,pe,Z,{})}}export{_e as component};
diff --git a/docs/_app/immutable/nodes/3.1d509ff4.js b/docs/_app/immutable/nodes/3.1d509ff4.js
new file mode 100644
index 0000000..822f76e
--- /dev/null
+++ b/docs/_app/immutable/nodes/3.1d509ff4.js
@@ -0,0 +1,71 @@
+import{s as he,I as de,e as Z,a as l,f as a,l as $,x as ue,J as ce,d as h,c as d,g as r,h as j,r as y,m as H,j as k,u as e,i as ee,v as me}from"../chunks/scheduler.d7e45cc8.js";import{S as pe,i as be,b as te,d as se,m as ne,a as oe,t as ae,e as re}from"../chunks/index.77720afb.js";import{H as ie,g as fe}from"../chunks/github.64534d2c.js";import{b as ye}from"../chunks/bash.7e4226ac.js";import{t as ge}from"../chunks/typescript.09c48802.js";import{b as ve}from"../chunks/paths.d4a6803e.js";function Te(le){let u,C,N,t,c,G='
Client
',M,g,W=`The Nymph Client allows you to query and push data to a Nymph REST server
+ from the browser. You can also subscribe to entities and queries on a Nymph
+ PubSub server and be notified of changes.`,P,m,J="
",Y,w,Q="Here's an overview:",z,f,S;return p=new ie({props:{language:ye,code:"npm install --save @nymphjs/client"}}),f=new ie({props:{language:ge,code:`import { Nymph, PubSub } from '@nymphjs/client';
+import TodoClass from 'Todo';
+
+const nymphOptions = {
+ restUrl: 'https://yournymphrestserver/path/to/your/endpoint',
+ pubsubUrl: 'wss://yournymphpubsubserver',
+};
+const nymph = new Nymph(nymphOptions);
+const pubsub = new PubSub(nymphOptions, nymph);
+const Todo = nymph.addEntityClass(TodoClass);
+
+// Now you can use Nymph and PubSub.
+const myTodo = new Todo();
+myTodo.name = 'This is a new todo!';
+myTodo.done = false;
+await myTodo.$save();
+
+let allMyTodos = await nymph.getEntities({ class: Todo });
+
+let subscription = pubsub.subscribeWith(myTodo, () => {
+ // When this is called, the entity will already contain new data from the
+ // publish event. If the entity is deleted, the GUID will be set to null.
+ if (myTodo.guid != null) {
+ alert('Somebody touched my todo!');
+ } else {
+ alert('Somebody deleted my todo!');
+ subscription.unsubscribe();
+ }
+});
+
+// ...
+
+// Subscribing to a query.
+let todos = [];
+let userCount = 0;
+let subscription = pubsub.subscribeEntities(
+ {
+ class: Todo.class,
+ },
+ {
+ type: '&',
+ '!tag': 'archived',
+ },
+)(
+ (update) => {
+ // The first time this is called, \`update\` will be an array of Todo
+ // entities. After that, \`update\` will be a publish event object.
+
+ // This takes an existing array of entities and either updates it to match
+ // another array, or performs actions from a publish event object to update
+ // it.
+ pubsub.updateArray(todos, update);
+
+ // \`todos\` is now up to date with the latest publishes from the server.
+ },
+ (err) => alert(err),
+ (count) => {
+ // If you provide this callback, the server will send updates of how many
+ // clients are subscribed to this query.
+ userCount = count;
+ },
+);
+
+// ...
+
+// Remember to clean up your subscriptions when you no longer need them.
+subscription.unsubscribe();`}}),{c(){u=new de(!1),C=Z(),N=l(),t=a("section"),c=a("header"),c.innerHTML=G,M=l(),g=a("p"),g.textContent=W,P=l(),m=a("header"),m.innerHTML=J,D=l(),te(p.$$.fragment),O=l(),o=a("p"),A=$("This package is the Nymph client for browsers. You can find UMD in "),v=a("code"),v.textContent=B,I=$(", or TS source in "),T=a("code"),T.textContent=F,L=$(`. There is also a
+ `),x=a("strong"),_=a("a"),R=$("Node.js client"),U=$("."),q=l(),b=a("header"),b.innerHTML=K,Y=l(),w=a("p"),w.textContent=Q,z=l(),te(f.$$.fragment),this.h()},l(n){const E=ue("svelte-1dn8mvk",document.head);u=ce(E,!1),C=Z(),E.forEach(h),N=d(n),t=r(n,"SECTION",{});var s=j(t);c=r(s,"HEADER",{class:!0,"data-svelte-h":!0}),y(c)!=="svelte-1hokosp"&&(c.innerHTML=G),M=d(s),g=r(s,"P",{"data-svelte-h":!0}),y(g)!=="svelte-1xf6204"&&(g.textContent=W),P=d(s),m=r(s,"HEADER",{class:!0,"data-svelte-h":!0}),y(m)!=="svelte-1hx9pnb"&&(m.innerHTML=J),D=d(s),se(p.$$.fragment,s),O=d(s),o=r(s,"P",{});var i=j(o);A=H(i,"This package is the Nymph client for browsers. You can find UMD in "),v=r(i,"CODE",{"data-svelte-h":!0}),y(v)!=="svelte-14vfyz8"&&(v.textContent=B),I=H(i,", or TS source in "),T=r(i,"CODE",{"data-svelte-h":!0}),y(T)!=="svelte-1fkgjes"&&(T.textContent=F),L=H(i,`. There is also a
+ `),x=r(i,"STRONG",{});var V=j(x);_=r(V,"A",{href:!0});var X=j(_);R=H(X,"Node.js client"),X.forEach(h),V.forEach(h),U=H(i,"."),i.forEach(h),q=d(s),b=r(s,"HEADER",{class:!0,"data-svelte-h":!0}),y(b)!=="svelte-n87w0o"&&(b.innerHTML=K),Y=d(s),w=r(s,"P",{"data-svelte-h":!0}),y(w)!=="svelte-deeya8"&&(w.textContent=Q),z=d(s),se(f.$$.fragment,s),s.forEach(h),this.h()},h(){document.title="Client - Packages - Nymph.js",u.a=C,k(c,"class","major"),k(m,"class","major"),k(_,"href",ve+"/packages/client-node"),k(b,"class","major")},m(n,E){u.m(fe,document.head),e(document.head,C),ee(n,N,E),ee(n,t,E),e(t,c),e(t,M),e(t,g),e(t,P),e(t,m),e(t,D),ne(p,t,null),e(t,O),e(t,o),e(o,A),e(o,v),e(o,I),e(o,T),e(o,L),e(o,x),e(x,_),e(_,R),e(o,U),e(t,q),e(t,b),e(t,Y),e(t,w),e(t,z),ne(f,t,null),S=!0},p:me,i(n){S||(oe(p.$$.fragment,n),oe(f.$$.fragment,n),S=!0)},o(n){ae(p.$$.fragment,n),ae(f.$$.fragment,n),S=!1},d(n){n&&(u.d(),h(N),h(t)),h(C),re(p),re(f)}}}class He extends pe{constructor(u){super(),be(this,u,null,Te,he,{})}}export{He as component};
diff --git a/docs/_app/immutable/nodes/3.40567583.js b/docs/_app/immutable/nodes/3.40567583.js
deleted file mode 100644
index 0ad523a..0000000
--- a/docs/_app/immutable/nodes/3.40567583.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import{S as Te,i as we,s as Ee,R as Ne,e as ce,a as u,k as n,q as l,y as ue,F as $e,T as Se,h as s,c as m,l as r,m as i,r as h,z as me,p as Ce,n as q,C as e,b as pe,A as be,D as He,g as fe,d as ye,B as ge}from"../chunks/index.d7cc8d8b.js";import{H as ve,g as je}from"../chunks/github.df9008b1.js";import{b as Pe}from"../chunks/bash.2b754df6.js";import{t as De}from"../chunks/typescript.7dd1ec19.js";import{b as ke}from"../chunks/paths.d307dac8.js";function qe(_e){let p,w,D,t,y,g,R,A,E,O,U,v,N,x,I,b,Y,d,M,$,z,G,S,W,B,C,_,F,J,K,T,H,L,Q,j,V,X,f,k;return b=new ve({props:{language:Pe,code:"npm install --save @nymphjs/client"}}),f=new ve({props:{language:De,code:`import { Nymph, PubSub } from '@nymphjs/client';
-import TodoClass from 'Todo';
-
-const nymphOptions = {
- restUrl: 'https://yournymphrestserver/path/to/your/endpoint',
- pubsubUrl: 'wss://yournymphpubsubserver',
-};
-const nymph = new Nymph(nymphOptions);
-const pubsub = new PubSub(nymphOptions, nymph);
-const Todo = nymph.addEntityClass(TodoClass);
-
-// Now you can use Nymph and PubSub.
-const myTodo = new Todo();
-myTodo.name = 'This is a new todo!';
-myTodo.done = false;
-await myTodo.$save();
-
-let allMyTodos = await nymph.getEntities({ class: Todo });
-
-let subscription = pubsub.subscribeWith(myTodo, () => {
- // When this is called, the entity will already contain new data from the
- // publish event. If the entity is deleted, the GUID will be set to null.
- if (myTodo.guid != null) {
- alert('Somebody touched my todo!');
- } else {
- alert('Somebody deleted my todo!');
- subscription.unsubscribe();
- }
-});
-
-// ...
-
-// Subscribing to a query.
-let todos = [];
-let userCount = 0;
-let subscription = pubsub.subscribeEntities(
- {
- class: Todo.class,
- },
- {
- type: '&',
- '!tag': 'archived',
- },
-)(
- (update) => {
- // The first time this is called, \`update\` will be an array of Todo
- // entities. After that, \`update\` will be a publish event object.
-
- // This takes an existing array of entities and either updates it to match
- // another array, or performs actions from a publish event object to update
- // it.
- pubsub.updateArray(todos, update);
-
- // \`todos\` is now up to date with the latest publishes from the server.
- },
- (err) => alert(err),
- (count) => {
- // If you provide this callback, the server will send updates of how many
- // clients are subscribed to this query.
- userCount = count;
- },
-);
-
-// ...
-
-// Remember to clean up your subscriptions when you no longer need them.
-subscription.unsubscribe();`}}),{c(){p=new Ne(!1),w=ce(),D=u(),t=n("section"),y=n("header"),g=n("h1"),R=l("Client"),A=u(),E=n("p"),O=l(`The Nymph Client allows you to query and push data to a Nymph REST server
- from the browser. You can also subscribe to entities and queries on a Nymph
- PubSub server and be notified of changes.`),U=u(),v=n("header"),N=n("h2"),x=l("Installation"),I=u(),ue(b.$$.fragment),Y=u(),d=n("p"),M=l("This package is the Nymph client for browsers. You can find UMD in "),$=n("code"),z=l("dist"),G=l(", or TS source in "),S=n("code"),W=l("src"),B=l(`. There is also a
- `),C=n("strong"),_=n("a"),F=l("Node.js client"),J=l("."),K=u(),T=n("header"),H=n("h2"),L=l("Usage"),Q=u(),j=n("p"),V=l("Here's an overview:"),X=u(),ue(f.$$.fragment),this.h()},l(a){const P=$e("svelte-1dn8mvk",document.head);p=Se(P,!1),w=ce(),P.forEach(s),D=m(a),t=r(a,"SECTION",{});var o=i(t);y=r(o,"HEADER",{class:!0});var Z=i(y);g=r(Z,"H1",{style:!0});var ee=i(g);R=h(ee,"Client"),ee.forEach(s),Z.forEach(s),A=m(o),E=r(o,"P",{});var te=i(E);O=h(te,`The Nymph Client allows you to query and push data to a Nymph REST server
- from the browser. You can also subscribe to entities and queries on a Nymph
- PubSub server and be notified of changes.`),te.forEach(s),U=m(o),v=r(o,"HEADER",{class:!0});var se=i(v);N=r(se,"H2",{});var oe=i(N);x=h(oe,"Installation"),oe.forEach(s),se.forEach(s),I=m(o),me(b.$$.fragment,o),Y=m(o),d=r(o,"P",{});var c=i(d);M=h(c,"This package is the Nymph client for browsers. You can find UMD in "),$=r(c,"CODE",{});var ae=i($);z=h(ae,"dist"),ae.forEach(s),G=h(c,", or TS source in "),S=r(c,"CODE",{});var ne=i(S);W=h(ne,"src"),ne.forEach(s),B=h(c,`. There is also a
- `),C=r(c,"STRONG",{});var re=i(C);_=r(re,"A",{href:!0});var ie=i(_);F=h(ie,"Node.js client"),ie.forEach(s),re.forEach(s),J=h(c,"."),c.forEach(s),K=m(o),T=r(o,"HEADER",{class:!0});var le=i(T);H=r(le,"H2",{});var he=i(H);L=h(he,"Usage"),he.forEach(s),le.forEach(s),Q=m(o),j=r(o,"P",{});var de=i(j);V=h(de,"Here's an overview:"),de.forEach(s),X=m(o),me(f.$$.fragment,o),o.forEach(s),this.h()},h(){document.title="Client - Packages - Nymph.js",p.a=w,Ce(g,"font-size","3em"),q(y,"class","major"),q(v,"class","major"),q(_,"href",ke+"/packages/client-node"),q(T,"class","major")},m(a,P){p.m(je,document.head),e(document.head,w),pe(a,D,P),pe(a,t,P),e(t,y),e(y,g),e(g,R),e(t,A),e(t,E),e(E,O),e(t,U),e(t,v),e(v,N),e(N,x),e(t,I),be(b,t,null),e(t,Y),e(t,d),e(d,M),e(d,$),e($,z),e(d,G),e(d,S),e(S,W),e(d,B),e(d,C),e(C,_),e(_,F),e(d,J),e(t,K),e(t,T),e(T,H),e(H,L),e(t,Q),e(t,j),e(j,V),e(t,X),be(f,t,null),k=!0},p:He,i(a){k||(fe(b.$$.fragment,a),fe(f.$$.fragment,a),k=!0)},o(a){ye(b.$$.fragment,a),ye(f.$$.fragment,a),k=!1},d(a){s(w),a&&p.d(),a&&s(D),a&&s(t),ge(b),ge(f)}}}class Ie extends Te{constructor(p){super(),we(this,p,null,qe,Ee,{})}}export{Ie as component};
diff --git a/docs/_app/immutable/nodes/4.3360583b.js b/docs/_app/immutable/nodes/4.3360583b.js
new file mode 100644
index 0000000..6dcb4ca
--- /dev/null
+++ b/docs/_app/immutable/nodes/4.3360583b.js
@@ -0,0 +1,10 @@
+import{s as ye,I as _e,e as ue,a as l,f as s,l as S,x as xe,J as Ce,d as p,c as i,g as o,h as L,r as h,m as k,j as M,u as e,i as fe,v as be}from"../chunks/scheduler.d7e45cc8.js";import{S as $e,i as Te,b as Q,d as V,m as X,a as Z,t as ee,e as te}from"../chunks/index.77720afb.js";import{H as ne,g as Ne}from"../chunks/github.64534d2c.js";import{b as He}from"../chunks/bash.7e4226ac.js";import{t as ge}from"../chunks/typescript.09c48802.js";import{b as Ee}from"../chunks/paths.d4a6803e.js";function je(ve){let c,H,w,t,d,ae='
Node Client
',O,_,se=`The Nymph Node Client lets you do everything the Nymph Client does, but from
+ Node.JS instead of the browser.`,q,u,oe="
Installation
",D,f,A,r,J,x,re="dist",R,C,le="src",I,E,b,U,z,Y,$,ie=`This package provides fetch and WebSocket ponyfills to Nymph and handles
+ Tilmeld auth tokens.`,G,g,he="
Usage
",W,T,me="To use, require it instead of @nymphjs/client:",B,v,F,N,pe="Then set up Nymph and PubSub like normal:",K,y,P;return f=new ne({props:{language:He,code:"npm install --save @nymphjs/client-node"}}),v=new ne({props:{language:ge,code:"const { Nymph, PubSub } = require('@nymphjs/client-node');"}}),y=new ne({props:{language:ge,code:`const nymphOptions = {
+ restUrl: 'https://yournymphrestserver/path/to/your/endpoint',
+ pubsubUrl: 'wss://yournymphpubsubserver',
+};
+const nymph = new Nymph(nymphOptions);
+const pubsub = new PubSub(nymphOptions, nymph);`}}),{c(){c=new _e(!1),H=ue(),w=l(),t=s("section"),d=s("header"),d.innerHTML=ae,O=l(),_=s("p"),_.textContent=se,q=l(),u=s("header"),u.innerHTML=oe,D=l(),Q(f.$$.fragment),A=l(),r=s("p"),J=S("This package is the Nymph client for Node.js. You can find CJS in "),x=s("code"),x.textContent=re,R=S(", or TS source in "),C=s("code"),C.textContent=le,I=S(`. There is also a
+ `),E=s("strong"),b=s("a"),U=S("browser client"),z=S("."),Y=l(),$=s("p"),$.textContent=ie,G=l(),g=s("header"),g.innerHTML=he,W=l(),T=s("p"),T.innerHTML=me,B=l(),Q(v.$$.fragment),F=l(),N=s("p"),N.textContent=pe,K=l(),Q(y.$$.fragment),this.h()},l(a){const j=xe("svelte-1vkc5se",document.head);c=Ce(j,!1),H=ue(),j.forEach(p),w=i(a),t=o(a,"SECTION",{});var n=L(t);d=o(n,"HEADER",{class:!0,"data-svelte-h":!0}),h(d)!=="svelte-kq687x"&&(d.innerHTML=ae),O=i(n),_=o(n,"P",{"data-svelte-h":!0}),h(_)!=="svelte-3yk1jg"&&(_.textContent=se),q=i(n),u=o(n,"HEADER",{class:!0,"data-svelte-h":!0}),h(u)!=="svelte-1hx9pnb"&&(u.innerHTML=oe),D=i(n),V(f.$$.fragment,n),A=i(n),r=o(n,"P",{});var m=L(r);J=k(m,"This package is the Nymph client for Node.js. You can find CJS in "),x=o(m,"CODE",{"data-svelte-h":!0}),h(x)!=="svelte-14vfyz8"&&(x.textContent=re),R=k(m,", or TS source in "),C=o(m,"CODE",{"data-svelte-h":!0}),h(C)!=="svelte-1fkgjes"&&(C.textContent=le),I=k(m,`. There is also a
+ `),E=o(m,"STRONG",{});var ce=L(E);b=o(ce,"A",{href:!0});var de=L(b);U=k(de,"browser client"),de.forEach(p),ce.forEach(p),z=k(m,"."),m.forEach(p),Y=i(n),$=o(n,"P",{"data-svelte-h":!0}),h($)!=="svelte-1qaxaoa"&&($.textContent=ie),G=i(n),g=o(n,"HEADER",{class:!0,"data-svelte-h":!0}),h(g)!=="svelte-n87w0o"&&(g.innerHTML=he),W=i(n),T=o(n,"P",{"data-svelte-h":!0}),h(T)!=="svelte-vwsf9r"&&(T.innerHTML=me),B=i(n),V(v.$$.fragment,n),F=i(n),N=o(n,"P",{"data-svelte-h":!0}),h(N)!=="svelte-1xojua4"&&(N.textContent=pe),K=i(n),V(y.$$.fragment,n),n.forEach(p),this.h()},h(){document.title="Node Client - Packages - Nymph.js",c.a=H,M(d,"class","major"),M(u,"class","major"),M(b,"href",Ee+"/packages/client"),M(g,"class","major")},m(a,j){c.m(Ne,document.head),e(document.head,H),fe(a,w,j),fe(a,t,j),e(t,d),e(t,O),e(t,_),e(t,q),e(t,u),e(t,D),X(f,t,null),e(t,A),e(t,r),e(r,J),e(r,x),e(r,R),e(r,C),e(r,I),e(r,E),e(E,b),e(b,U),e(r,z),e(t,Y),e(t,$),e(t,G),e(t,g),e(t,W),e(t,T),e(t,B),X(v,t,null),e(t,F),e(t,N),e(t,K),X(y,t,null),P=!0},p:be,i(a){P||(Z(f.$$.fragment,a),Z(v.$$.fragment,a),Z(y.$$.fragment,a),P=!0)},o(a){ee(f.$$.fragment,a),ee(v.$$.fragment,a),ee(y.$$.fragment,a),P=!1},d(a){a&&(c.d(),p(w),p(t)),p(H),te(f),te(v),te(y)}}}class Oe extends $e{constructor(c){super(),Te(this,c,null,je,ye,{})}}export{Oe as component};
diff --git a/docs/_app/immutable/nodes/4.a6408b4a.js b/docs/_app/immutable/nodes/4.a6408b4a.js
deleted file mode 100644
index c6884e0..0000000
--- a/docs/_app/immutable/nodes/4.a6408b4a.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import{S as Ae,i as Re,s as Je,R as Ue,e as Oe,a as d,k as o,q as h,y as de,F as Ie,T as ze,h as s,c as p,l as r,m as l,r as i,z as pe,p as We,n as J,C as e,b as De,A as me,D as Ye,g as fe,d as ue,B as ge}from"../chunks/index.d7cc8d8b.js";import{H as ye,g as Be}from"../chunks/github.df9008b1.js";import{b as Fe}from"../chunks/bash.2b754df6.js";import{t as qe}from"../chunks/typescript.7dd1ec19.js";import{b as Ge}from"../chunks/paths.d307dac8.js";function Ke(xe){let f,T,x,t,b,E,U,I,S,z,W,v,C,Y,B,u,F,c,G,k,K,L,w,M,Q,P,N,V,X,Z,j,ee,te,$,H,ae,se,g,ne,O,oe,re,le,y,he,D,ie,ce,_,A;return u=new ye({props:{language:Fe,code:"npm install --save @nymphjs/client-node"}}),y=new ye({props:{language:qe,code:"const { Nymph, PubSub } = require('@nymphjs/client-node');"}}),_=new ye({props:{language:qe,code:`const nymphOptions = {
- restUrl: 'https://yournymphrestserver/path/to/your/endpoint',
- pubsubUrl: 'wss://yournymphpubsubserver',
-};
-const nymph = new Nymph(nymphOptions);
-const pubsub = new PubSub(nymphOptions, nymph);`}}),{c(){f=new Ue(!1),T=Oe(),x=d(),t=o("section"),b=o("header"),E=o("h1"),U=h("Node Client"),I=d(),S=o("p"),z=h(`The Nymph Node Client lets you do everything the Nymph Client does, but from
- Node.JS instead of the browser.`),W=d(),v=o("header"),C=o("h2"),Y=h("Installation"),B=d(),de(u.$$.fragment),F=d(),c=o("p"),G=h("This package is the Nymph client for Node.js. You can find CJS in "),k=o("code"),K=h("dist"),L=h(", or TS source in "),w=o("code"),M=h("src"),Q=h(`. There is also a
- `),P=o("strong"),N=o("a"),V=h("browser client"),X=h("."),Z=d(),j=o("p"),ee=h(`This package provides fetch and WebSocket ponyfills to Nymph and handles
- Tilmeld auth tokens.`),te=d(),$=o("header"),H=o("h2"),ae=h("Usage"),se=d(),g=o("p"),ne=h("To use, require it instead of "),O=o("code"),oe=h("@nymphjs/client"),re=h(":"),le=d(),de(y.$$.fragment),he=d(),D=o("p"),ie=h("Then set up Nymph and PubSub like normal:"),ce=d(),de(_.$$.fragment),this.h()},l(n){const q=Ie("svelte-1vkc5se",document.head);f=ze(q,!1),T=Oe(),q.forEach(s),x=p(n),t=r(n,"SECTION",{});var a=l(t);b=r(a,"HEADER",{class:!0});var _e=l(b);E=r(_e,"H1",{style:!0});var be=l(E);U=i(be,"Node Client"),be.forEach(s),_e.forEach(s),I=p(a),S=r(a,"P",{});var Ee=l(S);z=i(Ee,`The Nymph Node Client lets you do everything the Nymph Client does, but from
- Node.JS instead of the browser.`),Ee.forEach(s),W=p(a),v=r(a,"HEADER",{class:!0});var ve=l(v);C=r(ve,"H2",{});var Ne=l(C);Y=i(Ne,"Installation"),Ne.forEach(s),ve.forEach(s),B=p(a),pe(u.$$.fragment,a),F=p(a),c=r(a,"P",{});var m=l(c);G=i(m,"This package is the Nymph client for Node.js. You can find CJS in "),k=r(m,"CODE",{});var $e=l(k);K=i($e,"dist"),$e.forEach(s),L=i(m,", or TS source in "),w=r(m,"CODE",{});var Te=l(w);M=i(Te,"src"),Te.forEach(s),Q=i(m,`. There is also a
- `),P=r(m,"STRONG",{});var Se=l(P);N=r(Se,"A",{href:!0});var Ce=l(N);V=i(Ce,"browser client"),Ce.forEach(s),Se.forEach(s),X=i(m,"."),m.forEach(s),Z=p(a),j=r(a,"P",{});var ke=l(j);ee=i(ke,`This package provides fetch and WebSocket ponyfills to Nymph and handles
- Tilmeld auth tokens.`),ke.forEach(s),te=p(a),$=r(a,"HEADER",{class:!0});var we=l($);H=r(we,"H2",{});var Pe=l(H);ae=i(Pe,"Usage"),Pe.forEach(s),we.forEach(s),se=p(a),g=r(a,"P",{});var R=l(g);ne=i(R,"To use, require it instead of "),O=r(R,"CODE",{});var je=l(O);oe=i(je,"@nymphjs/client"),je.forEach(s),re=i(R,":"),R.forEach(s),le=p(a),pe(y.$$.fragment,a),he=p(a),D=r(a,"P",{});var He=l(D);ie=i(He,"Then set up Nymph and PubSub like normal:"),He.forEach(s),ce=p(a),pe(_.$$.fragment,a),a.forEach(s),this.h()},h(){document.title="Node Client - Packages - Nymph.js",f.a=T,We(E,"font-size","3em"),J(b,"class","major"),J(v,"class","major"),J(N,"href",Ge+"/packages/client"),J($,"class","major")},m(n,q){f.m(Be,document.head),e(document.head,T),De(n,x,q),De(n,t,q),e(t,b),e(b,E),e(E,U),e(t,I),e(t,S),e(S,z),e(t,W),e(t,v),e(v,C),e(C,Y),e(t,B),me(u,t,null),e(t,F),e(t,c),e(c,G),e(c,k),e(k,K),e(c,L),e(c,w),e(w,M),e(c,Q),e(c,P),e(P,N),e(N,V),e(c,X),e(t,Z),e(t,j),e(j,ee),e(t,te),e(t,$),e($,H),e(H,ae),e(t,se),e(t,g),e(g,ne),e(g,O),e(O,oe),e(g,re),e(t,le),me(y,t,null),e(t,he),e(t,D),e(D,ie),e(t,ce),me(_,t,null),A=!0},p:Ye,i(n){A||(fe(u.$$.fragment,n),fe(y.$$.fragment,n),fe(_.$$.fragment,n),A=!0)},o(n){ue(u.$$.fragment,n),ue(y.$$.fragment,n),ue(_.$$.fragment,n),A=!1},d(n){s(T),n&&f.d(),n&&s(x),n&&s(t),ge(u),ge(y),ge(_)}}}class Ze extends Ae{constructor(f){super(),Re(this,f,null,Ke,Je,{})}}export{Ze as component};
diff --git a/docs/_app/immutable/nodes/5.0b26b696.js b/docs/_app/immutable/nodes/5.0b26b696.js
new file mode 100644
index 0000000..cb29641
--- /dev/null
+++ b/docs/_app/immutable/nodes/5.0b26b696.js
@@ -0,0 +1,15 @@
+import{s as W,I as X,e as I,a as s,f as o,x as Y,J as Z,d as H,c as r,g as l,h as ee,r as f,j as $,u as a,i as z,v as te}from"../chunks/scheduler.d7e45cc8.js";import{S as ae,i as ne,b as O,d as J,m as U,a as B,t as F,e as G}from"../chunks/index.77720afb.js";import{H as K,g as se}from"../chunks/github.64534d2c.js";import{b as re}from"../chunks/bash.7e4226ac.js";import{t as oe}from"../chunks/typescript.09c48802.js";function le(V){let i,_,L,e,h,q='
MySQL Driver
',C,y,N=`The MySQL driver lets you configure Nymph to query and save data to a MySQL
+ database.`,T,m,Q="
Installation
",w,c,b,d,A="
Usage
",j,g,P=`Supply an instance of this driver with its configuration to Nymph's
+ constructor.`,E,p,S,u,k="
Options
",D,v,R='See the config declaration file.',M;return c=new K({props:{language:re,code:"npm install --save @nymphjs/driver-mysql"}}),p=new K({props:{language:oe,code:`import { Nymph } from '@nymphjs/nymph';
+import MySQLDriver from '@nymphjs/driver-mysql';
+
+const mysqlConfig = {
+ host: 'your_db_host',
+ database: 'your_database',
+ user: 'your_user',
+ password: 'your_password',
+};
+
+const nymph = new Nymph({}, new MySQLDriver(mysqlConfig));
+
+// All done. Nymph is ready to use.`}}),{c(){i=new X(!1),_=I(),L=s(),e=o("section"),h=o("header"),h.innerHTML=q,C=s(),y=o("p"),y.textContent=N,T=s(),m=o("header"),m.innerHTML=Q,w=s(),O(c.$$.fragment),b=s(),d=o("header"),d.innerHTML=A,j=s(),g=o("p"),g.textContent=P,E=s(),O(p.$$.fragment),S=s(),u=o("header"),u.innerHTML=k,D=s(),v=o("p"),v.innerHTML=R,this.h()},l(n){const x=Y("svelte-vuwwx9",document.head);i=Z(x,!1),_=I(),x.forEach(H),L=r(n),e=l(n,"SECTION",{});var t=ee(e);h=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),f(h)!=="svelte-npnixk"&&(h.innerHTML=q),C=r(t),y=l(t,"P",{"data-svelte-h":!0}),f(y)!=="svelte-l950z0"&&(y.textContent=N),T=r(t),m=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),f(m)!=="svelte-1hx9pnb"&&(m.innerHTML=Q),w=r(t),J(c.$$.fragment,t),b=r(t),d=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),f(d)!=="svelte-n87w0o"&&(d.innerHTML=A),j=r(t),g=l(t,"P",{"data-svelte-h":!0}),f(g)!=="svelte-11ejrn5"&&(g.textContent=P),E=r(t),J(p.$$.fragment,t),S=r(t),u=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),f(u)!=="svelte-1v13hnh"&&(u.innerHTML=k),D=r(t),v=l(t,"P",{"data-svelte-h":!0}),f(v)!=="svelte-10vpxnw"&&(v.innerHTML=R),t.forEach(H),this.h()},h(){document.title="MySQL Driver - Packages - Nymph.js",i.a=_,$(h,"class","major"),$(m,"class","major"),$(d,"class","major"),$(u,"class","major")},m(n,x){i.m(se,document.head),a(document.head,_),z(n,L,x),z(n,e,x),a(e,h),a(e,C),a(e,y),a(e,T),a(e,m),a(e,w),U(c,e,null),a(e,b),a(e,d),a(e,j),a(e,g),a(e,E),U(p,e,null),a(e,S),a(e,u),a(e,D),a(e,v),M=!0},p:te,i(n){M||(B(c.$$.fragment,n),B(p.$$.fragment,n),M=!0)},o(n){F(c.$$.fragment,n),F(p.$$.fragment,n),M=!1},d(n){n&&(i.d(),H(L),H(e)),H(_),G(c),G(p)}}}class pe extends ae{constructor(i){super(),ne(this,i,null,le,W,{})}}export{pe as component};
diff --git a/docs/_app/immutable/nodes/5.1b2c12d8.js b/docs/_app/immutable/nodes/5.1b2c12d8.js
deleted file mode 100644
index c9de077..0000000
--- a/docs/_app/immutable/nodes/5.1b2c12d8.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import{S as _e,i as ge,s as ve,R as Ee,e as le,a as h,k as o,q as i,y as he,F as Se,T as $e,h as r,c,l as n,m as l,r as m,z as ie,p as He,n as _,C as e,b as ce,A as me,D as be,g as de,d as pe,B as fe}from"../chunks/index.d7cc8d8b.js";import{H as ue,g as we}from"../chunks/github.df9008b1.js";import{b as De}from"../chunks/bash.2b754df6.js";import{t as je}from"../chunks/typescript.7dd1ec19.js";function qe(ye){let p,H,M,t,g,v,x,A,b,C,P,E,w,R,T,f,k,S,D,I,O,j,z,U,u,B,$,q,F,G,y,J,d,K,V,N;return f=new ue({props:{language:De,code:"npm install --save @nymphjs/driver-mysql"}}),u=new ue({props:{language:je,code:`import { Nymph } from '@nymphjs/nymph';
-import MySQLDriver from '@nymphjs/driver-mysql';
-
-const mysqlConfig = {
- host: 'your_db_host',
- database: 'your_database',
- user: 'your_user',
- password: 'your_password',
-};
-
-const nymph = new Nymph({}, new MySQLDriver(mysqlConfig));
-
-// All done. Nymph is ready to use.`}}),{c(){p=new Ee(!1),H=le(),M=h(),t=o("section"),g=o("header"),v=o("h1"),x=i("MySQL Driver"),A=h(),b=o("p"),C=i(`The MySQL driver lets you configure Nymph to query and save data to a MySQL
- database.`),P=h(),E=o("header"),w=o("h2"),R=i("Installation"),T=h(),he(f.$$.fragment),k=h(),S=o("header"),D=o("h2"),I=i("Usage"),O=h(),j=o("p"),z=i(`Supply an instance of this driver with its configuration to Nymph's
- constructor.`),U=h(),he(u.$$.fragment),B=h(),$=o("header"),q=o("h2"),F=i("Options"),G=h(),y=o("p"),J=i("See the "),d=o("a"),K=i("config declaration file"),V=i("."),this.h()},l(s){const L=Se("svelte-vuwwx9",document.head);p=$e(L,!1),H=le(),L.forEach(r),M=c(s),t=n(s,"SECTION",{});var a=l(t);g=n(a,"HEADER",{class:!0});var W=l(g);v=n(W,"H1",{style:!0});var X=l(v);x=m(X,"MySQL Driver"),X.forEach(r),W.forEach(r),A=c(a),b=n(a,"P",{});var Y=l(b);C=m(Y,`The MySQL driver lets you configure Nymph to query and save data to a MySQL
- database.`),Y.forEach(r),P=c(a),E=n(a,"HEADER",{class:!0});var Z=l(E);w=n(Z,"H2",{});var ee=l(w);R=m(ee,"Installation"),ee.forEach(r),Z.forEach(r),T=c(a),ie(f.$$.fragment,a),k=c(a),S=n(a,"HEADER",{class:!0});var te=l(S);D=n(te,"H2",{});var ae=l(D);I=m(ae,"Usage"),ae.forEach(r),te.forEach(r),O=c(a),j=n(a,"P",{});var re=l(j);z=m(re,`Supply an instance of this driver with its configuration to Nymph's
- constructor.`),re.forEach(r),U=c(a),ie(u.$$.fragment,a),B=c(a),$=n(a,"HEADER",{class:!0});var se=l($);q=n(se,"H2",{});var oe=l(q);F=m(oe,"Options"),oe.forEach(r),se.forEach(r),G=c(a),y=n(a,"P",{});var Q=l(y);J=m(Q,"See the "),d=n(Q,"A",{href:!0,target:!0,rel:!0});var ne=l(d);K=m(ne,"config declaration file"),ne.forEach(r),V=m(Q,"."),Q.forEach(r),a.forEach(r),this.h()},h(){document.title="MySQL Driver - Packages - Nymph.js",p.a=H,He(v,"font-size","3em"),_(g,"class","major"),_(E,"class","major"),_(S,"class","major"),_($,"class","major"),_(d,"href","https://github.com/sciactive/nymphjs/tree/master/packages/driver-mysql/src/conf/d.ts"),_(d,"target","_blank"),_(d,"rel","external")},m(s,L){p.m(we,document.head),e(document.head,H),ce(s,M,L),ce(s,t,L),e(t,g),e(g,v),e(v,x),e(t,A),e(t,b),e(b,C),e(t,P),e(t,E),e(E,w),e(w,R),e(t,T),me(f,t,null),e(t,k),e(t,S),e(S,D),e(D,I),e(t,O),e(t,j),e(j,z),e(t,U),me(u,t,null),e(t,B),e(t,$),e($,q),e(q,F),e(t,G),e(t,y),e(y,J),e(y,d),e(d,K),e(y,V),N=!0},p:be,i(s){N||(de(f.$$.fragment,s),de(u.$$.fragment,s),N=!0)},o(s){pe(f.$$.fragment,s),pe(u.$$.fragment,s),N=!1},d(s){r(H),s&&p.d(),s&&r(M),s&&r(t),fe(f),fe(u)}}}class xe extends _e{constructor(p){super(),ge(this,p,null,qe,ve,{})}}export{xe as component};
diff --git a/docs/_app/immutable/nodes/6.e58e9779.js b/docs/_app/immutable/nodes/6.e58e9779.js
new file mode 100644
index 0000000..5d4d1af
--- /dev/null
+++ b/docs/_app/immutable/nodes/6.e58e9779.js
@@ -0,0 +1,15 @@
+import{s as W,I as X,e as I,a as n,f as o,x as Y,J as Z,d as H,c as r,g as l,h as ee,r as u,j as L,u as a,i as z,v as te}from"../chunks/scheduler.d7e45cc8.js";import{S as ae,i as se,b as O,d as J,m as U,a as B,t as F,e as G}from"../chunks/index.77720afb.js";import{H as K,g as ne}from"../chunks/github.64534d2c.js";import{b as re}from"../chunks/bash.7e4226ac.js";import{t as oe}from"../chunks/typescript.09c48802.js";function le(V){let i,y,$,e,h,q='
PostgreSQL Driver
',T,f,D=`The PostgreSQL driver lets you configure Nymph to query and save data to a
+ Postgres database.`,b,m,N="
Installation
",j,p,E,c,A="
Usage
",P,_,Q=`Supply an instance of this driver with its configuration to Nymph's
+ constructor.`,M,d,S,g,k="
Options
",w,v,R='See the config declaration file.',C;return p=new K({props:{language:re,code:"npm install --save @nymphjs/driver-postgresql"}}),d=new K({props:{language:oe,code:`import { Nymph } from '@nymphjs/nymph';
+import PostgreSQLDriver from '@nymphjs/driver-postgresql';
+
+const postgresqlConfig = {
+ host: 'your_db_host',
+ database: 'your_database',
+ user: 'your_user',
+ password: 'your_password',
+};
+
+const nymph = new Nymph({}, new PostgreSQLDriver(postgresqlConfig));
+
+// All done. Nymph is ready to use.`}}),{c(){i=new X(!1),y=I(),$=n(),e=o("section"),h=o("header"),h.innerHTML=q,T=n(),f=o("p"),f.textContent=D,b=n(),m=o("header"),m.innerHTML=N,j=n(),O(p.$$.fragment),E=n(),c=o("header"),c.innerHTML=A,P=n(),_=o("p"),_.textContent=Q,M=n(),O(d.$$.fragment),S=n(),g=o("header"),g.innerHTML=k,w=n(),v=o("p"),v.innerHTML=R,this.h()},l(s){const x=Y("svelte-xt0lgh",document.head);i=Z(x,!1),y=I(),x.forEach(H),$=r(s),e=l(s,"SECTION",{});var t=ee(e);h=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(h)!=="svelte-poi6su"&&(h.innerHTML=q),T=r(t),f=l(t,"P",{"data-svelte-h":!0}),u(f)!=="svelte-1c4exqz"&&(f.textContent=D),b=r(t),m=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(m)!=="svelte-1hx9pnb"&&(m.innerHTML=N),j=r(t),J(p.$$.fragment,t),E=r(t),c=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(c)!=="svelte-n87w0o"&&(c.innerHTML=A),P=r(t),_=l(t,"P",{"data-svelte-h":!0}),u(_)!=="svelte-11ejrn5"&&(_.textContent=Q),M=r(t),J(d.$$.fragment,t),S=r(t),g=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(g)!=="svelte-1v13hnh"&&(g.innerHTML=k),w=r(t),v=l(t,"P",{"data-svelte-h":!0}),u(v)!=="svelte-d54xk8"&&(v.innerHTML=R),t.forEach(H),this.h()},h(){document.title="PostgreSQL Driver - Packages - Nymph.js",i.a=y,L(h,"class","major"),L(m,"class","major"),L(c,"class","major"),L(g,"class","major")},m(s,x){i.m(ne,document.head),a(document.head,y),z(s,$,x),z(s,e,x),a(e,h),a(e,T),a(e,f),a(e,b),a(e,m),a(e,j),U(p,e,null),a(e,E),a(e,c),a(e,P),a(e,_),a(e,M),U(d,e,null),a(e,S),a(e,g),a(e,w),a(e,v),C=!0},p:te,i(s){C||(B(p.$$.fragment,s),B(d.$$.fragment,s),C=!0)},o(s){F(p.$$.fragment,s),F(d.$$.fragment,s),C=!1},d(s){s&&(i.d(),H($),H(e)),H(y),G(p),G(d)}}}class de extends ae{constructor(i){super(),se(this,i,null,le,W,{})}}export{de as component};
diff --git a/docs/_app/immutable/nodes/6.f5c121f7.js b/docs/_app/immutable/nodes/6.f5c121f7.js
deleted file mode 100644
index 84044f2..0000000
--- a/docs/_app/immutable/nodes/6.f5c121f7.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import{S as _e,i as ye,s as ve,R as Ee,e as le,a as h,k as o,q as i,y as he,F as $e,T as Pe,h as r,c,l as n,m as l,r as m,z as ie,p as Se,n as _,C as e,b as ce,A as me,D as He,g as de,d as pe,B as fe}from"../chunks/index.d7cc8d8b.js";import{H as ge,g as be}from"../chunks/github.df9008b1.js";import{b as De}from"../chunks/bash.2b754df6.js";import{t as je}from"../chunks/typescript.7dd1ec19.js";function qe(ue){let p,S,N,t,y,v,L,Q,H,C,R,E,b,T,k,f,I,$,D,O,z,j,U,B,g,F,P,q,G,J,u,K,d,M,V,x;return f=new ge({props:{language:De,code:"npm install --save @nymphjs/driver-postgresql"}}),g=new ge({props:{language:je,code:`import { Nymph } from '@nymphjs/nymph';
-import PostgreSQLDriver from '@nymphjs/driver-postgresql';
-
-const postgresqlConfig = {
- host: 'your_db_host',
- database: 'your_database',
- user: 'your_user',
- password: 'your_password',
-};
-
-const nymph = new Nymph({}, new PostgreSQLDriver(postgresqlConfig));
-
-// All done. Nymph is ready to use.`}}),{c(){p=new Ee(!1),S=le(),N=h(),t=o("section"),y=o("header"),v=o("h1"),L=i("PostgreSQL Driver"),Q=h(),H=o("p"),C=i(`The PostgreSQL driver lets you configure Nymph to query and save data to a
- Postgres database.`),R=h(),E=o("header"),b=o("h2"),T=i("Installation"),k=h(),he(f.$$.fragment),I=h(),$=o("header"),D=o("h2"),O=i("Usage"),z=h(),j=o("p"),U=i(`Supply an instance of this driver with its configuration to Nymph's
- constructor.`),B=h(),he(g.$$.fragment),F=h(),P=o("header"),q=o("h2"),G=i("Options"),J=h(),u=o("p"),K=i("See the "),d=o("a"),M=i("config declaration file"),V=i("."),this.h()},l(s){const w=$e("svelte-xt0lgh",document.head);p=Pe(w,!1),S=le(),w.forEach(r),N=c(s),t=n(s,"SECTION",{});var a=l(t);y=n(a,"HEADER",{class:!0});var W=l(y);v=n(W,"H1",{style:!0});var X=l(v);L=m(X,"PostgreSQL Driver"),X.forEach(r),W.forEach(r),Q=c(a),H=n(a,"P",{});var Y=l(H);C=m(Y,`The PostgreSQL driver lets you configure Nymph to query and save data to a
- Postgres database.`),Y.forEach(r),R=c(a),E=n(a,"HEADER",{class:!0});var Z=l(E);b=n(Z,"H2",{});var ee=l(b);T=m(ee,"Installation"),ee.forEach(r),Z.forEach(r),k=c(a),ie(f.$$.fragment,a),I=c(a),$=n(a,"HEADER",{class:!0});var te=l($);D=n(te,"H2",{});var ae=l(D);O=m(ae,"Usage"),ae.forEach(r),te.forEach(r),z=c(a),j=n(a,"P",{});var re=l(j);U=m(re,`Supply an instance of this driver with its configuration to Nymph's
- constructor.`),re.forEach(r),B=c(a),ie(g.$$.fragment,a),F=c(a),P=n(a,"HEADER",{class:!0});var se=l(P);q=n(se,"H2",{});var oe=l(q);G=m(oe,"Options"),oe.forEach(r),se.forEach(r),J=c(a),u=n(a,"P",{});var A=l(u);K=m(A,"See the "),d=n(A,"A",{href:!0,target:!0,rel:!0});var ne=l(d);M=m(ne,"config declaration file"),ne.forEach(r),V=m(A,"."),A.forEach(r),a.forEach(r),this.h()},h(){document.title="PostgreSQL Driver - Packages - Nymph.js",p.a=S,Se(v,"font-size","3em"),_(y,"class","major"),_(E,"class","major"),_($,"class","major"),_(P,"class","major"),_(d,"href","https://github.com/sciactive/nymphjs/tree/master/packages/driver-postgresql/src/conf/d.ts"),_(d,"target","_blank"),_(d,"rel","external")},m(s,w){p.m(be,document.head),e(document.head,S),ce(s,N,w),ce(s,t,w),e(t,y),e(y,v),e(v,L),e(t,Q),e(t,H),e(H,C),e(t,R),e(t,E),e(E,b),e(b,T),e(t,k),me(f,t,null),e(t,I),e(t,$),e($,D),e(D,O),e(t,z),e(t,j),e(j,U),e(t,B),me(g,t,null),e(t,F),e(t,P),e(P,q),e(q,G),e(t,J),e(t,u),e(u,K),e(u,d),e(d,M),e(u,V),x=!0},p:He,i(s){x||(de(f.$$.fragment,s),de(g.$$.fragment,s),x=!0)},o(s){pe(f.$$.fragment,s),pe(g.$$.fragment,s),x=!1},d(s){r(S),s&&p.d(),s&&r(N),s&&r(t),fe(f),fe(g)}}}class Le extends _e{constructor(p){super(),ye(this,p,null,qe,ve,{})}}export{Le as component};
diff --git a/docs/_app/immutable/nodes/7.ba2eca6e.js b/docs/_app/immutable/nodes/7.ba2eca6e.js
new file mode 100644
index 0000000..8e7b990
--- /dev/null
+++ b/docs/_app/immutable/nodes/7.ba2eca6e.js
@@ -0,0 +1,12 @@
+import{s as W,I as X,e as I,a as s,f as i,x as Y,J as Z,d as H,c as r,g as l,h as ee,r as u,j as C,u as a,i as O,v as te}from"../chunks/scheduler.d7e45cc8.js";import{S as ae,i as ne,b as z,d as J,m as U,a as B,t as F,e as G}from"../chunks/index.77720afb.js";import{H as K,g as se}from"../chunks/github.64534d2c.js";import{b as re}from"../chunks/bash.7e4226ac.js";import{t as ie}from"../chunks/typescript.09c48802.js";function le(V){let o,y,L,e,h,q='
SQLite3 Driver
',b,g,N=`The SQLite3 driver lets you configure Nymph to query and save data to a
+ SQLite3 database. This includes an in memory SQLite3 database.`,j,m,Q="
Installation
",T,c,S,d,A="
Usage
",E,v,P=`Supply an instance of this driver with its configuration to Nymph's
+ constructor.`,M,p,w,f,k="
Options
",D,_,R='See the config declaration file.',$;return c=new K({props:{language:re,code:"npm install --save @nymphjs/driver-sqlite3"}}),p=new K({props:{language:ie,code:`import { Nymph } from '@nymphjs/nymph';
+import SQLite3Driver from '@nymphjs/driver-sqlite3';
+
+const sqliteConfig = {
+ filename: __dirname + '/mydatabase.db',
+};
+
+const nymph = new Nymph({}, new SQLite3Driver(sqliteConfig));
+
+// All done. Nymph is ready to use.`}}),{c(){o=new X(!1),y=I(),L=s(),e=i("section"),h=i("header"),h.innerHTML=q,b=s(),g=i("p"),g.textContent=N,j=s(),m=i("header"),m.innerHTML=Q,T=s(),z(c.$$.fragment),S=s(),d=i("header"),d.innerHTML=A,E=s(),v=i("p"),v.textContent=P,M=s(),z(p.$$.fragment),w=s(),f=i("header"),f.innerHTML=k,D=s(),_=i("p"),_.innerHTML=R,this.h()},l(n){const x=Y("svelte-iu1j96",document.head);o=Z(x,!1),y=I(),x.forEach(H),L=r(n),e=l(n,"SECTION",{});var t=ee(e);h=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(h)!=="svelte-briojb"&&(h.innerHTML=q),b=r(t),g=l(t,"P",{"data-svelte-h":!0}),u(g)!=="svelte-1lwbj46"&&(g.textContent=N),j=r(t),m=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(m)!=="svelte-1hx9pnb"&&(m.innerHTML=Q),T=r(t),J(c.$$.fragment,t),S=r(t),d=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(d)!=="svelte-n87w0o"&&(d.innerHTML=A),E=r(t),v=l(t,"P",{"data-svelte-h":!0}),u(v)!=="svelte-11ejrn5"&&(v.textContent=P),M=r(t),J(p.$$.fragment,t),w=r(t),f=l(t,"HEADER",{class:!0,"data-svelte-h":!0}),u(f)!=="svelte-1v13hnh"&&(f.innerHTML=k),D=r(t),_=l(t,"P",{"data-svelte-h":!0}),u(_)!=="svelte-1kg643x"&&(_.innerHTML=R),t.forEach(H),this.h()},h(){document.title="SQLite3 Driver - Packages - Nymph.js",o.a=y,C(h,"class","major"),C(m,"class","major"),C(d,"class","major"),C(f,"class","major")},m(n,x){o.m(se,document.head),a(document.head,y),O(n,L,x),O(n,e,x),a(e,h),a(e,b),a(e,g),a(e,j),a(e,m),a(e,T),U(c,e,null),a(e,S),a(e,d),a(e,E),a(e,v),a(e,M),U(p,e,null),a(e,w),a(e,f),a(e,D),a(e,_),$=!0},p:te,i(n){$||(B(c.$$.fragment,n),B(p.$$.fragment,n),$=!0)},o(n){F(c.$$.fragment,n),F(p.$$.fragment,n),$=!1},d(n){n&&(o.d(),H(L),H(e)),H(y),G(c),G(p)}}}class pe extends ae{constructor(o){super(),ne(this,o,null,le,W,{})}}export{pe as component};
diff --git a/docs/_app/immutable/nodes/7.c51626ed.js b/docs/_app/immutable/nodes/7.c51626ed.js
deleted file mode 100644
index 6c4dbd9..0000000
--- a/docs/_app/immutable/nodes/7.c51626ed.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import{S as _e,i as ye,s as ve,R as Ee,e as ie,a as l,k as n,q as h,y as le,F as Se,T as $e,h as r,c,l as o,m as i,r as m,z as he,p as be,n as _,C as e,b as ce,A as me,D as He,g as de,d as pe,B as fe}from"../chunks/index.d7cc8d8b.js";import{H as ue,g as Le}from"../chunks/github.df9008b1.js";import{b as Qe}from"../chunks/bash.2b754df6.js";import{t as je}from"../chunks/typescript.7dd1ec19.js";function De(ge){let p,b,N,t,y,v,T,x,H,C,P,E,L,R,k,f,I,S,Q,O,z,j,U,B,u,F,$,D,G,J,g,K,d,M,V,w;return f=new ue({props:{language:Qe,code:"npm install --save @nymphjs/driver-sqlite3"}}),u=new ue({props:{language:je,code:`import { Nymph } from '@nymphjs/nymph';
-import SQLite3Driver from '@nymphjs/driver-sqlite3';
-
-const sqliteConfig = {
- filename: __dirname + '/mydatabase.db',
-};
-
-const nymph = new Nymph({}, new SQLite3Driver(sqliteConfig));
-
-// All done. Nymph is ready to use.`}}),{c(){p=new Ee(!1),b=ie(),N=l(),t=n("section"),y=n("header"),v=n("h1"),T=h("SQLite3 Driver"),x=l(),H=n("p"),C=h(`The SQLite3 driver lets you configure Nymph to query and save data to a
- SQLite3 database. This includes an in memory SQLite3 database.`),P=l(),E=n("header"),L=n("h2"),R=h("Installation"),k=l(),le(f.$$.fragment),I=l(),S=n("header"),Q=n("h2"),O=h("Usage"),z=l(),j=n("p"),U=h(`Supply an instance of this driver with its configuration to Nymph's
- constructor.`),B=l(),le(u.$$.fragment),F=l(),$=n("header"),D=n("h2"),G=h("Options"),J=l(),g=n("p"),K=h("See the "),d=n("a"),M=h("config declaration file"),V=h("."),this.h()},l(s){const q=Se("svelte-iu1j96",document.head);p=$e(q,!1),b=ie(),q.forEach(r),N=c(s),t=o(s,"SECTION",{});var a=i(t);y=o(a,"HEADER",{class:!0});var W=i(y);v=o(W,"H1",{style:!0});var X=i(v);T=m(X,"SQLite3 Driver"),X.forEach(r),W.forEach(r),x=c(a),H=o(a,"P",{});var Y=i(H);C=m(Y,`The SQLite3 driver lets you configure Nymph to query and save data to a
- SQLite3 database. This includes an in memory SQLite3 database.`),Y.forEach(r),P=c(a),E=o(a,"HEADER",{class:!0});var Z=i(E);L=o(Z,"H2",{});var ee=i(L);R=m(ee,"Installation"),ee.forEach(r),Z.forEach(r),k=c(a),he(f.$$.fragment,a),I=c(a),S=o(a,"HEADER",{class:!0});var te=i(S);Q=o(te,"H2",{});var ae=i(Q);O=m(ae,"Usage"),ae.forEach(r),te.forEach(r),z=c(a),j=o(a,"P",{});var re=i(j);U=m(re,`Supply an instance of this driver with its configuration to Nymph's
- constructor.`),re.forEach(r),B=c(a),he(u.$$.fragment,a),F=c(a),$=o(a,"HEADER",{class:!0});var se=i($);D=o(se,"H2",{});var ne=i(D);G=m(ne,"Options"),ne.forEach(r),se.forEach(r),J=c(a),g=o(a,"P",{});var A=i(g);K=m(A,"See the "),d=o(A,"A",{href:!0,target:!0,rel:!0});var oe=i(d);M=m(oe,"config declaration file"),oe.forEach(r),V=m(A,"."),A.forEach(r),a.forEach(r),this.h()},h(){document.title="SQLite3 Driver - Packages - Nymph.js",p.a=b,be(v,"font-size","3em"),_(y,"class","major"),_(E,"class","major"),_(S,"class","major"),_($,"class","major"),_(d,"href","https://github.com/sciactive/nymphjs/tree/master/packages/driver-sqlite3/src/conf/d.ts"),_(d,"target","_blank"),_(d,"rel","external")},m(s,q){p.m(Le,document.head),e(document.head,b),ce(s,N,q),ce(s,t,q),e(t,y),e(y,v),e(v,T),e(t,x),e(t,H),e(H,C),e(t,P),e(t,E),e(E,L),e(L,R),e(t,k),me(f,t,null),e(t,I),e(t,S),e(S,Q),e(Q,O),e(t,z),e(t,j),e(j,U),e(t,B),me(u,t,null),e(t,F),e(t,$),e($,D),e(D,G),e(t,J),e(t,g),e(g,K),e(g,d),e(d,M),e(g,V),w=!0},p:He,i(s){w||(de(f.$$.fragment,s),de(u.$$.fragment,s),w=!0)},o(s){pe(f.$$.fragment,s),pe(u.$$.fragment,s),w=!1},d(s){r(b),s&&p.d(),s&&r(N),s&&r(t),fe(f),fe(u)}}}class Te extends _e{constructor(p){super(),ye(this,p,null,De,ve,{})}}export{Te as component};
diff --git a/docs/_app/immutable/nodes/8.5d0fa90b.js b/docs/_app/immutable/nodes/8.5d0fa90b.js
new file mode 100644
index 0000000..7493aef
--- /dev/null
+++ b/docs/_app/immutable/nodes/8.5d0fa90b.js
@@ -0,0 +1,27 @@
+import{s as J,I as O,e as U,a as m,f,x as Q,J as F,d as x,c,g as p,h as K,r as b,j,u as n,i as L,v as V}from"../chunks/scheduler.d7e45cc8.js";import{S as W,i as X,b as q,d as A,m as M,a as P,t as N,e as R}from"../chunks/index.77720afb.js";import{H as z,g as Y}from"../chunks/github.64534d2c.js";import{b as Z}from"../chunks/bash.7e4226ac.js";import{t as ee}from"../chunks/typescript.09c48802.js";function te(B){let s,g,T,e,r,S='
GUID / Unique Code Generator
',v,d,D=`The GUID and unique code generators are used to generate new GUIDs for Nymph
+ objects and various random unique strings.`,$,o,E="
Installation
",w,i,C,l,k="
Usage
",H,u,G="There are a few functions for generating different kinds of strings.",I,h,y;return i=new z({props:{language:Z,code:"npm install --save @nymphjs/guid"}}),h=new z({props:{language:ee,code:`import {
+ guid,
+ makeTableSuffix,
+ humanSecret,
+ nanoid,
+ customAlphabet,
+} from '@nymphjs/guid';
+
+// This generates a GUID. It will be 24 characters long, and the first four
+// characters will be the same during a whole week. (This helps make DB index
+// paging more efficient.)
+const myGuid = guid();
+
+// This can be used as a table suffix in SQL queries. It will be 20 characters
+// long and alphanumeric.
+const myTableSuffix = makeTableSuffix();
+
+// This will be a human readable secret code. It will be 10 characters long and
+// use the nolookalikesSafe dictionary from nanoid-dictionary.
+const mySecretCode = humanSecret();
+
+// This is the nanoid library's main export. It is exported in commonjs format.
+const id = nanoid();
+
+// This is the nanoid library's customAlphabet export.
+const customId = customAlphabet('abc', 20)();`}}),{c(){s=new O(!1),g=U(),T=m(),e=f("section"),r=f("header"),r.innerHTML=S,v=m(),d=f("p"),d.textContent=D,$=m(),o=f("header"),o.innerHTML=E,w=m(),q(i.$$.fragment),C=m(),l=f("header"),l.innerHTML=k,H=m(),u=f("p"),u.textContent=G,I=m(),q(h.$$.fragment),this.h()},l(a){const _=Q("svelte-p5hhxe",document.head);s=F(_,!1),g=U(),_.forEach(x),T=c(a),e=p(a,"SECTION",{});var t=K(e);r=p(t,"HEADER",{class:!0,"data-svelte-h":!0}),b(r)!=="svelte-e0a8jf"&&(r.innerHTML=S),v=c(t),d=p(t,"P",{"data-svelte-h":!0}),b(d)!=="svelte-1xcs6hj"&&(d.textContent=D),$=c(t),o=p(t,"HEADER",{class:!0,"data-svelte-h":!0}),b(o)!=="svelte-1hx9pnb"&&(o.innerHTML=E),w=c(t),A(i.$$.fragment,t),C=c(t),l=p(t,"HEADER",{class:!0,"data-svelte-h":!0}),b(l)!=="svelte-n87w0o"&&(l.innerHTML=k),H=c(t),u=p(t,"P",{"data-svelte-h":!0}),b(u)!=="svelte-ng0n9w"&&(u.textContent=G),I=c(t),A(h.$$.fragment,t),t.forEach(x),this.h()},h(){document.title="GUID / Unique Code Generator - Packages - Nymph.js",s.a=g,j(r,"class","major"),j(o,"class","major"),j(l,"class","major")},m(a,_){s.m(Y,document.head),n(document.head,g),L(a,T,_),L(a,e,_),n(e,r),n(e,v),n(e,d),n(e,$),n(e,o),n(e,w),M(i,e,null),n(e,C),n(e,l),n(e,H),n(e,u),n(e,I),M(h,e,null),y=!0},p:V,i(a){y||(P(i.$$.fragment,a),P(h.$$.fragment,a),y=!0)},o(a){N(i.$$.fragment,a),N(h.$$.fragment,a),y=!1},d(a){a&&(s.d(),x(T),x(e)),x(g),R(i),R(h)}}}class ie extends W{constructor(s){super(),X(this,s,null,te,J,{})}}export{ie as component};
diff --git a/docs/_app/immutable/nodes/8.9957d705.js b/docs/_app/immutable/nodes/8.9957d705.js
deleted file mode 100644
index 4c2c1f9..0000000
--- a/docs/_app/immutable/nodes/8.9957d705.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import{S as ne,i as se,s as re,R as oe,e as K,a as d,k as r,q as $,y as M,F as ie,T as le,h as s,c as m,l as o,m as i,r as v,z as V,p as he,n as P,C as e,b as W,A as X,D as ce,g as Y,d as Z,B as ee}from"../chunks/index.d7cc8d8b.js";import{H as ae,g as de}from"../chunks/github.df9008b1.js";import{b as me}from"../chunks/bash.2b754df6.js";import{t as ue}from"../chunks/typescript.7dd1ec19.js";function fe(te){let l,_,w,a,u,f,D,U,b,G,S,g,y,k,q,h,H,p,E,j,A,I,C,N,c,x;return h=new ae({props:{language:me,code:"npm install --save @nymphjs/guid"}}),c=new ae({props:{language:ue,code:`import {
- guid,
- makeTableSuffix,
- humanSecret,
- nanoid,
- customAlphabet,
-} from '@nymphjs/guid';
-
-// This generates a GUID. It will be 24 characters long, and the first four
-// characters will be the same during a whole week. (This helps make DB index
-// paging more efficient.)
-const myGuid = guid();
-
-// This can be used as a table suffix in SQL queries. It will be 20 characters
-// long and alphanumeric.
-const myTableSuffix = makeTableSuffix();
-
-// This will be a human readable secret code. It will be 10 characters long and
-// use the nolookalikesSafe dictionary from nanoid-dictionary.
-const mySecretCode = humanSecret();
-
-// This is the nanoid library's main export. It is exported in commonjs format.
-const id = nanoid();
-
-// This is the nanoid library's customAlphabet export.
-const customId = customAlphabet('abc', 20)();`}}),{c(){l=new oe(!1),_=K(),w=d(),a=r("section"),u=r("header"),f=r("h1"),D=$("GUID / Unique Code Generator"),U=d(),b=r("p"),G=$(`The GUID and unique code generators are used to generate new GUIDs for Nymph
- objects and various random unique strings.`),S=d(),g=r("header"),y=r("h2"),k=$("Installation"),q=d(),M(h.$$.fragment),H=d(),p=r("header"),E=r("h2"),j=$("Usage"),A=d(),I=r("p"),C=$("There are a few functions for generating different kinds of strings."),N=d(),M(c.$$.fragment),this.h()},l(t){const T=ie("svelte-p5hhxe",document.head);l=le(T,!1),_=K(),T.forEach(s),w=m(t),a=o(t,"SECTION",{});var n=i(a);u=o(n,"HEADER",{class:!0});var R=i(u);f=o(R,"H1",{style:!0});var z=i(f);D=v(z,"GUID / Unique Code Generator"),z.forEach(s),R.forEach(s),U=m(n),b=o(n,"P",{});var B=i(b);G=v(B,`The GUID and unique code generators are used to generate new GUIDs for Nymph
- objects and various random unique strings.`),B.forEach(s),S=m(n),g=o(n,"HEADER",{class:!0});var F=i(g);y=o(F,"H2",{});var L=i(y);k=v(L,"Installation"),L.forEach(s),F.forEach(s),q=m(n),V(h.$$.fragment,n),H=m(n),p=o(n,"HEADER",{class:!0});var O=i(p);E=o(O,"H2",{});var Q=i(E);j=v(Q,"Usage"),Q.forEach(s),O.forEach(s),A=m(n),I=o(n,"P",{});var J=i(I);C=v(J,"There are a few functions for generating different kinds of strings."),J.forEach(s),N=m(n),V(c.$$.fragment,n),n.forEach(s),this.h()},h(){document.title="GUID / Unique Code Generator - Packages - Nymph.js",l.a=_,he(f,"font-size","3em"),P(u,"class","major"),P(g,"class","major"),P(p,"class","major")},m(t,T){l.m(de,document.head),e(document.head,_),W(t,w,T),W(t,a,T),e(a,u),e(u,f),e(f,D),e(a,U),e(a,b),e(b,G),e(a,S),e(a,g),e(g,y),e(y,k),e(a,q),X(h,a,null),e(a,H),e(a,p),e(p,E),e(E,j),e(a,A),e(a,I),e(I,C),e(a,N),X(c,a,null),x=!0},p:ce,i(t){x||(Y(h.$$.fragment,t),Y(c.$$.fragment,t),x=!0)},o(t){Z(h.$$.fragment,t),Z(c.$$.fragment,t),x=!1},d(t){s(_),t&&l.d(),t&&s(w),t&&s(a),ee(h),ee(c)}}}class ye extends ne{constructor(l){super(),se(this,l,null,fe,re,{})}}export{ye as component};
diff --git a/docs/_app/immutable/nodes/9.b2d1d902.js b/docs/_app/immutable/nodes/9.b2d1d902.js
deleted file mode 100644
index bfc7258..0000000
--- a/docs/_app/immutable/nodes/9.b2d1d902.js
+++ /dev/null
@@ -1,75 +0,0 @@
-import{S as Be,i as Ue,s as Ye,R as Fe,e as Oe,a as d,k as r,q as h,y as ye,F as Ge,T as We,h as s,c,l as o,m as n,r as l,z as ue,p as Je,n as p,C as e,b as Ie,A as ge,D as Ke,g as ve,d as _e,B as Ee}from"../chunks/index.d7cc8d8b.js";import{H as $e,g as Ve}from"../chunks/github.df9008b1.js";import{b as Xe}from"../chunks/bash.2b754df6.js";import{t as Me}from"../chunks/typescript.7dd1ec19.js";import{b as Te}from"../chunks/paths.d307dac8.js";function Ze(ze){let u,S,R,t,$,T,M,z,q,B,U,w,C,Y,F,g,G,b,P,W,J,m,K,N,V,X,H,Z,ee,x,te,ae,se,j,A,re,oe,k,ne,ie,v,he,_,le,D,L,de,ce,E,me,f,pe,fe,O;return g=new $e({props:{language:Xe,code:"npm install --save @nymphjs/nymph"}}),v=new $e({props:{language:Me,code:`// main.ts
-import { Nymph } from '@nymphjs/nymph';
-import MySQLDriver from '@nymphjs/driver-mysql';
-import TodoClass from './Todo';
-
-const mysqlConfig = {
- host: 'your_db_host',
- database: 'your_database',
- user: 'your_user',
- password: 'your_password',
-};
-
-// Create a new instance of Nymph.
-const nymph = new Nymph({}, new MySQLDriver(mysqlConfig));
-// addEntityClass returns the class you should use for this instance of Nymph.
-const Todo = nymph.addEntityClass(TodoClass);
-
-// You are set up. Now you can use entity classes like \`Todo\` to store data,
-// and Nymph's query methods like \`getEntities\` to retrieve them.
-
-async function run() {
- const myEntity = await Todo.factory();
- myEntity.text = 'Get it done!';
- await myEntity.$save();
-
- const otherPendingTodos = await nymph.getEntities(
- { class: Todo },
- { type: '&', '!guid': myEntity.guid, equal: ['done', false] },
- );
-
- const total = otherPendingTodos.length;
- const single = total === 1;
- console.log(
- \`Besides the one I just created, there \${
- single ? 'is' : 'are'
- } \${total} pending todo\${single ? '' : 's'} in the database.\`,
- );
-}`}}),_=new $e({props:{language:Me,code:`// Todo.ts
-import { Entity } from '@nymphjs/nymph';
-
-export type TodoData = {
- text: string;
- done: boolean;
-};
-
-export default class Todo extends Entity {
- static ETYPE = 'todo'; // This is used for the table name(s) in the DB.
- static class = 'Todo'; // This is used to map references to their class.
-
- constructor() {
- super();
-
- // Within the methods of an entity, you will use \`this.$data\` to access
- // its data. Outside, you don't need the $data part.
- this.$data.text = '';
- this.$data.done = false;
- }
-
- async $getOtherTodos() {
- // this.$nymph (or this.nymph in a static function) is the instance of Nymph
- // this entity was loaded with. Creating transactions will create a new
- // instance of Nymph, so it could be a transactional instance.
- const otherTodos = await this.$nymph.getEntities(
- { class: Todo },
- { type: '!&', guid: this.guid },
- );
- return otherTodos;
- }
-}`}}),{c(){u=new Fe(!1),S=Oe(),R=d(),t=r("section"),$=r("header"),T=r("h1"),M=h("Nymph"),z=d(),q=r("p"),B=h(`The Nymph core provides the base level classes and utilities to query the
- database, save data to it, and define different data types.`),U=d(),w=r("header"),C=r("h2"),Y=h("Installation"),F=d(),ye(g.$$.fragment),G=d(),b=r("header"),P=r("h2"),W=h("Drivers"),J=d(),m=r("p"),K=h("To use Nymph, you need a database driver. Nymph.js provides a "),N=r("a"),V=h("MySQL driver"),X=h(", "),H=r("a"),Z=h("PostgreSQL driver"),ee=h(`, and a
- `),x=r("a"),te=h("SQLite3 driver"),ae=h(`. They all
- provide the exact same functionality.`),se=d(),j=r("header"),A=r("h2"),re=h("Usage"),oe=d(),k=r("p"),ne=h("Here's an overview:"),ie=d(),ye(v.$$.fragment),he=d(),ye(_.$$.fragment),le=d(),D=r("header"),L=r("h2"),de=h("Options"),ce=d(),E=r("p"),me=h("See the "),f=r("a"),pe=h("config declaration file"),fe=h("."),this.h()},l(i){const Q=Ge("svelte-lxz0w1",document.head);u=We(Q,!1),S=Oe(),Q.forEach(s),R=c(i),t=o(i,"SECTION",{});var a=n(t);$=o(a,"HEADER",{class:!0});var we=n($);T=o(we,"H1",{style:!0});var be=n(T);M=l(be,"Nymph"),be.forEach(s),we.forEach(s),z=c(a),q=o(a,"P",{});var Ne=n(q);B=l(Ne,`The Nymph core provides the base level classes and utilities to query the
- database, save data to it, and define different data types.`),Ne.forEach(s),U=c(a),w=o(a,"HEADER",{class:!0});var He=n(w);C=o(He,"H2",{});var xe=n(C);Y=l(xe,"Installation"),xe.forEach(s),He.forEach(s),F=c(a),ue(g.$$.fragment,a),G=c(a),b=o(a,"HEADER",{class:!0});var je=n(b);P=o(je,"H2",{});var De=n(P);W=l(De,"Drivers"),De.forEach(s),je.forEach(s),J=c(a),m=o(a,"P",{});var y=n(m);K=l(y,"To use Nymph, you need a database driver. Nymph.js provides a "),N=o(y,"A",{href:!0});var Se=n(N);V=l(Se,"MySQL driver"),Se.forEach(s),X=l(y,", "),H=o(y,"A",{href:!0});var qe=n(H);Z=l(qe,"PostgreSQL driver"),qe.forEach(s),ee=l(y,`, and a
- `),x=o(y,"A",{href:!0});var Ce=n(x);te=l(Ce,"SQLite3 driver"),Ce.forEach(s),ae=l(y,`. They all
- provide the exact same functionality.`),y.forEach(s),se=c(a),j=o(a,"HEADER",{class:!0});var Pe=n(j);A=o(Pe,"H2",{});var Ae=n(A);re=l(Ae,"Usage"),Ae.forEach(s),Pe.forEach(s),oe=c(a),k=o(a,"P",{});var ke=n(k);ne=l(ke,"Here's an overview:"),ke.forEach(s),ie=c(a),ue(v.$$.fragment,a),he=c(a),ue(_.$$.fragment,a),le=c(a),D=o(a,"HEADER",{class:!0});var Le=n(D);L=o(Le,"H2",{});var Qe=n(L);de=l(Qe,"Options"),Qe.forEach(s),Le.forEach(s),ce=c(a),E=o(a,"P",{});var I=n(E);me=l(I,"See the "),f=o(I,"A",{href:!0,target:!0,rel:!0});var Re=n(f);pe=l(Re,"config declaration file"),Re.forEach(s),fe=l(I,"."),I.forEach(s),a.forEach(s),this.h()},h(){document.title="Nymph - Packages - Nymph.js",u.a=S,Je(T,"font-size","3em"),p($,"class","major"),p(w,"class","major"),p(b,"class","major"),p(N,"href",Te+"/packages/driver-mysql"),p(H,"href",Te+"/packages/driver-postgresql"),p(x,"href",Te+"/packages/driver-sqlite3"),p(j,"class","major"),p(D,"class","major"),p(f,"href","https://github.com/sciactive/nymphjs/tree/master/packages/nymph/src/conf/d.ts"),p(f,"target","_blank"),p(f,"rel","external noreferrer")},m(i,Q){u.m(Ve,document.head),e(document.head,S),Ie(i,R,Q),Ie(i,t,Q),e(t,$),e($,T),e(T,M),e(t,z),e(t,q),e(q,B),e(t,U),e(t,w),e(w,C),e(C,Y),e(t,F),ge(g,t,null),e(t,G),e(t,b),e(b,P),e(P,W),e(t,J),e(t,m),e(m,K),e(m,N),e(N,V),e(m,X),e(m,H),e(H,Z),e(m,ee),e(m,x),e(x,te),e(m,ae),e(t,se),e(t,j),e(j,A),e(A,re),e(t,oe),e(t,k),e(k,ne),e(t,ie),ge(v,t,null),e(t,he),ge(_,t,null),e(t,le),e(t,D),e(D,L),e(L,de),e(t,ce),e(t,E),e(E,me),e(E,f),e(f,pe),e(E,fe),O=!0},p:Ke,i(i){O||(ve(g.$$.fragment,i),ve(v.$$.fragment,i),ve(_.$$.fragment,i),O=!0)},o(i){_e(g.$$.fragment,i),_e(v.$$.fragment,i),_e(_.$$.fragment,i),O=!1},d(i){s(S),i&&u.d(),i&&s(R),i&&s(t),Ee(g),Ee(v),Ee(_)}}}class ot extends Be{constructor(u){super(),Ue(this,u,null,Ze,Ye,{})}}export{ot as component};
diff --git a/docs/_app/immutable/nodes/9.dd3d7b3a.js b/docs/_app/immutable/nodes/9.dd3d7b3a.js
new file mode 100644
index 0000000..c1bef68
--- /dev/null
+++ b/docs/_app/immutable/nodes/9.dd3d7b3a.js
@@ -0,0 +1,74 @@
+import{s as xe,I as Ee,e as ve,a as r,f as n,l as x,x as be,J as we,d as h,c as i,g as o,h as S,r as m,m as E,j as c,u as e,i as Te,v as Ce}from"../chunks/scheduler.d7e45cc8.js";import{S as He,i as Le,b as Z,d as ee,m as te,a as ae,t as se,e as ne}from"../chunks/index.77720afb.js";import{H as oe,g as Ne}from"../chunks/github.64534d2c.js";import{b as Me}from"../chunks/bash.7e4226ac.js";import{t as _e}from"../chunks/typescript.09c48802.js";import{b as re}from"../chunks/paths.d4a6803e.js";function je($e){let p,M,D,t,y,ie='
Nymph
',q,b,le=`The Nymph core provides the base level classes and utilities to query the
+ database, save data to it, and define different data types.`,k,u,he="
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ClientError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ClientError.html
new file mode 100644
index 0000000..ba524c3
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ClientError.html
@@ -0,0 +1,13 @@
+ClientError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ConnectionClosedUnexpectedlyError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ConnectionClosedUnexpectedlyError.html
new file mode 100644
index 0000000..1ebf50f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ConnectionClosedUnexpectedlyError.html
@@ -0,0 +1,11 @@
+ConnectionClosedUnexpectedlyError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ConnectionError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ConnectionError.html
new file mode 100644
index 0000000..44658d5
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ConnectionError.html
@@ -0,0 +1,11 @@
+ConnectionError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.Entity.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.Entity.html
new file mode 100644
index 0000000..ce165a2
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.Entity.html
@@ -0,0 +1,135 @@
+Entity | Nymph.js 1.0.0-beta.81
Call an instance method on the server version of this entity.
+
The entity's data will be sent up to the server as well, so the server's
+state can match the client's state. It won't be propagated into the DB,
+though.
+
Parameters
method: string
The name of the method.
+
params: Iterable<any>
The parameters to call the method with.
+
stateless: boolean = false
Whether the server should return, and the client update, the data in the entity after the method has run.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.EntityIsSleepingReferenceError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.EntityIsSleepingReferenceError.html
new file mode 100644
index 0000000..4451d5c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.EntityIsSleepingReferenceError.html
@@ -0,0 +1,11 @@
+EntityIsSleepingReferenceError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.HttpError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.HttpError.html
new file mode 100644
index 0000000..cf88a9d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.HttpError.html
@@ -0,0 +1,13 @@
+HttpError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InformationalError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InformationalError.html
new file mode 100644
index 0000000..8e0748b
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InformationalError.html
@@ -0,0 +1,13 @@
+InformationalError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InvalidRequestError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InvalidRequestError.html
new file mode 100644
index 0000000..590b748
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InvalidRequestError.html
@@ -0,0 +1,11 @@
+InvalidRequestError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InvalidResponseError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InvalidResponseError.html
new file mode 100644
index 0000000..2551677
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InvalidResponseError.html
@@ -0,0 +1,11 @@
+InvalidResponseError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InvalidStateError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InvalidStateError.html
new file mode 100644
index 0000000..b83ba70
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.InvalidStateError.html
@@ -0,0 +1,11 @@
+InvalidStateError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.Nymph.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.Nymph.html
new file mode 100644
index 0000000..3ea83d4
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.Nymph.html
@@ -0,0 +1,48 @@
+Nymph | Nymph.js 1.0.0-beta.81
This will create a class that extends your class within this instance of
+Nymph and return it. You can then use this class's constructor and methods,
+which will use this instance of Nymph.
+
Because this creates a subclass, don't use the class
+returned from getEntityClass to check with instanceof.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.PubSub.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.PubSub.html
new file mode 100644
index 0000000..9dc9682
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.PubSub.html
@@ -0,0 +1,43 @@
+PubSub | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.PubSubSubscription.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.PubSubSubscription.html
new file mode 100644
index 0000000..e1363d3
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.PubSubSubscription.html
@@ -0,0 +1,5 @@
+PubSubSubscription | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.RedirectError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.RedirectError.html
new file mode 100644
index 0000000..f22d081
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.RedirectError.html
@@ -0,0 +1,13 @@
+RedirectError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ServerError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ServerError.html
new file mode 100644
index 0000000..4c683be
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.ServerError.html
@@ -0,0 +1,13 @@
+ServerError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client.SuccessError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.SuccessError.html
new file mode 100644
index 0000000..30bc7f4
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client.SuccessError.html
@@ -0,0 +1,13 @@
+SuccessError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client_node.Nymph.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client_node.Nymph.html
new file mode 100644
index 0000000..da39fcd
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client_node.Nymph.html
@@ -0,0 +1,41 @@
+Nymph | Nymph.js 1.0.0-beta.81
This will create a class that extends your class within this instance of
+Nymph and return it. You can then use this class's constructor and methods,
+which will use this instance of Nymph.
+
Because this creates a subclass, don't use the class
+returned from getEntityClass to check with instanceof.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_client_node.PubSub.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_client_node.PubSub.html
new file mode 100644
index 0000000..58221ca
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_client_node.PubSub.html
@@ -0,0 +1,15 @@
+PubSub | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_driver_mysql.MySQLDriver.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_driver_mysql.MySQLDriver.html
new file mode 100644
index 0000000..10f931e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_driver_mysql.MySQLDriver.html
@@ -0,0 +1,106 @@
+MySQLDriver | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_driver_postgresql.PostgreSQLDriver.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_driver_postgresql.PostgreSQLDriver.html
new file mode 100644
index 0000000..d8b31ec
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_driver_postgresql.PostgreSQLDriver.html
@@ -0,0 +1,110 @@
+PostgreSQLDriver | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_driver_sqlite3.SQLite3Driver.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_driver_sqlite3.SQLite3Driver.html
new file mode 100644
index 0000000..7e932ce
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_driver_sqlite3.SQLite3Driver.html
@@ -0,0 +1,100 @@
+SQLite3Driver | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.ClassNotAvailableError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.ClassNotAvailableError.html
new file mode 100644
index 0000000..31d6324
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.ClassNotAvailableError.html
@@ -0,0 +1,12 @@
+ClassNotAvailableError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.Entity.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.Entity.html
new file mode 100644
index 0000000..59e576b
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.Entity.html
@@ -0,0 +1,314 @@
+Entity | Nymph.js 1.0.0-beta.81
Provides a way to access, manipulate, and store data in Nymph.
+
The GUID is not set until the entity is saved. GUIDs must be unique forever,
+even after deletion. It's the job of the Nymph DB driver to make sure no two
+entities ever have the same GUID. This is generally done by using a large
+randomly generated ID.
+
Each entity class has an etype that determines which table(s) in the database
+it belongs to. If two entity classes have the same etype, their data will be
+stored in the same table(s). This isn't a good idea, however, because
+references to an entity store a class name, not an etype.
+
Tags are used to classify entities. Where an etype is used to separate data
+by tables, tags can be used to separate entities within a table. You can
+define specific tags to be protected, meaning they cannot be added/removed
+from the client. It can be useful to allow user defined tags, such as for
+blog posts.
+
Simply calling $delete() will not unset the entity. It will still take up
+memory. Likewise, simply calling unset will not delete the entity from the
+DB.
+
Some notes about $equals() and $is(), the replacements for "==":
+
The == operator will likely not give you the result you want, since two
+instances of the same entity will fail that check, even though they represent
+the same data in the database.
+
$equals() performs a more strict comparison of the entity to another. Use
+$equals() instead of the == operator when you want to check both the entities
+they represent, and the data inside them. In order to return true for
+$equals(), the entity and object must meet the following criteria:
+
+
They must be entities.
+
They must have equal GUIDs, or both must have no GUID.
+
Their data and tags must be equal.
+
+
$is() performs a less strict comparison of the entity to another. Use $is()
+instead of the == operator when the entity's data may have been changed, but
+you only care if they represent the same entity. In order to return true, the
+entity and object must meet the following criteria:
+
+
They must be entities.
+
They must have equal GUIDs, or both must have no GUID.
+
If they have no GUIDs, their data and tags must be equal.
+
+
Some notes about saving entities in other entity's properties:
+
Entities use references in the DB to store an entity in their properties. The
+reference is stored as an array with the values:
+
+
0 => The string 'nymph_entity_reference'
+
1 => The referenced entity's GUID.
+
2 => The referenced entity's class name.
+
+
Since the referenced entity's class name (meaning the class static
+property, not the name of the class itself) is stored in the reference on the
+parent entity, if you change the class name in an update, you need to
+reassign all referenced entities of that class and resave.
+
When an entity is loaded, it does not request its referenced entities from
+Nymph. Instead, it creates instances without data called sleeping references.
+When you first access an entity's data, if it is a sleeping reference, it
+will fill its data from the DB. You can call clearCache() to turn all the
+entities back into sleeping references.
The AC properties' values when the entity was loaded.
+
Protected$privateData
$privateData:string[] = []
Properties that will not be serialized into JSON with toJSON(). This
+can be considered a denylist, because these properties will not be set
+with incoming JSON.
+
Clients CAN still determine what is in these properties, unless they are
+also listed in searchRestrictedData.
+
Protected$protectedData
$protectedData:string[] = []
Properties that can only be modified by server side code. They will still
+be visible on the frontend, unlike $privateData, but any changes to them
+that come from the frontend will be ignored.
+
In addition to what's listed here, all of the access control properties
+will be included when Tilmeld is being used. These are:
+
+
acUser
+
acGroup
+
acOther
+
acRead
+
acWrite
+
acFull
+
user
+
group
+
+
You should modify these through client enabled methods or the $save method
+instead, for safety.
+
Protected$protectedTags
$protectedTags:string[] = []
Tags that can only be added/removed by server side code. They will still be
+visible on the frontend, but any changes to them that come from the
+frontend will be ignored.
Whether this entity should publish changes to PubSub servers.
+
StaticrestEnabled
restEnabled:boolean = true
Whether this entity should be accessible on the frontend through the REST
+server.
+
If this is false, any request from the client that attempts to use this
+entity will fail.
+
StaticsearchRestrictedData
searchRestrictedData:string[] = []
Properties that will not be searchable from the frontend. If the frontend
+includes any of these properties in any of their clauses, they will be
+filtered out before the search is executed.
+
Methods
$addTag
$addTag(...tags): void
Add one or more tags.
+
Parameters
Rest...tags: string[]
List of tags.
+
Returns void
$arraySearch
$arraySearch(array, strict?): number
Search the array for this object and return the corresponding index.
+
If strict is false, is() is used to compare. If strict is true,
+equals() is used.
+
Parameters
array: any[]
The array to search.
+
strict: boolean = false
Whether to use stronger comparison.
+
Returns number
The index if the object is in the array, -1 if it isn't.
+
$asleep
$asleep(): boolean
Check if this is a sleeping reference.
+
Returns boolean
Protected$check
$check(): void
Check if this is a sleeping reference and throw an error if so.
+
Returns void
$clearCache
$clearCache(): void
Replace any referenced entities in the data with sleeping references.
+
Calling this function ensures that the next time a referenced entity is
+accessed, it will be retrieved from the DB (unless it is in Nymph's cache).
+
Returns void
$delete
$delete(): Promise<boolean>
Delete the object from storage.
+
Returns Promise<boolean>
True on success, false on failure.
+
$equals
$equals(object): boolean
Perform a more strict comparison of this object to another.
+
Parameters
object: any
The object to compare.
+
Returns boolean
True or false.
+
$getAcFullIds
$getAcFullIds(): null | (null | string)[]
Returns null | (null | string)[]
$getAcGid
$getAcGid(): any
Returns any
$getAcReadIds
$getAcReadIds(): null | (null | string)[]
Returns null | (null | string)[]
$getAcUid
$getAcUid(): any
Returns any
$getAcWriteIds
$getAcWriteIds(): null | (null | string)[]
Returns null | (null | string)[]
$getClientEnabledMethods
$getClientEnabledMethods(): string[]
Get the client enabled methods.
+
Returns string[]
The names of methods allowed to be called by the frontend with serverCall.
Get an array of strings that must be unique across the current etype.
+
When you try to save another entity with any of the same unique strings,
+Nymph will throw an error.
+
The default implementation of this static method instantiates the entity,
+assigns all of the given data, then calls $getUniques and returns its
+output. This can have a performance impact if a lot of extra processing
+happens during any of these steps. You can override this method to
+calculate the unique strings faster, but you must return the same strings
+that would be returned by $getUniques.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityConflictError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityConflictError.html
new file mode 100644
index 0000000..51ca4a3
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityConflictError.html
@@ -0,0 +1,12 @@
+EntityConflictError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityInvalidDataError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityInvalidDataError.html
new file mode 100644
index 0000000..fb62018
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityInvalidDataError.html
@@ -0,0 +1,18 @@
+EntityInvalidDataError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityIsSleepingReferenceError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityIsSleepingReferenceError.html
new file mode 100644
index 0000000..1c29767
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityIsSleepingReferenceError.html
@@ -0,0 +1,12 @@
+EntityIsSleepingReferenceError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityUniqueConstraintError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityUniqueConstraintError.html
new file mode 100644
index 0000000..063ff06
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.EntityUniqueConstraintError.html
@@ -0,0 +1,12 @@
+EntityUniqueConstraintError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.InvalidParametersError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.InvalidParametersError.html
new file mode 100644
index 0000000..f26f893
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.InvalidParametersError.html
@@ -0,0 +1,12 @@
+InvalidParametersError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.InvalidStateError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.InvalidStateError.html
new file mode 100644
index 0000000..7361c6d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.InvalidStateError.html
@@ -0,0 +1,12 @@
+InvalidStateError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.NotConfiguredError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.NotConfiguredError.html
new file mode 100644
index 0000000..b9dbc97
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.NotConfiguredError.html
@@ -0,0 +1,12 @@
+NotConfiguredError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.Nymph.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.Nymph.html
new file mode 100644
index 0000000..1eeb945
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.Nymph.html
@@ -0,0 +1,283 @@
+Nymph | Nymph.js 1.0.0-beta.81
This will create a class that extends your class within this instance of
+Nymph and return it. You can then use this class's constructor and methods,
+which will use this instance of Nymph.
+
Because this creates a subclass, don't use the class
+returned from getEntityClass to check with instanceof.
options is an object, which contains any of the following settings:
+
+
class - The class to create each entity with.
+
limit - The limit of entities to be returned.
+
offset - The offset from the oldest matching entity to start retrieving.
+
reverse - If true, entities will be retrieved from newest to oldest.
+Therefore, offset will be from the newest entity.
+
sort - How to sort the entities. Accepts "cdate", "mdate", or the name of
+a top-level property. The method of sorting properties other than cdate
+and mdate is driver dependent. The only hard rule is that numbers should
+be sorted numerically (2 before 10). Defaults to "cdate".
+
return - What to return. "entity", "guid", or "count". Defaults to
+"entity".
+
source - Will be 'client' if the query came from a REST call.
+
skipCache - If true, Nymph will skip the cache and retrieve the entity
+from the DB.
+
skipAc - If true, Tilmeld will not filter returned entities according to
+access controls. (If Tilmeld is installed.) (This is always set to
+false by the REST server.)
+
+
If a class is specified, it must have a factory() static method that
+returns a new instance.
+
Selectors are objects. Any amount of selectors can be provided. Empty
+selectors will be ignored. The type property of a selector is required
+and can be one of the following strings:
+
+
& - (and) All values in the selector must be true.
+
| - (or) At least one value in the selector must be true.
+
!& - (not and) All values in the selector must be false.
+
!| - (not or) At least one value in the selector must be false.
+
+
The rest of the properties in the selectors are called selector clauses,
+which can be any of the following (in the form selector.name = value, or
+selector.name = [value1, value2,...]):
+
+
guid - A GUID. True if the entity's GUID is equal.
+
tag - A tag. True if the entity has the tag.
+
defined - A name. True if the named property exists.
+
truthy - A name. True if the named property is defined and truthy.
+
equal - An array with a name, then value. True if the named property is
+defined and equal (their JSON strings are identical).
+
contain - An array with a name, then value. True if the named property
+contains the value (its JSON string is found within the property's JSON
+string).
+
match - An array with a name, then regular expression. True if the
+named property matches. Uses POSIX RegExp. Case sensitive. Must not be
+surrounded by any delimiters.
+
imatch - An array with a name, then regular expression. True if the
+named property matches. Uses POSIX RegExp. Case insensitive. Must not
+be surrounded by any delimiters.
+
like - An array with a name, then pattern. True if the named property
+matches. Uses % for variable length wildcard and _ for single character
+wildcard. Case sensitive.
+
ilike - An array with a name, then pattern. True if the named property
+matches. Uses % for variable length wildcard and _ for single character
+wildcard. Case insensitive.
+
gt - An array with a name, then value. True if the named property is
+greater than the value.
+
gte - An array with a name, then value. True if the named property is
+greater than or equal to the value.
+
lt - An array with a name, then value. True if the named property is
+less than the value.
+
lte - An array with a name, then value. True if the named property is
+less than or equal to the value.
+
ref - An array with a name, then either an entity, or a GUID. True if
+the named property is the entity or contains the entity.
+
qref - An array with a name, then a full query (including options) in an
+array. True if the named property is an entity that matches the query or
+contains an entity that matches the query.
+
selector - A selector. (Keep in mind, you can also use an array of these,
+just like any other clause.)
+
+
These clauses can all be negated, by prefixing them with an exclamation
+point, such as "!truthy" to mean falsy (or undefined).
+
Any clause that accepts an array of name and value can also accept a third
+element. If value is null and the third element is a string, the third
+element will be used with Locutus' strtotime function to set value to a
+relative timestamp. For example, the following selector will look for all
+entities that were created in the last day:
This example will retrieve the last two entities where:
+
+
It has 'person' tag.
+
spouse is defined.
+
gender is male and lname is Smith.
+
warnings is not an integer 0.
+
It has 'level1' and 'level2' tags, or it has 'access1' and 'access2'
+tags.
+
It has either 'employee' or 'manager' tag.
+
name is either Clark, James, Chris, Christopher, Jake, or Jacob.
+
If age is 22 or more, then pay is not greater than 8.
+
+
constentities = Nymph.getEntities( { class:Entity, reverse:true, limit:2 }, { type:'&', // all must be true tag:'person', defined:'spouse', equal: [ ['gender', 'male'], ['lname', 'Smith'] ], '!equal': ['warnings', 0] }, { type:'|', // at least one of the selectors in this must match selector: [ { type:'&', tag: ['level1', 'level2'] }, { type:'&', tag: ['access1', 'access2'] } ] }, { type:'|', // at least one must be true tag: ['employee', 'manager'] }, { type:'|', equal: [ ['name', 'Clark'], ['name', 'James'] ], match: [ ['name', 'Chris(topher)?'], ['name', 'Ja(ke|cob)'] ] }, { type:'!|', // at least one must be false gte: ['age', 22], gt: ['pay', 8] } );
+
Get the first entity to match all options/selectors.
+
options and selectors are the same as in getEntities().
+
This function is equivalent to setting options.limit to 1 for
+getEntities(), except that it will return null if no entity is found.
+getEntities() would return an empty array.
Note that it is fine, though unusual, for two classes to use the same
+etype. However, this can lead to very hard to diagnose bugs, so is
+generally discouraged.
The UID's value, or null on failure and if it doesn't exist.
+
import
import(filename): Promise<boolean>
Import entities from a file.
+
Parameters
filename: string
The file to import from.
+
Returns Promise<boolean>
True on success, false on failure.
+
inTransaction
inTransaction(): Promise<boolean>
Check if there is any open transaction.
+
Returns Promise<boolean>
True if there is a transaction.
+
needsMigration
needsMigration(): Promise<boolean>
Detect whether the database needs to be migrated.
+
If true, the database should be exported with an old version of Nymph, then
+imported into a fresh database with this version.
+
Returns Promise<boolean>
newUID
newUID(name): Promise<null | number>
Increment or create a unique ID and return the new value.
+
Unique IDs, or UIDs are similar to GUIDs, but numeric and sequential.
+
A UID can be used to identify an object when the GUID doesn't suffice. On
+a system where a new entity is created many times per second, referring
+to something by its GUID may be unintuitive. However, the component
+designer is responsible for assigning UIDs to the component's entities.
+Beware that if a UID is incremented for an entity, and the entity cannot
+be saved, there is no safe, and therefore, no recommended way to
+decrement the UID back to its previous value.
+
If newUID() is passed the name of a UID which does not exist yet, one
+will be created with that name, and assigned the value 1. If the UID
+already exists, its value will be incremented. The new value will be
+returned.
Start an atomic transaction and returns a new instance of Nymph.
+
All proceeding changes using this new instance will wait to be written to
+the database's permanent storage until commit() is called. You can also
+undo all the changes since this function ran with rollback().
+
Transactions will nest as long as every name is unique. Internally, Nymph
+uses names prefixed with "nymph-".
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.NymphDriver.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.NymphDriver.html
new file mode 100644
index 0000000..981a190
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.NymphDriver.html
@@ -0,0 +1,77 @@
+NymphDriver | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.QueryFailedError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.QueryFailedError.html
new file mode 100644
index 0000000..6a5dd2b
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.QueryFailedError.html
@@ -0,0 +1,15 @@
+QueryFailedError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.UnableToConnectError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.UnableToConnectError.html
new file mode 100644
index 0000000..688cb9a
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_nymph.UnableToConnectError.html
@@ -0,0 +1,12 @@
+UnableToConnectError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_pubsub.PubSub.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_pubsub.PubSub.html
new file mode 100644
index 0000000..2203447
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_pubsub.PubSub.html
@@ -0,0 +1,52 @@
+PubSub | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_server.ForbiddenClassError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_server.ForbiddenClassError.html
new file mode 100644
index 0000000..c06d19c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_server.ForbiddenClassError.html
@@ -0,0 +1,12 @@
+ForbiddenClassError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_server.HttpError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_server.HttpError.html
new file mode 100644
index 0000000..a7b428b
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_server.HttpError.html
@@ -0,0 +1,14 @@
+HttpError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_sorter.Sorter.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_sorter.Sorter.html
new file mode 100644
index 0000000..57634db
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_sorter.Sorter.html
@@ -0,0 +1,26 @@
+Sorter | Nymph.js 1.0.0-beta.81
Sort an array of entities hierarchically by a specified property's value.
+
Entities will be placed immediately after their parents. The
+parentProperty property, if present, should hold either null, undefined,
+or the entity's parent.
+
Parameters
property: string
The name of the property to sort entities by.
+
parentProperty: string
The name of the property which holds the parent of the entity.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.AbleObject.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.AbleObject.html
new file mode 100644
index 0000000..755497f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.AbleObject.html
@@ -0,0 +1,261 @@
+AbleObject | Nymph.js 1.0.0-beta.81
Properties that will not be serialized into JSON with toJSON(). This
+can be considered a denylist, because these properties will not be set
+with incoming JSON.
+
Clients CAN still determine what is in these properties, unless they are
+also listed in searchRestrictedData.
+
Protected$protectedData
$protectedData:string[]
Properties that can only be modified by server side code. They will still
+be visible on the frontend, unlike $privateData, but any changes to them
+that come from the frontend will be ignored.
+
In addition to what's listed here, all of the access control properties
+will be included when Tilmeld is being used. These are:
+
+
acUser
+
acGroup
+
acOther
+
acRead
+
acWrite
+
acFull
+
user
+
group
+
+
You should modify these through client enabled methods or the $save method
+instead, for safety.
+
Protected$protectedTags
$protectedTags:string[]
Tags that can only be added/removed by server side code. They will still be
+visible on the frontend, but any changes to them that come from the
+frontend will be ignored.
Whether this entity should publish changes to PubSub servers.
+
StaticrestEnabled
restEnabled:boolean
Whether this entity should be accessible on the frontend through the REST
+server.
+
If this is false, any request from the client that attempts to use this
+entity will fail.
+
StaticsearchRestrictedData
searchRestrictedData:string[]
Properties that will not be searchable from the frontend. If the frontend
+includes any of these properties in any of their clauses, they will be
+filtered out before the search is executed.
+
Methods
$addTag
$addTag(...tags): void
Add one or more tags.
+
Parameters
Rest...tags: string[]
List of tags.
+
Returns void
$arraySearch
$arraySearch(array, strict?): number
Search the array for this object and return the corresponding index.
+
If strict is false, is() is used to compare. If strict is true,
+equals() is used.
+
Parameters
array: any[]
The array to search.
+
Optionalstrict: boolean
Whether to use stronger comparison.
+
Returns number
The index if the object is in the array, -1 if it isn't.
+
$asleep
$asleep(): boolean
Check if this is a sleeping reference.
+
Returns boolean
Protected$check
$check(): void
Check if this is a sleeping reference and throw an error if so.
+
Returns void
$clearCache
$clearCache(): void
Replace any referenced entities in the data with sleeping references.
+
Calling this function ensures that the next time a referenced entity is
+accessed, it will be retrieved from the DB (unless it is in Nymph's cache).
+
Returns void
$delete
$delete(): Promise<boolean>
Delete the object from storage.
+
Returns Promise<boolean>
True on success, false on failure.
+
$equals
$equals(object): boolean
Perform a more strict comparison of this object to another.
+
Parameters
object: any
The object to compare.
+
Returns boolean
True or false.
+
$getAcFullIds
$getAcFullIds(): null | (null | string)[]
Returns null | (null | string)[]
$getAcGid
$getAcGid(): any
Returns any
$getAcReadIds
$getAcReadIds(): null | (null | string)[]
Returns null | (null | string)[]
$getAcUid
$getAcUid(): any
Returns any
$getAcWriteIds
$getAcWriteIds(): null | (null | string)[]
Returns null | (null | string)[]
$getClientEnabledMethods
$getClientEnabledMethods(): string[]
Get the client enabled methods.
+
Returns string[]
The names of methods allowed to be called by the frontend with serverCall.
Get an array of strings that must be unique across the current etype.
+
When you try to save another entity with any of the same unique strings,
+Nymph will throw an error.
+
The default implementation of this static method instantiates the entity,
+assigns all of the given data, then calls $getUniques and returns its
+output. This can have a performance impact if a lot of extra processing
+happens during any of these steps. You can override this method to
+calculate the unique strings faster, but you must return the same strings
+that would be returned by $getUniques.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.AccessControlError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.AccessControlError.html
new file mode 100644
index 0000000..991d7b0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.AccessControlError.html
@@ -0,0 +1,14 @@
+AccessControlError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.BadDataError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.BadDataError.html
new file mode 100644
index 0000000..cabd55c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.BadDataError.html
@@ -0,0 +1,14 @@
+BadDataError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.BadEmailError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.BadEmailError.html
new file mode 100644
index 0000000..467474c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.BadEmailError.html
@@ -0,0 +1,14 @@
+BadEmailError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.BadUsernameError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.BadUsernameError.html
new file mode 100644
index 0000000..8de7a9f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.BadUsernameError.html
@@ -0,0 +1,14 @@
+BadUsernameError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.CouldNotChangeDefaultPrimaryGroupError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.CouldNotChangeDefaultPrimaryGroupError.html
new file mode 100644
index 0000000..e192b6e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.CouldNotChangeDefaultPrimaryGroupError.html
@@ -0,0 +1,12 @@
+CouldNotChangeDefaultPrimaryGroupError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.EmailChangeRateLimitExceededError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.EmailChangeRateLimitExceededError.html
new file mode 100644
index 0000000..097f28d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.EmailChangeRateLimitExceededError.html
@@ -0,0 +1,12 @@
+EmailChangeRateLimitExceededError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.Group.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.Group.html
new file mode 100644
index 0000000..31a3170
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.Group.html
@@ -0,0 +1,319 @@
+Group | Nymph.js 1.0.0-beta.81
Properties that will not be serialized into JSON with toJSON(). This
+can be considered a denylist, because these properties will not be set
+with incoming JSON.
+
Clients CAN still determine what is in these properties, unless they are
+also listed in searchRestrictedData.
+
Protected$protectedData
$protectedData:string[]
Properties that can only be modified by server side code. They will still
+be visible on the frontend, unlike $privateData, but any changes to them
+that come from the frontend will be ignored.
+
In addition to what's listed here, all of the access control properties
+will be included when Tilmeld is being used. These are:
+
+
acUser
+
acGroup
+
acOther
+
acRead
+
acWrite
+
acFull
+
user
+
group
+
+
You should modify these through client enabled methods or the $save method
+instead, for safety.
+
Protected$protectedTags
$protectedTags:string[]
Tags that can only be added/removed by server side code. They will still be
+visible on the frontend, but any changes to them that come from the
+frontend will be ignored.
Whether this entity should publish changes to PubSub servers.
+
StaticrestEnabled
restEnabled:boolean
Whether this entity should be accessible on the frontend through the REST
+server.
+
If this is false, any request from the client that attempts to use this
+entity will fail.
+
StaticsearchRestrictedData
searchRestrictedData:string[] = ...
Properties that will not be searchable from the frontend. If the frontend
+includes any of these properties in any of their clauses, they will be
+filtered out before the search is executed.
+
Methods
$addTag
$addTag(...tags): void
Add one or more tags.
+
Parameters
Rest...tags: string[]
List of tags.
+
Returns void
$arraySearch
$arraySearch(array, strict?): number
Search the array for this object and return the corresponding index.
+
If strict is false, is() is used to compare. If strict is true,
+equals() is used.
+
Parameters
array: any[]
The array to search.
+
Optionalstrict: boolean
Whether to use stronger comparison.
+
Returns number
The index if the object is in the array, -1 if it isn't.
+
$asleep
$asleep(): boolean
Check if this is a sleeping reference.
+
Returns boolean
Protected$check
$check(): void
Check if this is a sleeping reference and throw an error if so.
If the group is a top level group, this will return 0. If it is a child of
+a top level group, this will return 1. If it is a grandchild of a top level
+group, this will return 2, and so on.
+
Levels will max out at 1024 to avoid recursive loops.
Get an array of strings that must be unique across the current etype.
+
When you try to save another entity with any of the same unique strings,
+Nymph will throw an error.
+
The default implementation of this static method instantiates the entity,
+assigns all of the given data, then calls $getUniques and returns its
+output. This can have a performance impact if a lot of extra processing
+happens during any of these steps. You can override this method to
+calculate the unique strings faster, but you must return the same strings
+that would be returned by $getUniques.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.Tilmeld.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.Tilmeld.html
new file mode 100644
index 0000000..fd2a8d8
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.Tilmeld.html
@@ -0,0 +1,171 @@
+Tilmeld | Nymph.js 1.0.0-beta.81
If you will be performing authentication functions (logging in/out), you
+should set these so Tilmeld can read and write cookies and headers.
+
If you want the user to be authenticated with the cookie and/or header they
+provide, you should set at least the request. It's better to set both, so
+the JWT can be updated if needed.
+
After you set these, call authenticate() to read user authentication data
+from them and fill the user's session.
+
If you want to support cookie based authentication (which still requires an
+XSRF token for security), you should enable the cookie parser middleware.
Check for TILMELDAUTH and TILMELDSWITCH tokens, and, if set, authenticate
+from it/them.
+
You can also call this function after setting response.locals.user to the
+user you want to authenticate. You should check for user.enabled before
+setting this variable, unless you explicitly want to log in as a disabled
+user. (The user must be an instance of the User class for this Tilmeld
+instance.)
+
This function will set response.locals.user to the logged in user on
+successful authentication.
+
Parameters
skipXsrfToken: boolean = false
Skip the XSRF token check.
+
skipRenew: boolean = false
Skip the token renewal step, even if the token is close to expiration.
+
Returns Promise<boolean>
True if a user was authenticated, false on any failure.
UID functions on the Node.js side are not checked automatically. This
+function is only run automatically for UID functions run from the client.
+You should call this function manually if you're running a UID function on
+the Node.js side and you want it gated.
+
This will check the Tilmeld config and the user's abilities.
+
+
READ_ACCESS, the UID is listed in clientReadableUIDs or the user has the
+"uid/get/nameofuid" ability.
+
WRITE_ACCESS, the UID is listed in clientEnabledUIDs or the user has the
+"uid/new/nameofuid" ability.
+
FULL_ACCESS, the UID is listed in clientSetabledUIDs or the user has the
+"uid/set/nameofuid" ability.
This will check the AC (Access Control) properties of the entity. These
+include the following properties:
+
+
acUser
+
acGroup
+
acOther
+
acRead
+
acWrite
+
acFull
+
+
"acUser" refers to the entity's owner, "acGroup" refers to all users in the
+entity's group and all ancestor groups, and "acOther" refers to any user
+who doesn't fit these descriptions.
+
Each of these properties should be either NO_ACCESS, READ_ACCESS,
+WRITE_ACCESS, or FULL_ACCESS.
+
+
NO_ACCESS - the user has no access to the entity.
+
READ_ACCESS, the user has read access to the entity.
+
WRITE_ACCESS, the user has read and write access to the entity, but can't
+delete it, change its access controls, or change its ownership.
+
FULL_ACCESS, the user has read, write, and delete access to the entity,
+as well as being able to manage its access controls and ownership.
+
+
These properties default to:
+
+
acUser = TilmeldAccessLevels.FULL_ACCESS
+
acGroup = TilmeldAccessLevels.READ_ACCESS
+
acOther = TilmeldAccessLevels.NO_ACCESS
+
+
"acRead", "acWrite", and "acFull" are arrays of users and/or groups that
+also have those permissions.
+
Only users with FULL_ACCESS have the ability to change any of the ac*,
+user, and group properties.
+
The following conditions will result in different checks, which determine
+whether the check passes:
+
+
It is a user or group. (True for READ_ACCESS or Tilmeld admins.)
+
No user is logged in. (Check other AC.)
+
The entity is the user. (Always true.)
+
It is the user's primary group. (True for READ_ACCESS.)
+
The user or its groups are listed in "acRead". (True for READ_ACCESS.)
+
The user or its groups are listed in "acWrite". (True for READ_ACCESS and
+WRITE_ACCESS.)
+
The user or its groups are listed in "acFull". (Always true.)
+
Its "user" is the user. (It is owned by the user.) (Check user AC.)
+
Its "group" is the user's primary group. (Check group AC.)
+
Its "group" is one of the user's secondary groups. (Check group AC.)
+
Its "group" is a descendant of one of the user's groups. (Check group
+AC.)
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.User.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.User.html
new file mode 100644
index 0000000..b53e39c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld.User.html
@@ -0,0 +1,394 @@
+User | Nymph.js 1.0.0-beta.81
Used to save the current email address to send verification if it changes
+from the frontend.
+
If you are changing a user's email address and want to bypass email
+verification, don't set this.
+
Protected$privateData
$privateData:string[] = ...
Properties that will not be serialized into JSON with toJSON(). This
+can be considered a denylist, because these properties will not be set
+with incoming JSON.
+
Clients CAN still determine what is in these properties, unless they are
+also listed in searchRestrictedData.
+
Protected$protectedData
$protectedData:string[]
Properties that can only be modified by server side code. They will still
+be visible on the frontend, unlike $privateData, but any changes to them
+that come from the frontend will be ignored.
+
In addition to what's listed here, all of the access control properties
+will be included when Tilmeld is being used. These are:
+
+
acUser
+
acGroup
+
acOther
+
acRead
+
acWrite
+
acFull
+
user
+
group
+
+
You should modify these through client enabled methods or the $save method
+instead, for safety.
+
Protected$protectedTags
$protectedTags:string[]
Tags that can only be added/removed by server side code. They will still be
+visible on the frontend, but any changes to them that come from the
+frontend will be ignored.
Whether this entity should publish changes to PubSub servers.
+
StaticrestEnabled
restEnabled:boolean
Whether this entity should be accessible on the frontend through the REST
+server.
+
If this is false, any request from the client that attempts to use this
+entity will fail.
+
StaticsearchRestrictedData
searchRestrictedData:string[] = ...
Properties that will not be searchable from the frontend. If the frontend
+includes any of these properties in any of their clauses, they will be
+filtered out before the search is executed.
Get an array of strings that must be unique across the current etype.
+
When you try to save another entity with any of the same unique strings,
+Nymph will throw an error.
+
The default implementation of this static method instantiates the entity,
+assigns all of the given data, then calls $getUniques and returns its
+output. This can have a performance impact if a lot of extra processing
+happens during any of these steps. You can override this method to
+calculate the unique strings faster, but you must return the same strings
+that would be returned by $getUniques.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_client.Group.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_client.Group.html
new file mode 100644
index 0000000..b00c33e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_client.Group.html
@@ -0,0 +1,144 @@
+Group | Nymph.js 1.0.0-beta.81
Call an instance method on the server version of this entity.
+
The entity's data will be sent up to the server as well, so the server's
+state can match the client's state. It won't be propagated into the DB,
+though.
+
Parameters
method: string
The name of the method.
+
params: Iterable<any>
The parameters to call the method with.
+
Optionalstateless: boolean
Whether the server should return, and the client update, the data in the entity after the method has run.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_client.NeedTOTPError.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_client.NeedTOTPError.html
new file mode 100644
index 0000000..2ab549c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_client.NeedTOTPError.html
@@ -0,0 +1,11 @@
+NeedTOTPError | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_client.User.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_client.User.html
new file mode 100644
index 0000000..7d995d6
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_client.User.html
@@ -0,0 +1,159 @@
+User | Nymph.js 1.0.0-beta.81
Call an instance method on the server version of this entity.
+
The entity's data will be sent up to the server as well, so the server's
+state can match the client's state. It won't be propagated into the DB,
+though.
+
Parameters
method: string
The name of the method.
+
params: Iterable<any>
The parameters to call the method with.
+
Optionalstateless: boolean
Whether the server should return, and the client update, the data in the entity after the method has run.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_components.Account.html b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_components.Account.html
new file mode 100644
index 0000000..9bc961e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/classes/_nymphjs_tilmeld_components.Account.html
@@ -0,0 +1,32 @@
+Account | Nymph.js 1.0.0-beta.81
You have component library on npm called component-library, from which
+you export a component called MyComponent. For Svelte+TypeScript users,
+you want to provide typings. Therefore you create a index.d.ts:
Typing this makes it possible for IDEs like VS Code with the Svelte extension
+to provide intellisense and to use the component like this in a Svelte file
+with TypeScript:
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/enums/_nymphjs_nymph.TilmeldAccessLevels.html b/docs/api/1.0.0-beta.81/enums/_nymphjs_nymph.TilmeldAccessLevels.html
new file mode 100644
index 0000000..213fc59
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/enums/_nymphjs_nymph.TilmeldAccessLevels.html
@@ -0,0 +1,5 @@
+TilmeldAccessLevels | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.customAlphabet.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.customAlphabet.html
new file mode 100644
index 0000000..631a152
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.customAlphabet.html
@@ -0,0 +1,9 @@
+customAlphabet | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.guid.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.guid.html
new file mode 100644
index 0000000..1dd13d8
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.guid.html
@@ -0,0 +1 @@
+guid | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.humanSecret.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.humanSecret.html
new file mode 100644
index 0000000..28200b8
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.humanSecret.html
@@ -0,0 +1 @@
+humanSecret | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.makeTableSuffix.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.makeTableSuffix.html
new file mode 100644
index 0000000..d7e9ad8
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.makeTableSuffix.html
@@ -0,0 +1 @@
+makeTableSuffix | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.nanoid.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.nanoid.html
new file mode 100644
index 0000000..82c66d7
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_guid.nanoid.html
@@ -0,0 +1,8 @@
+nanoid | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.EntitiesTest.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.EntitiesTest.html
new file mode 100644
index 0000000..afc73b1
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.EntitiesTest.html
@@ -0,0 +1 @@
+EntitiesTest | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.ExportImportTest.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.ExportImportTest.html
new file mode 100644
index 0000000..c807308
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.ExportImportTest.html
@@ -0,0 +1 @@
+ExportImportTest | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.UIDTest.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.UIDTest.html
new file mode 100644
index 0000000..38c1a22
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.UIDTest.html
@@ -0,0 +1 @@
+UIDTest | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.classNamesToEntityConstructors.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.classNamesToEntityConstructors.html
new file mode 100644
index 0000000..17f91a3
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.classNamesToEntityConstructors.html
@@ -0,0 +1 @@
+classNamesToEntityConstructors | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.entitiesToReferences.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.entitiesToReferences.html
new file mode 100644
index 0000000..61b6c19
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.entitiesToReferences.html
@@ -0,0 +1 @@
+entitiesToReferences | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.referencesToEntities.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.referencesToEntities.html
new file mode 100644
index 0000000..124163d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.referencesToEntities.html
@@ -0,0 +1 @@
+referencesToEntities | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.sortObj.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.sortObj.html
new file mode 100644
index 0000000..04ef185
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.sortObj.html
@@ -0,0 +1 @@
+sortObj | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.uniqueStrings.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.uniqueStrings.html
new file mode 100644
index 0000000..b7a8427
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.uniqueStrings.html
@@ -0,0 +1 @@
+uniqueStrings | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.xor.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.xor.html
new file mode 100644
index 0000000..58db204
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_nymph.xor.html
@@ -0,0 +1 @@
+xor | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_pubsub.createServer.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_pubsub.createServer.html
new file mode 100644
index 0000000..feca53f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_pubsub.createServer.html
@@ -0,0 +1 @@
+createServer | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_query_parser.queryParser.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_query_parser.queryParser.html
new file mode 100644
index 0000000..3bc3914
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_query_parser.queryParser.html
@@ -0,0 +1 @@
+queryParser | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_server.createServer.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_server.createServer.html
new file mode 100644
index 0000000..c4e15b5
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_server.createServer.html
@@ -0,0 +1,6 @@
+createServer | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld.enforceTilmeld.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld.enforceTilmeld.html
new file mode 100644
index 0000000..cf18e65
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld.enforceTilmeld.html
@@ -0,0 +1 @@
+enforceTilmeld | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_client.checkUsername.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_client.checkUsername.html
new file mode 100644
index 0000000..2f97fb5
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_client.checkUsername.html
@@ -0,0 +1 @@
+checkUsername | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_client.login.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_client.login.html
new file mode 100644
index 0000000..ed5a138
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_client.login.html
@@ -0,0 +1 @@
+login | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_client.register.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_client.register.html
new file mode 100644
index 0000000..3282161
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_client.register.html
@@ -0,0 +1 @@
+register | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_setup.setup.html b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_setup.setup.html
new file mode 100644
index 0000000..1437433
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/functions/_nymphjs_tilmeld_setup.setup.html
@@ -0,0 +1 @@
+setup | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/hierarchy.html b/docs/api/1.0.0-beta.81/hierarchy.html
new file mode 100644
index 0000000..128343f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/hierarchy.html
@@ -0,0 +1 @@
+Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/index.html b/docs/api/1.0.0-beta.81/index.html
new file mode 100644
index 0000000..a116939
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/index.html
@@ -0,0 +1,64 @@
+Nymph.js 1.0.0-beta.81
All you need to start using Nymph is the @nymphjs/nymph package and one of the drivers, @nymphjs/driver-mysql, @nymphjs/driver-postgresql, or @nymphjs/driver-sqlite3. Check out the readme for the Nymph package.
+
You can also set up a REST server to use Nymph remotely, a PubSub server to receive updates for queries, and a user and group management system to provide registration and access control.
+
Check out the user guide for information about how to use Nymph once you have it set up.
The REST server lets you configure an endpoint for the Nymph client to query and push data to. The server provides this endpoint as an Express middleware, which can be used in a new or existing Express (or compatible) server.
The PubSub server provides a WebSocket server that allows Nymph to publish changes and the Nymph Client to subscribe to those changes. You can subscribe to individual entities, entity queries, or UIDs.
The Nymph Client allows you to query and push data to a Nymph REST server from the browser. You can also subscribe to entities and queries on a Nymph PubSub server and be notified of changes.
Tilmeld (the d is silent) is a user and group management system for Nymph. It provides strict access controls to protect entities from unauthorized access/modification. It allows for granting and revoking ad hoc abilities to users and groups, then checking for those abilities. It provides authentication services and features protection against XSRF attacks.
The Tilmeld Setup App allows administrators to create, modify, and delete users and groups and configure how Tilmeld works. It also acts as the endpoint for email address verification.
In version 1.0.0-beta.78, the database schema changed significantly, and data will need to be exported with an older version, then imported into a fresh database with this version. The meaning of the contain clause also changed to only check if the given value exists in an array.
+
In version 1.0.0-beta.41, the server side API was rewritten to match the client side API. All synchronous database calls were removed. This is to prevent a very rare potential bug, because synchronous database calls were made outside of transactions. Here is a list of some things that changed that could break your code:
+
+
$gatekeeper is now async
+
no guid on constructor or factorySync
+
checkClientUIDPermissions is now async
+
authenticate is now async
+
fillSession is now async
+
login is now async
+
loginSwitch is now async
+
logout is now async
+
logoutSwitch is now async
+
$addGroup is now async
+
$delGroup is now async
+
$inGroup is now async
+
$getLevel is now async
+
$ready changed to $wake
+
$readyAll changed to $wakeAll
+
+
You will also now need to call $wake on sleeping references before you access their data or they will throw and error.
Once you make changes in one package, you can either build that package directly or build all packages with bootstrap, then the other packages will be aware of the changes.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_client.AbortableAsyncIterator.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_client.AbortableAsyncIterator.html
new file mode 100644
index 0000000..57117db
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_client.AbortableAsyncIterator.html
@@ -0,0 +1,3 @@
+AbortableAsyncIterator | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_client.DataObjectInterface.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_client.DataObjectInterface.html
new file mode 100644
index 0000000..62371cd
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_client.DataObjectInterface.html
@@ -0,0 +1,40 @@
+DataObjectInterface | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_client.EntityInterface.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_client.EntityInterface.html
new file mode 100644
index 0000000..f88df04
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_client.EntityInterface.html
@@ -0,0 +1,86 @@
+EntityInterface | Nymph.js 1.0.0-beta.81
Call an instance method on the server version of this entity.
+
The entity's data will be sent up to the server as well, so the server's
+state can match the client's state. It won't be propagated into the DB,
+though.
+
Parameters
method: string
The name of the method.
+
params: Iterable<any>
The parameters to call the method with.
+
stateless: boolean
Whether the server should return, and the client update, the data in the entity after the method has run.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_driver_mysql.MySQLDriverConfig.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_driver_mysql.MySQLDriverConfig.html
new file mode 100644
index 0000000..abba644
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_driver_mysql.MySQLDriverConfig.html
@@ -0,0 +1,35 @@
+MySQLDriverConfig | Nymph.js 1.0.0-beta.81
If you need to use custom options, like SSL, you can provide them here in
+place of the above options.
+
database
database:string
The MySQL database.
+
engine
engine:string
The MySQL table engine.
+
You should use MYISAM if you are using MySQL < 5.6.
+
Options are: Any MySQL storage engine supported on your server.
+
foreignKeys
foreignKeys:boolean
Whether to use foreign keys. If your table engine doesn't support
+it (like MYISAM), you should turn this off.
+
host
host:string
The host on which to connect to MySQL. Can include a port, like
+hostname:port.
+
password
password:string
The MySQL password.
+
port
port:number
The port on which to connect to MySQL.
+
prefix
prefix:string
The MySQL table name prefix.
+
rowLocking
rowLocking:boolean
Whether to use row locking. If your table engine doesn't support
+it (like MYISAM), you should turn this off.
+
tableLocking
tableLocking:boolean
Whether to use table locking. If you use row locking, this should be off.
+If you can't use row locking (like with MYISAM), you can use table
+locking to ensure data consistency.
+
transactions
transactions:boolean
Whether to use transactions. If your table engine doesn't support
+it (like MYISAM), you should turn this off.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_driver_postgresql.PostgreSQLDriverConfig.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_driver_postgresql.PostgreSQLDriverConfig.html
new file mode 100644
index 0000000..c0343e2
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_driver_postgresql.PostgreSQLDriverConfig.html
@@ -0,0 +1,18 @@
+PostgreSQLDriverConfig | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_driver_sqlite3.SQLite3DriverConfig.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_driver_sqlite3.SQLite3DriverConfig.html
new file mode 100644
index 0000000..d1d6797
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_driver_sqlite3.SQLite3DriverConfig.html
@@ -0,0 +1,40 @@
+SQLite3DriverConfig | Nymph.js 1.0.0-beta.81
By default, the driver will always open the DB as readonly, and attempt to
+open another link to perform write operations. If you know that only one
+instance will be writing, you can force the driver to open for writing by
+default, which will block any other instance from opening it for writing.
+
One thing to note is that starting a transaction is a write operation, so
+as long as an instance is in a transaction, no other instances can write.
+
PubSub also needs to open the DB, and it only needs read access.
+
fileMustExist
fileMustExist:boolean
If the file does not exist, an Error will be thrown instead of creating a
+new file.
+
This option is ignored for in-memory, temporary, or readonly database
+connections.
+
filename
filename:string
The filename of the SQLite3 DB. Use ':memory:' for an in-memory DB.
+
pragmas
pragmas:string[]
Additional pragma statements to run upon connection.
+
The default pragmas:
+
+
journal_mode = WAL;
+(if wal is set to true)
+
encoding = "UTF-8";
+
foreign_keys = 1;
+
case_sensitive_like = 1;
+
+
(Don't include the PRAGMA keyword, but do include the semicolon.)
+
prefix
prefix:string
The SQLite3 table name prefix.
+
timeout
timeout:number
The timeout to use for waiting for the DB to become available.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.Config.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.Config.html
new file mode 100644
index 0000000..66cb5d4
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.Config.html
@@ -0,0 +1,19 @@
+Config | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.DataObjectInterface.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.DataObjectInterface.html
new file mode 100644
index 0000000..a849eb4
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.DataObjectInterface.html
@@ -0,0 +1,37 @@
+DataObjectInterface | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.EntityInterface.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.EntityInterface.html
new file mode 100644
index 0000000..e1d6a7f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.EntityInterface.html
@@ -0,0 +1,135 @@
+EntityInterface | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.TilmeldInterface.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.TilmeldInterface.html
new file mode 100644
index 0000000..7bd66b3
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_nymph.TilmeldInterface.html
@@ -0,0 +1,12 @@
+TilmeldInterface | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_pubsub.Config.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_pubsub.Config.html
new file mode 100644
index 0000000..b832c04
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_pubsub.Config.html
@@ -0,0 +1,17 @@
+Config | Nymph.js 1.0.0-beta.81
Allow clients to request to be notified when other clients subscribe to the
+same queries.
+
entries
entries:string[]
The URLs of the Nymph-PubSub servers to directly publish to. These servers
+are how this host will enter the PubSub network. If you only have one
+PubSub server, it needs to be listed here.
+
logger
logger:((...args) => void)
Function to log PubSub info/error messages.
+
Type declaration
(...args): void
Parameters
Rest...args: any[]
Returns void
originIsAllowed
originIsAllowed:((origin) => boolean)
Determine whether a client's origin is allowed to connect.
+
Type declaration
(origin): boolean
Parameters
origin: string
Returns boolean
relays
relays:string[]
The URLs of additional Nymph-PubSub servers to relay publishes to. If this
+host is a PubSub server, these servers are how it will continue into your
+PubSub network.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/interfaces/_nymphjs_tilmeld.Config.html b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_tilmeld.Config.html
new file mode 100644
index 0000000..32a92bc
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/interfaces/_nymphjs_tilmeld.Config.html
@@ -0,0 +1,178 @@
+Config | Nymph.js 1.0.0-beta.81
The name of the app. Used in emails sent to users and as the TOTP issuer.
+
appUrl
appUrl:string
The URL of the app. Used to define cookie domain, path, and security. Must
+be accessible to the Tilmeld client JS. (Note, cookies are not specific to
+individual ports, so tokens will be sent to any port running on this host.)
+
cancelChangeRedirect
cancelChangeRedirect:string
After the user cancels an address change, redirect them to this URL.
+
clientEnabledUIDs
clientEnabledUIDs:string[]
A list of UIDs that can be created from the client by anyone. (newUID)
+
Inclusion in this list implies inclusion in clientReadableUIDs.
+
Note: If you'd like to limit the access to logged in users, give them an
+ ability like "uid/new/nameofuid".
+
clientReadableUIDs
clientReadableUIDs:string[]
A list of UIDs that can be read from the client by anyone. (getUID)
+
Note: If you'd like to limit the access to logged in users, give them an
+ ability like "uid/get/nameofuid".
+
clientSetabledUIDs
clientSetabledUIDs:string[]
A list of UIDs that can be set from the client by anyone. (setUID,
+renameUID)
+
Inclusion in this list implies inclusion in clientReadableUIDs and
+clientEnabledUIDs.
+
Note: There is no way to run renameUID from the client.
+
Note: If you'd like to limit the access to logged in users, give them an
+ ability like "uid/set/nameofuid".
Allow the creation of an admin user. When a user is created, if there are
+no other users in the system, they will be granted all abilities.
+
emailRateLimit
emailRateLimit:string
Don't let users change their email address more often than this. You can
+enter one value and one unit of time, such as "2 weeks". Leave blank to
+disable rate limiting.
+
This also controls how long a user has to cancel an email address change
+from a link emailed to the old address.
+
emailTemplateDir
emailTemplateDir:string
The absolute path to the email template directory. Used by the default
+email sender.
+
emailUsernames
emailUsernames:boolean
Instead of a "username", a user logs in and is referred to by their email
+address. Enabling this after many users have been created can be messy.
+Make sure they all have email addresses first.
+
enableGroupSearch
enableGroupSearch:boolean
Whether frontend can search groups. (Probably not a good idea if privacy is
+a concern. Same risks as user search if generatePrimary is true.)
+
enableUserSearch
enableUserSearch:boolean
Whether frontend can search users. (Probably not a good idea if privacy is
+a concern.)
+
generatePrimary
generatePrimary:boolean
Whether to create a new primary group for every user who registers. This
+can be useful for providing access to entities the user creates.
+
In the case this is set, the default primary group, rather than being
+assigned to the user, is assigned as the parent of the generated group.
+
highestPrimary
highestPrimary:string | boolean
The GUID of the group above the highest groups allowed to be assigned as
+primary groups. True means all groups, and false means no groups.
+
highestSecondary
highestSecondary:string | boolean
The GUID of the group above the highest groups allowed to be assigned as
+secondary groups. True means all groups, and false means no groups.
How long, in seconds, before the JWT token expires to give the user a new
+one.
+
jwtSecret
jwtSecret:string
The secret used to sign the JWT.
+
jwtSwitchExpire
jwtSwitchExpire:number
How long from current time, in seconds, the JWT token for a user switch
+expires.
+
maxUsernameLength
maxUsernameLength:number
The maximum length for usernames. Infinity for unlimited.
+
minUsernameLength
minUsernameLength:number
The minimum length for usernames.
+
pwMethod
pwMethod:"salt" | "plain" | "digest"
Method used to store passwords. Salt is more secure if the database is
+compromised. Plain: store the password in plaintext. Digest: store the
+password's digest (hash). Salt: store the password's digest using a
+complex, unique salt.
+
Digests are SHA-256, so a salt probably isn't necessary, but who knows.
+
Options are: "plain", "digest", "salt"
+
pwRecovery
pwRecovery:boolean
Allow users to recover their username and/or password through their
+registered email.
+
pwRecoveryTimeLimit
pwRecoveryTimeLimit:string
How long a recovery request is valid.
+
regFields
regFields:string[]
These fields will be available for the user to fill in when they register.
The path (with leading slash and no trailing slash) where the setup utility
+is accessible. This is also used for email address verification.
+
+
This portion of the app will not check for the XSRF token, so make sure
+your REST endpoint is not under this URL.
+
+
unverifiedAccess
unverifiedAccess:boolean
Unverified users will be able to log in, but will only have the "unverified
+users" secondary group(s) until they verify their email. If set to false,
+their account will instead be disabled until they verify.
+
userFields
userFields:string[]
These will be the available fields for users. (Some fields, like username,
+can't be excluded.)
+
userRegisteredRecipient
userRegisteredRecipient:null | string
The address you'd like to receive a notification of registered users, if
+any.
+
validChars
validChars:string
Only these characters can be used when creating usernames and groupnames.
+(Doesn't apply to emails as usernames.)
+
validCharsNotice
validCharsNotice:string
When a user enters an invalid name, this message will be displayed.
+
validEmailRegex
validEmailRegex:RegExp
Email addresses must match this regular expression. By default, this uses
+the regex from the W3C HTML email element validation:
When a user enters an email that doesn't match the regex, this message will
+be displayed.
+
validRegex
validRegex:RegExp
Usernames and groupnames must match this regular expression. (Doesn't apply
+to emails as usernames.) By default, this ensures that the name begins and
+ends with an alphanumeric. (To allow anything, use .* inside the slashes.)
+
validRegexNotice
validRegexNotice:string
When a user enters a name that doesn't match the regex, this message will
+be displayed.
The Nymph Client allows you to query and push data to a Nymph REST server from the browser. You can also subscribe to entities and queries on a Nymph PubSub server and be notified of changes.
letsubscription = pubsub.subscribeWith(myTodo, () => { // When this is called, the entity will already contain new data from the // publish event. If the entity is deleted, the GUID will be set to null. if (myTodo.guid != null) { alert('Somebody touched my todo!'); } else { alert('Somebody deleted my todo!'); subscription.unsubscribe(); } });
// ...
// Subscribing to a query. lettodos = []; letuserCount = 0; letsubscription = pubsub.subscribeEntities( { class:Todo.class, }, { type:'&', '!tag':'archived', }, )( (update) => { // The first time this is called, `update` will be an array of Todo // entities. After that, `update` will be a publish event object.
// This takes an existing array of entities and either updates it to match // another array, or performs actions from a publish event object to update // it. pubsub.updateArray(todos, update);
// `todos` is now up to date with the latest publishes from the server. }, (err) =>alert(err), (count) => { // If you provide this callback, the server will send updates of how many // clients are subscribed to this query. userCount = count; }, );
// ...
// Remember to clean up your subscriptions when you no longer need them. subscription.unsubscribe();
+
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
// This generates a GUID. It will be 24 characters long, and the first four // characters will be the same during a whole week. (This helps make DB index // paging more efficient.) constmyGuid = guid();
// This can be used as a table suffix in SQL queries. It will be 20 characters // long and alphanumeric. constmyTableSuffix = makeTableSuffix();
// This will be a human readable secret code. It will be 10 characters long and // use the nolookalikesSafe dictionary from nanoid-dictionary. constmySecretCode = humanSecret();
// This is the nanoid library's main export. It is exported in commonjs format. constid = nanoid();
// This is the nanoid library's customAlphabet export. constcustomId = customAlphabet('abc', 20)();
+
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
// Create a new instance of Nymph. constnymph = newNymph({}, newMySQLDriver(mysqlConfig)); // addEntityClass returns the class you should use for this instance of Nymph. constTodo = nymph.addEntityClass(TodoClass);
// You are set up. Now you can use entity classes like `Todo` to store data, // and Nymph's query methods like `getEntities` to retrieve them.
consttotal = otherPendingTodos.length; constsingle = total === 1; console.log( `Besides the one I just created, there ${ single?'is':'are' }${total} pending todo${single?'':'s'} in the database.`, ); }
+
exportdefaultclassTodoextendsEntity<TodoData> { staticETYPE = 'todo'; // This is used for the table name(s) in the DB. staticclass = 'Todo'; // This is used to map references to their class.
constructor() { super();
// Within the methods of an entity, you will use `this.$data` to access // its data. Outside, you don't need the $data part. this.$data.text = ''; this.$data.done = false; }
async$getOtherTodos() { // this.$nymph (or this.nymph in a static function) is the instance of Nymph // this entity was loaded with. Creating transactions will create a new // instance of Nymph, so it could be a transactional instance. constotherTodos = awaitthis.$nymph.getEntities( { class:Todo }, { type:'!&', guid:this.guid }, ); returnotherTodos; } }
+
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
The PubSub server provides a WebSocket server that allows Nymph to publish changes and the Nymph Client to subscribe to those changes. You can subscribe to individual entities, entity queries, or UIDs.
Any Nymph instance will only publish changes if you initialize PubSub publisher before Nymph is used! This step is absolutely required to have a working PubSub system.
constpubSubConfig = { entries: ['ws://yourpubsubserver.tld:8080/'], // This should be set to your PubSub server URL(s). };
constnymph = newNymph( {}, newSQLite3Driver({ filename:':memory:', // Put the correct driver/config here. }), ); PubSub.initPublisher(pubSubConfig, nymph);
+
+
Now, on your PubSub server, you can use the createServer function to create a new PubSub server using HTTP (without TLS). If you want, this can be done on the same server you use as a REST server, with a different port.
constnymph = newNymph( {}, newSQLite3Driver({ filename:':memory:', // Put the correct driver/config here. }), ); // Don't forget to do this; even here! PubSub.initPublisher(pubSubConfig, nymph);
// Set up Nymph. constnymph = newNymph( {}, newSQLite3Driver({ filename:':memory:', // Put the correct driver/config here. }), ); // Don't forget to do this; even here! PubSub.initPublisher(pubSubConfig, nymph);
// Set up the PubSub server. constport = 8080; constserver = http.createServer((_request, response) => { response.writeHead(404); response.end(); }); constlistener = server.listen(port, () => { console.log( newDate().toISOString(), `Nymph-PubSub server started listening on port ${port}.`, ); }); constwsServer = newWebSocketServer({ httpServer:listener, // You should not use autoAcceptConnections for production // applications, as it defeats all standard cross-origin protection // facilities built into the protocol and the browser. You should // *always* verify the connection's origin and decide whether or not // to accept it. autoAcceptConnections:false, });
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
The query parser will turn a string into an Options and Selectors array for the Nymph Client. It has a syntax that allows for most features of a Nymph query to be expressed in a text input.
Check if the array at the named property contains a value.
+
+
name<value> or name!<value>
+
(Escape angle brackets with a leading backslash. If your value could be interpreted as valid JSON, encode it as a JSON string and use the JSON syntax instead.)
+
+
+
name<JSON> or name!<JSON>
+
(Search for a JSON encoded value (like true, 1, [1,2,3], or {"prop":"val"}).)
You can specify nested selectors with different types using pairs of parentheses. The first character (or two) inside the parentheses can be a type: "&", "!&", "|", "!|", or "!" (the same as "!&").
Anything contained in the query (including in selector parentheses) that doesn't match any of the options or clause syntaxes listed above (bare query parts) will be added (at the appropriate nesting level) to a selector with an "|" type in an ilike clause surrounded by "%" characters for each field passed in to the defaultFields argument.
You can also supply a function in the option bareHandler that will handle bare query parts instead of the "Default Fields" behavior described above. It will receive three arguments, the query parts, the entity class, and the default fields entry for that class. It should return a partial selector that will replace or extend the "|" selector.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
The REST server lets you configure an endpoint for the Nymph client to query and push data to. The server provides this endpoint as an Express middleware, which can be used in a new or existing Express (or compatible) server.
You need to install Express, Nymph, and a Nymph driver, then you can use the REST server with an optional path. For this example, I'll use the SQLite3 driver with an in-memory database.
constnymph = newNymph({ // You should configure your Express server to // use HTTPS, but you don't have to. restUrl:'https://mydomain.tld/rest', }); constMyEntity = nymph.addEntityClass(MyEntityClass);
+
+
The REST server will authenticate for you using the Tilmeld auth cookie and XSRF token, but if you need to, you can authenticate in some other way (like OAuth2), and place the user in response.locals.user.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
sorter.sort('name'); // Pages are now sorted by name, with locale aware sorting. console.log(pages);
sorter.sort('cdate'); // Pages are now sorted by creation date. console.log(pages);
sorter.sort('cdate', { reverse:true }); // Pages are now sorted by creation date, newest first. console.log(pages);
// Specifying your own comparator. sorter.sort('name', { comparator: (a, b) => (a < b ? -1 : a > b ? 1 : 0) }); // Pages are now sorted by name, based on UTF-16 code points. console.log(pages);
// Specifying options to the collator. sorter.sort('name', { collatorOptions: { sensitivity:'case', caseFirst:'upper', numeric:true, }, }); // Pages are now sorted by name, with uppercase coming first in case of // otherwise identical entries, and numbers being sorted logically (2 < 10). console.log(pages);
// // ## Hierarchical sorting. //
sorter.hsort('name', 'parent'); // Pages are now sorted by name, hierarchically. (All child pages come // immediately after their parent.) console.log(pages);
// You can specify the same options as before. sorter.hsort('name', 'parent', { collatorOptions: { sensitivity:'case', caseFirst:'upper', numeric:true, }, }); // Pages are now sorted by name, hierarchically, with uppercase coming first // in case of otherwise identical entries, and numbers being sorted // logically (2 < 10). console.log(pages);
+
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
Tilmeld (the d is silent) is a user and group management system for Nymph. It provides strict access controls to protect entities from unauthorized access/modification. It allows for granting and revoking ad hoc abilities to users and groups, then checking for those abilities. It provides authentication services and features protection against XSRF attacks.
When you initialize Nymph, provide it with an instance of the Tilmeld class from this package. You now have access to the User and Group classes that are specific to that instance of Nymph/Tilmeld.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
The Tilmeld client contains the client versions of the User and Group entities. It also contains helpers, login, register, and checkUsername.
+
Once you've initialized Nymph Client, set the User and Group classes on it. Then initialize the new User class with the Nymph instance. (This allows the class to set up authentication listeners.)
If you're running more than one instance of Nymph client, be sure to use the classes returned by addEntityClass, so as not to accidentally submit entities from one instances to another instance.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
You need to have an SMUI theme compiled and installed on your front end app. If you're using Svelte, you need to have TypeScript support and you should use the 'svelte' mainfield from package.json.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
The Tilmeld Setup App allows administrators to create, modify, and delete users and groups and configure how Tilmeld works. It also acts as the endpoint for email address verification.
You need to setup a Nymph REST endpoint, then you can use the Tilmeld Setup App as another endpoint in your Express server.
+
IMPORTANT: Within the setup app, Tilmeld does not check for XSRF tokens, so do not put your REST endpoint under the setup app's path, or you will be vulnerable to XSRF attacks!
+
For this example, I'll use the SQLite3 driver with an in-memory database.
Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
http://www.apache.org/licenses/LICENSE-2.0
+
+
Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.Clause.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.Clause.html
new file mode 100644
index 0000000..f15370f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.Clause.html
@@ -0,0 +1 @@
+Clause | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityConstructor.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityConstructor.html
new file mode 100644
index 0000000..86c86c2
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityConstructor.html
@@ -0,0 +1 @@
+EntityConstructor | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityData.html
new file mode 100644
index 0000000..973422d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityData.html
@@ -0,0 +1 @@
+EntityData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityDataType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityDataType.html
new file mode 100644
index 0000000..fa8ca2e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityDataType.html
@@ -0,0 +1 @@
+EntityDataType | Nymph.js 1.0.0-beta.81
EntityDataType<T>:T extends Entity<infer DataType> ? DataType : never
Type Parameters
T
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityInstanceType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityInstanceType.html
new file mode 100644
index 0000000..617da49
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityInstanceType.html
@@ -0,0 +1 @@
+EntityInstanceType | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityJson.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityJson.html
new file mode 100644
index 0000000..ad23667
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityJson.html
@@ -0,0 +1 @@
+EntityJson | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityPatch.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityPatch.html
new file mode 100644
index 0000000..ab6b025
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityPatch.html
@@ -0,0 +1 @@
+EntityPatch | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityReference.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityReference.html
new file mode 100644
index 0000000..e1bd050
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EntityReference.html
@@ -0,0 +1 @@
+EntityReference | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.EventType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EventType.html
new file mode 100644
index 0000000..c503f59
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.EventType.html
@@ -0,0 +1 @@
+EventType | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterEventType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterEventType.html
new file mode 100644
index 0000000..310fd2d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterEventType.html
@@ -0,0 +1 @@
+HttpRequesterEventType | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterIteratorCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterIteratorCallback.html
new file mode 100644
index 0000000..da09c0e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterIteratorCallback.html
@@ -0,0 +1 @@
+HttpRequesterIteratorCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterRequestCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterRequestCallback.html
new file mode 100644
index 0000000..69cb474
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterRequestCallback.html
@@ -0,0 +1 @@
+HttpRequesterRequestCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterRequestOptions.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterRequestOptions.html
new file mode 100644
index 0000000..ee51426
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterRequestOptions.html
@@ -0,0 +1 @@
+HttpRequesterRequestOptions | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterResponseCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterResponseCallback.html
new file mode 100644
index 0000000..dc808c0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.HttpRequesterResponseCallback.html
@@ -0,0 +1 @@
+HttpRequesterResponseCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.NymphOptions.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.NymphOptions.html
new file mode 100644
index 0000000..50056c4
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.NymphOptions.html
@@ -0,0 +1,25 @@
+NymphOptions | Nymph.js 1.0.0-beta.81
Don't automatically try to connect to PubSub server.
+
OptionalnoConsole?: boolean
Whether to not output status messages to the console.
+
OptionalpubsubUrl?: string
The URL of your Nymph PubSub server.
+
OptionalrenewTokens?: boolean
Whether to renew tokens when a request is made.
+
If you turn this off, the client will request that the server not renew an
+authentication token, even if it is within the renewal time of the
+expiration date.
+
This defaults to true.
+
restUrl: string
The URL of your Nymph REST server.
+
OptionalweakCache?: boolean
Use a WeakRef based cache of entities.
+
This ensures all entities returned are the same instance if they have the
+same class and GUID. This also means that whenever an entity is returned
+from the server, the single instance in memory will be refreshed. This
+could have annoying results, like destroying dirty data (the dreaded
+triple-D).
+
This could also be a potential source of memory leaks. Although the
+entities themselves are referenced weakly so they get garbage collected,
+the GUID used as a key and the WeakRef object itself are not weak
+references, so not destroyed when the instance is garbage collected.
+
However, even with these caveats, this might help you if you have a big app
+with the same entities stored in several different places in memory. This
+can help to synchronize them correctly and avoid data conflicts.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.Options.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.Options.html
new file mode 100644
index 0000000..019d114
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.Options.html
@@ -0,0 +1,12 @@
+Options | Nymph.js 1.0.0-beta.81
The limit of entities to be returned. Not needed when using getEntity, as
+it always returns only one.
+
Optionaloffset?: number
The offset from the first matching entity, in order, to start retrieving.
+
Optionalreturn?: "entity" | "guid" | "count"
What to return, the entities with their data, just the GUIDs, or just a
+count.
+
Optionalreverse?: boolean
If true, entities will be retrieved from newest to oldest/largest to
+smallest (with regard to sort).
+
OptionalskipCache?: boolean
If true, Nymph will skip the cache and retrieve the entity from the DB.
+
Optionalsort?: "cdate" | "mdate" | string
How to sort the entities. Should be "cdate", "mdate", or the name of a
+property.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.OrWithTime.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.OrWithTime.html
new file mode 100644
index 0000000..f8158b0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.OrWithTime.html
@@ -0,0 +1 @@
+OrWithTime | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubCallbacks.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubCallbacks.html
new file mode 100644
index 0000000..b6b5cc4
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubCallbacks.html
@@ -0,0 +1 @@
+PubSubCallbacks | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubConnectCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubConnectCallback.html
new file mode 100644
index 0000000..f54afff
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubConnectCallback.html
@@ -0,0 +1 @@
+PubSubConnectCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubCountCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubCountCallback.html
new file mode 100644
index 0000000..737e1bf
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubCountCallback.html
@@ -0,0 +1 @@
+PubSubCountCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubDisconnectCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubDisconnectCallback.html
new file mode 100644
index 0000000..658ee11
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubDisconnectCallback.html
@@ -0,0 +1 @@
+PubSubDisconnectCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubErrorCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubErrorCallback.html
new file mode 100644
index 0000000..95dee47
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubErrorCallback.html
@@ -0,0 +1,3 @@
+PubSubErrorCallback | Nymph.js 1.0.0-beta.81
The error event is for unknown errors. Query errors fire their own reject
+callbacks.
+
Type declaration
(err): void
Parameters
err: any
Returns void
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubEventType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubEventType.html
new file mode 100644
index 0000000..63517bb
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubEventType.html
@@ -0,0 +1 @@
+PubSubEventType | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubRejectCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubRejectCallback.html
new file mode 100644
index 0000000..5e9110e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubRejectCallback.html
@@ -0,0 +1 @@
+PubSubRejectCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubResolveCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubResolveCallback.html
new file mode 100644
index 0000000..72f8b08
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubResolveCallback.html
@@ -0,0 +1 @@
+PubSubResolveCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubSubscribable.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubSubscribable.html
new file mode 100644
index 0000000..d0283ee
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubSubscribable.html
@@ -0,0 +1 @@
+PubSubSubscribable | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubUpdate.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubUpdate.html
new file mode 100644
index 0000000..94bc04d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.PubSubUpdate.html
@@ -0,0 +1 @@
+PubSubUpdate | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.RequestCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.RequestCallback.html
new file mode 100644
index 0000000..8a1ae9a
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.RequestCallback.html
@@ -0,0 +1 @@
+RequestCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.ResponseCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.ResponseCallback.html
new file mode 100644
index 0000000..1537d76
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.ResponseCallback.html
@@ -0,0 +1 @@
+ResponseCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.Selector.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.Selector.html
new file mode 100644
index 0000000..b4b5f48
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.Selector.html
@@ -0,0 +1 @@
+Selector | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.SerializedEntityData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.SerializedEntityData.html
new file mode 100644
index 0000000..9b9481d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.SerializedEntityData.html
@@ -0,0 +1 @@
+SerializedEntityData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.ServerCallResponse.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.ServerCallResponse.html
new file mode 100644
index 0000000..e234741
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.ServerCallResponse.html
@@ -0,0 +1 @@
+ServerCallResponse | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_client.ServerCallStaticResponse.html b/docs/api/1.0.0-beta.81/types/_nymphjs_client.ServerCallStaticResponse.html
new file mode 100644
index 0000000..5dc8f21
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_client.ServerCallStaticResponse.html
@@ -0,0 +1 @@
+ServerCallStaticResponse | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.ACProperties.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.ACProperties.html
new file mode 100644
index 0000000..88a275c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.ACProperties.html
@@ -0,0 +1 @@
+ACProperties | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.Clause.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.Clause.html
new file mode 100644
index 0000000..21b20f6
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.Clause.html
@@ -0,0 +1 @@
+Clause | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityConstructor.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityConstructor.html
new file mode 100644
index 0000000..ef9b1b6
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityConstructor.html
@@ -0,0 +1 @@
+EntityConstructor | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityData.html
new file mode 100644
index 0000000..1b38514
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityData.html
@@ -0,0 +1 @@
+EntityData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityDataType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityDataType.html
new file mode 100644
index 0000000..6d6dee5
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityDataType.html
@@ -0,0 +1 @@
+EntityDataType | Nymph.js 1.0.0-beta.81
EntityDataType<T>:T extends Entity<infer DataType> ? DataType : never
Type Parameters
T
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityInstanceType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityInstanceType.html
new file mode 100644
index 0000000..a12e624
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityInstanceType.html
@@ -0,0 +1 @@
+EntityInstanceType | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityJson.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityJson.html
new file mode 100644
index 0000000..d37c9ed
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityJson.html
@@ -0,0 +1 @@
+EntityJson | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityPatch.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityPatch.html
new file mode 100644
index 0000000..a06dc2c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityPatch.html
@@ -0,0 +1 @@
+EntityPatch | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityReference.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityReference.html
new file mode 100644
index 0000000..8e41eba
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.EntityReference.html
@@ -0,0 +1 @@
+EntityReference | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.FormattedSelector.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.FormattedSelector.html
new file mode 100644
index 0000000..19ed039
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.FormattedSelector.html
@@ -0,0 +1 @@
+FormattedSelector | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterCommitTransactionCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterCommitTransactionCallback.html
new file mode 100644
index 0000000..2c89ed8
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterCommitTransactionCallback.html
@@ -0,0 +1 @@
+NymphAfterCommitTransactionCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterDeleteEntityByIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterDeleteEntityByIDCallback.html
new file mode 100644
index 0000000..63c55b4
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterDeleteEntityByIDCallback.html
@@ -0,0 +1 @@
+NymphAfterDeleteEntityByIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterDeleteEntityCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterDeleteEntityCallback.html
new file mode 100644
index 0000000..ad176bd
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterDeleteEntityCallback.html
@@ -0,0 +1 @@
+NymphAfterDeleteEntityCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterDeleteUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterDeleteUIDCallback.html
new file mode 100644
index 0000000..a3ab192
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterDeleteUIDCallback.html
@@ -0,0 +1 @@
+NymphAfterDeleteUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterNewUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterNewUIDCallback.html
new file mode 100644
index 0000000..532ab4a
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterNewUIDCallback.html
@@ -0,0 +1 @@
+NymphAfterNewUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterRenameUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterRenameUIDCallback.html
new file mode 100644
index 0000000..84db597
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterRenameUIDCallback.html
@@ -0,0 +1 @@
+NymphAfterRenameUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterRollbackTransactionCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterRollbackTransactionCallback.html
new file mode 100644
index 0000000..24d4cd8
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterRollbackTransactionCallback.html
@@ -0,0 +1 @@
+NymphAfterRollbackTransactionCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterSaveEntityCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterSaveEntityCallback.html
new file mode 100644
index 0000000..4c3cd0e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterSaveEntityCallback.html
@@ -0,0 +1 @@
+NymphAfterSaveEntityCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterSetUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterSetUIDCallback.html
new file mode 100644
index 0000000..239e2c4
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterSetUIDCallback.html
@@ -0,0 +1 @@
+NymphAfterSetUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterStartTransactionCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterStartTransactionCallback.html
new file mode 100644
index 0000000..b158a87
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphAfterStartTransactionCallback.html
@@ -0,0 +1 @@
+NymphAfterStartTransactionCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeCommitTransactionCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeCommitTransactionCallback.html
new file mode 100644
index 0000000..f157e1a
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeCommitTransactionCallback.html
@@ -0,0 +1 @@
+NymphBeforeCommitTransactionCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeDeleteEntityByIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeDeleteEntityByIDCallback.html
new file mode 100644
index 0000000..4d9360a
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeDeleteEntityByIDCallback.html
@@ -0,0 +1 @@
+NymphBeforeDeleteEntityByIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeDeleteEntityCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeDeleteEntityCallback.html
new file mode 100644
index 0000000..712241d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeDeleteEntityCallback.html
@@ -0,0 +1 @@
+NymphBeforeDeleteEntityCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeDeleteUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeDeleteUIDCallback.html
new file mode 100644
index 0000000..c1a6ae6
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeDeleteUIDCallback.html
@@ -0,0 +1 @@
+NymphBeforeDeleteUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeGetEntitiesCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeGetEntitiesCallback.html
new file mode 100644
index 0000000..130ab09
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeGetEntitiesCallback.html
@@ -0,0 +1 @@
+NymphBeforeGetEntitiesCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeGetEntityCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeGetEntityCallback.html
new file mode 100644
index 0000000..48d077d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeGetEntityCallback.html
@@ -0,0 +1 @@
+NymphBeforeGetEntityCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeNewUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeNewUIDCallback.html
new file mode 100644
index 0000000..169e1b9
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeNewUIDCallback.html
@@ -0,0 +1 @@
+NymphBeforeNewUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeRenameUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeRenameUIDCallback.html
new file mode 100644
index 0000000..1d03305
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeRenameUIDCallback.html
@@ -0,0 +1 @@
+NymphBeforeRenameUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeRollbackTransactionCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeRollbackTransactionCallback.html
new file mode 100644
index 0000000..39ecea1
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeRollbackTransactionCallback.html
@@ -0,0 +1 @@
+NymphBeforeRollbackTransactionCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeSaveEntityCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeSaveEntityCallback.html
new file mode 100644
index 0000000..8e0b7c6
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeSaveEntityCallback.html
@@ -0,0 +1 @@
+NymphBeforeSaveEntityCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeSetUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeSetUIDCallback.html
new file mode 100644
index 0000000..3d980ac
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeSetUIDCallback.html
@@ -0,0 +1 @@
+NymphBeforeSetUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeStartTransactionCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeStartTransactionCallback.html
new file mode 100644
index 0000000..524319d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphBeforeStartTransactionCallback.html
@@ -0,0 +1 @@
+NymphBeforeStartTransactionCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphConnectCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphConnectCallback.html
new file mode 100644
index 0000000..eb89df1
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphConnectCallback.html
@@ -0,0 +1 @@
+NymphConnectCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphDisconnectCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphDisconnectCallback.html
new file mode 100644
index 0000000..5ca9115
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphDisconnectCallback.html
@@ -0,0 +1 @@
+NymphDisconnectCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphEventType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphEventType.html
new file mode 100644
index 0000000..abba3ac
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphEventType.html
@@ -0,0 +1 @@
+NymphEventType | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedDeleteEntityByIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedDeleteEntityByIDCallback.html
new file mode 100644
index 0000000..d81c91b
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedDeleteEntityByIDCallback.html
@@ -0,0 +1 @@
+NymphFailedDeleteEntityByIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedDeleteEntityCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedDeleteEntityCallback.html
new file mode 100644
index 0000000..09654ba
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedDeleteEntityCallback.html
@@ -0,0 +1 @@
+NymphFailedDeleteEntityCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedDeleteUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedDeleteUIDCallback.html
new file mode 100644
index 0000000..f6d539e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedDeleteUIDCallback.html
@@ -0,0 +1 @@
+NymphFailedDeleteUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedNewUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedNewUIDCallback.html
new file mode 100644
index 0000000..66c1346
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedNewUIDCallback.html
@@ -0,0 +1 @@
+NymphFailedNewUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedRenameUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedRenameUIDCallback.html
new file mode 100644
index 0000000..8d2344c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedRenameUIDCallback.html
@@ -0,0 +1 @@
+NymphFailedRenameUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedSaveEntityCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedSaveEntityCallback.html
new file mode 100644
index 0000000..d08633b
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedSaveEntityCallback.html
@@ -0,0 +1 @@
+NymphFailedSaveEntityCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedSetUIDCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedSetUIDCallback.html
new file mode 100644
index 0000000..f0116c0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphFailedSetUIDCallback.html
@@ -0,0 +1 @@
+NymphFailedSetUIDCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphQueryCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphQueryCallback.html
new file mode 100644
index 0000000..faaf48a
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.NymphQueryCallback.html
@@ -0,0 +1,8 @@
+NymphQueryCallback | Nymph.js 1.0.0-beta.81
The NymphQueryCallback will be called on both top level and qref queries.
+
This is the only callback that is not asynchronous.
+
This also isn't necessarily run on every "query". It is run before a database
+query for an entity, but it is not run during PubSub entity change
+propagation. Therefore, it shouldn't do anything entity specific, instead
+it should be query specific. For example, throw an error if the user is not
+permitted to run the query at all.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.Options.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.Options.html
new file mode 100644
index 0000000..9403c85
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.Options.html
@@ -0,0 +1,17 @@
+Options | Nymph.js 1.0.0-beta.81
The limit of entities to be returned. Not needed when using getEntity, as
+it always returns only one.
+
Optionaloffset?: number
The offset from the first matching entity, in order, to start retrieving.
+
Optionalreturn?: "entity" | "guid" | "count"
What to return, the entities with their data, just the GUIDs, or just a
+count.
+
Optionalreverse?: boolean
If true, entities will be retrieved from newest to oldest/largest to
+smallest (with regard to sort).
+
OptionalskipAc?: boolean
If true, Tilmeld will not filter returned entities according to access
+controls. (If Tilmeld is installed.) (This is always set to false by the
+REST endpoint and PubSub server.)
+
OptionalskipCache?: boolean
If true, Nymph will skip the cache and retrieve the entity from the DB.
+
Optionalsort?: "cdate" | "mdate" | string
How to sort the entities. Should be "cdate", "mdate", or the name of a
+property.
+
Optionalsource?: string
Will be 'client' if the query came from a REST request or the PubSub
+server. (Mainly used in Tilmeld for access control.)
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.OrWithTime.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.OrWithTime.html
new file mode 100644
index 0000000..61ff5c0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.OrWithTime.html
@@ -0,0 +1 @@
+OrWithTime | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.Selector.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.Selector.html
new file mode 100644
index 0000000..7dfdb4e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.Selector.html
@@ -0,0 +1 @@
+Selector | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.SerializedEntityData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.SerializedEntityData.html
new file mode 100644
index 0000000..d76cfa0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_nymph.SerializedEntityData.html
@@ -0,0 +1 @@
+SerializedEntityData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.AuthenticateMessageData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.AuthenticateMessageData.html
new file mode 100644
index 0000000..fd3e085
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.AuthenticateMessageData.html
@@ -0,0 +1 @@
+AuthenticateMessageData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.MessageData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.MessageData.html
new file mode 100644
index 0000000..5e8e7b0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.MessageData.html
@@ -0,0 +1 @@
+MessageData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.MessageOptions.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.MessageOptions.html
new file mode 100644
index 0000000..e7f766d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.MessageOptions.html
@@ -0,0 +1 @@
+MessageOptions | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.PublishEntityMessageData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.PublishEntityMessageData.html
new file mode 100644
index 0000000..999061d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.PublishEntityMessageData.html
@@ -0,0 +1 @@
+PublishEntityMessageData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.PublishMessageData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.PublishMessageData.html
new file mode 100644
index 0000000..2a4a1d8
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.PublishMessageData.html
@@ -0,0 +1 @@
+PublishMessageData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.PublishUidMessageData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.PublishUidMessageData.html
new file mode 100644
index 0000000..da60a1a
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.PublishUidMessageData.html
@@ -0,0 +1 @@
+PublishUidMessageData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.QuerySubscribeMessageData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.QuerySubscribeMessageData.html
new file mode 100644
index 0000000..2c62232
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.QuerySubscribeMessageData.html
@@ -0,0 +1 @@
+QuerySubscribeMessageData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.QuerySubscriptionData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.QuerySubscriptionData.html
new file mode 100644
index 0000000..713c4d1
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.QuerySubscriptionData.html
@@ -0,0 +1,3 @@
+QuerySubscriptionData | Nymph.js 1.0.0-beta.81
This means the user directly subscribed to this query, as opposed
+to indirectly subscribing with a qref clause.
+
qrefParents: { etype: string; query: string; }[]
query: string
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.SubscribeMessageData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.SubscribeMessageData.html
new file mode 100644
index 0000000..905f2f5
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.SubscribeMessageData.html
@@ -0,0 +1 @@
+SubscribeMessageData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.UidSubscribeMessageData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.UidSubscribeMessageData.html
new file mode 100644
index 0000000..6bf8585
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_pubsub.UidSubscribeMessageData.html
@@ -0,0 +1 @@
+UidSubscribeMessageData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_query_parser.BareQueryHandler.html b/docs/api/1.0.0-beta.81/types/_nymphjs_query_parser.BareQueryHandler.html
new file mode 100644
index 0000000..bd2c064
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_query_parser.BareQueryHandler.html
@@ -0,0 +1 @@
+BareQueryHandler | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_query_parser.QRefMap.html b/docs/api/1.0.0-beta.81/types/_nymphjs_query_parser.QRefMap.html
new file mode 100644
index 0000000..3c5678d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_query_parser.QRefMap.html
@@ -0,0 +1 @@
+QRefMap | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_sorter.SortOptions.html b/docs/api/1.0.0-beta.81/types/_nymphjs_sorter.SortOptions.html
new file mode 100644
index 0000000..56a2d19
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_sorter.SortOptions.html
@@ -0,0 +1,5 @@
+SortOptions | Nymph.js 1.0.0-beta.81
Options to pass to Intl.Collator for string comparisons. This overrides the caseSensitive options.
+
Optionalcomparator?: ((a, b) => number)
A custom comparator to use. This overrides all other options except reverse.
+
(a, b): number
Parameters
a: any
b: any
Returns number
Optionalreverse?: boolean
Reverse the sort order.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.AccessControlData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.AccessControlData.html
new file mode 100644
index 0000000..1ee995c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.AccessControlData.html
@@ -0,0 +1 @@
+AccessControlData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.EventType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.EventType.html
new file mode 100644
index 0000000..8e9330e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.EventType.html
@@ -0,0 +1 @@
+EventType | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.GroupData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.GroupData.html
new file mode 100644
index 0000000..9820e02
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.GroupData.html
@@ -0,0 +1,13 @@
+GroupData | Nymph.js 1.0.0-beta.81
If generatePrimary is on, this will be the user who generated this group.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldAfterLoginCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldAfterLoginCallback.html
new file mode 100644
index 0000000..94de1f0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldAfterLoginCallback.html
@@ -0,0 +1,3 @@
+TilmeldAfterLoginCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldAfterLogoutCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldAfterLogoutCallback.html
new file mode 100644
index 0000000..ed191ef
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldAfterLogoutCallback.html
@@ -0,0 +1 @@
+TilmeldAfterLogoutCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldAfterRegisterCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldAfterRegisterCallback.html
new file mode 100644
index 0000000..6c4325f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldAfterRegisterCallback.html
@@ -0,0 +1 @@
+TilmeldAfterRegisterCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldBeforeLoginCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldBeforeLoginCallback.html
new file mode 100644
index 0000000..2dd5eb0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldBeforeLoginCallback.html
@@ -0,0 +1,2 @@
+TilmeldBeforeLoginCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldBeforeLogoutCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldBeforeLogoutCallback.html
new file mode 100644
index 0000000..1f0024f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldBeforeLogoutCallback.html
@@ -0,0 +1 @@
+TilmeldBeforeLogoutCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldBeforeRegisterCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldBeforeRegisterCallback.html
new file mode 100644
index 0000000..47b9287
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldBeforeRegisterCallback.html
@@ -0,0 +1,3 @@
+TilmeldBeforeRegisterCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldCheckUsernameCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldCheckUsernameCallback.html
new file mode 100644
index 0000000..dbd0535
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.TilmeldCheckUsernameCallback.html
@@ -0,0 +1,4 @@
+TilmeldCheckUsernameCallback | Nymph.js 1.0.0-beta.81
This is run when the user has entered an otherwise valid username into the
+signup form. It should return a result, which when false will stop the
+process and return the included message, disallowing the username.
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.UserData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.UserData.html
new file mode 100644
index 0000000..6f84aaf
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld.UserData.html
@@ -0,0 +1,31 @@
+UserData | Nymph.js 1.0.0-beta.81
Whether the user should inherit the abilities of his groups.
+
Optionalname?: string
The user's full name. This is generated from the first, middle, and last
+names.
+
OptionalnameFirst?: string
The user's first name.
+
OptionalnameLast?: string
The user's last name.
+
OptionalnameMiddle?: string
The user's middle name.
+
OptionalnewEmailAddress?: string
If the user has changed their email address, this is the new one, awaiting
+verification.
+
OptionalnewEmailSecret?: string
An email change proceed secret.
+
Optionalpassword?: string
The password or password hash.
+
OptionalpasswordTemp?: string
Temporary storage for passwords. This will be hashed before going into the
+database.
+
Optionalphone?: string
The user's telephone number.
+
OptionalrecoverSecret?: string
A recovery secret.
+
OptionalrecoverSecretDate?: number
The timestamp of when the recovery secret was issued.
+
OptionalrevokeTokenDate?: number
If set, this timestamp is the cutoff point for JWT issue dates. Any token
+issued before this date will not authenticate the user.
+
Optionalsalt?: string
The password hash salt.
+
Optionalsecret?: string
A verification secret.
+
OptionaltotpSecret?: string
Two factor auth secret.
+
Optionalusername?: string
The user's username.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.AdminGroupData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.AdminGroupData.html
new file mode 100644
index 0000000..2050052
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.AdminGroupData.html
@@ -0,0 +1 @@
+AdminGroupData | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.AdminUserData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.AdminUserData.html
new file mode 100644
index 0000000..65ff85c
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.AdminUserData.html
@@ -0,0 +1,14 @@
+AdminUserData | Nymph.js 1.0.0-beta.81
Used by admins to change a user's password. Not saved to the database.
+
OptionalrecoverSecret?: string
A recovery secret.
+
OptionalrecoverSecretDate?: number
The timestamp of when the recovery secret was issued.
+
OptionalrevokeTokenDate?: number
If set, this timestamp is the cutoff point for JWT issue dates. Any token
+issued before this date will not authenticate the user.
+
Optionalsecret?: string
A verification secret.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.ClientConfig.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.ClientConfig.html
new file mode 100644
index 0000000..fad263d
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.ClientConfig.html
@@ -0,0 +1 @@
+ClientConfig | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.CurrentGroupData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.CurrentGroupData.html
new file mode 100644
index 0000000..e33f198
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.CurrentGroupData.html
@@ -0,0 +1,5 @@
+CurrentGroupData | Nymph.js 1.0.0-beta.81
If generatePrimary is on, this will be the user who generated this group.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.CurrentUserData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.CurrentUserData.html
new file mode 100644
index 0000000..011dff9
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.CurrentUserData.html
@@ -0,0 +1,9 @@
+CurrentUserData | Nymph.js 1.0.0-beta.81
Whether the user should inherit the abilities of his groups.
+
OptionalnewEmailAddress?: string
If the user has changed their email address, this is the new one, awaiting
+verification.
+
Optionalphone?: string
The user's telephone number.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.EventType.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.EventType.html
new file mode 100644
index 0000000..25717cd
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.EventType.html
@@ -0,0 +1 @@
+EventType | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.GroupData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.GroupData.html
new file mode 100644
index 0000000..803861f
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.GroupData.html
@@ -0,0 +1,9 @@
+GroupData | Nymph.js 1.0.0-beta.81
Whether this group is a default secondary group for unverified users.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.LoginCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.LoginCallback.html
new file mode 100644
index 0000000..36f5f09
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.LoginCallback.html
@@ -0,0 +1 @@
+LoginCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.LogoutCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.LogoutCallback.html
new file mode 100644
index 0000000..ed24d2e
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.LogoutCallback.html
@@ -0,0 +1 @@
+LogoutCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.RegisterCallback.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.RegisterCallback.html
new file mode 100644
index 0000000..26cacad
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.RegisterCallback.html
@@ -0,0 +1 @@
+RegisterCallback | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.RegistrationDetails.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.RegistrationDetails.html
new file mode 100644
index 0000000..00eb281
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.RegistrationDetails.html
@@ -0,0 +1,10 @@
+RegistrationDetails | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.UserData.html b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.UserData.html
new file mode 100644
index 0000000..67f1230
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/types/_nymphjs_tilmeld_client.UserData.html
@@ -0,0 +1,8 @@
+UserData | Nymph.js 1.0.0-beta.81
The user's avatar URL. (Use $getAvatar() to support Gravatar.)
+
Optionalenabled?: boolean
Whether the user can log in.
+
Optionalname?: string
The user's full name.
+
OptionalnameFirst?: string
The user's first name.
+
OptionalnameLast?: string
The user's last name.
+
OptionalnameMiddle?: string
The user's middle name.
+
Optionalusername?: string
The user's username.
+
Settings
Member Visibility
Theme
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/variables/_nymphjs_driver_mysql.MySQLDriverConfigDefaults.html b/docs/api/1.0.0-beta.81/variables/_nymphjs_driver_mysql.MySQLDriverConfigDefaults.html
new file mode 100644
index 0000000..d88e537
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/variables/_nymphjs_driver_mysql.MySQLDriverConfigDefaults.html
@@ -0,0 +1 @@
+MySQLDriverConfigDefaults | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/variables/_nymphjs_driver_postgresql.PostgreSQLDriverConfigDefaults.html b/docs/api/1.0.0-beta.81/variables/_nymphjs_driver_postgresql.PostgreSQLDriverConfigDefaults.html
new file mode 100644
index 0000000..2fd87b0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/variables/_nymphjs_driver_postgresql.PostgreSQLDriverConfigDefaults.html
@@ -0,0 +1 @@
+PostgreSQLDriverConfigDefaults | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/variables/_nymphjs_driver_sqlite3.SQLite3DriverConfigDefaults.html b/docs/api/1.0.0-beta.81/variables/_nymphjs_driver_sqlite3.SQLite3DriverConfigDefaults.html
new file mode 100644
index 0000000..2e3c9dc
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/variables/_nymphjs_driver_sqlite3.SQLite3DriverConfigDefaults.html
@@ -0,0 +1 @@
+SQLite3DriverConfigDefaults | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/variables/_nymphjs_nymph.ConfigDefaults.html b/docs/api/1.0.0-beta.81/variables/_nymphjs_nymph.ConfigDefaults.html
new file mode 100644
index 0000000..f75b4db
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/variables/_nymphjs_nymph.ConfigDefaults.html
@@ -0,0 +1 @@
+ConfigDefaults | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/variables/_nymphjs_nymph.nymphJoiProps.html b/docs/api/1.0.0-beta.81/variables/_nymphjs_nymph.nymphJoiProps.html
new file mode 100644
index 0000000..859b2b3
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/variables/_nymphjs_nymph.nymphJoiProps.html
@@ -0,0 +1 @@
+nymphJoiProps | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/variables/_nymphjs_pubsub.ConfigDefaults.html b/docs/api/1.0.0-beta.81/variables/_nymphjs_pubsub.ConfigDefaults.html
new file mode 100644
index 0000000..6974624
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/variables/_nymphjs_pubsub.ConfigDefaults.html
@@ -0,0 +1 @@
+ConfigDefaults | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/variables/_nymphjs_server.statusDescriptions.html b/docs/api/1.0.0-beta.81/variables/_nymphjs_server.statusDescriptions.html
new file mode 100644
index 0000000..655eca0
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/variables/_nymphjs_server.statusDescriptions.html
@@ -0,0 +1,2 @@
+statusDescriptions | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/variables/_nymphjs_tilmeld.ConfigDefaults.html b/docs/api/1.0.0-beta.81/variables/_nymphjs_tilmeld.ConfigDefaults.html
new file mode 100644
index 0000000..1dda4f8
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/variables/_nymphjs_tilmeld.ConfigDefaults.html
@@ -0,0 +1 @@
+ConfigDefaults | Nymph.js 1.0.0-beta.81
\ No newline at end of file
diff --git a/docs/api/1.0.0-beta.81/variables/_nymphjs_tilmeld.tilmeldJoiProps.html b/docs/api/1.0.0-beta.81/variables/_nymphjs_tilmeld.tilmeldJoiProps.html
new file mode 100644
index 0000000..607ed07
--- /dev/null
+++ b/docs/api/1.0.0-beta.81/variables/_nymphjs_tilmeld.tilmeldJoiProps.html
@@ -0,0 +1 @@
+tilmeldJoiProps | Nymph.js 1.0.0-beta.81
Call an instance method on the server version of this entity.
The entity's data will be sent up to the server as well, so the server's
state can match the client's state. It won't be propagated into the DB,
though.
-
Parameters
method: string
The name of the method.
-
params: Iterable<any>
The parameters to call the method with.
-
stateless: boolean = false
Whether the server should return, and the client update, the data in the entity after the method has run.
This will create a class that extends your class within this instance of
Nymph and return it. You can then use this class's constructor and methods,
which will use this instance of Nymph.
Because this creates a subclass, don't use the class
returned from getEntityClass to check with instanceof.
This will create a class that extends your class within this instance of
Nymph and return it. You can then use this class's constructor and methods,
which will use this instance of Nymph.
Because this creates a subclass, don't use the class
returned from getEntityClass to check with instanceof.
Provides a way to access, manipulate, and store data in Nymph.
The GUID is not set until the entity is saved. GUIDs must be unique forever,
even after deletion. It's the job of the Nymph DB driver to make sure no two
@@ -55,94 +55,94 @@
When you first access an entity's data, if it is a sleeping reference, it
will fill its data from the DB. You can call clearCache() to turn all the
entities back into sleeping references.
The AC properties' values when the entity was loaded.
+
Protected$privateData
$privateData:string[] = []
Properties that will not be serialized into JSON with toJSON(). This
can be considered a denylist, because these properties will not be set
with incoming JSON.
Clients CAN still determine what is in these properties, unless they are
also listed in searchRestrictedData.
-
Protected$protectedData
$protectedData:string[] = []
Properties that can only be modified by server side code. They will still
+
Protected$protectedData
$protectedData:string[] = []
Properties that can only be modified by server side code. They will still
be visible on the frontend, unlike $privateData, but any changes to them
that come from the frontend will be ignored.
In addition to what's listed here, all of the access control properties
@@ -159,95 +159,95 @@
You should modify these through client enabled methods or the $save method
instead, for safety.
-
Protected$protectedTags
$protectedTags:string[] = []
Tags that can only be added/removed by server side code. They will still be
+
Protected$protectedTags
$protectedTags:string[] = []
Tags that can only be added/removed by server side code. They will still be
visible on the frontend, but any changes to them that come from the
frontend will be ignored.
Whether this entity should publish changes to PubSub servers.
+
StaticrestEnabled
restEnabled:boolean = true
Whether this entity should be accessible on the frontend through the REST
server.
If this is false, any request from the client that attempts to use this
entity will fail.
-
StaticsearchRestrictedData
searchRestrictedData:string[] = []
Properties that will not be searchable from the frontend. If the frontend
+
StaticsearchRestrictedData
searchRestrictedData:string[] = []
Properties that will not be searchable from the frontend. If the frontend
includes any of these properties in any of their clauses, they will be
filtered out before the search is executed.
-
Methods
$addTag
$addTag(...tags): void
Add one or more tags.
-
Parameters
Rest...tags: string[]
List of tags.
-
Returns void
$arraySearch
$arraySearch(array, strict?): number
Search the array for this object and return the corresponding index.
+
Methods
$addTag
$addTag(...tags): void
Add one or more tags.
+
Parameters
Rest...tags: string[]
List of tags.
+
Returns void
$arraySearch
$arraySearch(array, strict?): number
Search the array for this object and return the corresponding index.
If strict is false, is() is used to compare. If strict is true,
equals() is used.
-
Parameters
array: any[]
The array to search.
-
strict: boolean = false
Whether to use stronger comparison.
+
Parameters
array: any[]
The array to search.
+
strict: boolean = false
Whether to use stronger comparison.
Returns number
The index if the object is in the array, -1 if it isn't.
-
$asleep
$asleep(): boolean
Check if this is a sleeping reference.
-
Returns boolean
Protected$check
$check(): void
Check if this is a sleeping reference and throw an error if so.
-
Returns void
$clearCache
$clearCache(): void
Replace any referenced entities in the data with sleeping references.
+
$asleep
$asleep(): boolean
Check if this is a sleeping reference.
+
Returns boolean
Protected$check
$check(): void
Check if this is a sleeping reference and throw an error if so.
+
Returns void
$clearCache
$clearCache(): void
Replace any referenced entities in the data with sleeping references.
Calling this function ensures that the next time a referenced entity is
accessed, it will be retrieved from the DB (unless it is in Nymph's cache).
-
Returns void
$delete
$delete(): Promise<boolean>
Delete the object from storage.
-
Returns Promise<boolean>
True on success, false on failure.
-
$equals
$equals(object): boolean
Perform a more strict comparison of this object to another.
-
Parameters
object: any
The object to compare.
+
Returns void
$delete
$delete(): Promise<boolean>
Delete the object from storage.
+
Returns Promise<boolean>
True on success, false on failure.
+
$equals
$equals(object): boolean
Perform a more strict comparison of this object to another.
+
Parameters
object: any
The object to compare.
Returns boolean
True or false.
-
$getAcFullIds
$getAcFullIds(): null | (null | string)[]
Returns null | (null | string)[]
$getAcGid
$getAcGid(): null | string
Returns null | string
$getAcReadIds
$getAcReadIds(): null | (null | string)[]
Returns null | (null | string)[]
$getAcUid
$getAcUid(): null | string
Returns null | string
$getAcWriteIds
$getAcWriteIds(): null | (null | string)[]
Returns null | (null | string)[]
$getClientEnabledMethods
$getClientEnabledMethods(): string[]
Get the client enabled methods.
+
$getAcFullIds
$getAcFullIds(): null | (null | string)[]
Returns null | (null | string)[]
$getAcGid
$getAcGid(): any
Returns any
$getAcReadIds
$getAcReadIds(): null | (null | string)[]
Returns null | (null | string)[]
$getAcUid
$getAcUid(): any
Returns any
$getAcWriteIds
$getAcWriteIds(): null | (null | string)[]
Returns null | (null | string)[]
$getClientEnabledMethods
$getClientEnabledMethods(): string[]
Get the client enabled methods.
Returns string[]
The names of methods allowed to be called by the frontend with serverCall.
Optional override for formatting stack traces
+