genosdb 0.12.6 → 0.12.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/nlq.min.js CHANGED
@@ -1 +1 @@
1
- function _1(j){const H=j.map;return j.map=async function(..._){let Z={},J=null;_.forEach((B)=>{if(typeof B==="object")Z={...Z,...B};if(typeof B==="function")J=B});let M=!1;if(Z.prompt)try{const B=await Z1(Z.prompt);if(console.log("Query generated from local DSL:",B),Z={...Z,...B},B.__nlqReturnDeepest)M=!0;delete Z.prompt}catch(B){console.error("Error parsing prompt:",B.message),Z.query={}}const G=M&&J?(B)=>{try{const f=w(B);J&&J(f)}catch{J&&J(B)}}:J,Q=await H.call(this,Z,G);if(M&&Q&&Array.isArray(Q.results))Q.results=w(Q.results);return Q},j}async function Z1(j){return j1(j)}var j1=function(j){const H=i(String(j||""));let _=x(H);const Z={query:{}},J=Z.query,M=U1(_);if(M.length){Z.$_ors=[];for(let A of M)Z.$_ors.push(A.left,A.right),_=V(_,A.span)}const F=Q1(_);if(F)J.type=F.type,Z.type=F.type,_=V(_,F.span);if(!J.type){const A=G1(_);if(A)J.type=A.type,Z.type=A.type,_=V(_,A.span)}if(!J.type){const A=W1(_);if(A)J.type=A.type,Z.type=A.type,_=V(_,A.span)}const G=B1(_);if(G&&G.edge){if(J.$edge=G.edge,G.span)_=V(_,G.span)}if(G&&G.edge&&/\bthen\s+finds?\s+(?:that\s+[A-Za-z]+s?\s+)?descendant\s+(?:named|called|with\s+name)\b/i.test(H))Z.__nlqReturnDeepest=!0;const Q=p(_);for(let A of Q){if(A.mode==="in"){const L=A.values??[A.value];J[A.field]={...J[A.field]||{},$in:L}}else J[A.field]={...J[A.field]||{},$contains:A.value};_=V(_,A.span)}const B=u(_);for(let A of B)J[A.field]={...J[A.field]||{},$regex:`^${A.value}`},_=V(_,A.span);const f=c(_);for(let A of f)J[A.field]={...J[A.field]||{},$regex:`${A.value}\$`},_=V(_,A.span);const Y=d(_);for(let A of Y)J[A.field]={...J[A.field]||{},$like:A.value},_=V(_,A.span);const z=A1(_);if(z){const A=z.value,L=[{name:{$regex:A}},{role:{$regex:A}},{level:{$regex:A}},{country:{$regex:A}},{title:{$regex:A}},{body:{$regex:A}},{tags:{$in:[A]}}];Z.query.$or=[...Z.query.$or||[],...L],_=V(_,z.span)}else if(H1(_))Z.query.__nlq_no_match="__NLQ_NO_MATCH__";const C=l(_);for(let A of C)J[A.field]={...J[A.field]||{},$exists:!0},_=V(_,A.span);const $=V1(_);if($.after)Z.$after=$.after;if($.before)Z.$before=$.before;for(let A of $.spans)_=V(_,A);const U=m(_);for(let A of U)J[A.field]=A.value,_=V(_,A.span);const N=J1(_);for(let A of N)J.name=A.value,_=V(_,A.span);const R=X1(_);for(let A of R)J.country=A.value,_=V(_,A.span);const g=a(_);for(let A of g)J[A.field]={...J[A.field]||{},$between:[A.min,A.max]},_=V(_,A.span);const W=Y1(_);for(let A of W){if(A.op==="eq")J[A.field]=A.value;else J[A.field]={...J[A.field]||{},[A.op]:A.value};_=V(_,A.span)}const D=r(_);for(let A of D){if(A.op==="eq")J[A.field]=A.value;else J[A.field]={...J[A.field]||{},[A.op]:A.value};_=V(_,A.span)}const v=n(_);for(let A of v)J[A.field]={...J[A.field]||{},$not:{$eq:A.value}},_=V(_,A.span);const q=o(_);for(let A of q){if(A.kind==="in")J.id={...J.id||{},$in:A.values};else if(A.kind==="eq")J.id=A.value;_=V(_,A.span)}const X=s(_);for(let A of X)J[A.field]={...J[A.field]||{},$in:A.values},_=V(_,A.span);const P=$1(_);if(P)Z.order=P.order,Z.field=P.field;const b=M1(_);if(b!=null)Z.$limit=b;if(Z.order&&!Z.field){const A=Object.keys(J)[0];if(A)Z.field=A}if(Object.keys(Z.query).length===0){const A=!!Z.order,L=Z.$limit!=null,h=!!(Z.$after||Z.$before);if(!A&&!L&&!h)Z.query.__nlq_no_match="__NLQ_NO_MATCH__"}if(Z.$_ors&&Z.$_ors.length)Z.query.$or=[...Z.query.$or||[],...Z.$_ors],delete Z.$_ors;return Z.query=F1(Z.query),Z},i=function(j){return j.replace(/\s+/g," ").trim()},V=function(j,H){if(!H)return j;return i(`${j.slice(0,H.start)} ${j.slice(H.end)}`)},x=function(j){const H=/^(?:searches\s+for|search\s+for|searches|search|finds?|gets?|lists?|returns?|shows?|filters?)\s+/i;return j.replace(H,"")},p=function(j){const H=[],_=[{re:/\bwhose\s+([a-z][\w\.]*)\s+(includes|including|has)\s+((?:"[^\"]+"|[A-Za-z0-9_\-]+)(?:\s*,\s*(?:"[^\"]+"|[A-Za-z0-9_\-]+))*)/ig,mode:"in",list:!0},{re:/\b([a-z][\w\.]*)\s+(includes|including|has)\s+((?:"[^\"]+"|[A-Za-z0-9_\-]+)(?:\s*,\s*(?:"[^\"]+"|[A-Za-z0-9_\-]+))*)/ig,mode:"in",list:!0},{re:/\bwhose\s+([a-z][\w\.]*)\s+(?:contains|containing)\s+(?:the\s+(?:word|phrase|number|value|text|string|token|term|email|url|date|time|datetime)s?\s*:?\s*)?"([^\"]+)"/ig,mode:"contains"},{re:/\bwhose\s+([a-z][\w\.]*)\s+(?:contains|containing)\s+(?:the\s+(?:word|phrase|number|value|text|string|token|term|email|url|date|time|datetime)s?\s*:?\s*)?([A-Za-z0-9_\-]+)/ig,mode:"contains"},{re:/\b([a-z][\w\.]*)\s+(?:contains|containing)\s+(?:the\s+(?:word|phrase|number|value|text|string|token|term|email|url|date|time|datetime)s?\s*:?\s*)?"([^\"]+)"/ig,mode:"contains"},{re:/\b([a-z][\w\.]*)\s+(?:contains|containing)\s+(?:the\s+(?:word|phrase|number|value|text|string|token|term|email|url|date|time|datetime)s?\s*:?\s*)?([A-Za-z0-9_\-]+)/ig,mode:"contains"}];for(let{re:Z,mode:J,list:M}of _){let F;while((F=Z.exec(j))!==null){const G=F[1];if(J==="in"&&M){const B=F[3].split(/\s*,\s*/).map((f)=>f.replace(/^"|"$/g,""));H.push({field:G,mode:"in",values:B,span:{start:F.index,end:F.index+F[0].length}})}else if(J==="contains"){const Q=F[2];H.push({field:G,mode:"contains",value:Q,span:{start:F.index,end:F.index+F[0].length}})}}}return H},u=function(j){const H=[],_=/\b(?:whose\s+)?([a-z][\w\.]*)\s+starts\s+with\s+"([^\"]+)"/ig;let Z;while((Z=_.exec(j))!==null)H.push({field:Z[1],value:Z[2],span:{start:Z.index,end:Z.index+Z[0].length}});const J=/\b(?:whose\s+)?([a-z][\w\.]*)\s+starts\s+with\s+([A-Za-z0-9_\-]+)/ig;while((Z=J.exec(j))!==null)H.push({field:Z[1],value:Z[2],span:{start:Z.index,end:Z.index+Z[0].length}});return H},c=function(j){const H=[],_=/\b(?:whose\s+)?([a-z][\w\.]*)\s+ends\s+with\s+"([^\"]+)"/ig;let Z;while((Z=_.exec(j))!==null)H.push({field:Z[1],value:Z[2],span:{start:Z.index,end:Z.index+Z[0].length}});const J=/\b(?:whose\s+)?([a-z][\w\.]*)\s+ends\s+with\s+([A-Za-z0-9_\-]+)/ig;while((Z=J.exec(j))!==null)H.push({field:Z[1],value:Z[2],span:{start:Z.index,end:Z.index+Z[0].length}});return H},d=function(j){const H=[];let _;const Z=/\b(?:whose\s+)?([a-z][\w\.]*)\s+like\s+"([^\"]+)"/ig;while((_=Z.exec(j))!==null)H.push({field:_[1],value:_[2],span:{start:_.index,end:_.index+_[0].length}});const J=/\b(?:whose\s+)?([a-z][\w\.]*)\s+like\s+([A-Za-z0-9_%\-\.\*]+)/ig;while((_=J.exec(j))!==null)H.push({field:_[1],value:_[2],span:{start:_.index,end:_.index+_[0].length}});return H},A1=function(j){const _=/\b(?:full[-\s]?text\s+search|text\s+search)\s+(?:"([^\"]+)"|([A-Za-z0-9_\-]+))/i.exec(j);if(_)return{value:_[1]||_[2],span:{start:_.index,end:_.index+_[0].length}};return null},H1=function(j){return/\b(?:full[-\s]?text\s+search|text\s+search|full[-\s]?text)\b/i.test(j)},n=function(j){const H=[];let _;const Z=/\b([a-z][\w\.]*)\s*(?:!=|is\s+not|not\s+equals)\s+"([^\"]+)"\b/ig;while((_=Z.exec(j))!==null)H.push({field:_[1],value:_[2],span:{start:_.index,end:_.index+_[0].length}});const J=/\b([a-z][\w\.]*)\s*(?:!=|is\s+not|not\s+equals)\s+([A-Za-z0-9_\-\.]+)\b/ig;while((_=J.exec(j))!==null)H.push({field:_[1],value:K(_[2]),span:{start:_.index,end:_.index+_[0].length}});return H},s=function(j){const H=[];let _;const Z=/\b([a-z][\w\.]*)\s+is\s+([A-Za-z0-9_\-]+)\s+or\s+([A-Za-z0-9_\-]+)(?:\s+or\s+([A-Za-z0-9_\-]+))*/ig;while((_=Z.exec(j))!==null){const M=_[1],F=_[0].replace(new RegExp(`^${_[1]}\\s+is\\s+`,"i"),"").split(/\s+or\s+/i).map((G)=>G.trim().replace(/[,\.]$/,""));H.push({field:M,values:F,span:{start:_.index,end:_.index+_[0].length}})}const J=/\b([a-z][\w\.]*)\s+in\s+((?:"[^\"]+"|[A-Za-z0-9_\-]+)(?:\s*,\s*(?:"[^\"]+"|[A-Za-z0-9_\-]+))*)/ig;while((_=J.exec(j))!==null){const M=_[1],G=_[2].split(/\s*,\s*/).map((Q)=>Q.replace(/^"|"$/g,""));H.push({field:M,values:G,span:{start:_.index,end:_.index+_[0].length}})}return H},l=function(j){const H=[];let _;const Z=/\b(?:has|with|having)\s+([a-z][\w\.]*)\b(?!\s+(?:"[^"]+"|[A-Za-z0-9_\-.]+)\b)/ig;while((_=Z.exec(j))!==null)H.push({field:_[1],span:{start:_.index,end:_.index+_[0].length}});const J=/\b(?:has|with|having)\s+([a-z][\w\.]*)\s+exists\b/ig;while((_=J.exec(j))!==null)H.push({field:_[1],span:{start:_.index,end:_.index+_[0].length}});const M=/\bwhose\s+([a-z][\w\.]*)\s+exists\b/ig;while((_=M.exec(j))!==null)H.push({field:_[1],span:{start:_.index,end:_.index+_[0].length}});const F=/\b([a-z][\w\.]*)\s+exists\b/ig;while((_=F.exec(j))!==null)H.push({field:_[1],span:{start:_.index,end:_.index+_[0].length}});return H},m=function(j){const H=[];let _;const Z=/\bwith\s+([a-z][\w\.]*)\s+("[^"]+"|[A-Za-z0-9_\-.]+)\b/ig;while((_=Z.exec(j))!==null){const J=_[1],M=T(_[2]);H.push({field:J,value:M,span:{start:_.index,end:_.index+_[0].length}})}return H},J1=function(j){const H=[],_=/\bname\s+(?:"([^"]+)"|(([A-Z][a-zA-Z]+)(?:\s+[A-Z][a-zA-Z]+)*))\b/g;let Z;while((Z=_.exec(j))!==null){const J=Z[1]||(Z[2]?Z[2].trim():null);if(!J)continue;H.push({value:J,span:{start:Z.index,end:Z.index+Z[0].length}})}return H},X1=function(j){const H=[],_=/\bfrom\s+(?:"([^"]+)"|([A-Za-z][A-Za-z]+))\b/ig;let Z;while((Z=_.exec(j))!==null){const J=Z[1]||Z[2];H.push({value:J,span:{start:Z.index,end:Z.index+Z[0].length}})}return H},a=function(j){const H=[],_=/\b([a-z][\w\.]*)\s+between\s+(?:"([^"]+)"|([0-9]{4}-[0-9]{2}-[0-9]{2}[T\d:._+\-Z]*))\s*(?:and|,|to)\s*(?:"([^"]+)"|([0-9]{4}-[0-9]{2}-[0-9]{2}[T\d:._+\-Z]*))\b/ig;let Z;const J=[];while((Z=_.exec(j))!==null){const F={start:Z.index,end:Z.index+Z[0].length};H.push({field:Z[1],min:Z[2]||Z[3],max:Z[4]||Z[5],span:F}),J.push(F)}const M=/\b([a-z][\w\.]*)\s+between\s+(-?\d+(?:\.\d+)?)\s*(?:and|,|to)\s*(-?\d+(?:\.\d+)?)\b/ig;while((Z=M.exec(j))!==null){const F={start:Z.index,end:Z.index+Z[0].length};if(J.some((Q)=>!(F.end<=Q.start||F.start>=Q.end)))continue;H.push({field:Z[1],min:K(Z[2]),max:K(Z[3]),span:F})}return H},o=function(j){const H=[],_=/\bids?\b\s+((?:-?\d+(?:\.\d+)?\s*,\s*)+-?\d+(?:\.\d+)?)\b/ig;let Z;while((Z=_.exec(j))!==null){const F=Z[1].split(/\s*,\s*/).map(K);H.push({kind:"in",values:F,span:{start:Z.index,end:Z.index+Z[0].length}})}const J=/\bids?\b\s+(-?\d+(?:\.\d+)?)\b/ig;while((Z=J.exec(j))!==null){const M={start:Z.index,end:Z.index+Z[0].length};if(!H.some((G)=>!(M.end<=G.span.start||M.start>=G.span.end)))H.push({kind:"eq",value:K(Z[1]),span:M})}return H},r=function(j){const H=[];let _;const Z=/\b([a-z][\w\.]*)\s*(?:>=|at\s+least)\s*(-?\d+(?:\.\d+)?)\b/ig;while((_=Z.exec(j))!==null)H.push({field:_[1],op:"$gte",value:K(_[2]),span:{start:_.index,end:_.index+_[0].length}});const J=/\b([a-z][\w\.]*)\s*(?:<=|at\s+most)\s*(-?\d+(?:\.\d+)?)\b/ig;while((_=J.exec(j))!==null)H.push({field:_[1],op:"$lte",value:K(_[2]),span:{start:_.index,end:_.index+_[0].length}});const M=/\b([a-z][\w\.]*)\s*(?:>|greater\s+than|more\s+than)\s*(-?\d+(?:\.\d+)?)\b/ig;while((_=M.exec(j))!==null)H.push({field:_[1],op:"$gt",value:K(_[2]),span:{start:_.index,end:_.index+_[0].length}});const F=/\b([a-z][\w\.]*)\s*(?:<|less\s+than|fewer\s+than)\s*(-?\d+(?:\.\d+)?)\b/ig;while((_=F.exec(j))!==null)H.push({field:_[1],op:"$lt",value:K(_[2]),span:{start:_.index,end:_.index+_[0].length}});const G=/\b([a-z][\w\.]*)\s*(?:=|equals|is)(?!\s+not)\s*"([^"]+)"\b/ig;while((_=G.exec(j))!==null)H.push({field:_[1],op:"eq",value:_[2],span:{start:_.index,end:_.index+_[0].length}});const Q=/\b([a-z][\w\.]*)\s*(?:=|equals|is)(?!\s+not)\s*([a-z0-9_\-\.]+)\b/ig;while((_=Q.exec(j))!==null)H.push({field:_[1],op:"eq",value:K(_[2]),span:{start:_.index,end:_.index+_[0].length}});return H},Y1=function(j){const H=[];let _;const Z=/\b([a-z][\w\.]*)\s+(on\s+or\s+after|on\s+or\s+before|after|before|on)\s+(?:"([^"]+)"|([0-9]{4}-[0-9]{2}-[0-9]{2}[T\d:._+\-Z]*))\b/ig;while((_=Z.exec(j))!==null){const J=_[1],M=_[2].toLowerCase().replace(/\s+/g," "),F=_[3]||_[4];let G="$gt";if(M==="before")G="$lt";else if(M==="on")G="eq";else if(M==="on or after")G="$gte";else if(M==="on or before")G="$lte";H.push({field:J,op:G,value:F,span:{start:_.index,end:_.index+_[0].length}})}return H},$1=function(j){const H=[{re:/\b(?:order|sort|sorted)\s+by\s+([a-z][\w\.]*)\s*(asc|ascending|desc|descending)?\b/i,groups:{field:1,dir:2}},{re:/\b(?:order|sort|sorted)\s+(asc|ascending|desc|descending)\s+by\s+([a-z][\w\.]*)\b/i,groups:{dir:1,field:2}}];for(let _ of H){const Z=j.match(_.re);if(Z){const J=(Z[_.groups.dir]||"asc").toLowerCase(),M=/desc|descending/.test(J)?"desc":"asc";return{field:Z[_.groups.field],order:M}}}return null},M1=function(j){const H=j.match(/\blimit\s+(\d+)\b/i);return H?Number(H[1]):null},K=function(j){const H=Number(j);return Number.isFinite(H)?H:j},w=function(j){if(!Array.isArray(j))return j;const H=[],_=(Z)=>{const J=Array.isArray(Z?._edgeResult)?Z._edgeResult:null;if(J&&J.length)for(let M of J)_(M);else H.push(Z)};for(let Z of j)_(Z);return H},U1=function(j){const H=[];let _;const Z=/\b([a-z][\w\.]*)\s*(=|is|equals)\s*("[^"]+"|[A-Za-z0-9_\-.]+)\s+or\s+\1\s*(=|is|equals)\s*("[^"]+"|[A-Za-z0-9_\-.]+)\b/ig;while((_=Z.exec(j))!==null){const F={[_[1]]:T(_[3])},G={[_[1]]:T(_[5])};H.push({left:F,right:G,span:{start:_.index,end:_.index+_[0].length}})}const J=/\b([a-z][\w\.]*)\s+(?:contains|containing)\s+("[^"]+"|[A-Za-z0-9_\-.]+)\s+or\s+\1\s+(?:contains|containing)\s+("[^"]+"|[A-Za-z0-9_\-.]+)\b/ig;while((_=J.exec(j))!==null){const F={[_[1]]:{$contains:T(_[2])}},G={[_[1]]:{$contains:T(_[3])}};H.push({left:F,right:G,span:{start:_.index,end:_.index+_[0].length}})}const M=/\b([a-z][\w\.]*)\s+starts\s+with\s+("[^"]+"|[A-Za-z0-9_\-]+)\s+or\s+\1\s+starts\s+with\s+("[^"]+"|[A-Za-z0-9_\-]+)\b/ig;while((_=M.exec(j))!==null){const F=String(T(_[2])),G=String(T(_[3])),Q={[_[1]]:{$regex:`^${F}`}},B={[_[1]]:{$regex:`^${G}`}};H.push({left:Q,right:B,span:{start:_.index,end:_.index+_[0].length}})}return H},T=function(j){if(!j)return j;const H=j.replace(/^"|"$/g,"");return K(H)},F1=function(j){if(!j||typeof j!=="object")return j;const{$edge:H,..._}=j,Z=H?e(H):void 0,J=Object.keys(_);if(J.length>1){const M={};if(Z)M.$edge=Z;return M.$and=J.map((F)=>({[F]:_[F]})),M}return{..._,...H?{$edge:Z}:{}}},e=function(j){if(!j||typeof j!=="object")return j;const{$edge:H,..._}=j,Z=Object.keys(_),J=H?e(H):void 0;if(Z.length>1){const M={};if(J)M.$edge=J;return M.$and=Z.map((F)=>({[F]:_[F]})),M}return{..._,...J?{$edge:J}:{}}},Q1=function(j){const _=/\bonly\s+([A-Z][a-zA-Z]+)s?\b/ig.exec(j);if(!_)return null;return{type:O(_[1]),span:{start:_.index,end:_.index+_[0].length}}},G1=function(j){const _=/\b(?:a|an)\s+([A-Z][a-zA-Z]+)s?\b/ig.exec(j);if(!_)return null;return{type:O(_[1]),span:{start:_.index,end:_.index+_[0].length}}},W1=function(j){if(/^(?:full[-\s]?text\s+search|text\s+search)\b/i.test(j))return null;const H=j.match(/^([A-Z][a-zA-Z]+)s?\b/);if(!H)return null;return{type:O(H[1]),span:{start:0,end:H[0].length}}},B1=function(j){const H=j.split(/\bthen\b/ig).map((G)=>G.trim()).filter(Boolean);let _=null,Z=null,J=null,M=null;for(let G of H){const Q=x(G),B=Z?.type?"type":Z?.role?"role":null,f=B?String(Z[B]).toLowerCase():null;let Y=Q.match(/\bdescendant[s]?\s+of\s+type\s+([A-Za-z][A-Za-z]+)s?\b/i),z=null,C="role",$=null,U=null,N=!1,R=Q.match(/\b(?:that|this|those|their|its)\s+([A-Za-z][A-Za-z]+)\s*'s\s+descendant[s]?\b/i);if(!R)R=Q.match(/\b(?:that|this|those|their|its)\s+([A-Za-z][A-Za-z]+)s?\s+descendant[s]?\b/i);if(R){const X=O(R[1]).toLowerCase();if(f&&X===f)N=!0,$=R.index,U=R.index+R[0].length}if(Y)z=O(Y[1]),$=Y.index,U=Y.index+Y[0].length,C="type";else if(Y=!N&&Q.match(/\b(?:that|this|those|their|its|a|an)?\s*([A-Za-z][A-Za-z]+)s?(?:'s)?\s+descendant[s]?\b/i),Y)z=O(Y[1]),$=Y.index,U=Y.index+Y[0].length;else if(Y=!N&&Q.match(/\bdescendant[s]?\s+(?:of\s+)?(?!named\b|called\b|with\b)([A-Za-z][A-Za-z]+)s?\b/i),Y)z=O(Y[1]),$=Y.index,U=Y.index+Y[0].length;else if(Y=Q.match(/\bchild(?:ren)?\s+of\s+type\s+([A-Za-z][A-Za-z]+)s?\b/i),Y)z=O(Y[1]),$=Y.index,U=Y.index+Y[0].length,C="type";else if(Y=Q.match(/\bchild(?:ren)?\s+(?:of\s+)?([A-Za-z][A-Za-z]+)s?\b/i),Y)z=O(Y[1]),$=Y.index,U=Y.index+Y[0].length;else if(Y=Q.match(/\b(?:that|this|those|their|its)?\s*([A-Za-z][A-Za-z]+)s?(?:'s)?\s+child(?:ren)?\b/i),Y)z=O(Y[1]),$=Y.index,U=Y.index+Y[0].length;else if(Y=Q.match(/\bgrandchild(?:ren)?\s+of\s+type\s+([A-Za-z][A-Za-z]+)s?\b/i),Y)z=O(Y[1]),$=Y.index,U=Y.index+Y[0].length,C="type";else if(Y=Q.match(/\bgrandchild(?:ren)?\s+(?:of\s+)?([A-Za-z][A-Za-z]+)s?\b/i),Y)z=O(Y[1]),$=Y.index,U=Y.index+Y[0].length;else if(Y=Q.match(/\b(?:that|this|those|their|its)?\s*([A-Za-z][A-Za-z]+)s?(?:'s)?\s+grandchild(?:ren)?\b/i),Y)z=O(Y[1]),$=Y.index,U=Y.index+Y[0].length;const g=/\b(descendant|child|children|grandchild|grandchildren)\b/i.test(Q);let W=null;if(z)W={[C]:z};else if(g)W={};else continue;const D=Q.match(/\b(?:named|called)\s+"([^"]+)"|\b(?:named|called)\s+([A-Za-z0-9_\-]+)\b|\bwith\s+name\s+"([^"]+)"|\bwith\s+name\s+([A-Za-z0-9_\-]+)\b/i);if(D){const X=D[1]||D[2]||D[3]||D[4];W.name=X;const P=D.index,b=D[0].length;if($===null||P<$)$=P;const A=P+b;if(U===null||A>U)U=A}for(let X of p(Q)){if(X.mode==="in"){const P=X.values??[X.value];W[X.field]={...W[X.field]||{},$in:P}}else W[X.field]={...W[X.field]||{},$contains:X.value};$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end)}for(let X of u(Q))W[X.field]={...W[X.field]||{},$regex:`^${X.value}`},$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end);for(let X of c(Q))W[X.field]={...W[X.field]||{},$regex:`${X.value}\$`},$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end);for(let X of a(Q))W[X.field]={...W[X.field]||{},$between:[X.min,X.max]},$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end);for(let X of r(Q)){if(X.op==="eq")W[X.field]=X.value;else W[X.field]={...W[X.field]||{},[X.op]:X.value};$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end)}for(let X of n(Q))W[X.field]={...W[X.field]||{},$not:{$eq:X.value}},$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end);for(let X of s(Q))W[X.field]={...W[X.field]||{},$in:X.values},$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end);const v=l(Q);for(let X of v)W[X.field]={...W[X.field]||{},$exists:!0},$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end);let q=Q.replace(/\b(?:has|with|having)\s+[a-z][\w\.]*\s+exists\b/ig," ").replace(/\bwhose\s+[a-z][\w\.]*\s+exists\b/ig," ").replace(/\b([a-z][\w\.]*)\s+exists\b/ig," ").replace(/\b(?:whose\s+)?([a-z][\w\.]*)\s+starts\s+with\s+(?:"[^\"]+"|[A-Za-z0-9_\-]+)/ig," ");for(let X of d(Q))W[X.field]={...W[X.field]||{},$like:X.value},$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end);for(let X of m(q))W[X.field]=X.value,$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end);for(let X of o(Q)){if(X.kind==="in")W.id={...W.id||{},$in:X.values};else if(X.kind==="eq")W.id=X.value;$=$==null?X.span.start:Math.min($,X.span.start),U=U==null?X.span.end:Math.max(U,X.span.end)}if(!W||Object.keys(W).length===0)continue;if(!_)_=W,Z=W,J=J??j.indexOf(Q)+($??0),M=j.indexOf(Q)+(U??0);else{const X=Z.type?"type":Z.role?"role":null,P=X?String(Z[X]).toLowerCase():null,b=W.type?"type":W.role?"role":null,A=b?String(W[b]).toLowerCase():null;if(!Z.$edge||typeof Z.$edge!=="object")Z.$edge={};const L=Z.$edge,h=L.type?"type":L.role?"role":null,z1=h?String(L[h]).toLowerCase():null,y=(E)=>{const k={};for(let[I,t]of Object.entries(W)){if(I==="$edge")continue;if(E&&(I==="type"||I==="role"))continue;k[I]=t}return k};if(A&&P&&A===P)Object.assign(L,y(!0));else if(A){for(let E of["type","role"])delete L[E];Object.assign(L,y(!1))}else Object.assign(L,y(!1));Z=Z.$edge;const S=j.indexOf(Q);if(J===null)J=S+($??0);M=S+(U??0)}}if(!_)return null;const F=J!=null&&M!=null?{start:J,end:M}:void 0;return{edge:_,span:F}},O=function(j){if(!j)return j;if(/ies$/i.test(j))return j.replace(/ies$/i,"y");if(/ses$/i.test(j))return j.replace(/es$/i,"e");if(/s$/i.test(j))return j.replace(/s$/i,"");return j},V1=function(j){const H={after:null,before:null,spans:[]},_=[{kind:"after",re:/\b(?:start(?:ing)?\s+)?after\s+(?:id\s+)?(?:"([^"]+)"|([A-Za-z0-9_\-]+))(?=\s|$)/ig},{kind:"before",re:/\b(?:before|until)\s+(?:id\s+)?(?:"([^"]+)"|([A-Za-z0-9_\-]+))(?=\s|$)/ig}];for(let Z of _){let J;while((J=Z.re.exec(j))!==null){const M=J[1]||J[2];if(Z.kind==="after"&&!H.after)H.after=M;if(Z.kind==="before"&&!H.before)H.before=M;H.spans.push({start:J.index,end:J.index+J[0].length})}}return H},L1=(j)=>{return console.log("\uD83E\uDDE0 NLQ module loaded (local DSL)."),_1(j)};export{_1 as withModule,L1 as init};
1
+ function jj(J){let Y=J.map;return J.map=async function(...j){let H={},Z=null;j.forEach((B)=>{if(typeof B==="object")H={...H,...B};if(typeof B==="function")Z=B});let M=!1;if(H.prompt)try{let B=await Hj(H.prompt);if(H={...H,...B},B.__nlqReturnDeepest)M=!0;delete H.prompt}catch(B){H.query={}}let G=M&&Z?(B)=>{try{let T=w(B);Z&&Z(T)}catch{Z&&Z(B)}}:Z,$=await Y.call(this,H,G);if(M&&$&&Array.isArray($.results))$.results=w($.results);return $},J}async function Hj(J){return Jj(J)}function Jj(J){let Y=i(String(J||"")),j=x(Y),H={query:{}},Z=H.query,M=Fj(j);if(M.length){H.$_ors=[];for(let X of M)H.$_ors.push(X.left,X.right),j=V(j,X.span)}let Q=$j(j);if(Q)Z.type=Q.type,H.type=Q.type,j=V(j,Q.span);if(!Z.type){let X=Gj(j);if(X)Z.type=X.type,H.type=X.type,j=V(j,X.span)}if(!Z.type){let X=Wj(j);if(X)Z.type=X.type,H.type=X.type,j=V(j,X.span)}let G=Vj(j);if(G&&G.edge){if(Z.$edge=G.edge,G.span)j=V(j,G.span)}if(G&&G.edge&&/\bthen\s+finds?\s+(?:that\s+[A-Za-z]+s?\s+)?descendant\s+(?:named|called|with\s+name)\b/i.test(Y))H.__nlqReturnDeepest=!0;let $=p(j);for(let X of $){if(X.mode==="in"){let R=X.values??[X.value];Z[X.field]={...Z[X.field]||{},$in:R}}else Z[X.field]={...Z[X.field]||{},$contains:X.value};j=V(j,X.span)}let B=u(j);for(let X of B)Z[X.field]={...Z[X.field]||{},$regex:`^${X.value}`},j=V(j,X.span);let T=c(j);for(let X of T)Z[X.field]={...Z[X.field]||{},$regex:`${X.value}$`},j=V(j,X.span);let U=d(j);for(let X of U)Z[X.field]={...Z[X.field]||{},$like:X.value},j=V(j,X.span);let O=Xj(j);if(O){let X=O.value,R=[{name:{$regex:X}},{role:{$regex:X}},{level:{$regex:X}},{country:{$regex:X}},{title:{$regex:X}},{body:{$regex:X}},{tags:{$in:[X]}}];H.query.$or=[...H.query.$or||[],...R],j=V(j,O.span)}else if(Yj(j))H.query.__nlq_no_match="__NLQ_NO_MATCH__";let C=m(j);for(let X of C)Z[X.field]={...Z[X.field]||{},$exists:!0},j=V(j,X.span);let A=Bj(j);if(A.after)H.$after=A.after;if(A.before)H.$before=A.before;for(let X of A.spans)j=V(j,X);let F=l(j);for(let X of F)Z[X.field]=X.value,j=V(j,X.span);let I=Zj(j);for(let X of I)Z.name=X.value,j=V(j,X.span);let L=_j(j);for(let X of L)Z.country=X.value,j=V(j,X.span);let v=a(j);for(let X of v)Z[X.field]={...Z[X.field]||{},$between:[X.min,X.max]},j=V(j,X.span);let W=Uj(j);for(let X of W){if(X.op==="eq")Z[X.field]=X.value;else Z[X.field]={...Z[X.field]||{},[X.op]:X.value};j=V(j,X.span)}let z=r(j);for(let X of z){if(X.op==="eq")Z[X.field]=X.value;else Z[X.field]={...Z[X.field]||{},[X.op]:X.value};j=V(j,X.span)}let q=n(j);for(let X of q)Z[X.field]={...Z[X.field]||{},$not:{$eq:X.value}},j=V(j,X.span);let g=o(j);for(let X of g){if(X.kind==="in")Z.id={...Z.id||{},$in:X.values};else if(X.kind==="eq")Z.id=X.value;j=V(j,X.span)}let _=s(j);for(let X of _)Z[X.field]={...Z[X.field]||{},$in:X.values},j=V(j,X.span);let P=Aj(j);if(P)H.order=P.order,H.field=P.field;let N=Mj(j);if(N!=null)H.$limit=N;if(H.order&&!H.field){let X=Object.keys(Z)[0];if(X)H.field=X}if(Object.keys(H.query).length===0){let X=!!H.order,R=H.$limit!=null,f=!!(H.$after||H.$before);if(!X&&!R&&!f)H.query.__nlq_no_match="__NLQ_NO_MATCH__"}if(H.$_ors&&H.$_ors.length)H.query.$or=[...H.query.$or||[],...H.$_ors],delete H.$_ors;return H.query=Qj(H.query),H}function i(J){return J.replace(/\s+/g," ").trim()}function V(J,Y){if(!Y)return J;return i(`${J.slice(0,Y.start)} ${J.slice(Y.end)}`)}function x(J){let Y=/^(?:searches\s+for|search\s+for|searches|search|finds?|gets?|lists?|returns?|shows?|filters?)\s+/i;return J.replace(Y,"")}function p(J){let Y=[],j=[{re:/\bwhose\s+([a-z][\w\.]*)\s+(includes|including|has)\s+((?:"[^\"]+"|[A-Za-z0-9_\-]+)(?:\s*,\s*(?:"[^\"]+"|[A-Za-z0-9_\-]+))*)/ig,mode:"in",list:!0},{re:/\b([a-z][\w\.]*)\s+(includes|including|has)\s+((?:"[^\"]+"|[A-Za-z0-9_\-]+)(?:\s*,\s*(?:"[^\"]+"|[A-Za-z0-9_\-]+))*)/ig,mode:"in",list:!0},{re:/\bwhose\s+([a-z][\w\.]*)\s+(?:contains|containing)\s+(?:the\s+(?:word|phrase|number|value|text|string|token|term|email|url|date|time|datetime)s?\s*:?\s*)?"([^\"]+)"/ig,mode:"contains"},{re:/\bwhose\s+([a-z][\w\.]*)\s+(?:contains|containing)\s+(?:the\s+(?:word|phrase|number|value|text|string|token|term|email|url|date|time|datetime)s?\s*:?\s*)?([A-Za-z0-9_\-]+)/ig,mode:"contains"},{re:/\b([a-z][\w\.]*)\s+(?:contains|containing)\s+(?:the\s+(?:word|phrase|number|value|text|string|token|term|email|url|date|time|datetime)s?\s*:?\s*)?"([^\"]+)"/ig,mode:"contains"},{re:/\b([a-z][\w\.]*)\s+(?:contains|containing)\s+(?:the\s+(?:word|phrase|number|value|text|string|token|term|email|url|date|time|datetime)s?\s*:?\s*)?([A-Za-z0-9_\-]+)/ig,mode:"contains"}];for(let{re:H,mode:Z,list:M}of j){let Q;while((Q=H.exec(J))!==null){let G=Q[1];if(Z==="in"&&M){let B=Q[3].split(/\s*,\s*/).map((T)=>T.replace(/^"|"$/g,""));Y.push({field:G,mode:"in",values:B,span:{start:Q.index,end:Q.index+Q[0].length}})}else if(Z==="contains"){let $=Q[2];Y.push({field:G,mode:"contains",value:$,span:{start:Q.index,end:Q.index+Q[0].length}})}}}return Y}function u(J){let Y=[],j=/\b(?:whose\s+)?([a-z][\w\.]*)\s+starts\s+with\s+"([^\"]+)"/ig,H;while((H=j.exec(J))!==null)Y.push({field:H[1],value:H[2],span:{start:H.index,end:H.index+H[0].length}});let Z=/\b(?:whose\s+)?([a-z][\w\.]*)\s+starts\s+with\s+([A-Za-z0-9_\-]+)/ig;while((H=Z.exec(J))!==null)Y.push({field:H[1],value:H[2],span:{start:H.index,end:H.index+H[0].length}});return Y}function c(J){let Y=[],j=/\b(?:whose\s+)?([a-z][\w\.]*)\s+ends\s+with\s+"([^\"]+)"/ig,H;while((H=j.exec(J))!==null)Y.push({field:H[1],value:H[2],span:{start:H.index,end:H.index+H[0].length}});let Z=/\b(?:whose\s+)?([a-z][\w\.]*)\s+ends\s+with\s+([A-Za-z0-9_\-]+)/ig;while((H=Z.exec(J))!==null)Y.push({field:H[1],value:H[2],span:{start:H.index,end:H.index+H[0].length}});return Y}function d(J){let Y=[],j,H=/\b(?:whose\s+)?([a-z][\w\.]*)\s+like\s+"([^\"]+)"/ig;while((j=H.exec(J))!==null)Y.push({field:j[1],value:j[2],span:{start:j.index,end:j.index+j[0].length}});let Z=/\b(?:whose\s+)?([a-z][\w\.]*)\s+like\s+([A-Za-z0-9_%\-\.\*]+)/ig;while((j=Z.exec(J))!==null)Y.push({field:j[1],value:j[2],span:{start:j.index,end:j.index+j[0].length}});return Y}function Xj(J){let j=/\b(?:full[-\s]?text\s+search|text\s+search)\s+(?:"([^\"]+)"|([A-Za-z0-9_\-]+))/i.exec(J);if(j)return{value:j[1]||j[2],span:{start:j.index,end:j.index+j[0].length}};return null}function Yj(J){return/\b(?:full[-\s]?text\s+search|text\s+search|full[-\s]?text)\b/i.test(J)}function n(J){let Y=[],j,H=/\b([a-z][\w\.]*)\s*(?:!=|is\s+not|not\s+equals)\s+"([^\"]+)"\b/ig;while((j=H.exec(J))!==null)Y.push({field:j[1],value:j[2],span:{start:j.index,end:j.index+j[0].length}});let Z=/\b([a-z][\w\.]*)\s*(?:!=|is\s+not|not\s+equals)\s+([A-Za-z0-9_\-\.]+)\b/ig;while((j=Z.exec(J))!==null)Y.push({field:j[1],value:D(j[2]),span:{start:j.index,end:j.index+j[0].length}});return Y}function s(J){let Y=[],j,H=/\b([a-z][\w\.]*)\s+is\s+([A-Za-z0-9_\-]+)\s+or\s+([A-Za-z0-9_\-]+)(?:\s+or\s+([A-Za-z0-9_\-]+))*/ig;while((j=H.exec(J))!==null){let M=j[1],Q=j[0].replace(new RegExp(`^${j[1]}\\s+is\\s+`,"i"),"").split(/\s+or\s+/i).map((G)=>G.trim().replace(/[,\.]$/,""));Y.push({field:M,values:Q,span:{start:j.index,end:j.index+j[0].length}})}let Z=/\b([a-z][\w\.]*)\s+in\s+((?:"[^\"]+"|[A-Za-z0-9_\-]+)(?:\s*,\s*(?:"[^\"]+"|[A-Za-z0-9_\-]+))*)/ig;while((j=Z.exec(J))!==null){let M=j[1],G=j[2].split(/\s*,\s*/).map(($)=>$.replace(/^"|"$/g,""));Y.push({field:M,values:G,span:{start:j.index,end:j.index+j[0].length}})}return Y}function m(J){let Y=[],j,H=/\b(?:has|with|having)\s+([a-z][\w\.]*)\b(?!\s+(?:"[^"]+"|[A-Za-z0-9_\-.]+)\b)/ig;while((j=H.exec(J))!==null)Y.push({field:j[1],span:{start:j.index,end:j.index+j[0].length}});let Z=/\b(?:has|with|having)\s+([a-z][\w\.]*)\s+exists\b/ig;while((j=Z.exec(J))!==null)Y.push({field:j[1],span:{start:j.index,end:j.index+j[0].length}});let M=/\bwhose\s+([a-z][\w\.]*)\s+exists\b/ig;while((j=M.exec(J))!==null)Y.push({field:j[1],span:{start:j.index,end:j.index+j[0].length}});let Q=/\b([a-z][\w\.]*)\s+exists\b/ig;while((j=Q.exec(J))!==null)Y.push({field:j[1],span:{start:j.index,end:j.index+j[0].length}});return Y}function l(J){let Y=[],j,H=/\bwith\s+([a-z][\w\.]*)\s+("[^"]+"|[A-Za-z0-9_\-.]+)\b/ig;while((j=H.exec(J))!==null){let Z=j[1],M=b(j[2]);Y.push({field:Z,value:M,span:{start:j.index,end:j.index+j[0].length}})}return Y}function Zj(J){let Y=[],j=/\bname\s+(?:"([^"]+)"|(([A-Z][a-zA-Z]+)(?:\s+[A-Z][a-zA-Z]+)*))\b/g,H;while((H=j.exec(J))!==null){let Z=H[1]||(H[2]?H[2].trim():null);if(!Z)continue;Y.push({value:Z,span:{start:H.index,end:H.index+H[0].length}})}return Y}function _j(J){let Y=[],j=/\bfrom\s+(?:"([^"]+)"|([A-Za-z][A-Za-z]+))\b/ig,H;while((H=j.exec(J))!==null){let Z=H[1]||H[2];Y.push({value:Z,span:{start:H.index,end:H.index+H[0].length}})}return Y}function a(J){let Y=[],j=/\b([a-z][\w\.]*)\s+between\s+(?:"([^"]+)"|([0-9]{4}-[0-9]{2}-[0-9]{2}[T\d:._+\-Z]*))\s*(?:and|,|to)\s*(?:"([^"]+)"|([0-9]{4}-[0-9]{2}-[0-9]{2}[T\d:._+\-Z]*))\b/ig,H,Z=[];while((H=j.exec(J))!==null){let Q={start:H.index,end:H.index+H[0].length};Y.push({field:H[1],min:H[2]||H[3],max:H[4]||H[5],span:Q}),Z.push(Q)}let M=/\b([a-z][\w\.]*)\s+between\s+(-?\d+(?:\.\d+)?)\s*(?:and|,|to)\s*(-?\d+(?:\.\d+)?)\b/ig;while((H=M.exec(J))!==null){let Q={start:H.index,end:H.index+H[0].length};if(Z.some(($)=>!(Q.end<=$.start||Q.start>=$.end)))continue;Y.push({field:H[1],min:D(H[2]),max:D(H[3]),span:Q})}return Y}function o(J){let Y=[],j=/\bids?\b\s+((?:-?\d+(?:\.\d+)?\s*,\s*)+-?\d+(?:\.\d+)?)\b/ig,H;while((H=j.exec(J))!==null){let Q=H[1].split(/\s*,\s*/).map(D);Y.push({kind:"in",values:Q,span:{start:H.index,end:H.index+H[0].length}})}let Z=/\bids?\b\s+(-?\d+(?:\.\d+)?)\b/ig;while((H=Z.exec(J))!==null){let M={start:H.index,end:H.index+H[0].length};if(!Y.some((G)=>!(M.end<=G.span.start||M.start>=G.span.end)))Y.push({kind:"eq",value:D(H[1]),span:M})}return Y}function r(J){let Y=[],j,H=/\b([a-z][\w\.]*)\s*(?:>=|at\s+least)\s*(-?\d+(?:\.\d+)?)\b/ig;while((j=H.exec(J))!==null)Y.push({field:j[1],op:"$gte",value:D(j[2]),span:{start:j.index,end:j.index+j[0].length}});let Z=/\b([a-z][\w\.]*)\s*(?:<=|at\s+most)\s*(-?\d+(?:\.\d+)?)\b/ig;while((j=Z.exec(J))!==null)Y.push({field:j[1],op:"$lte",value:D(j[2]),span:{start:j.index,end:j.index+j[0].length}});let M=/\b([a-z][\w\.]*)\s*(?:>|greater\s+than|more\s+than)\s*(-?\d+(?:\.\d+)?)\b/ig;while((j=M.exec(J))!==null)Y.push({field:j[1],op:"$gt",value:D(j[2]),span:{start:j.index,end:j.index+j[0].length}});let Q=/\b([a-z][\w\.]*)\s*(?:<|less\s+than|fewer\s+than)\s*(-?\d+(?:\.\d+)?)\b/ig;while((j=Q.exec(J))!==null)Y.push({field:j[1],op:"$lt",value:D(j[2]),span:{start:j.index,end:j.index+j[0].length}});let G=/\b([a-z][\w\.]*)\s*(?:=|equals|is)(?!\s+not)\s*"([^"]+)"\b/ig;while((j=G.exec(J))!==null)Y.push({field:j[1],op:"eq",value:j[2],span:{start:j.index,end:j.index+j[0].length}});let $=/\b([a-z][\w\.]*)\s*(?:=|equals|is)(?!\s+not)\s*([a-z0-9_\-\.]+)\b/ig;while((j=$.exec(J))!==null)Y.push({field:j[1],op:"eq",value:D(j[2]),span:{start:j.index,end:j.index+j[0].length}});return Y}function Uj(J){let Y=[],j,H=/\b([a-z][\w\.]*)\s+(on\s+or\s+after|on\s+or\s+before|after|before|on)\s+(?:"([^"]+)"|([0-9]{4}-[0-9]{2}-[0-9]{2}[T\d:._+\-Z]*))\b/ig;while((j=H.exec(J))!==null){let Z=j[1],M=j[2].toLowerCase().replace(/\s+/g," "),Q=j[3]||j[4],G="$gt";if(M==="before")G="$lt";else if(M==="on")G="eq";else if(M==="on or after")G="$gte";else if(M==="on or before")G="$lte";Y.push({field:Z,op:G,value:Q,span:{start:j.index,end:j.index+j[0].length}})}return Y}function Aj(J){let Y=[{re:/\b(?:order|sort|sorted)\s+by\s+([a-z][\w\.]*)\s*(asc|ascending|desc|descending)?\b/i,groups:{field:1,dir:2}},{re:/\b(?:order|sort|sorted)\s+(asc|ascending|desc|descending)\s+by\s+([a-z][\w\.]*)\b/i,groups:{dir:1,field:2}}];for(let j of Y){let H=J.match(j.re);if(H){let Z=(H[j.groups.dir]||"asc").toLowerCase(),M=/desc|descending/.test(Z)?"desc":"asc";return{field:H[j.groups.field],order:M}}}return null}function Mj(J){let Y=J.match(/\blimit\s+(\d+)\b/i);return Y?Number(Y[1]):null}function D(J){let Y=Number(J);return Number.isFinite(Y)?Y:J}var Rj=(J)=>{return jj(J)};function w(J){if(!Array.isArray(J))return J;let Y=[],j=(H)=>{let Z=Array.isArray(H?._edgeResult)?H._edgeResult:null;if(Z&&Z.length)for(let M of Z)j(M);else Y.push(H)};for(let H of J)j(H);return Y}function Fj(J){let Y=[],j,H=/\b([a-z][\w\.]*)\s*(=|is|equals)\s*("[^"]+"|[A-Za-z0-9_\-.]+)\s+or\s+\1\s*(=|is|equals)\s*("[^"]+"|[A-Za-z0-9_\-.]+)\b/ig;while((j=H.exec(J))!==null){let Q={[j[1]]:b(j[3])},G={[j[1]]:b(j[5])};Y.push({left:Q,right:G,span:{start:j.index,end:j.index+j[0].length}})}let Z=/\b([a-z][\w\.]*)\s+(?:contains|containing)\s+("[^"]+"|[A-Za-z0-9_\-.]+)\s+or\s+\1\s+(?:contains|containing)\s+("[^"]+"|[A-Za-z0-9_\-.]+)\b/ig;while((j=Z.exec(J))!==null){let Q={[j[1]]:{$contains:b(j[2])}},G={[j[1]]:{$contains:b(j[3])}};Y.push({left:Q,right:G,span:{start:j.index,end:j.index+j[0].length}})}let M=/\b([a-z][\w\.]*)\s+starts\s+with\s+("[^"]+"|[A-Za-z0-9_\-]+)\s+or\s+\1\s+starts\s+with\s+("[^"]+"|[A-Za-z0-9_\-]+)\b/ig;while((j=M.exec(J))!==null){let Q=String(b(j[2])),G=String(b(j[3])),$={[j[1]]:{$regex:`^${Q}`}},B={[j[1]]:{$regex:`^${G}`}};Y.push({left:$,right:B,span:{start:j.index,end:j.index+j[0].length}})}return Y}function b(J){if(!J)return J;let Y=J.replace(/^"|"$/g,"");return D(Y)}function Qj(J){if(!J||typeof J!=="object")return J;let{$edge:Y,...j}=J,H=Y?e(Y):void 0,Z=Object.keys(j);if(Z.length>1){let M={};if(H)M.$edge=H;return M.$and=Z.map((Q)=>({[Q]:j[Q]})),M}return{...j,...Y?{$edge:H}:{}}}function e(J){if(!J||typeof J!=="object")return J;let{$edge:Y,...j}=J,H=Object.keys(j),Z=Y?e(Y):void 0;if(H.length>1){let M={};if(Z)M.$edge=Z;return M.$and=H.map((Q)=>({[Q]:j[Q]})),M}return{...j,...Z?{$edge:Z}:{}}}function $j(J){let j=/\bonly\s+([A-Z][a-zA-Z]+)s?\b/ig.exec(J);if(!j)return null;return{type:K(j[1]),span:{start:j.index,end:j.index+j[0].length}}}function Gj(J){let j=/\b(?:a|an)\s+([A-Z][a-zA-Z]+)s?\b/ig.exec(J);if(!j)return null;return{type:K(j[1]),span:{start:j.index,end:j.index+j[0].length}}}function Wj(J){if(/^(?:full[-\s]?text\s+search|text\s+search)\b/i.test(J))return null;let Y=J.match(/^([A-Z][a-zA-Z]+)s?\b/);if(!Y)return null;return{type:K(Y[1]),span:{start:0,end:Y[0].length}}}function Vj(J){let Y=J.split(/\bthen\b/ig).map((G)=>G.trim()).filter(Boolean),j=null,H=null,Z=null,M=null;for(let G of Y){let $=x(G),B=H?.type?"type":H?.role?"role":null,T=B?String(H[B]).toLowerCase():null,U=$.match(/\bdescendant[s]?\s+of\s+type\s+([A-Za-z][A-Za-z]+)s?\b/i),O=null,C="role",A=null,F=null,I=!1,L=$.match(/\b(?:that|this|those|their|its)\s+([A-Za-z][A-Za-z]+)\s*'s\s+descendant[s]?\b/i);if(!L)L=$.match(/\b(?:that|this|those|their|its)\s+([A-Za-z][A-Za-z]+)s?\s+descendant[s]?\b/i);if(L){let _=K(L[1]).toLowerCase();if(T&&_===T)I=!0,A=L.index,F=L.index+L[0].length}if(U)O=K(U[1]),A=U.index,F=U.index+U[0].length,C="type";else if(U=!I&&$.match(/\b(?:that|this|those|their|its|a|an)?\s*([A-Za-z][A-Za-z]+)s?(?:'s)?\s+descendant[s]?\b/i),U)O=K(U[1]),A=U.index,F=U.index+U[0].length;else if(U=!I&&$.match(/\bdescendant[s]?\s+(?:of\s+)?(?!named\b|called\b|with\b)([A-Za-z][A-Za-z]+)s?\b/i),U)O=K(U[1]),A=U.index,F=U.index+U[0].length;else if(U=$.match(/\bchild(?:ren)?\s+of\s+type\s+([A-Za-z][A-Za-z]+)s?\b/i),U)O=K(U[1]),A=U.index,F=U.index+U[0].length,C="type";else if(U=$.match(/\bchild(?:ren)?\s+(?:of\s+)?([A-Za-z][A-Za-z]+)s?\b/i),U)O=K(U[1]),A=U.index,F=U.index+U[0].length;else if(U=$.match(/\b(?:that|this|those|their|its)?\s*([A-Za-z][A-Za-z]+)s?(?:'s)?\s+child(?:ren)?\b/i),U)O=K(U[1]),A=U.index,F=U.index+U[0].length;else if(U=$.match(/\bgrandchild(?:ren)?\s+of\s+type\s+([A-Za-z][A-Za-z]+)s?\b/i),U)O=K(U[1]),A=U.index,F=U.index+U[0].length,C="type";else if(U=$.match(/\bgrandchild(?:ren)?\s+(?:of\s+)?([A-Za-z][A-Za-z]+)s?\b/i),U)O=K(U[1]),A=U.index,F=U.index+U[0].length;else if(U=$.match(/\b(?:that|this|those|their|its)?\s*([A-Za-z][A-Za-z]+)s?(?:'s)?\s+grandchild(?:ren)?\b/i),U)O=K(U[1]),A=U.index,F=U.index+U[0].length;let v=/\b(descendant|child|children|grandchild|grandchildren)\b/i.test($),W=null;if(O)W={[C]:O};else if(v)W={};else continue;let z=$.match(/\b(?:named|called)\s+"([^"]+)"|\b(?:named|called)\s+([A-Za-z0-9_\-]+)\b|\bwith\s+name\s+"([^"]+)"|\bwith\s+name\s+([A-Za-z0-9_\-]+)\b/i);if(z){let _=z[1]||z[2]||z[3]||z[4];W.name=_;let P=z.index,N=z[0].length;if(A===null||P<A)A=P;let X=P+N;if(F===null||X>F)F=X}for(let _ of p($)){if(_.mode==="in"){let P=_.values??[_.value];W[_.field]={...W[_.field]||{},$in:P}}else W[_.field]={...W[_.field]||{},$contains:_.value};A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end)}for(let _ of u($))W[_.field]={...W[_.field]||{},$regex:`^${_.value}`},A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end);for(let _ of c($))W[_.field]={...W[_.field]||{},$regex:`${_.value}$`},A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end);for(let _ of a($))W[_.field]={...W[_.field]||{},$between:[_.min,_.max]},A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end);for(let _ of r($)){if(_.op==="eq")W[_.field]=_.value;else W[_.field]={...W[_.field]||{},[_.op]:_.value};A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end)}for(let _ of n($))W[_.field]={...W[_.field]||{},$not:{$eq:_.value}},A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end);for(let _ of s($))W[_.field]={...W[_.field]||{},$in:_.values},A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end);let q=m($);for(let _ of q)W[_.field]={...W[_.field]||{},$exists:!0},A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end);let g=$.replace(/\b(?:has|with|having)\s+[a-z][\w\.]*\s+exists\b/ig," ").replace(/\bwhose\s+[a-z][\w\.]*\s+exists\b/ig," ").replace(/\b([a-z][\w\.]*)\s+exists\b/ig," ").replace(/\b(?:whose\s+)?([a-z][\w\.]*)\s+starts\s+with\s+(?:"[^\"]+"|[A-Za-z0-9_\-]+)/ig," ");for(let _ of d($))W[_.field]={...W[_.field]||{},$like:_.value},A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end);for(let _ of l(g))W[_.field]=_.value,A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end);for(let _ of o($)){if(_.kind==="in")W.id={...W.id||{},$in:_.values};else if(_.kind==="eq")W.id=_.value;A=A==null?_.span.start:Math.min(A,_.span.start),F=F==null?_.span.end:Math.max(F,_.span.end)}if(!W||Object.keys(W).length===0)continue;if(!j)j=W,H=W,Z=Z??J.indexOf($)+(A??0),M=J.indexOf($)+(F??0);else{let _=H.type?"type":H.role?"role":null,P=_?String(H[_]).toLowerCase():null,N=W.type?"type":W.role?"role":null,X=N?String(W[N]).toLowerCase():null;if(!H.$edge||typeof H.$edge!=="object")H.$edge={};let R=H.$edge,f=R.type?"type":R.role?"role":null,Oj=f?String(R[f]).toLowerCase():null,y=(E)=>{let S={};for(let[h,t]of Object.entries(W)){if(h==="$edge")continue;if(E&&(h==="type"||h==="role"))continue;S[h]=t}return S};if(X&&P&&X===P)Object.assign(R,y(!0));else if(X){for(let E of["type","role"])delete R[E];Object.assign(R,y(!1))}else Object.assign(R,y(!1));H=H.$edge;let k=J.indexOf($);if(Z===null)Z=k+(A??0);M=k+(F??0)}}if(!j)return null;let Q=Z!=null&&M!=null?{start:Z,end:M}:void 0;return{edge:j,span:Q}}function K(J){if(!J)return J;if(/ies$/i.test(J))return J.replace(/ies$/i,"y");if(/ses$/i.test(J))return J.replace(/es$/i,"e");if(/s$/i.test(J))return J.replace(/s$/i,"");return J}function Bj(J){let Y={after:null,before:null,spans:[]},j=[{kind:"after",re:/\b(?:start(?:ing)?\s+)?after\s+(?:id\s+)?(?:"([^"]+)"|([A-Za-z0-9_\-]+))(?=\s|$)/ig},{kind:"before",re:/\b(?:before|until)\s+(?:id\s+)?(?:"([^"]+)"|([A-Za-z0-9_\-]+))(?=\s|$)/ig}];for(let H of j){let Z;while((Z=H.re.exec(J))!==null){let M=Z[1]||Z[2];if(H.kind==="after"&&!Y.after)Y.after=M;if(H.kind==="before"&&!Y.before)Y.before=M;Y.spans.push({start:Z.index,end:Z.index+Z[0].length})}}return Y}export{jj as withModule,Rj as init};
Binary file
package/dist/rx.min.js CHANGED
@@ -1 +1 @@
1
- function S(H={}){let q={},Y={};const A=H.maxSize||1048576,G=H.encode,K=H.decode,L=H.pako;function Z(C,E){if(_(E).forEach((Q)=>{if(!q[Q])q[Q]=[];if(!q[Q].includes(C))q[Q].push(C)}),JSON.stringify(q).length>A)T()}function X(C,E){_(E).forEach((Q)=>{if(q[Q]){if(q[Q]=q[Q].filter(($)=>$!==C),q[Q].length===0)delete q[Q]}})}function _(C){const E=[];if(typeof C==="string")for(let J=1;J<=C.length;J++)E.push(C.substring(0,J));else if(typeof C==="number")E.push(String(C));else if(typeof C==="object"&&C!==null)Object.keys(C).forEach((J)=>{E.push(J.toString());const Q=C[J];if(typeof Q==="string"||typeof Q==="number")E.push(`${J}:${Q}`)});return E}function T(){const C=Object.keys(q),E=Math.ceil(C.length/2),J={},Q={};C.slice(0,E).forEach(($)=>{J[$]=q[$]}),C.slice(E).forEach(($)=>{Q[$]=q[$]}),Y.fragment1=J,Y.fragment2=Q,q={}}function B(){for(let C of Object.values(Y))Object.assign(q,C);Y={}}function O(C){return q[C]||[]}function V(C){return Object.keys(q).filter((E)=>E.startsWith(C)).flatMap((E)=>q[E])}function D(){if(!G||!L)throw new Error("Radix: encode y pako deben estar en options");const C={index:q,fragmentedIndexes:Y};return L.deflate(G(C))}function U(C){if(!K||!L)throw new Error("Radix: decode y pako deben estar en options");const E=L.inflate(new Uint8Array(C)),J=K(E);q=J.index||{},Y=J.fragmentedIndexes||{}}function W(){if(JSON.stringify(q).length>A)throw new Error("Index too large");if(!q||typeof q!=="object")q={}}return{upsert:Z,remove:X,extractPrefixes:_,splitIndex:T,mergeFragments:B,searchByPrefix:O,searchAllByPrefix:V,serialize:D,deserialize:U,validateIndex:W}}function z(H){const{worker:q,encode:Y,decode:A,pako:G}=H,K=S({maxSize:H.maxSize||1048576,encode:Y,decode:A,pako:G}),L=H.indexFileName||"graph_radix_index.msgpack",X=((U,W)=>{let C;return(...E)=>{clearTimeout(C),C=setTimeout(()=>U.apply(null,E),W)}})(()=>T(),200);async function _(){try{const U=await new Promise((W,C)=>{const E=(J)=>{if(J.data.type==="loaded"&&J.data.name===L)q.removeEventListener("message",E),W(new Uint8Array(J.data.data));else if(J.data.type==="error")q.removeEventListener("message",E),C(new Error(J.data.message||"Error loading the Radix index"))};q.addEventListener("message",E),q.postMessage({type:"load",name:L})});if(U.byteLength>0)K.deserialize(U)}catch{}}async function T(){try{const U=K.serialize();await new Promise((W,C)=>{const E=(J)=>{if(J.data.type==="saved"&&J.data.name===L)q.removeEventListener("message",E),W();else if(J.data.type==="error")q.removeEventListener("message",E),C(new Error(J.data.message||"Error saving the Radix index"))};q.addEventListener("message",E),q.postMessage({type:"save",name:L,content:U})})}catch{}}async function B(){try{K.validateIndex(),(typeof H.graph?.getAllNodes==="function"?await H.graph.getAllNodes():Object.values(H.graph.nodes)).forEach((W)=>{K.upsert(W.id,W.value)})}catch{}}async function O(U,W,C="insert"){switch(C){case"insert":K.upsert(U,W);break;case"remove":K.remove(U,W);break}X()}function V(U){return K.searchAllByPrefix(U)}return{ready:_().then(B),updateIndex:O,searchByPrefix:V}}function R(H){const q=z(H),Y=H.put;H.put=async function(K,L){const Z=L?this.graph.get(L):null,X=await Y.call(this,K,L);if(Z)await q.updateIndex(X,Z.value,"remove");return await q.updateIndex(X,K,"insert"),X};const A=H.remove;H.remove=async function(K){const L=this.graph.get(K);if(await A.call(this,K),L)await q.updateIndex(K,L.value,"remove")};const G=H.map;return H.map=async function(...K){const L=await G.call(this,...K),Z=K.find((X)=>typeof X==="object");if(Z?.query?.id?.$startsWith){const X=Z.query.id.$startsWith,_=q.searchByPrefix(X);return L.filter((T)=>_.includes(T.id))}return L},H.searchByPrefix=async function(K){return q.searchByPrefix(K).map((Z)=>this.graph.get(Z))},H}var w=(H)=>{return console.log("\uD83C\uDF33 RadixIndexer module loaded."),R(H)};export{R as withModule,w as init,z as RadixIndexer};
1
+ function v(r={}){let e={},l={},x=r.maxSize||1048576,h=r.encode,s=r.decode,o=r.pako;function u(t,n){if(p(n).forEach((i)=>{if(!e[i])e[i]=[];if(!e[i].includes(t))e[i].push(t)}),JSON.stringify(e).length>x)y()}function f(t,n){p(n).forEach((i)=>{if(e[i]){if(e[i]=e[i].filter((m)=>m!==t),e[i].length===0)delete e[i]}})}function p(t){let n=[];if(typeof t==="string")for(let a=1;a<=t.length;a++)n.push(t.substring(0,a));else if(typeof t==="number")n.push(String(t));else if(typeof t==="object"&&t!==null)Object.keys(t).forEach((a)=>{n.push(a.toString());let i=t[a];if(typeof i==="string"||typeof i==="number")n.push(`${a}:${i}`)});return n}function y(){let t=Object.keys(e),n=Math.ceil(t.length/2),a={},i={};t.slice(0,n).forEach((m)=>{a[m]=e[m]}),t.slice(n).forEach((m)=>{i[m]=e[m]}),l.fragment1=a,l.fragment2=i,e={}}function g(){for(let t of Object.values(l))Object.assign(e,t);l={}}function w(t){return e[t]||[]}function I(t){return Object.keys(e).filter((n)=>n.startsWith(t)).flatMap((n)=>e[n])}function E(){if(!h||!o)throw Error("Radix: encode y pako deben estar en options");let t={index:e,fragmentedIndexes:l};return o.deflate(h(t))}function c(t){if(!s||!o)throw Error("Radix: decode y pako deben estar en options");let n=o.inflate(new Uint8Array(t)),a=s(n);e=a.index||{},l=a.fragmentedIndexes||{}}function d(){if(JSON.stringify(e).length>x)throw Error("Index too large");if(!e||typeof e!=="object")e={}}return{upsert:u,remove:f,extractPrefixes:p,splitIndex:y,mergeFragments:g,searchByPrefix:w,searchAllByPrefix:I,serialize:E,deserialize:c,validateIndex:d}}function P(r){let{worker:e,encode:l,decode:x,pako:h}=r,s=v({maxSize:r.maxSize||1048576,encode:l,decode:x,pako:h}),o=r.indexFileName||"graph_radix_index.msgpack",f=((c,d)=>{let t;return(...n)=>{clearTimeout(t),t=setTimeout(()=>c.apply(null,n),d)}})(()=>y(),200);async function p(){try{let c=await new Promise((d,t)=>{let n=(a)=>{if(a.data.type==="loaded"&&a.data.name===o)e.removeEventListener("message",n),d(new Uint8Array(a.data.data));else if(a.data.type==="error")e.removeEventListener("message",n),t(Error(a.data.message||"Error loading the Radix index"))};e.addEventListener("message",n),e.postMessage({type:"load",name:o})});if(c.byteLength>0)s.deserialize(c)}catch{}}async function y(){try{let c=s.serialize();await new Promise((d,t)=>{let n=(a)=>{if(a.data.type==="saved"&&a.data.name===o)e.removeEventListener("message",n),d();else if(a.data.type==="error")e.removeEventListener("message",n),t(Error(a.data.message||"Error saving the Radix index"))};e.addEventListener("message",n),e.postMessage({type:"save",name:o,content:c})})}catch{}}async function g(){try{s.validateIndex(),(typeof r.graph?.getAllNodes==="function"?await r.graph.getAllNodes():Object.values(r.graph.nodes)).forEach((d)=>{s.upsert(d.id,d.value)})}catch{}}async function w(c,d,t="insert"){switch(t){case"insert":s.upsert(c,d);break;case"remove":s.remove(c,d);break}f()}function I(c){return s.searchAllByPrefix(c)}return{ready:p().then(g),updateIndex:w,searchByPrefix:I}}function j(r){let e=P(r),l=r.put;r.put=async function(s,o){let u=o?this.graph.get(o):null,f=await l.call(this,s,o);if(u)await e.updateIndex(f,u.value,"remove");return await e.updateIndex(f,s,"insert"),f};let x=r.remove;r.remove=async function(s){let o=this.graph.get(s);if(await x.call(this,s),o)await e.updateIndex(s,o.value,"remove")};let h=r.map;return r.map=async function(...s){let o=await h.call(this,...s),u=s.find((f)=>typeof f==="object");if(u?.query?.id?.$startsWith){let f=u.query.id.$startsWith,p=e.searchByPrefix(f);return o.filter((y)=>p.includes(y.id))}return o},r.searchByPrefix=async function(s){return e.searchByPrefix(s).map((u)=>this.graph.get(u))},r}var R=(r)=>{return j(r)};export{j as withModule,R as init,P as RadixIndexer};
package/dist/rx.min.js.gz CHANGED
Binary file
@@ -1 +1 @@
1
- async function Z(k,P){console.info("\uD83D\uDEE1\uFE0F [SM-ACLs] Starting ACL module...");try{const x=await X(k,P);if(x)try{Object.defineProperty(k.sm,"acls",{value:x,writable:!0,enumerable:!1,configurable:!0}),console.info("\uD83D\uDEE1\uFE0F [SM-ACLs] Module initialized and attached to gdb.sm.acls.")}catch(D){throw console.error("\u274C [SM-ACLs] Failed to attach: gdb.sm not extensible.",D.message),new Error("\u274C [SM-ACLs] Cannot attach ACL module to gdb.sm. Ensure gdb.sm is extensible.")}else console.warn("\u26A0\uFE0F [SM-ACLs] Module not activated (options missing).")}catch(x){throw console.error("\u274C [SM-ACLs] Failed to start ACL module.",x),x}}var X=async(k,P)=>{if(!P)return null;const x="owner",D="collaborators",J=()=>{const f=k.sm.getActiveEthAddress();if(!f)throw new Error("\u274C [SM-ACLs] Active user session required.");return f},Q=(f)=>new Error(`\u274C [SM-ACLs] Only the owner can ${f}.`),T=async(f,h)=>{const $=[];for(let j of f){const{signer:z,type:F,id:G}=j;if(!z||!G){$.push(j);continue}const K=h.get(G),{[x]:H,[D]:V={}}=K?.value||{};if(F==="put"){if(!K||z===H||V[z]==="write")$.push(j);else console.warn(`\u26A0\uFE0F [SM-ACLs] DENIED (put): ${z} \u2192 ${G}`);continue}if(F==="remove"){if(!K||H===void 0||z===H)$.push(j);else console.warn(`\u26A0\uFE0F [SM-ACLs] DENIED (remove): ${z} \u2192 ${G}`);continue}$.push(j)}return $};return k.use(T),{async set(f,h){const $=J(),{result:j}=await k.get(h);if(j){const{[x]:z,[D]:F={}}=j.value;if($!==z&&F[$]!=="write")throw new Error(`\uD83D\uDEE1\uFE0F [SM-ACLs] Write denied for node ${h}.`);const{[x]:G,[D]:K,...H}=f;return k.put({...j.value,...H},h)}return k.put({...f,[x]:$,[D]:{}},h)},async grant(f,h,$){const j=J();if(!["read","write"].includes($))throw new Error("\uD83D\uDEE1\uFE0F [SM-ACLs] Permission must be 'read' or 'write'.");const{result:z}=await k.get(f);if(!z)throw new Error(`\u274C [SM-ACLs] Node ${f} not found.`);if(z.value[x]!==j)throw Q("grant permissions");const F={...z.value[D]??{},[h]:$};await k.put({...z.value,[D]:F},f)},async revoke(f,h){const $=J(),{result:j}=await k.get(f);if(!j)throw new Error(`\u274C [SM-ACLs] Node ${f} not found.`);if(j.value[x]!==$)throw Q("revoke permissions");const{[h]:z,...F}=j.value[D]??{};await k.put({...j.value,[D]:F},f)},async delete(f){const h=J(),{result:$}=await k.get(f);if(!$)return;if($.value[x]!==h)throw Q("delete this node");await k.remove(f)},async getPermissions(f){const{result:h}=await k.get(f);if(!h||h.value[x]===void 0)return null;return{owner:h.value[x],collaborators:h.value[D]??{}}}}};export{Z as start,X as createAclModule};
1
+ var _=async(D,T)=>{if(!T)return null;let F="owner",H="collaborators",P=()=>{let h=D.sm.getActiveEthAddress();if(!h)throw Error(" [SM-ACLs] Active user session required.");return h},V=(h)=>Error(`❌ [SM-ACLs] Only the owner can ${h}.`),Y=async(h,k)=>{let x=[];for(let z of h){let{signer:G,type:J,id:X}=z;if(!G||!X){x.push(z);continue}let Q=k.get(X),{[F]:K,[H]:Z={}}=Q?.value||{};if(J==="put"){if(!Q||G===K||Z[G]==="write")x.push(z);continue}if(J==="remove"){if(!Q||K===void 0||G===K)x.push(z);continue}x.push(z)}return x};return D.use(Y),{async set(h,k){let x=P(),{result:z}=await D.get(k);if(z){let{[F]:G,[H]:J={}}=z.value;if(x!==G&&J[x]!=="write")throw Error(`\uD83D\uDEE1 [SM-ACLs] Write denied for node ${k}.`);let{[F]:X,[H]:Q,...K}=h;return D.put({...z.value,...K},k)}return D.put({...h,[F]:x,[H]:{}},k)},async grant(h,k,x){let z=P();if(!["read","write"].includes(x))throw Error("\uD83D\uDEE1 [SM-ACLs] Permission must be 'read' or 'write'.");let{result:G}=await D.get(h);if(!G)throw Error(`❌ [SM-ACLs] Node ${h} not found.`);if(G.value[F]!==z)throw V("grant permissions");let J={...G.value[H]??{},[k]:x};await D.put({...G.value,[H]:J},h)},async revoke(h,k){let x=P(),{result:z}=await D.get(h);if(!z)throw Error(`❌ [SM-ACLs] Node ${h} not found.`);if(z.value[F]!==x)throw V("revoke permissions");let{[k]:G,...J}=z.value[H]??{};await D.put({...z.value,[H]:J},h)},async delete(h){let k=P(),{result:x}=await D.get(h);if(!x)return;if(x.value[F]!==k)throw V("delete this node");await D.remove(h)},async getPermissions(h){let{result:k}=await D.get(h);if(!k||k.value[F]===void 0)return null;return{owner:k.value[F],collaborators:k.value[H]??{}}}}};async function f(D,T){try{let F=await _(D,T);if(F)try{Object.defineProperty(D.sm,"acls",{value:F,writable:!0,enumerable:!1,configurable:!0})}catch(H){throw Error("❌ [SM-ACLs] Cannot attach ACL module to gdb.sm. Ensure gdb.sm is extensible.")}}catch(F){throw F}}export{f as start,_ as createAclModule};
Binary file
@@ -1 +1 @@
1
- var h,z=[],x,w=!1,B=async()=>{for(let k of z)try{const{results:T=[]}=await h.map({});if(!T.length)continue;await Promise.all(T.map(async({id:j,timestamp:f})=>{const[,q]=j.split(":");if(!k.offsetTimestamp||f.physical<=Date.now()-k.offsetTimestamp)await D(k.then,q)}))}catch(T){console.error("\u274C GOVERNANCE ERROR: Failed to process rule.",{rule:k,error:T.message})}},D=async(k,T)=>{if(!k.assignRole)return;const{result:j}=await h.get(`user:${T}`),f=j?.value?.role;if(!f||f==="superadmin"||f===k.assignRole)return;await h.sm.executeWithPermission("assignRole"),await h.sm.assignRole(T,k.assignRole)},F=()=>{if(w)return;console.log("\u2705 GOVERNANCE ENGINE: Activated. Starting periodic checks."),x=setInterval(B,4000),w=!0},H=()=>{if(!w)return;clearInterval(x),x=null,w=!1,console.log("\uD83D\uDED1 GOVERNANCE ENGINE: Deactivated. Pausing checks.")},K=(k,{governanceRules:T,superAdmins:j}={})=>{if(!k||!T)return console.error("\u274C GOVERNANCE: Initialization failed: gdb instance and rules are required.");h=k,z=T,k.sm.setGovernanceStateChangeCallback(async({isActive:f,activeAddress:q})=>{if(f&&q&&j.includes(q))await h.sm.executeWithPermission("assignRole"),F();else H()})};export{K as start};
1
+ var w,L=[],K,J=!1,M=async()=>{for(let h of L)try{let{results:k=[]}=await w.map({});if(!k.length)continue;await Promise.all(k.map(async({id:F,timestamp:q})=>{let[,H]=F.split(":");if(!h.offsetTimestamp||q.physical<=Date.now()-h.offsetTimestamp)await O(h.then,H)}))}catch(k){}},O=async(h,k)=>{if(!h.assignRole)return;let{result:F}=await w.get(`user:${k}`),q=F?.value?.role;if(!q||q==="superadmin"||q===h.assignRole)return;await w.sm.executeWithPermission("assignRole"),await w.sm.assignRole(k,h.assignRole)},P=()=>{if(J)return;K=setInterval(M,4000),J=!0},Q=()=>{if(!J)return;clearInterval(K),K=null,J=!1},T=(h,{governanceRules:k,superAdmins:F}={})=>{if(!h||!k)return;w=h,L=k,h.sm.setGovernanceStateChangeCallback(async({isActive:q,activeAddress:H})=>{if(q&&H&&F.includes(H))await w.sm.executeWithPermission("assignRole"),P();else Q()})};export{T as start};
Binary file