UNPKG

mongoku

Version:

[![CI](https://github.com/huggingface/Mongoku/actions/workflows/ci.yml/badge.svg)](https://github.com/huggingface/Mongoku/actions/workflows/ci.yml)

2 lines (1 loc) 14.3 kB
import{f as v,a as s,c as sr,t as te,b as lr}from"../chunks/DaMh_eeB.js";import{p as dr,a as ir,f as Ce,g as t,u as Ae,c as r,s as a,r as e,t as A,b as ae,d as j,n as ve}from"../chunks/IwGwbOe7.js";import{d as nr,s as m,a as vr}from"../chunks/BDGd1aqF.js";import{i as x}from"../chunks/CCOVnadf.js";import{e as je,n as oe}from"../chunks/DqxUmOYD.js";import{a as cr,s as Ee}from"../chunks/CmI1igJD.js";import{s as Me}from"../chunks/8tf5Lvl3.js";import{b as ur}from"../chunks/ChWGK2Ce.js";import{b as mr}from"../chunks/CQE8d3kg.js";import{P as pr,c as br}from"../chunks/YMZQSnF3.js";import{P as ze}from"../chunks/IixngxlS.js";const fr=async ce=>({...ce.data,categories:[{key:"documents",label:"Documents"},{key:"indexes",label:"Indexes"},{key:"mappings",label:"Mappings"},{key:"schema",label:"Schema"}]}),qr=Object.freeze(Object.defineProperty({__proto__:null,load:fr},Symbol.toStringTag,{value:"Module"}));var xr=lr('<svg class="animate-spin w-4 h-4 inline mr-1" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg>'),gr=v('<button class="btn btn-primary btn-sm -my-2"><!> </button>'),_r=v('<div class="overflow-hidden rounded-lg border border-[var(--border-color)] bg-[var(--color-1)]"><table class="table mb-0"><tbody><tr><td class="font-medium whitespace-nowrap px-4 py-3 text-sm w-40">Status</td><td class="px-4 py-3"><span class="badge badge-success">Active</span></td></tr><tr><td class="font-medium whitespace-nowrap px-4 py-3 text-sm w-40">Validation Level</td><td class="px-4 py-3"><span class="font-mono text-sm" style="color: var(--text);"> </span> <span class="text-xs ml-2" style="color: var(--text-darker);"><!></span></td></tr><tr><td class="font-medium whitespace-nowrap px-4 py-3 text-sm w-40">Validation Action</td><td class="px-4 py-3"><span class="font-mono text-sm" style="color: var(--text);"> </span> <span class="text-xs ml-2" style="color: var(--text-darker);"><!></span></td></tr></tbody></table></div> <div class="mt-4"><h4 class="text-xs font-semibold mb-2 uppercase tracking-wide" style="color: var(--text-secondary);">JSON Schema</h4> <div class="rounded-lg border border-[var(--border-color)] overflow-hidden"><!></div></div>',1),yr=v(`<div class="rounded-lg border border-[var(--border-color)] bg-[var(--color-1)] p-8 text-center"><div class="text-4xl mb-3 opacity-30">&#x1F4CB;</div> <p class="text-sm font-medium" style="color: var(--text-secondary);">No JSON Schema validator configured.</p> <p class="text-xs mt-1" style="color: var(--text-darker);">Use MongoDB's <a href="https://www.mongodb.com/docs/manual/core/schema-validation/" target="_blank" rel="noopener" class="underline" style="color: var(--link);">schema validation</a> to enforce document structure.</p></div>`),hr=v('<div class="rounded-lg border border-[var(--border-color)] bg-[var(--color-1)] p-8 text-center"><svg class="animate-spin w-6 h-6 mx-auto mb-3" style="color: var(--link);" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> <p class="text-sm" style="color: var(--text-secondary);">Running validation...</p></div>'),wr=v('<div class="rounded-lg border border-red-500/30 bg-red-500/10 p-4"><p class="text-sm text-red-600 font-medium">Audit failed</p> <p class="text-xs mt-1 text-red-500"> </p></div>'),kr=v('<a class="text-xs font-mono underline hover:no-underline" style="color: var(--link);"> </a>'),Sr=v('<span class="text-xs font-mono" style="color: var(--text);"> </span>'),Pr=v('<div class="flex items-center gap-2"><span class="text-xs font-medium" style="color: var(--text-secondary);">Document:</span> <!></div>'),Cr=v('<div class="flex items-start gap-2"><span class="text-red-400 mt-0.5"></span> <pre class="text-xs whitespace-pre-wrap font-mono flex-1" style="color: var(--error);"> </pre></div>'),Ar=v('<div class="px-4 pb-4"><details class="rounded border border-[var(--border-color)] overflow-hidden"><summary class="cursor-pointer px-3 py-2 text-xs font-medium bg-[var(--color-1)] hover:bg-[var(--color-2)] transition-colors" style="color: var(--text-secondary);">View full document</summary> <div class="p-3 border-t border-[var(--border-color)] bg-[var(--color-1)]"><!></div></details></div>'),jr=v('<div class="rounded-lg border border-red-500/20 bg-red-500/5 overflow-hidden"><div class="px-4 py-3 border-b border-red-500/10"><!></div> <div class="p-4"><div class="space-y-2"></div></div> <!></div>'),Mr=v('<div class="mt-4"><h4 class="text-sm font-semibold mb-3" style="color: var(--error);"> </h4> <div class="space-y-3 max-h-96 overflow-auto pr-2"></div></div>'),Rr=v('<pre class="p-3 text-xs whitespace-pre-wrap font-mono" style="color: var(--text);"> </pre>'),Vr=v('<div class="mt-4"><h4 class="text-sm font-semibold mb-2" style="color: hsl(38, 92%, 50%);">Warnings</h4> <div class="rounded-lg border border-yellow-500/20 bg-yellow-500/5 divide-y divide-yellow-500/10 max-h-48 overflow-auto"></div></div>'),Dr=v('<div class="mb-4"><div class="flex justify-between items-center mb-2"><span class="text-sm font-medium" style="color: var(--text);">Compliance</span> <span class="text-sm font-bold"> </span></div> <div class="w-full h-3 rounded-full bg-[var(--color-3)] overflow-hidden"><div class="h-full rounded-full transition-all duration-500"></div></div></div> <div class="grid grid-cols-2 sm:grid-cols-4 gap-3 mb-4"><div class="rounded-lg border border-[var(--border-color)] bg-[var(--color-1)] p-3 text-center"><div class="text-lg font-bold" style="color: var(--text);"> </div> <div class="text-xs" style="color: var(--text-darker);">Scanned</div></div> <div class="rounded-lg border border-[var(--border-color)] bg-[var(--color-1)] p-3 text-center"><div class="text-lg font-bold" style="color: var(--button-success);"> </div> <div class="text-xs" style="color: var(--text-darker);">Valid</div></div> <div class="rounded-lg border border-[var(--border-color)] bg-[var(--color-1)] p-3 text-center"><div class="text-lg font-bold"> </div> <div class="text-xs" style="color: var(--text-darker);">Invalid</div></div> <div class="rounded-lg border border-[var(--border-color)] bg-[var(--color-1)] p-3 text-center"><div class="text-lg font-bold" style="color: var(--text);"> </div> <div class="text-xs" style="color: var(--text-darker);">Duration</div></div></div> <!> <!>',1),Ir=v('<div class="rounded-lg border border-[var(--border-color)] bg-[var(--color-1)] p-6 text-center"><p class="text-sm" style="color: var(--text-secondary);">Click "Run Audit" to check document compliance.</p></div>'),Lr=v('<div><h3 class="text-sm font-semibold mb-3 uppercase tracking-wide" style="color: var(--text-secondary);">Compliance Audit</h3> <details class="mb-4"><summary class="cursor-pointer text-sm font-medium" style="color: var(--text-secondary);">Read Preference (optional)</summary> <div class="mt-3 grid grid-cols-1 sm:grid-cols-2 gap-3 p-3 rounded-lg bg-[var(--color-3)]/50"><label class="block"><span class="text-xs font-medium" style="color: var(--text-secondary);">Mode</span> <select class="mt-1 w-full px-3 py-2 bg-[var(--color-1)] border border-[var(--border-color)] rounded text-sm" style="color: var(--text);"><option>Default</option><option>secondaryPreferred</option><option>secondary</option><option>nearest</option></select></label> <label class="block"><span class="text-xs font-medium" style="color: var(--text-secondary);">Tags (JSON)</span> <input type="text" class="mt-1 w-full px-3 py-2 bg-[var(--color-1)] border border-[var(--border-color)] rounded text-sm font-mono" style="color: var(--text);"/></label></div></details> <!></div>'),Nr=v('<div class="p-4 space-y-6"><div><h3 class="text-sm font-semibold mb-3 uppercase tracking-wide" style="color: var(--text-secondary);">Configuration</h3> <!></div> <!></div>');function Gr(ce,c){dr(c,!0);let i=ae(null),U=ae(!1),Y=ae(null),ue=ae(""),me=ae(""),w=Ae(()=>c.data.schemaInfo);function Je(o){if(o==null)return{display:"",navigable:null};if(typeof o=="string"||typeof o=="number")return{display:String(o),navigable:String(o)};if(typeof o=="object"){const l=o,q="$value"in l&&(typeof l.$value=="string"||typeof l.$value=="number"),L=l.$type===void 0||l.$type==="ObjectId";if(q&&L){const g=String(l.$value);return{display:g,navigable:g}}const M=Object.entries(l).filter(([g])=>g!=="$type");if(M.length>0)return{display:M.map(([k,R])=>`${k}: ${typeof R=="object"?JSON.stringify(R):R}`).join(" · "),navigable:null}}return{display:String(o),navigable:null}}function Re(o){if(!Number.isFinite(o))return String(o);if(o>=100)return"100";if(o<=0)return"0";const l=Math.floor(o*100)/100;return Number.isInteger(l)?l.toFixed(0):l.toString()}let Ve=Ae(()=>t(i)?t(i).compliancePct===100?"var(--button-success)":t(i).compliancePct>=90?"hsl(38, 92%, 50%)":"var(--error)":"var(--text)");async function Ue(){j(U,!0),j(Y,null),j(i,null);try{const o=await br({server:c.data.server,database:c.data.database,collection:c.data.collection,readPreferenceMode:t(ue)||void 0,readPreferenceTags:t(me)||void 0});if(o.error)j(Y,o.error,!0),oe.notifyError(o.error);else if(j(i,o.data,!0),o.data?.hasSchema){const l=`Audit complete: ${Re(o.data.compliancePct)}% of ${o.data.nrecords.toLocaleString()} documents match the schema`;o.data.compliancePct===100?oe.notifySuccess(l):o.data.compliancePct>=90?oe.notify(l,"info"):oe.notifyError(l)}}catch(o){const l=o instanceof Error?o.message:String(o);j(Y,l,!0),oe.notifyError(l)}finally{j(U,!1)}}pr(ce,{title:"Schema Validation",titleClass:"py-2",actions:l=>{var q=sr(),L=Ce(q);{var M=g=>{var k=gr(),R=r(k);{var pe=u=>{var _=xr();s(u,_)};x(R,u=>{t(U)&&u(pe)})}var be=a(R);e(k),A(()=>{k.disabled=t(U),m(be,` ${t(U)?"Auditing...":"Run Audit"}`)}),vr("click",k,Ue),s(g,k)};x(L,g=>{t(w).hasSchema&&g(M)})}s(l,q)},children:(l,q)=>{var L=Nr(),M=r(L),g=a(r(M),2);{var k=u=>{var _=_r(),N=Ce(_),G=r(N),B=r(G),O=a(r(B)),F=a(r(O)),T=r(F),K=r(T,!0);e(T);var Q=a(T,2),se=r(Q);{var X=d=>{var b=te("— all inserts & updates validated");s(d,b)},fe=d=>{var b=te("— only existing valid docs re-checked");s(d,b)},xe=d=>{var b=te("— no validation");s(d,b)};x(se,d=>{t(w).validationLevel==="strict"?d(X):t(w).validationLevel==="moderate"?d(fe,1):d(xe,-1)})}e(Q),e(F),e(O);var le=a(O),de=a(r(le)),Z=r(de),n=r(Z,!0);e(Z);var p=a(Z,2),V=r(p);{var E=d=>{var b=te("— invalid docs accepted with warning");s(d,b)},$=d=>{var b=te("— invalid docs rejected");s(d,b)};x(V,d=>{t(w).validationAction==="warn"?d(E):d($,-1)})}e(p),e(de),e(le),e(B),e(G),e(N);var ie=a(N,2),ee=a(r(ie),2),ge=r(ee);ze(ge,{get json(){return t(w).validator},autoCollapse:!1,get server(){return c.data.server},get database(){return c.data.database},get collection(){return c.data.collection}}),e(ee),e(ie),A(()=>{m(K,t(w).validationLevel??"strict"),m(n,t(w).validationAction??"error")}),s(u,_)},R=u=>{var _=yr();s(u,_)};x(g,u=>{t(w).hasSchema?u(k):u(R,-1)})}e(M);var pe=a(M,2);{var be=u=>{var _=Lr(),N=a(r(_),2),G=a(r(N),2),B=r(G),O=a(r(B),2),F=r(O);F.value=F.__value="";var T=a(F);T.value=T.__value="secondaryPreferred";var K=a(T);K.value=K.__value="secondary";var Q=a(K);Q.value=Q.__value="nearest",e(O),e(B);var se=a(B,2),X=a(r(se),2);cr(X),Ee(X,"placeholder",'[{"nodeType":"ANALYTICS"}]'),e(se),e(G),e(N);var fe=a(N,2);{var xe=n=>{var p=hr();s(n,p)},le=n=>{var p=wr(),V=a(r(p),2),E=r(V,!0);e(V),e(p),A(()=>m(E,t(Y))),s(n,p)},de=n=>{var p=Dr(),V=Ce(p),E=r(V),$=a(r(E),2),ie=r($);e($),e(E);var ee=a(E,2),ge=r(ee);e(ee),e(V);var d=a(V,2),b=r(d),De=r(b),Be=r(De,!0);e(De),ve(2),e(b);var _e=a(b,2),Ie=r(_e),Fe=r(Ie,!0);e(Ie),ve(2),e(_e);var ye=a(_e,2),he=r(ye),He=r(he,!0);e(he),ve(2),e(ye);var Le=a(ye,2),Ne=r(Le),We=r(Ne);e(Ne),ve(2),e(Le),e(d);var Oe=a(d,2);{var Ye=S=>{var P=Mr(),D=r(P),z=r(D);e(D);var ne=a(D,2);je(ne,23,()=>t(i).errors,(H,C)=>`err-${C}`,(H,C,Ke)=>{var we=jr(),ke=r(we),Qe=r(ke);{var Xe=y=>{const f=Ae(()=>Je(t(C).docId));var h=Pr(),J=a(r(h),2);{var re=W=>{var I=kr(),Pe=r(I,!0);e(I),A((rr,tr,ar,or)=>{Ee(I,"href",`/servers/${rr??""}/databases/${tr??""}/collections/${ar??""}/documents/${or??""}`),m(Pe,t(f).display)},[()=>encodeURIComponent(c.data.server),()=>encodeURIComponent(c.data.database),()=>encodeURIComponent(c.data.collection),()=>encodeURIComponent(t(f).navigable)]),s(W,I)},er=W=>{var I=Sr(),Pe=r(I,!0);e(I),A(()=>m(Pe,t(f).display)),s(W,I)};x(J,W=>{t(f).navigable!==null?W(re):W(er,-1)})}e(h),s(y,h)};x(Qe,y=>{t(C).docId&&y(Xe)})}e(ke);var Se=a(ke,2),Te=r(Se);je(Te,23,()=>t(C).message.split("; "),(y,f)=>`${t(Ke)}-${f}`,(y,f)=>{var h=Cr(),J=a(r(h),2),re=r(J,!0);e(J),e(h),A(()=>m(re,t(f))),s(y,h)}),e(Te),e(Se);var Ze=a(Se,2);{var $e=y=>{var f=Ar(),h=r(f),J=a(r(h),2),re=r(J);ze(re,{get json(){return t(C).document},autoCollapse:!0,get server(){return c.data.server},get database(){return c.data.database},get collection(){return c.data.collection}}),e(J),e(h),e(f),s(y,f)};x(Ze,y=>{t(C).document&&y($e)})}e(we),s(H,we)}),e(ne),e(P),A(()=>m(z,`Validation Errors (${t(i).errors.length??""} sampled)`)),s(S,P)};x(Oe,S=>{t(i).errors.length>0&&S(Ye)})}var qe=a(Oe,2);{var Ge=S=>{var P=Vr(),D=a(r(P),2);je(D,20,()=>t(i).warnings,z=>z,(z,ne)=>{var H=Rr(),C=r(H,!0);e(H),A(()=>m(C,ne)),s(z,H)}),e(D),e(P),s(S,P)};x(qe,S=>{t(i).warnings.length>0&&S(Ge)})}A((S,P,D,z)=>{Me($,`color: ${t(Ve)??""};`),m(ie,`${S??""}%`),Me(ge,`width: ${t(i).compliancePct??""}%; background: ${t(Ve)??""};`),m(Be,P),m(Fe,D),Me(he,`color: ${t(i).nInvalidDocuments>0?"var(--error)":"var(--text)"};`),m(He,z),m(We,`${t(i).tookMs??""}ms`)},[()=>Re(t(i).compliancePct),()=>t(i).nrecords.toLocaleString(),()=>t(i).nValidDocuments.toLocaleString(),()=>t(i).nInvalidDocuments.toLocaleString()]),s(n,p)},Z=n=>{var p=Ir();s(n,p)};x(fe,n=>{t(U)?n(xe):t(Y)?n(le,1):t(i)?n(de,2):n(Z,-1)})}e(_),mr(O,()=>t(ue),n=>j(ue,n)),ur(X,()=>t(me),n=>j(me,n)),s(u,_)};x(pe,u=>{t(w).hasSchema&&u(be)})}e(L),s(l,L)},$$slots:{actions:!0,default:!0}}),ir()}nr(["click"]);export{Gr as component,qr as universal};