@kitelev/exocortex-cli 15.14.0 → 15.14.1

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.
Files changed (2) hide show
  1. package/dist/index.js +3 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // @kitelev/exocortex-cli v15.14.0
2
+ // @kitelev/exocortex-cli v15.14.1
3
3
  // CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more
4
4
  // License: MIT
5
5
 
@@ -257,7 +257,7 @@ Expecting `+ml.join(", ")+", got '"+(this.terminals_[Ze]||Ze)+"'":lp="Parse erro
257
257
  `;)n++;continue}if(e[n]==="{"){i++,n++;continue}if(e[n]==="}"){if(i--,i===0){let s=e.substring(t,n+1);return{content:s,length:s.length}}n++;continue}n++}if(i>0)throw new ps(`Unclosed LATERAL block at position ${t}`);return null}transformLateral(e){let t=e.indexOf("{");if(t===-1)throw new ps("LATERAL expression missing opening brace");let n=e.substring(t+1,e.length-1).trim();if(!n.toUpperCase().trim().startsWith("SELECT"))throw new ps("LATERAL block must contain a SELECT subquery");let a=n.toUpperCase().indexOf("SELECT")+6;for(;a<n.length&&/\s/.test(n[a]);)a++;let c=n.substring(a).toUpperCase();return c.startsWith("DISTINCT")?a+=8:c.startsWith("REDUCED")&&(a+=7),`{ ${n.substring(0,a)+` ?${r.LATERAL_MARKER}`+n.substring(a)} }`}isWordBoundary(e,t,n){let i=t>0?e[t-1]:"",s=t===0||!/[a-zA-Z0-9_]/.test(i),a=t+n<e.length?e[t+n]:"",c=t+n>=e.length||!/[a-zA-Z0-9_]/.test(a);return s&&c}};to.LateralTransformer=zf;zf.LATERAL_MARKER="__LATERAL_JOIN__";var ps=class extends Error{static{o(this,"LateralTransformerError")}constructor(e){super(`LATERAL transformation error: ${e}`),this.name="LateralTransformerError"}};to.LateralTransformerError=ps});var Cb=_(ms=>{"use strict";Object.defineProperty(ms,"__esModule",{value:!0});ms.PrefixStarTransformerError=ms.PrefixStarTransformer=ms.WellKnownPrefixResolver=void 0;var Yf=class{static{o(this,"WellKnownPrefixResolver")}constructor(){this.wellKnownPrefixes=new Map;let e=new Map;e.set("schema","http://schema.org/"),this.wellKnownPrefixes.set("http://schema.org/",e);let t=new Map;t.set("foaf","http://xmlns.com/foaf/0.1/"),this.wellKnownPrefixes.set("http://xmlns.com/foaf/0.1/",t);let n=new Map;n.set("dc","http://purl.org/dc/elements/1.1/"),n.set("dcterms","http://purl.org/dc/terms/"),this.wellKnownPrefixes.set("http://purl.org/dc/elements/1.1/",n),this.wellKnownPrefixes.set("http://purl.org/dc/terms/",n);let i=new Map;i.set("rdf","http://www.w3.org/1999/02/22-rdf-syntax-ns#"),i.set("rdfs","http://www.w3.org/2000/01/rdf-schema#"),this.wellKnownPrefixes.set("http://www.w3.org/1999/02/22-rdf-syntax-ns#",i),this.wellKnownPrefixes.set("http://www.w3.org/2000/01/rdf-schema#",i);let s=new Map;s.set("owl","http://www.w3.org/2002/07/owl#"),this.wellKnownPrefixes.set("http://www.w3.org/2002/07/owl#",s);let a=new Map;a.set("xsd","http://www.w3.org/2001/XMLSchema#"),this.wellKnownPrefixes.set("http://www.w3.org/2001/XMLSchema#",a);let c=new Map;c.set("skos","http://www.w3.org/2004/02/skos/core#"),this.wellKnownPrefixes.set("http://www.w3.org/2004/02/skos/core#",c);let u=new Map;u.set("prov","http://www.w3.org/ns/prov#"),this.wellKnownPrefixes.set("http://www.w3.org/ns/prov#",u);let l=new Map;l.set("geo","http://www.w3.org/2003/01/geo/wgs84_pos#"),this.wellKnownPrefixes.set("http://www.w3.org/2003/01/geo/wgs84_pos#",l);let f=new Map;f.set("dcat","http://www.w3.org/ns/dcat#"),this.wellKnownPrefixes.set("http://www.w3.org/ns/dcat#",f)}async resolve(e){let t=e.endsWith("#")||e.endsWith("/")?e:e+(e.includes("#")?"":"/"),n=this.wellKnownPrefixes.get(t);if(n)return n;let i=t.slice(0,-1),s=this.wellKnownPrefixes.get(i);return s||new Map}addVocabulary(e,t){this.wellKnownPrefixes.set(e,t)}};ms.WellKnownPrefixResolver=Yf;var W0=class{static{o(this,"PrefixStarTransformer")}constructor(e){this.resolver=e??new Yf}async transform(e){let t=this.findPrefixStarDeclarations(e);if(t.length===0)return e;let n=[],i=[];for(let a of t)try{let c=await this.resolver.resolve(a.uri);for(let[u,l]of c)n.push(`PREFIX ${u}: <${l}>`);if(c.size===0){let u=this.extractPrefixFromUri(a.uri);u&&n.push(`PREFIX ${u}: <${a.uri}>`)}}catch(c){let u=c instanceof Error?c.message:String(c);i.push(`Failed to resolve vocabulary ${a.uri}: ${u}`)}if(n.length===0&&i.length>0)throw new ro(i.join("; "));let s=e;for(let a=t.length-1;a>=0;a--){let c=t[a];s=s.substring(0,c.startPos)+s.substring(c.endPos)}return n.length>0&&(s=n.join(`
258
258
  `)+`
259
259
  `+s.trimStart()),s}findPrefixStarDeclarations(e){let t=[],n=e.toUpperCase(),i=0;for(;i<e.length;){if(e[i]==="'"||e[i]==='"'){let s=e[i];for(i++;i<e.length&&e[i]!==s;)e[i]==="\\"&&i++,i++;i++;continue}if(n.substring(i,i+6)==="PREFIX"){let s=i;for(i+=6;i<e.length&&/\s/.test(e[i]);)i++;if(e[i]==="*"){for(i++;i<e.length&&/\s/.test(e[i]);)i++;if(e[i]==="<"){i++;let a=i;for(;i<e.length&&e[i]!==">";)i++;if(e[i]===">"){let c=e.substring(a,i);i++;let u=this.findDeclarationEnd(e,i);t.push({uri:c,startPos:s,endPos:u}),i=u;continue}else throw new ro(`Unclosed IRI in PREFIX* declaration at position ${a}`)}else throw new ro(`Expected IRI after PREFIX* at position ${i}`)}else continue}i++}return t}findDeclarationEnd(e,t){let n=t;for(;n<e.length;){let i=e[n];if(i===`
260
- `)return n+1;let s=e.substring(n).toUpperCase();if(s.startsWith("PREFIX")||s.startsWith("BASE")||s.startsWith("SELECT")||s.startsWith("CONSTRUCT")||s.startsWith("DESCRIBE")||s.startsWith("ASK"))return n;if(/\s/.test(i)){n++;continue}break}return n}extractPrefixFromUri(e){let t=e.replace(/^https?:\/\//,"");t=t.replace(/\/$/,"").replace(/#$/,"");let n=t.split(/[/.#]+/).filter(Boolean);if(n.length===0)return null;let i=n[n.length-1];return/^(ontology|vocab|schema|ns|core)$/i.test(i)&&n.length>1?n[n.length-2].toLowerCase():i.toLowerCase().replace(/[^a-z0-9]/g,"")}};ms.PrefixStarTransformer=W0;var ro=class extends Error{static{o(this,"PrefixStarTransformerError")}constructor(e){super(`PREFIX* transformation error: ${e}`),this.name="PrefixStarTransformerError"}};ms.PrefixStarTransformerError=ro});var H0=_(io=>{"use strict";Object.defineProperty(io,"__esModule",{value:!0});io.DescribeOptionsTransformer=io.DescribeOptionsTransformerError=void 0;var Qf=class extends Error{static{o(this,"DescribeOptionsTransformerError")}constructor(e){super(e),this.name="DescribeOptionsTransformerError"}};io.DescribeOptionsTransformerError=Qf;var no=class r{static{o(this,"DescribeOptionsTransformer")}transform(e){if(!r.DESCRIBE_QUERY_PATTERN.test(e))return{query:e};let t=e,n={},i=!1,s=r.DEPTH_PATTERN.exec(e);if(s){let a=parseInt(s[1],10);if(a<0)throw new Qf(`DESCRIBE DEPTH must be a non-negative integer, got: ${a}`);n.depth=a,i=!0,r.DEPTH_PATTERN.lastIndex=0,t=t.replace(r.DEPTH_PATTERN,"")}return r.DEPTH_PATTERN.lastIndex=0,r.SYMMETRIC_PATTERN.test(e)&&(n.symmetric=!0,i=!0,r.SYMMETRIC_PATTERN.lastIndex=0,t=t.replace(r.SYMMETRIC_PATTERN,"")),r.SYMMETRIC_PATTERN.lastIndex=0,t=t.replace(/\s{2,}/g," ").trim(),{query:t,options:i?n:void 0}}hasDescribeOptions(e){let t=r.DEPTH_PATTERN.test(e);r.DEPTH_PATTERN.lastIndex=0;let n=r.SYMMETRIC_PATTERN.test(e);return r.SYMMETRIC_PATTERN.lastIndex=0,t||n}};io.DescribeOptionsTransformer=no;no.DEPTH_PATTERN=/\bDEPTH\s+(\d+)/gi;no.SYMMETRIC_PATTERN=/\bSYMMETRIC\b/gi;no.DESCRIBE_QUERY_PATTERN=/\bDESCRIBE\b/i});var Ib=_(so=>{"use strict";Object.defineProperty(so,"__esModule",{value:!0});so.DirectionalLangTagTransformerError=so.DirectionalLangTagTransformer=void 0;var Kf=class r{static{o(this,"DirectionalLangTagTransformer")}constructor(){this.directionMappings=new Map}transform(e){return this.directionMappings.clear(),e.replace(r.DIRECTIONAL_TAG_REGEX,(t,n,i,s,a)=>{let c=s.toLowerCase();return this.directionMappings.set(c,a),`${n}${i}${n}@${s}`})}getDirection(e){return this.directionMappings.get(e.toLowerCase())}getAllMappings(){return new Map(this.directionMappings)}hasDirectionalTags(e){return r.DIRECTIONAL_TAG_REGEX.lastIndex=0,r.DIRECTIONAL_TAG_REGEX.test(e)}clearMappings(){this.directionMappings.clear()}};so.DirectionalLangTagTransformer=Kf;Kf.DIRECTIONAL_TAG_REGEX=/(["'])((?:[^\\]|\\.)*?)\1@([a-zA-Z]+(?:-[a-zA-Z0-9]+)*)--(ltr|rtl)/g;var z0=class extends Error{static{o(this,"DirectionalLangTagTransformerError")}constructor(e){super(`Directional language tag transformation error: ${e}`),this.name="DirectionalLangTagTransformerError"}};so.DirectionalLangTagTransformerError=z0});var Ob=_(oo=>{"use strict";Object.defineProperty(oo,"__esModule",{value:!0});oo.TripleTermTransformerError=oo.TripleTermTransformer=void 0;var Y0=class{static{o(this,"TripleTermTransformer")}transform(e){let t=e,n,i=0,s=100;do if(n=t,t=this.transformSinglePass(t),i++,i>s)throw new ao("Too many nested triple terms (max 100 iterations)");while(t!==n);return t}hasTripleTermSyntax(e){return this.findTripleTermPositions(e).length>0}transformSinglePass(e){let t=this.findTripleTermPositions(e);if(t.length===0)return e;let n=e;for(let i=t.length-1;i>=0;i--){let s=t[i],a=this.extractTripleTerm(n,s);if(a){let c=this.convertToStandardSyntax(a.content);n=n.substring(0,s)+c+n.substring(s+a.length)}}return n}findTripleTermPositions(e){let t=[],n=0;for(;n<e.length;){if(e[n]==="'"){n=this.skipStringLiteral(e,n,"'");continue}if(e[n]==='"'){n=this.skipStringLiteral(e,n,'"');continue}if(e.substring(n,n+2)==="<<"&&this.isParenthesizedTripleTerm(e,n)){t.push(n),n+=2;continue}n++}return t}skipStringLiteral(e,t,n){let i=n.repeat(3);if(e.substring(t,t+3)===i){for(t+=3;t<e.length;){if(e.substring(t,t+3)===i)return t+3;e[t]==="\\"&&t++,t++}return t}for(t++;t<e.length&&e[t]!==n;)e[t]==="\\"&&t++,t++;return t+1}isParenthesizedTripleTerm(e,t){let n=t+2;for(;n<e.length&&/\s/.test(e[n]);)n++;return e[n]==="("}extractTripleTerm(e,t){let n=t+2;for(;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]!=="(")return null;n++;let i=1;for(;n<e.length&&i>0;){if(e[n]==="'"||e[n]==='"'){n=this.skipStringLiteral(e,n,e[n]);continue}if(e.substring(n,n+2)==="<<"&&this.isParenthesizedTripleTerm(e,n)){for(n+=2;n<e.length&&/\s/.test(e[n]);)n++;e[n]==="("&&(i++,n++);continue}if(e.substring(n,n+2)==="<<"){n+=2;let s=1;for(;n<e.length&&s>0;){if(e[n]==="'"||e[n]==='"'){n=this.skipStringLiteral(e,n,e[n]);continue}if(e.substring(n,n+2)==="<<"){s++,n+=2;continue}if(e.substring(n,n+2)===">>"){s--,n+=2;continue}n++}continue}if(e[n]==="("){i++,n++;continue}if(e[n]===")"){let s=n+1;for(;s<e.length&&/\s/.test(e[s]);)s++;if(e.substring(s,s+2)===">>"){if(i--,i===0){let a=e.substring(t,s+2);return{content:a,length:a.length}}n=s+2;continue}n++;continue}n++}if(i>0)throw new ao(`Unclosed triple term at position ${t}: missing )>>`);return null}convertToStandardSyntax(e){let t=e.match(/^<<\s*\(\s*([\s\S]*?)\s*\)\s*>>$/);if(!t)throw new ao(`Invalid triple term syntax: ${e.substring(0,50)}...`);return`<< ${t[1]} >>`}};oo.TripleTermTransformer=Y0;var ao=class extends Error{static{o(this,"TripleTermTransformerError")}constructor(e){super(`Triple term transformation error: ${e}`),this.name="TripleTermTransformerError"}};oo.TripleTermTransformerError=ao});var Fb=_(mn=>{"use strict";var NN=mn&&mn.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:o(function(){return e[t]},"get")}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),LN=mn&&mn.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),MN=mn&&mn.__importStar||(function(){var r=o(function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[n.length]=i);return n},r(e)},"ownKeys");return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),i=0;i<n.length;i++)n[i]!=="default"&&NN(t,e,n[i]);return LN(t,e),t}})();Object.defineProperty(mn,"__esModule",{value:!0});mn.SPARQLParser=mn.SPARQLParseError=void 0;var Pb=MN(xb()),Q0=q0(),K0=G0(),Db=Cb(),X0=H0(),kN=Ib(),J0=Ob(),Nt=class extends Error{static{o(this,"SPARQLParseError")}constructor(e,t,n,i){super(e,i?{cause:i}:void 0),this.name="SPARQLParseError",this.line=t,this.column=n}};mn.SPARQLParseError=Nt;var Z0=class{static{o(this,"SPARQLParser")}constructor(e){this.lastDirectionMappings=new Map,this.parser=new Pb.Parser({sparqlStar:!0}),this.generator=new Pb.Generator({sparqlStar:!0}),this.caseWhenTransformer=new Q0.CaseWhenTransformer,this.lateralTransformer=new K0.LateralTransformer,this.prefixStarTransformer=new Db.PrefixStarTransformer(e?.vocabularyResolver),this.describeOptionsTransformer=new X0.DescribeOptionsTransformer,this.directionalLangTagTransformer=new kN.DirectionalLangTagTransformer,this.tripleTermTransformer=new J0.TripleTermTransformer}parse(e){try{let t=this.describeOptionsTransformer.transform(e);this.lastDescribeOptions=t.options;let n=t.query;n=this.directionalLangTagTransformer.transform(n),this.lastDirectionMappings=this.directionalLangTagTransformer.getAllMappings(),n=this.lateralTransformer.transform(n),n=this.caseWhenTransformer.transform(n),n=this.tripleTermTransformer.transform(n);let i=this.parser.parse(n);return this.validateQuery(i),this.lastDescribeOptions&&this.isDescribeQuery(i)&&(i.describeOptions=this.lastDescribeOptions),i}catch(t){if(t instanceof X0.DescribeOptionsTransformerError)throw new Nt(t.message);if(t instanceof K0.LateralTransformerError)throw new Nt(t.message);if(t instanceof Q0.CaseWhenTransformerError)throw new Nt(t.message);if(t instanceof J0.TripleTermTransformerError)throw new Nt(t.message);if(t instanceof Error){let n=t.message.match(/line (\d+), column (\d+)/),i=n?parseInt(n[1],10):void 0,s=n?parseInt(n[2],10):void 0;throw new Nt(`SPARQL syntax error: ${t.message}`,i,s,t)}throw t}}parseWithOptions(e){return{query:this.parse(e),describeOptions:this.lastDescribeOptions}}getLastDescribeOptions(){return this.lastDescribeOptions}async parseAsync(e){try{let t=this.describeOptionsTransformer.transform(e);this.lastDescribeOptions=t.options;let n=t.query;n=this.directionalLangTagTransformer.transform(n),this.lastDirectionMappings=this.directionalLangTagTransformer.getAllMappings(),n=await this.prefixStarTransformer.transform(n),n=this.lateralTransformer.transform(n),n=this.caseWhenTransformer.transform(n),n=this.tripleTermTransformer.transform(n);let i=this.parser.parse(n);return this.validateQuery(i),this.lastDescribeOptions&&this.isDescribeQuery(i)&&(i.describeOptions=this.lastDescribeOptions),i}catch(t){if(t instanceof X0.DescribeOptionsTransformerError)throw new Nt(t.message);if(t instanceof Db.PrefixStarTransformerError)throw new Nt(t.message);if(t instanceof K0.LateralTransformerError)throw new Nt(t.message);if(t instanceof Q0.CaseWhenTransformerError)throw new Nt(t.message);if(t instanceof J0.TripleTermTransformerError)throw new Nt(t.message);if(t instanceof Error){let n=t.message.match(/line (\d+), column (\d+)/),i=n?parseInt(n[1],10):void 0,s=n?parseInt(n[2],10):void 0;throw new Nt(`SPARQL syntax error: ${t.message}`,i,s,t)}throw t}}async parseAsyncWithOptions(e){return{query:await this.parseAsync(e),describeOptions:this.lastDescribeOptions}}hasPrefixStar(e){return/PREFIX\s*\*/i.test(e)}hasLateral(e){return this.lateralTransformer.hasLateral(e)}hasDescribeOptions(e){return this.describeOptionsTransformer.hasDescribeOptions(e)}hasDirectionalLangTags(e){return this.directionalLangTagTransformer.hasDirectionalTags(e)}hasTripleTermSyntax(e){return this.tripleTermTransformer.hasTripleTermSyntax(e)}getLastDirectionMappings(){return new Map(this.lastDirectionMappings)}getDirectionForLanguage(e){return this.lastDirectionMappings.get(e.toLowerCase())}toString(e){try{return this.generator.stringify(e)}catch(t){throw t instanceof Error?new Nt(`Failed to serialize SPARQL query: ${t.message}`,void 0,void 0,t):t}}getQueryType(e){if("queryType"in e&&e.type==="query")return e.queryType;throw new Nt("Query does not have a valid queryType property")}isSelectQuery(e){return"queryType"in e&&e.type==="query"&&e.queryType==="SELECT"}isConstructQuery(e){return"queryType"in e&&e.type==="query"&&e.queryType==="CONSTRUCT"}isAskQuery(e){return"queryType"in e&&e.type==="query"&&e.queryType==="ASK"}isDescribeQuery(e){return"queryType"in e&&e.type==="query"&&e.queryType==="DESCRIBE"}isUpdateQuery(e){return e.type==="update"}isInsertDataOperation(e){return"updateType"in e&&e.updateType==="insert"}isDeleteDataOperation(e){return"updateType"in e&&e.updateType==="delete"}validateQuery(e){if(!e||typeof e!="object")throw new Nt("Invalid query: not an object");if(e.type!=="query"&&e.type!=="update")throw new Nt(`Invalid type: expected "query" or "update", got "${e.type}"`);if(e.type==="query"){let t=["SELECT","CONSTRUCT","ASK","DESCRIBE"];if(!t.includes(e.queryType))throw new Nt(`Invalid query type: expected one of ${t.join(", ")}, got "${e.queryType}"`)}}};mn.SPARQLParser=Z0});var Nb=_(co=>{"use strict";Object.defineProperty(co,"__esModule",{value:!0});co.AlgebraTranslator=co.AlgebraTranslatorError=void 0;var Rb=G0(),me=class extends Error{static{o(this,"AlgebraTranslatorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="AlgebraTranslatorError"}};co.AlgebraTranslatorError=me;var ey=class{static{o(this,"AlgebraTranslator")}constructor(){this.directionMappings=new Map,this.aggregateCounter=0}setDirectionMappings(e){this.directionMappings=e}translate(e){if(e.type!=="query")throw new me("Only query operations are supported (not updates)");if(e.queryType==="SELECT")return this.translateSelect(e);if(e.queryType==="CONSTRUCT")return this.translateConstruct(e);if(e.queryType==="ASK")return this.translateAsk(e);if(e.queryType==="DESCRIBE")return this.translateDescribe(e);throw new me(`Query type ${e.queryType} not yet supported`)}translateSelect(e){let t;if(!e.where||e.where.length===0)throw new me("SELECT query must have WHERE clause");t=this.translateWhere(e.where),this.aggregateCounter=0;let n=new Map,i=this.extractAggregatesWithMapping(e.variables,n),s=this.extractGroupVariables(e.group);if((i.length>0||s.length>0)&&(t={type:"group",variables:s,aggregates:i,input:t}),e.variables&&e.variables.length>0){for(let c of e.variables){let u=c;if(u.expression&&u.variable){if(u.expression.type==="aggregate")continue;let l=this.transformExpressionWithAggregateVars(u.expression,n);t={type:"extend",variable:u.variable.value,expression:l,input:t}}}let a=e.variables.filter(c=>c.termType==="Variable"||c.variable).map(c=>c.termType==="Variable"?c.value:c.variable.value);a.length>0&&(t={type:"project",variables:a,input:t})}return e.distinct&&(t={type:"distinct",input:t}),e.reduced&&(t={type:"reduced",input:t}),e.order&&e.order.length>0&&(t={type:"orderby",comparators:e.order.map(a=>this.translateOrderComparator(a)),input:t}),(e.limit!==void 0||e.offset!==void 0)&&(t={type:"slice",limit:e.limit,offset:e.offset,input:t}),t}translateConstruct(e){let t=this.translateConstructTemplate(e.template??[]);if(!e.where||e.where.length===0)throw new me("CONSTRUCT query must have WHERE clause");let n=this.translateWhere(e.where);return{type:"construct",template:t,where:n}}translateConstructTemplate(e){return!e||!Array.isArray(e)?[]:e.map(t=>this.translateTriple(t))}translateAsk(e){return{type:"ask",where:e.where&&e.where.length>0?this.translateWhere(e.where):{type:"bgp",triples:[]}}}extractAggregatesWithMapping(e,t){if(!e)return[];let n=[];for(let i of e)!i.expression||!i.variable||(i.expression.type==="aggregate"?(n.push({variable:i.variable.value,expression:this.translateAggregateExpression(i.expression)}),t.set(i.expression,i.variable.value)):this.collectNestedAggregates(i.expression,n,t));return n}collectNestedAggregates(e,t,n){if(e){if(e.type==="aggregate"){let i=`__agg${this.aggregateCounter++}`;t.push({variable:i,expression:this.translateAggregateExpression(e)}),n.set(e,i)}else if(e.type==="operation"&&e.args)for(let i of e.args)this.collectNestedAggregates(i,t,n)}}transformExpressionWithAggregateVars(e,t){if(t.has(e))return{type:"variable",name:t.get(e)};if(e.type==="operation"&&e.args){let n=e.args.map(c=>this.transformExpressionWithAggregateVars(c,t)),i=["=","!=","<",">","<=",">="],s=["&&","||","!"],a=["+","-","*","/"];return i.includes(e.operator)?{type:"comparison",operator:e.operator,left:n[0],right:n[1]}:s.includes(e.operator)?{type:"logical",operator:e.operator,operands:n}:a.includes(e.operator)?{type:"arithmetic",operator:e.operator,left:n[0],right:n[1]}:{type:"function",function:e.operator,args:n}}return this.translateExpression(e)}extractGroupVariables(e){return e?e.filter(t=>t.expression&&t.expression.termType==="Variable").map(t=>t.expression.value):[]}translateAggregateExpression(e){let t=e.aggregation;if(typeof t=="string"){let n=t.toLowerCase();return["count","sum","avg","min","max","group_concat","sample"].includes(n)?{type:"aggregate",aggregation:n,expression:e.expression?this.translateExpression(e.expression):void 0,distinct:e.distinct||!1,separator:e.separator}:{type:"aggregate",aggregation:{type:"custom",iri:t},expression:e.expression?this.translateExpression(e.expression):void 0,distinct:e.distinct||!1,separator:e.separator}}if(t&&typeof t=="object"){let n;if(t.termType==="NamedNode"&&t.value)n=t.value;else if("value"in t)n=String(t.value);else throw new me(`Invalid custom aggregate: expected IRI but got ${JSON.stringify(t)}`);return{type:"aggregate",aggregation:{type:"custom",iri:n},expression:e.expression?this.translateExpression(e.expression):void 0,distinct:e.distinct||!1,separator:e.separator}}throw new me(`Unknown aggregate format: ${JSON.stringify(t)}`)}isLateralPattern(e){if(e.type==="query"&&this.isLateralSubquery(e))return!0;if(e.type==="group"&&e.patterns?.length===1){let t=e.patterns[0];if(t.type==="query"&&this.isLateralSubquery(t))return!0}return!1}extractLateralSubquery(e){if(e.type==="query")return e;if(e.type==="group"&&e.patterns?.length===1)return e.patterns[0];throw new me("Invalid lateral pattern structure")}translateWhere(e){if(e.length===0)throw new me("Empty WHERE clause");let t=e.filter(a=>a.type==="filter"),n=e.filter(a=>a.type==="bind"),i=e.filter(a=>a.type!=="filter"&&a.type!=="bind"),s;if(i.length===0)s={type:"bgp",triples:[]};else if(i.length===1)s=this.translatePattern(i[0]);else{s=this.translatePattern(i[0]);for(let a=1;a<i.length;a++){let c=i[a];if(this.isLateralPattern(c)){let u=this.extractLateralSubquery(c),l=this.removeLateralMarker(u),f=this.translateSelect(l);s={type:"lateraljoin",left:s,right:f}}else{let u=this.translatePattern(c);s={type:"join",left:s,right:u}}}}for(let a of n)s=this.translateBind(a,s);for(let a of t)s={type:"filter",expression:this.translateExpression(a.expression),input:s};return s}translatePattern(e){if(!e||!e.type)throw new me("Invalid pattern: missing type");switch(e.type){case"bgp":return this.translateBGP(e);case"filter":return this.translateFilter(e);case"optional":return this.translateOptional(e);case"union":return this.translateUnion(e);case"minus":return this.translateMinus(e);case"values":return this.translateValues(e);case"group":return this.translateWhere(e.patterns);case"query":return this.translateSubquery(e);case"service":return this.translateService(e);case"graph":return this.translateGraph(e);default:throw new me(`Unsupported pattern type: ${e.type}`)}}translateBGP(e){if(!e.triples||!Array.isArray(e.triples))throw new me("BGP pattern must have triples array");return{type:"bgp",triples:e.triples.map(t=>this.translateTriple(t))}}translateTriple(e){if(!e.subject||!e.predicate||!e.object)throw new me("Triple must have subject, predicate, and object");return{subject:this.translateTripleElement(e.subject),predicate:this.translatePredicate(e.predicate),object:this.translateTripleElement(e.object)}}translatePredicate(e){return e.type==="path"?this.translatePropertyPath(e):this.translateTripleElement(e)}translatePropertyPath(e){if(!e.pathType)throw new me("Property path must have pathType");if(!e.items||!Array.isArray(e.items))throw new me("Property path must have items array");let t=e.items.map(n=>this.translatePathItem(n));switch(e.pathType){case"/":return{type:"path",pathType:"/",items:t};case"|":return{type:"path",pathType:"|",items:t};case"^":if(t.length!==1)throw new me("Inverse path must have exactly one item");return{type:"path",pathType:"^",items:[t[0]]};case"+":if(t.length!==1)throw new me("OneOrMore path must have exactly one item");return{type:"path",pathType:"+",items:[t[0]]};case"*":if(t.length!==1)throw new me("ZeroOrMore path must have exactly one item");return{type:"path",pathType:"*",items:[t[0]]};case"?":if(t.length!==1)throw new me("ZeroOrOne path must have exactly one item");return{type:"path",pathType:"?",items:[t[0]]};default:throw new me(`Unsupported property path type: ${e.pathType}`)}}translatePathItem(e){if(e.type==="path")return this.translatePropertyPath(e);if(e.termType==="NamedNode")return{type:"iri",value:e.value};throw new me(`Unsupported path item type: ${e.type||e.termType}`)}translateTripleElement(e){if(!e||!e.termType)throw new me("Triple element must have termType");switch(e.termType){case"Variable":return{type:"variable",value:e.value};case"NamedNode":return{type:"iri",value:e.value};case"Literal":{let t={type:"literal",value:e.value,datatype:e.datatype?.value,language:e.language};if(e.language){let n=this.directionMappings.get(e.language.toLowerCase());n&&(t.direction=n)}return t}case"BlankNode":return{type:"blank",value:e.value};case"Quad":return this.translateQuotedTriple(e);default:throw new me(`Unsupported term type: ${e.termType}`)}}translateQuotedTriple(e){if(!e.subject||!e.predicate||!e.object)throw new me("Quoted triple must have subject, predicate, and object");let t=this.translateTripleElement(e.subject),n=this.translateQuotedTriplePredicate(e.predicate),i=this.translateTripleElement(e.object);return{type:"quoted",subject:t,predicate:n,object:i}}translateQuotedTriplePredicate(e){if(!e||!e.termType)throw new me("Quoted triple predicate must have termType");switch(e.termType){case"Variable":return{type:"variable",value:e.value};case"NamedNode":return{type:"iri",value:e.value};default:throw new me(`Quoted triple predicate must be IRI or Variable, got: ${e.termType}`)}}translateFilter(e){if(!e.expression)throw new me("Filter pattern must have expression");let t=e.patterns?this.translateWhere(e.patterns):{type:"bgp",triples:[]};return{type:"filter",expression:this.translateExpression(e.expression),input:t}}translateExpression(e){if(!e)throw new me("Expression cannot be null or undefined");if(e.type==="operation")return this.translateOperationExpression(e);if(e.type==="functioncall"||e.type==="functionCall")return{type:"functionCall",function:e.function,args:e.args.map(t=>this.translateExpression(t))};if(e.termType)return this.translateTermExpression(e);throw new me(`Unsupported expression structure: ${JSON.stringify(e)}`)}translateOperationExpression(e){let t=["=","!=","<",">","<=",">="],n=["&&","||","!"],i=["+","-","*","/"];return t.includes(e.operator)?{type:"comparison",operator:e.operator,left:this.translateExpression(e.args[0]),right:this.translateExpression(e.args[1])}:n.includes(e.operator)?{type:"logical",operator:e.operator,operands:e.args.map(s=>this.translateExpression(s))}:i.includes(e.operator)?{type:"arithmetic",operator:e.operator,left:this.translateExpression(e.args[0]),right:this.translateExpression(e.args[1])}:e.operator==="exists"||e.operator==="notexists"?this.translateExistsExpression(e):e.operator==="in"||e.operator==="notin"?this.translateInExpression(e):{type:"function",function:e.operator,args:e.args.map(s=>this.translateExpression(s))}}translateExistsExpression(e){if(!e.args||e.args.length!==1)throw new me("EXISTS/NOT EXISTS must have exactly one pattern argument");let t=e.args[0],n;return t.type==="group"&&t.patterns?n=this.translateWhere(t.patterns):t.type==="bgp"?n=this.translateBGP(t):n=this.translatePattern(t),{type:"exists",negated:e.operator==="notexists",pattern:n}}translateInExpression(e){if(!e.args||e.args.length!==2)throw new me("IN/NOT IN must have exactly 2 arguments (expression and list)");let t=e.args[0],n=e.args[1];if(!Array.isArray(n))throw new me("IN/NOT IN second argument must be an array of values");return{type:"in",expression:this.translateExpression(t),list:n.map(i=>this.translateExpression(i)),negated:e.operator==="notin"}}translateTermExpression(e){if(e.termType==="Variable")return{type:"variable",name:e.value};if(e.termType==="Literal"){let t=e.value;return e.datatype&&(e.datatype.value.includes("#integer")||e.datatype.value.includes("#decimal")?t=parseFloat(e.value):e.datatype.value.includes("#boolean")&&(t=e.value==="true")),{type:"literal",value:t,datatype:e.datatype?.value}}return{type:"literal",value:String(e.value||e)}}translateOptional(e){if(!e.patterns||e.patterns.length===0)throw new me("OPTIONAL pattern must have patterns");return{type:"leftjoin",left:{type:"bgp",triples:[]},right:this.translateWhere(e.patterns),expression:e.expression?this.translateExpression(e.expression):void 0}}translateUnion(e){if(!e.patterns||e.patterns.length<2)throw new me("UNION pattern must have at least 2 patterns");let t=o(i=>i.type==="graph"?this.translateGraph(i):i.type==="service"?this.translateService(i):i.patterns&&Array.isArray(i.patterns)?this.translateWhere(i.patterns):this.translateWhere([i]),"translateBranch"),n={type:"union",left:t(e.patterns[0]),right:t(e.patterns[1])};for(let i=2;i<e.patterns.length;i++)n={type:"union",left:n,right:t(e.patterns[i])};return n}translateMinus(e){if(!e.patterns||e.patterns.length===0)throw new me("MINUS pattern must have patterns");return{type:"minus",left:{type:"bgp",triples:[]},right:this.translateWhere(e.patterns)}}translateValues(e){if(!e.values||!Array.isArray(e.values))throw new me("VALUES pattern must have values array");let t=new Set;for(let i of e.values)for(let s of Object.keys(i)){let a=s.startsWith("?")?s.slice(1):s;t.add(a)}let n=e.values.map(i=>this.translateValuesBinding(i));return{type:"values",variables:Array.from(t),bindings:n}}translateValuesBinding(e){let t={};for(let[n,i]of Object.entries(e)){let s=n.startsWith("?")?n.slice(1):n,a=i;if(a)if(a.termType==="NamedNode")t[s]={type:"iri",value:a.value};else if(a.termType==="Literal"){let c={type:"literal",value:a.value,datatype:a.datatype?.value,language:a.language||void 0};if(a.language){let u=this.directionMappings.get(a.language.toLowerCase());u&&(c.direction=u)}t[s]=c}else throw new me(`Unsupported VALUES term type: ${a.termType}`)}return t}translateBind(e,t){if(!e.variable||!e.expression)throw new me("BIND pattern must have variable and expression");return{type:"extend",variable:e.variable.value,expression:this.translateExpression(e.expression),input:t}}translateOrderComparator(e){return{expression:this.translateExpression(e.expression),descending:e.descending||!1}}isLateralSubquery(e){return e.queryType!=="SELECT"||!e.variables?!1:e.variables.some(t=>t.termType==="Variable"&&t.value===Rb.LateralTransformer.LATERAL_MARKER)}removeLateralMarker(e){return e.variables?{...e,variables:e.variables.filter(t=>!(t.termType==="Variable"&&t.value===Rb.LateralTransformer.LATERAL_MARKER))}:e}translateSubquery(e){if(e.queryType!=="SELECT")throw new me(`Only SELECT subqueries are supported, got: ${e.queryType}`);let t=this.removeLateralMarker(e);return{type:"subquery",query:this.translateSelect(t)}}translateService(e){if(!e.name||e.name.termType!=="NamedNode")throw new me("SERVICE pattern must have a NamedNode endpoint");if(!e.patterns||!Array.isArray(e.patterns))throw new me("SERVICE pattern must have patterns array");let t=this.translateWhere(e.patterns);return{type:"service",endpoint:e.name.value,pattern:t,silent:e.silent||!1}}translateGraph(e){if(!e.name)throw new me("GRAPH pattern must have a name (IRI or variable)");if(!e.patterns||!Array.isArray(e.patterns))throw new me("GRAPH pattern must have patterns array");let t;if(e.name.termType==="NamedNode")t={type:"iri",value:e.name.value};else if(e.name.termType==="Variable")t={type:"variable",value:e.name.value};else throw new me(`GRAPH pattern name must be NamedNode or Variable, got: ${e.name.termType}`);let n=this.translateWhere(e.patterns);return{type:"graph",name:t,pattern:n}}translateDescribe(e){let t=[];if(e.variables&&Array.isArray(e.variables))for(let s of e.variables){let a=s;a.termType==="Wildcard"||a.value==="*"||(a.termType==="Variable"?t.push({type:"variable",value:a.value}):a.termType==="NamedNode"&&t.push({type:"iri",value:a.value}))}let n;e.where&&e.where.length>0&&(n=this.translateWhere(e.where));let i=e.describeOptions;return{type:"describe",resources:t,where:n,depth:i?.depth,symmetric:i?.symmetric}}};co.AlgebraTranslator=ey});var ry=_(Xf=>{"use strict";Object.defineProperty(Xf,"__esModule",{value:!0});Xf.FilterContainsOptimizer=void 0;var jN=Ye(),$N=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i,ty=class{static{o(this,"FilterContainsOptimizer")}constructor(){this.tripleStore=null,this.lastOptimizationHints=[]}setTripleStore(e){this.tripleStore=e}getLastOptimizationHints(){return this.lastOptimizationHints}clearHints(){this.lastOptimizationHints=[]}async optimize(e){return this.clearHints(),this.optimizeRecursive(e)}optimizeSync(e,t){return this.clearHints(),this.optimizeSyncRecursive(e,t)}async optimizeRecursive(e){return e.type==="filter"?this.optimizeFilter(e):e.type==="join"?{type:"join",left:await this.optimizeRecursive(e.left),right:await this.optimizeRecursive(e.right)}:e.type==="leftjoin"?{...e,left:await this.optimizeRecursive(e.left),right:await this.optimizeRecursive(e.right)}:e.type==="union"?{type:"union",left:await this.optimizeRecursive(e.left),right:await this.optimizeRecursive(e.right)}:e.type==="minus"?{...e,left:await this.optimizeRecursive(e.left),right:await this.optimizeRecursive(e.right)}:e.type==="project"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="orderby"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="slice"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="distinct"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="reduced"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="group"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="extend"?{...e,input:await this.optimizeRecursive(e.input)}:e}optimizeSyncRecursive(e,t){return e.type==="filter"?this.optimizeFilterSync(e,t):e.type==="join"?{type:"join",left:this.optimizeSyncRecursive(e.left,t),right:this.optimizeSyncRecursive(e.right,t)}:e.type==="leftjoin"?{...e,left:this.optimizeSyncRecursive(e.left,t),right:this.optimizeSyncRecursive(e.right,t)}:e.type==="union"?{type:"union",left:this.optimizeSyncRecursive(e.left,t),right:this.optimizeSyncRecursive(e.right,t)}:e.type==="minus"?{...e,left:this.optimizeSyncRecursive(e.left,t),right:this.optimizeSyncRecursive(e.right,t)}:e.type==="project"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="orderby"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="slice"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="distinct"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="reduced"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="group"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="extend"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e}async optimizeFilter(e){let t=this.detectContainsUUIDPattern(e.expression);if(!t)return{type:"filter",expression:e.expression,input:await this.optimizeRecursive(e.input)};let n=[];return this.tripleStore&&(n=await this.findSubjectsContainingUUID(t.uuid)),this.rewriteFilter(e,t,n)}optimizeFilterSync(e,t){let n=this.detectContainsUUIDPattern(e.expression);if(!n)return{type:"filter",expression:e.expression,input:this.optimizeSyncRecursive(e.input,t)};let i=t?t.filter(s=>s.includes(n.uuid)):[];return this.rewriteFilter(e,n,i)}rewriteFilter(e,t,n){if(this.lastOptimizationHints.push({type:"uuid-index-lookup",originalPattern:`FILTER(CONTAINS(STR(?${t.variable}), "${t.uuid}"))`,suggestedRewrite:n.length===1?`VALUES ?${t.variable} { <${n[0]}> }`:n.length>1?`VALUES ?${t.variable} { ${n.map(i=>`<${i}>`).join(" ")} }`:"No matching URIs found for UUID",estimatedSpeedup:n.length>0?"O(n) \u2192 O(1)":"N/A",matchedUri:n.length===1?n[0]:void 0}),n.length===0)return{type:"filter",expression:e.expression,input:this.optimizeSyncRecursive(e.input)};if(n.length===1){let i=this.injectSubjectConstraint(e.input,t.variable,n[0]);if(i!==e.input)return i}return this.createValuesJoin(e,t,n)}detectContainsUUIDPattern(e){if(e.type==="function"||e.type==="functionCall"){let t=e;if((typeof t.function=="string"?t.function.toLowerCase():t.function?.value?.toLowerCase()??"")==="contains"&&t.args.length===2)return this.analyzeContainsArgs(t.args[0],t.args[1],e)}if(e.type==="logical"&&e.operator==="&&")for(let t of e.operands){let n=this.detectContainsUUIDPattern(t);if(n)return n}return null}analyzeContainsArgs(e,t,n){let i=null;if(e.type==="function"||e.type==="functionCall"){let s=e;if((typeof s.function=="string"?s.function.toLowerCase():s.function?.value?.toLowerCase()??"")==="str"&&s.args.length===1){let c=s.args[0];c.type==="variable"&&(i=c.name)}}if(!i&&e.type==="variable"&&(i=e.name),!i)return null;if(t.type==="literal"){let c=String(t.value).match($N);if(c)return{variable:i,uuid:c[0].toLowerCase(),originalExpression:n}}return null}async findSubjectsContainingUUID(e){if(!this.tripleStore)return[];if(this.tripleStore.findSubjectsByUUID)return(await this.tripleStore.findSubjectsByUUID(e)).map(s=>s.value);let t=await this.tripleStore.subjects(),n=[];for(let i of t)i instanceof jN.IRI&&i.value.toLowerCase().includes(e.toLowerCase())&&n.push(i.value);return n}injectSubjectConstraint(e,t,n){if(e.type==="bgp"){let i=e.triples.map(a=>a.subject.type==="variable"&&a.subject.value===t?{...a,subject:{type:"iri",value:n}}:a);if(i.some((a,c)=>a.subject!==e.triples[c].subject))return{type:"bgp",triples:i}}if(e.type==="join"){let i=this.injectSubjectConstraint(e.left,t,n),s=this.injectSubjectConstraint(e.right,t,n);if(i!==e.left||s!==e.right)return{type:"join",left:i,right:s}}if(e.type==="filter"){let i=this.injectSubjectConstraint(e.input,t,n);if(i!==e.input)return{...e,input:i}}return e}createValuesJoin(e,t,n){return{type:"join",left:{type:"values",variables:[t.variable],bindings:n.map(a=>({[t.variable]:{type:"iri",value:a}}))},right:this.optimizeSyncRecursive(e.input)}}analyzeQuery(e){let t=[];return this.analyzeRecursive(e,t),t}analyzeRecursive(e,t){if(e.type==="filter"){let n=this.detectContainsUUIDPattern(e.expression);n&&t.push({type:"uuid-index-lookup",originalPattern:`FILTER(CONTAINS(STR(?${n.variable}), "${n.uuid}"))`,suggestedRewrite:`Use --optimize flag or rewrite as VALUES ?${n.variable} { <uri-containing-uuid> }`,estimatedSpeedup:"O(n) \u2192 O(1) with UUID index lookup"}),this.analyzeRecursive(e.input,t);return}e.type==="join"?(this.analyzeRecursive(e.left,t),this.analyzeRecursive(e.right,t)):e.type==="leftjoin"?(this.analyzeRecursive(e.left,t),this.analyzeRecursive(e.right,t)):e.type==="union"?(this.analyzeRecursive(e.left,t),this.analyzeRecursive(e.right,t)):e.type==="minus"?(this.analyzeRecursive(e.left,t),this.analyzeRecursive(e.right,t)):e.type==="project"?this.analyzeRecursive(e.input,t):e.type==="orderby"?this.analyzeRecursive(e.input,t):e.type==="slice"?this.analyzeRecursive(e.input,t):e.type==="distinct"?this.analyzeRecursive(e.input,t):e.type==="reduced"?this.analyzeRecursive(e.input,t):e.type==="group"?this.analyzeRecursive(e.input,t):e.type==="extend"&&this.analyzeRecursive(e.input,t)}};Xf.FilterContainsOptimizer=ty});var Lb=_(Jf=>{"use strict";Object.defineProperty(Jf,"__esModule",{value:!0});Jf.AlgebraOptimizer=void 0;var BN=ry(),ny=class{static{o(this,"AlgebraOptimizer")}constructor(){this.stats=new Map,this.tripleStore=null,this.filterContainsOptimizer=new BN.FilterContainsOptimizer}setTripleStore(e){this.tripleStore=e,this.filterContainsOptimizer.setTripleStore(e)}getOptimizationHints(){return this.filterContainsOptimizer.getLastOptimizationHints()}analyzeQuery(e){return this.filterContainsOptimizer.analyzeQuery(e)}optimize(e){let t=e;return t=this.eliminateEmptyBGPInFilterJoin(t),t=this.filterPushDown(t),t=this.joinReordering(t),t}async optimizeAsync(e){let t=e;return t=this.eliminateEmptyBGPInFilterJoin(t),this.tripleStore&&(t=await this.filterContainsOptimizer.optimize(t)),t=this.filterPushDown(t),t=this.joinReordering(t),t}optimizeWithSubjects(e,t){let n=e;return n=this.eliminateEmptyBGPInFilterJoin(n),n=this.filterContainsOptimizer.optimizeSync(n,t),n=this.filterPushDown(n),n=this.joinReordering(n),n}eliminateEmptyBGPInFilterJoin(e){if(e.type==="join"){if(e.left.type==="filter"){let t=e.left;if(t.input.type==="bgp"&&t.input.triples.length===0)return{type:"filter",expression:t.expression,input:this.eliminateEmptyBGPInFilterJoin(e.right)}}if(e.right.type==="filter"){let t=e.right;if(t.input.type==="bgp"&&t.input.triples.length===0)return{type:"filter",expression:t.expression,input:this.eliminateEmptyBGPInFilterJoin(e.left)}}return{type:"join",left:this.eliminateEmptyBGPInFilterJoin(e.left),right:this.eliminateEmptyBGPInFilterJoin(e.right)}}return e.type==="filter"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e.type==="leftjoin"?{...e,left:this.eliminateEmptyBGPInFilterJoin(e.left),right:this.eliminateEmptyBGPInFilterJoin(e.right)}:e.type==="union"?{...e,left:this.eliminateEmptyBGPInFilterJoin(e.left),right:this.eliminateEmptyBGPInFilterJoin(e.right)}:e.type==="minus"?{...e,left:this.eliminateEmptyBGPInFilterJoin(e.left),right:this.eliminateEmptyBGPInFilterJoin(e.right)}:e.type==="project"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e.type==="orderby"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e.type==="slice"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e.type==="distinct"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e}filterPushDown(e){return e.type==="filter"?this.pushDownFilter(e):e.type==="join"?{type:"join",left:this.filterPushDown(e.left),right:this.filterPushDown(e.right)}:e.type==="leftjoin"?{...e,left:this.filterPushDown(e.left),right:this.filterPushDown(e.right)}:e.type==="union"?{type:"union",left:this.filterPushDown(e.left),right:this.filterPushDown(e.right)}:e.type==="minus"?{...e,left:this.filterPushDown(e.left),right:this.filterPushDown(e.right)}:e.type==="project"?{...e,input:this.filterPushDown(e.input)}:e.type==="orderby"?{...e,input:this.filterPushDown(e.input)}:e.type==="slice"?{...e,input:this.filterPushDown(e.input)}:e.type==="distinct"?{...e,input:this.filterPushDown(e.input)}:e}pushDownFilter(e){let t=e.input;if(t.type==="join"){let n=this.getFilterVariables(e.expression),i=this.getOperationVariables(t.left),s=this.getOperationVariables(t.right),a=n.every(u=>i.has(u)),c=n.every(u=>s.has(u));return a&&!c?{type:"join",left:{type:"filter",expression:e.expression,input:this.filterPushDown(t.left)},right:this.filterPushDown(t.right)}:c&&!a?{type:"join",left:this.filterPushDown(t.left),right:{type:"filter",expression:e.expression,input:this.filterPushDown(t.right)}}:{type:"filter",expression:e.expression,input:{type:"join",left:this.filterPushDown(t.left),right:this.filterPushDown(t.right)}}}return t.type==="union"?{type:"union",left:{type:"filter",expression:e.expression,input:this.filterPushDown(t.left)},right:{type:"filter",expression:e.expression,input:this.filterPushDown(t.right)}}:{type:"filter",expression:e.expression,input:this.filterPushDown(t)}}getFilterVariables(e){let t=[];if(e.type==="variable")t.push(e.name);else if(e.type==="comparison")t.push(...this.getFilterVariables(e.left)),t.push(...this.getFilterVariables(e.right));else if(e.type==="logical")for(let n of e.operands)t.push(...this.getFilterVariables(n));else if(e.type==="function")for(let n of e.args)t.push(...this.getFilterVariables(n));return Array.from(new Set(t))}getOperationVariables(e){let t=new Set;if(e.type==="bgp")for(let n of e.triples)n.subject.type==="variable"&&t.add(n.subject.value),n.predicate.type==="variable"&&t.add(n.predicate.value),n.object.type==="variable"&&t.add(n.object.value);else if(e.type==="join"){let n=this.getOperationVariables(e.left),i=this.getOperationVariables(e.right);return new Set([...n,...i])}else{if(e.type==="filter")return this.getOperationVariables(e.input);if(e.type==="leftjoin"){let n=this.getOperationVariables(e.left),i=this.getOperationVariables(e.right);return new Set([...n,...i])}else if(e.type==="union"){let n=this.getOperationVariables(e.left),i=this.getOperationVariables(e.right);return new Set([...n,...i])}else{if(e.type==="minus")return this.getOperationVariables(e.left);if(e.type==="project")return new Set(e.variables)}}return t}joinReordering(e){return e.type==="join"?this.reorderJoin(e):e.type==="filter"?{...e,input:this.joinReordering(e.input)}:e.type==="leftjoin"?{...e,left:this.joinReordering(e.left),right:this.joinReordering(e.right)}:e.type==="union"?{...e,left:this.joinReordering(e.left),right:this.joinReordering(e.right)}:e.type==="minus"?{...e,left:this.joinReordering(e.left),right:this.joinReordering(e.right)}:e.type==="project"?{...e,input:this.joinReordering(e.input)}:e.type==="orderby"?{...e,input:this.joinReordering(e.input)}:e.type==="slice"?{...e,input:this.joinReordering(e.input)}:e.type==="distinct"?{...e,input:this.joinReordering(e.input)}:e}reorderJoin(e){let t=this.estimateCost(e.left);return this.estimateCost(e.right)<t?{type:"join",left:this.joinReordering(e.right),right:this.joinReordering(e.left)}:{type:"join",left:this.joinReordering(e.left),right:this.joinReordering(e.right)}}estimateCost(e){if(e.type==="bgp"){let t=e.triples.length*100;for(let n of e.triples)n.subject.type==="variable"&&(t+=10),n.predicate.type==="variable"&&(t+=20),n.object.type==="variable"&&(t+=10);return t}return e.type==="filter"?this.estimateCost(e.input)*.3:e.type==="join"?this.estimateCost(e.left)*this.estimateCost(e.right):e.type==="leftjoin"?this.estimateCost(e.left)+this.estimateCost(e.right)*.5:e.type==="union"?this.estimateCost(e.left)+this.estimateCost(e.right):e.type==="minus"?this.estimateCost(e.left)+this.estimateCost(e.right)*.3:100}setStatistics(e,t){this.stats.set(e,t)}getStatistics(e){return this.stats.get(e)}};Jf.AlgebraOptimizer=ny});var Mb=_(Zf=>{"use strict";Object.defineProperty(Zf,"__esModule",{value:!0});Zf.AlgebraSerializer=void 0;var iy=class{static{o(this,"AlgebraSerializer")}toString(e,t=0){let n=" ".repeat(t);switch(e.type){case"bgp":return`${n}BGP [
260
+ `)return n+1;let s=e.substring(n).toUpperCase();if(s.startsWith("PREFIX")||s.startsWith("BASE")||s.startsWith("SELECT")||s.startsWith("CONSTRUCT")||s.startsWith("DESCRIBE")||s.startsWith("ASK"))return n;if(/\s/.test(i)){n++;continue}break}return n}extractPrefixFromUri(e){let t=e.replace(/^https?:\/\//,"");t=t.replace(/\/$/,"").replace(/#$/,"");let n=t.split(/[/.#]+/).filter(Boolean);if(n.length===0)return null;let i=n[n.length-1];return/^(ontology|vocab|schema|ns|core)$/i.test(i)&&n.length>1?n[n.length-2].toLowerCase():i.toLowerCase().replace(/[^a-z0-9]/g,"")}};ms.PrefixStarTransformer=W0;var ro=class extends Error{static{o(this,"PrefixStarTransformerError")}constructor(e){super(`PREFIX* transformation error: ${e}`),this.name="PrefixStarTransformerError"}};ms.PrefixStarTransformerError=ro});var H0=_(io=>{"use strict";Object.defineProperty(io,"__esModule",{value:!0});io.DescribeOptionsTransformer=io.DescribeOptionsTransformerError=void 0;var Qf=class extends Error{static{o(this,"DescribeOptionsTransformerError")}constructor(e){super(e),this.name="DescribeOptionsTransformerError"}};io.DescribeOptionsTransformerError=Qf;var no=class r{static{o(this,"DescribeOptionsTransformer")}transform(e){if(!r.DESCRIBE_QUERY_PATTERN.test(e))return{query:e};let t=e,n={},i=!1,s=r.DEPTH_PATTERN.exec(e);if(s){let a=parseInt(s[1],10);if(a<0)throw new Qf(`DESCRIBE DEPTH must be a non-negative integer, got: ${a}`);n.depth=a,i=!0,r.DEPTH_PATTERN.lastIndex=0,t=t.replace(r.DEPTH_PATTERN,"")}return r.DEPTH_PATTERN.lastIndex=0,r.SYMMETRIC_PATTERN.test(e)&&(n.symmetric=!0,i=!0,r.SYMMETRIC_PATTERN.lastIndex=0,t=t.replace(r.SYMMETRIC_PATTERN,"")),r.SYMMETRIC_PATTERN.lastIndex=0,t=t.replace(/\s{2,}/g," ").trim(),{query:t,options:i?n:void 0}}hasDescribeOptions(e){let t=r.DEPTH_PATTERN.test(e);r.DEPTH_PATTERN.lastIndex=0;let n=r.SYMMETRIC_PATTERN.test(e);return r.SYMMETRIC_PATTERN.lastIndex=0,t||n}};io.DescribeOptionsTransformer=no;no.DEPTH_PATTERN=/\bDEPTH\s+(\d+)/gi;no.SYMMETRIC_PATTERN=/\bSYMMETRIC\b/gi;no.DESCRIBE_QUERY_PATTERN=/\bDESCRIBE\b/i});var Ib=_(so=>{"use strict";Object.defineProperty(so,"__esModule",{value:!0});so.DirectionalLangTagTransformerError=so.DirectionalLangTagTransformer=void 0;var Kf=class r{static{o(this,"DirectionalLangTagTransformer")}constructor(){this.directionMappings=new Map}transform(e){return this.directionMappings.clear(),e.replace(r.DIRECTIONAL_TAG_REGEX,(t,n,i,s,a)=>{let c=s.toLowerCase();return this.directionMappings.set(c,a),`${n}${i}${n}@${s}`})}getDirection(e){return this.directionMappings.get(e.toLowerCase())}getAllMappings(){return new Map(this.directionMappings)}hasDirectionalTags(e){return r.DIRECTIONAL_TAG_REGEX.lastIndex=0,r.DIRECTIONAL_TAG_REGEX.test(e)}clearMappings(){this.directionMappings.clear()}};so.DirectionalLangTagTransformer=Kf;Kf.DIRECTIONAL_TAG_REGEX=/(["'])((?:[^\\]|\\.)*?)\1@([a-zA-Z]+(?:-[a-zA-Z0-9]+)*)--(ltr|rtl)/g;var z0=class extends Error{static{o(this,"DirectionalLangTagTransformerError")}constructor(e){super(`Directional language tag transformation error: ${e}`),this.name="DirectionalLangTagTransformerError"}};so.DirectionalLangTagTransformerError=z0});var Ob=_(oo=>{"use strict";Object.defineProperty(oo,"__esModule",{value:!0});oo.TripleTermTransformerError=oo.TripleTermTransformer=void 0;var Y0=class{static{o(this,"TripleTermTransformer")}transform(e){let t=e,n,i=0,s=100;do if(n=t,t=this.transformSinglePass(t),i++,i>s)throw new ao("Too many nested triple terms (max 100 iterations)");while(t!==n);return t}hasTripleTermSyntax(e){return this.findTripleTermPositions(e).length>0}transformSinglePass(e){let t=this.findTripleTermPositions(e);if(t.length===0)return e;let n=e;for(let i=t.length-1;i>=0;i--){let s=t[i],a=this.extractTripleTerm(n,s);if(a){let c=this.convertToStandardSyntax(a.content);n=n.substring(0,s)+c+n.substring(s+a.length)}}return n}findTripleTermPositions(e){let t=[],n=0;for(;n<e.length;){if(e[n]==="'"){n=this.skipStringLiteral(e,n,"'");continue}if(e[n]==='"'){n=this.skipStringLiteral(e,n,'"');continue}if(e.substring(n,n+2)==="<<"&&this.isParenthesizedTripleTerm(e,n)){t.push(n),n+=2;continue}n++}return t}skipStringLiteral(e,t,n){let i=n.repeat(3);if(e.substring(t,t+3)===i){for(t+=3;t<e.length;){if(e.substring(t,t+3)===i)return t+3;e[t]==="\\"&&t++,t++}return t}for(t++;t<e.length&&e[t]!==n;)e[t]==="\\"&&t++,t++;return t+1}isParenthesizedTripleTerm(e,t){let n=t+2;for(;n<e.length&&/\s/.test(e[n]);)n++;return e[n]==="("}extractTripleTerm(e,t){let n=t+2;for(;n<e.length&&/\s/.test(e[n]);)n++;if(e[n]!=="(")return null;n++;let i=1;for(;n<e.length&&i>0;){if(e[n]==="'"||e[n]==='"'){n=this.skipStringLiteral(e,n,e[n]);continue}if(e.substring(n,n+2)==="<<"&&this.isParenthesizedTripleTerm(e,n)){for(n+=2;n<e.length&&/\s/.test(e[n]);)n++;e[n]==="("&&(i++,n++);continue}if(e.substring(n,n+2)==="<<"){n+=2;let s=1;for(;n<e.length&&s>0;){if(e[n]==="'"||e[n]==='"'){n=this.skipStringLiteral(e,n,e[n]);continue}if(e.substring(n,n+2)==="<<"){s++,n+=2;continue}if(e.substring(n,n+2)===">>"){s--,n+=2;continue}n++}continue}if(e[n]==="("){i++,n++;continue}if(e[n]===")"){let s=n+1;for(;s<e.length&&/\s/.test(e[s]);)s++;if(e.substring(s,s+2)===">>"){if(i--,i===0){let a=e.substring(t,s+2);return{content:a,length:a.length}}n=s+2;continue}n++;continue}n++}if(i>0)throw new ao(`Unclosed triple term at position ${t}: missing )>>`);return null}convertToStandardSyntax(e){let t=e.match(/^<<\s*\(\s*([\s\S]*?)\s*\)\s*>>$/);if(!t)throw new ao(`Invalid triple term syntax: ${e.substring(0,50)}...`);return`<< ${t[1]} >>`}};oo.TripleTermTransformer=Y0;var ao=class extends Error{static{o(this,"TripleTermTransformerError")}constructor(e){super(`Triple term transformation error: ${e}`),this.name="TripleTermTransformerError"}};oo.TripleTermTransformerError=ao});var Fb=_(mn=>{"use strict";var NN=mn&&mn.__createBinding||(Object.create?(function(r,e,t,n){n===void 0&&(n=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:o(function(){return e[t]},"get")}),Object.defineProperty(r,n,i)}):(function(r,e,t,n){n===void 0&&(n=t),r[n]=e[t]})),LN=mn&&mn.__setModuleDefault||(Object.create?(function(r,e){Object.defineProperty(r,"default",{enumerable:!0,value:e})}):function(r,e){r.default=e}),MN=mn&&mn.__importStar||(function(){var r=o(function(e){return r=Object.getOwnPropertyNames||function(t){var n=[];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(n[n.length]=i);return n},r(e)},"ownKeys");return function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n=r(e),i=0;i<n.length;i++)n[i]!=="default"&&NN(t,e,n[i]);return LN(t,e),t}})();Object.defineProperty(mn,"__esModule",{value:!0});mn.SPARQLParser=mn.SPARQLParseError=void 0;var Pb=MN(xb()),Q0=q0(),K0=G0(),Db=Cb(),X0=H0(),kN=Ib(),J0=Ob(),Nt=class extends Error{static{o(this,"SPARQLParseError")}constructor(e,t,n,i){super(e,i?{cause:i}:void 0),this.name="SPARQLParseError",this.line=t,this.column=n}};mn.SPARQLParseError=Nt;var Z0=class{static{o(this,"SPARQLParser")}constructor(e){this.lastDirectionMappings=new Map,this.parser=new Pb.Parser({sparqlStar:!0}),this.generator=new Pb.Generator({sparqlStar:!0}),this.caseWhenTransformer=new Q0.CaseWhenTransformer,this.lateralTransformer=new K0.LateralTransformer,this.prefixStarTransformer=new Db.PrefixStarTransformer(e?.vocabularyResolver),this.describeOptionsTransformer=new X0.DescribeOptionsTransformer,this.directionalLangTagTransformer=new kN.DirectionalLangTagTransformer,this.tripleTermTransformer=new J0.TripleTermTransformer}parse(e){try{let t=this.describeOptionsTransformer.transform(e);this.lastDescribeOptions=t.options;let n=t.query;n=this.directionalLangTagTransformer.transform(n),this.lastDirectionMappings=this.directionalLangTagTransformer.getAllMappings(),n=this.lateralTransformer.transform(n),n=this.caseWhenTransformer.transform(n),n=this.tripleTermTransformer.transform(n);let i=this.parser.parse(n);return this.validateQuery(i),this.lastDescribeOptions&&this.isDescribeQuery(i)&&(i.describeOptions=this.lastDescribeOptions),i}catch(t){if(t instanceof X0.DescribeOptionsTransformerError)throw new Nt(t.message);if(t instanceof K0.LateralTransformerError)throw new Nt(t.message);if(t instanceof Q0.CaseWhenTransformerError)throw new Nt(t.message);if(t instanceof J0.TripleTermTransformerError)throw new Nt(t.message);if(t instanceof Error){let n=t.message.match(/line (\d+), column (\d+)/),i=n?parseInt(n[1],10):void 0,s=n?parseInt(n[2],10):void 0;throw new Nt(`SPARQL syntax error: ${t.message}`,i,s,t)}throw t}}parseWithOptions(e){return{query:this.parse(e),describeOptions:this.lastDescribeOptions}}getLastDescribeOptions(){return this.lastDescribeOptions}async parseAsync(e){try{let t=this.describeOptionsTransformer.transform(e);this.lastDescribeOptions=t.options;let n=t.query;n=this.directionalLangTagTransformer.transform(n),this.lastDirectionMappings=this.directionalLangTagTransformer.getAllMappings(),n=await this.prefixStarTransformer.transform(n),n=this.lateralTransformer.transform(n),n=this.caseWhenTransformer.transform(n),n=this.tripleTermTransformer.transform(n);let i=this.parser.parse(n);return this.validateQuery(i),this.lastDescribeOptions&&this.isDescribeQuery(i)&&(i.describeOptions=this.lastDescribeOptions),i}catch(t){if(t instanceof X0.DescribeOptionsTransformerError)throw new Nt(t.message);if(t instanceof Db.PrefixStarTransformerError)throw new Nt(t.message);if(t instanceof K0.LateralTransformerError)throw new Nt(t.message);if(t instanceof Q0.CaseWhenTransformerError)throw new Nt(t.message);if(t instanceof J0.TripleTermTransformerError)throw new Nt(t.message);if(t instanceof Error){let n=t.message.match(/line (\d+), column (\d+)/),i=n?parseInt(n[1],10):void 0,s=n?parseInt(n[2],10):void 0;throw new Nt(`SPARQL syntax error: ${t.message}`,i,s,t)}throw t}}async parseAsyncWithOptions(e){return{query:await this.parseAsync(e),describeOptions:this.lastDescribeOptions}}hasPrefixStar(e){return/PREFIX\s*\*/i.test(e)}hasLateral(e){return this.lateralTransformer.hasLateral(e)}hasDescribeOptions(e){return this.describeOptionsTransformer.hasDescribeOptions(e)}hasDirectionalLangTags(e){return this.directionalLangTagTransformer.hasDirectionalTags(e)}hasTripleTermSyntax(e){return this.tripleTermTransformer.hasTripleTermSyntax(e)}getLastDirectionMappings(){return new Map(this.lastDirectionMappings)}getDirectionForLanguage(e){return this.lastDirectionMappings.get(e.toLowerCase())}toString(e){try{return this.generator.stringify(e)}catch(t){throw t instanceof Error?new Nt(`Failed to serialize SPARQL query: ${t.message}`,void 0,void 0,t):t}}getQueryType(e){if("queryType"in e&&e.type==="query")return e.queryType;throw new Nt("Query does not have a valid queryType property")}isSelectQuery(e){return"queryType"in e&&e.type==="query"&&e.queryType==="SELECT"}isConstructQuery(e){return"queryType"in e&&e.type==="query"&&e.queryType==="CONSTRUCT"}isAskQuery(e){return"queryType"in e&&e.type==="query"&&e.queryType==="ASK"}isDescribeQuery(e){return"queryType"in e&&e.type==="query"&&e.queryType==="DESCRIBE"}isUpdateQuery(e){return e.type==="update"}isInsertDataOperation(e){return"updateType"in e&&e.updateType==="insert"}isDeleteDataOperation(e){return"updateType"in e&&e.updateType==="delete"}validateQuery(e){if(!e||typeof e!="object")throw new Nt("Invalid query: not an object");if(e.type!=="query"&&e.type!=="update")throw new Nt(`Invalid type: expected "query" or "update", got "${e.type}"`);if(e.type==="query"){let t=["SELECT","CONSTRUCT","ASK","DESCRIBE"];if(!t.includes(e.queryType))throw new Nt(`Invalid query type: expected one of ${t.join(", ")}, got "${e.queryType}"`)}}};mn.SPARQLParser=Z0});var Nb=_(co=>{"use strict";Object.defineProperty(co,"__esModule",{value:!0});co.AlgebraTranslator=co.AlgebraTranslatorError=void 0;var Rb=G0(),me=class extends Error{static{o(this,"AlgebraTranslatorError")}constructor(e,t){super(e,t?{cause:t}:void 0),this.name="AlgebraTranslatorError"}};co.AlgebraTranslatorError=me;var ey=class{static{o(this,"AlgebraTranslator")}constructor(){this.directionMappings=new Map,this.aggregateCounter=0}setDirectionMappings(e){this.directionMappings=e}translate(e){if(e.type!=="query")throw new me("Only query operations are supported (not updates)");if(e.queryType==="SELECT")return this.translateSelect(e);if(e.queryType==="CONSTRUCT")return this.translateConstruct(e);if(e.queryType==="ASK")return this.translateAsk(e);if(e.queryType==="DESCRIBE")return this.translateDescribe(e);throw new me(`Query type ${e.queryType} not yet supported`)}translateSelect(e){let t;if(!e.where||e.where.length===0)throw new me("SELECT query must have WHERE clause");t=this.translateWhere(e.where),this.aggregateCounter=0;let n=new Map,i=this.extractAggregatesWithMapping(e.variables,n),s=this.extractGroupVariables(e.group);if((i.length>0||s.length>0)&&(t={type:"group",variables:s,aggregates:i,input:t}),e.variables&&e.variables.length>0){for(let c of e.variables){let u=c;if(u.expression&&u.variable){if(u.expression.type==="aggregate")continue;let l=this.transformExpressionWithAggregateVars(u.expression,n);t={type:"extend",variable:u.variable.value,expression:l,input:t}}}let a=e.variables.filter(c=>c.termType==="Variable"||c.variable).map(c=>c.termType==="Variable"?c.value:c.variable.value);a.length>0&&(t={type:"project",variables:a,input:t})}return e.distinct&&(t={type:"distinct",input:t}),e.reduced&&(t={type:"reduced",input:t}),e.order&&e.order.length>0&&(t={type:"orderby",comparators:e.order.map(a=>this.translateOrderComparator(a)),input:t}),(e.limit!==void 0||e.offset!==void 0)&&(t={type:"slice",limit:e.limit,offset:e.offset,input:t}),t}translateConstruct(e){let t=this.translateConstructTemplate(e.template??[]);if(!e.where||e.where.length===0)throw new me("CONSTRUCT query must have WHERE clause");let n=this.translateWhere(e.where);return{type:"construct",template:t,where:n}}translateConstructTemplate(e){return!e||!Array.isArray(e)?[]:e.map(t=>this.translateTriple(t))}translateAsk(e){return{type:"ask",where:e.where&&e.where.length>0?this.translateWhere(e.where):{type:"bgp",triples:[]}}}extractAggregatesWithMapping(e,t){if(!e)return[];let n=[];for(let i of e)!i.expression||!i.variable||(i.expression.type==="aggregate"?(n.push({variable:i.variable.value,expression:this.translateAggregateExpression(i.expression)}),t.set(i.expression,i.variable.value)):this.collectNestedAggregates(i.expression,n,t));return n}collectNestedAggregates(e,t,n){if(e){if(e.type==="aggregate"){let i=`__agg${this.aggregateCounter++}`;t.push({variable:i,expression:this.translateAggregateExpression(e)}),n.set(e,i)}else if(e.type==="operation"&&e.args)for(let i of e.args)this.collectNestedAggregates(i,t,n)}}transformExpressionWithAggregateVars(e,t){if(t.has(e))return{type:"variable",name:t.get(e)};if(e.type==="operation"&&e.args){let n=e.args.map(c=>this.transformExpressionWithAggregateVars(c,t)),i=["=","!=","<",">","<=",">="],s=["&&","||","!"],a=["+","-","*","/"];return i.includes(e.operator)?{type:"comparison",operator:e.operator,left:n[0],right:n[1]}:s.includes(e.operator)?{type:"logical",operator:e.operator,operands:n}:a.includes(e.operator)?{type:"arithmetic",operator:e.operator,left:n[0],right:n[1]}:{type:"function",function:e.operator,args:n}}return this.translateExpression(e)}extractGroupVariables(e){return e?e.filter(t=>t.expression&&t.expression.termType==="Variable").map(t=>t.expression.value):[]}translateAggregateExpression(e){let t=e.aggregation;if(typeof t=="string"){let n=t.toLowerCase();return["count","sum","avg","min","max","group_concat","sample"].includes(n)?{type:"aggregate",aggregation:n,expression:e.expression?this.translateExpression(e.expression):void 0,distinct:e.distinct||!1,separator:e.separator}:{type:"aggregate",aggregation:{type:"custom",iri:t},expression:e.expression?this.translateExpression(e.expression):void 0,distinct:e.distinct||!1,separator:e.separator}}if(t&&typeof t=="object"){let n;if(t.termType==="NamedNode"&&t.value)n=t.value;else if("value"in t)n=String(t.value);else throw new me(`Invalid custom aggregate: expected IRI but got ${JSON.stringify(t)}`);return{type:"aggregate",aggregation:{type:"custom",iri:n},expression:e.expression?this.translateExpression(e.expression):void 0,distinct:e.distinct||!1,separator:e.separator}}throw new me(`Unknown aggregate format: ${JSON.stringify(t)}`)}isLateralPattern(e){if(e.type==="query"&&this.isLateralSubquery(e))return!0;if(e.type==="group"&&e.patterns?.length===1){let t=e.patterns[0];if(t.type==="query"&&this.isLateralSubquery(t))return!0}return!1}extractLateralSubquery(e){if(e.type==="query")return e;if(e.type==="group"&&e.patterns?.length===1)return e.patterns[0];throw new me("Invalid lateral pattern structure")}translateWhere(e){if(e.length===0)throw new me("Empty WHERE clause");let t=e.filter(a=>a.type==="filter"),n=e.filter(a=>a.type==="bind"),i=e.filter(a=>a.type!=="filter"&&a.type!=="bind"),s;if(i.length===0)s={type:"bgp",triples:[]};else if(i.length===1)i[0].type==="optional"?s={type:"leftjoin",left:{type:"bgp",triples:[]},right:this.translateWhere(i[0].patterns),expression:i[0].expression?this.translateExpression(i[0].expression):void 0}:s=this.translatePattern(i[0]);else{i[0].type==="optional"?s={type:"leftjoin",left:{type:"bgp",triples:[]},right:this.translateWhere(i[0].patterns),expression:i[0].expression?this.translateExpression(i[0].expression):void 0}:s=this.translatePattern(i[0]);for(let a=1;a<i.length;a++){let c=i[a];if(this.isLateralPattern(c)){let u=this.extractLateralSubquery(c),l=this.removeLateralMarker(u),f=this.translateSelect(l);s={type:"lateraljoin",left:s,right:f}}else if(c.type==="optional")s={type:"leftjoin",left:s,right:this.translateWhere(c.patterns),expression:c.expression?this.translateExpression(c.expression):void 0};else{let u=this.translatePattern(c);s={type:"join",left:s,right:u}}}}for(let a of n)s=this.translateBind(a,s);for(let a of t)s={type:"filter",expression:this.translateExpression(a.expression),input:s};return s}translatePattern(e){if(!e||!e.type)throw new me("Invalid pattern: missing type");switch(e.type){case"bgp":return this.translateBGP(e);case"filter":return this.translateFilter(e);case"optional":return this.translateOptional(e);case"union":return this.translateUnion(e);case"minus":return this.translateMinus(e);case"values":return this.translateValues(e);case"group":return this.translateWhere(e.patterns);case"query":return this.translateSubquery(e);case"service":return this.translateService(e);case"graph":return this.translateGraph(e);default:throw new me(`Unsupported pattern type: ${e.type}`)}}translateBGP(e){if(!e.triples||!Array.isArray(e.triples))throw new me("BGP pattern must have triples array");return{type:"bgp",triples:e.triples.map(t=>this.translateTriple(t))}}translateTriple(e){if(!e.subject||!e.predicate||!e.object)throw new me("Triple must have subject, predicate, and object");return{subject:this.translateTripleElement(e.subject),predicate:this.translatePredicate(e.predicate),object:this.translateTripleElement(e.object)}}translatePredicate(e){return e.type==="path"?this.translatePropertyPath(e):this.translateTripleElement(e)}translatePropertyPath(e){if(!e.pathType)throw new me("Property path must have pathType");if(!e.items||!Array.isArray(e.items))throw new me("Property path must have items array");let t=e.items.map(n=>this.translatePathItem(n));switch(e.pathType){case"/":return{type:"path",pathType:"/",items:t};case"|":return{type:"path",pathType:"|",items:t};case"^":if(t.length!==1)throw new me("Inverse path must have exactly one item");return{type:"path",pathType:"^",items:[t[0]]};case"+":if(t.length!==1)throw new me("OneOrMore path must have exactly one item");return{type:"path",pathType:"+",items:[t[0]]};case"*":if(t.length!==1)throw new me("ZeroOrMore path must have exactly one item");return{type:"path",pathType:"*",items:[t[0]]};case"?":if(t.length!==1)throw new me("ZeroOrOne path must have exactly one item");return{type:"path",pathType:"?",items:[t[0]]};default:throw new me(`Unsupported property path type: ${e.pathType}`)}}translatePathItem(e){if(e.type==="path")return this.translatePropertyPath(e);if(e.termType==="NamedNode")return{type:"iri",value:e.value};throw new me(`Unsupported path item type: ${e.type||e.termType}`)}translateTripleElement(e){if(!e||!e.termType)throw new me("Triple element must have termType");switch(e.termType){case"Variable":return{type:"variable",value:e.value};case"NamedNode":return{type:"iri",value:e.value};case"Literal":{let t={type:"literal",value:e.value,datatype:e.datatype?.value,language:e.language};if(e.language){let n=this.directionMappings.get(e.language.toLowerCase());n&&(t.direction=n)}return t}case"BlankNode":return{type:"blank",value:e.value};case"Quad":return this.translateQuotedTriple(e);default:throw new me(`Unsupported term type: ${e.termType}`)}}translateQuotedTriple(e){if(!e.subject||!e.predicate||!e.object)throw new me("Quoted triple must have subject, predicate, and object");let t=this.translateTripleElement(e.subject),n=this.translateQuotedTriplePredicate(e.predicate),i=this.translateTripleElement(e.object);return{type:"quoted",subject:t,predicate:n,object:i}}translateQuotedTriplePredicate(e){if(!e||!e.termType)throw new me("Quoted triple predicate must have termType");switch(e.termType){case"Variable":return{type:"variable",value:e.value};case"NamedNode":return{type:"iri",value:e.value};default:throw new me(`Quoted triple predicate must be IRI or Variable, got: ${e.termType}`)}}translateFilter(e){if(!e.expression)throw new me("Filter pattern must have expression");let t=e.patterns?this.translateWhere(e.patterns):{type:"bgp",triples:[]};return{type:"filter",expression:this.translateExpression(e.expression),input:t}}translateExpression(e){if(!e)throw new me("Expression cannot be null or undefined");if(e.type==="operation")return this.translateOperationExpression(e);if(e.type==="functioncall"||e.type==="functionCall")return{type:"functionCall",function:e.function,args:e.args.map(t=>this.translateExpression(t))};if(e.termType)return this.translateTermExpression(e);throw new me(`Unsupported expression structure: ${JSON.stringify(e)}`)}translateOperationExpression(e){let t=["=","!=","<",">","<=",">="],n=["&&","||","!"],i=["+","-","*","/"];return t.includes(e.operator)?{type:"comparison",operator:e.operator,left:this.translateExpression(e.args[0]),right:this.translateExpression(e.args[1])}:n.includes(e.operator)?{type:"logical",operator:e.operator,operands:e.args.map(s=>this.translateExpression(s))}:i.includes(e.operator)?{type:"arithmetic",operator:e.operator,left:this.translateExpression(e.args[0]),right:this.translateExpression(e.args[1])}:e.operator==="exists"||e.operator==="notexists"?this.translateExistsExpression(e):e.operator==="in"||e.operator==="notin"?this.translateInExpression(e):{type:"function",function:e.operator,args:e.args.map(s=>this.translateExpression(s))}}translateExistsExpression(e){if(!e.args||e.args.length!==1)throw new me("EXISTS/NOT EXISTS must have exactly one pattern argument");let t=e.args[0],n;return t.type==="group"&&t.patterns?n=this.translateWhere(t.patterns):t.type==="bgp"?n=this.translateBGP(t):n=this.translatePattern(t),{type:"exists",negated:e.operator==="notexists",pattern:n}}translateInExpression(e){if(!e.args||e.args.length!==2)throw new me("IN/NOT IN must have exactly 2 arguments (expression and list)");let t=e.args[0],n=e.args[1];if(!Array.isArray(n))throw new me("IN/NOT IN second argument must be an array of values");return{type:"in",expression:this.translateExpression(t),list:n.map(i=>this.translateExpression(i)),negated:e.operator==="notin"}}translateTermExpression(e){if(e.termType==="Variable")return{type:"variable",name:e.value};if(e.termType==="Literal"){let t=e.value;return e.datatype&&(e.datatype.value.includes("#integer")||e.datatype.value.includes("#decimal")?t=parseFloat(e.value):e.datatype.value.includes("#boolean")&&(t=e.value==="true")),{type:"literal",value:t,datatype:e.datatype?.value}}return{type:"literal",value:String(e.value||e)}}translateOptional(e){if(!e.patterns||e.patterns.length===0)throw new me("OPTIONAL pattern must have patterns");return{type:"leftjoin",left:{type:"bgp",triples:[]},right:this.translateWhere(e.patterns),expression:e.expression?this.translateExpression(e.expression):void 0}}translateUnion(e){if(!e.patterns||e.patterns.length<2)throw new me("UNION pattern must have at least 2 patterns");let t=o(i=>i.type==="graph"?this.translateGraph(i):i.type==="service"?this.translateService(i):i.patterns&&Array.isArray(i.patterns)?this.translateWhere(i.patterns):this.translateWhere([i]),"translateBranch"),n={type:"union",left:t(e.patterns[0]),right:t(e.patterns[1])};for(let i=2;i<e.patterns.length;i++)n={type:"union",left:n,right:t(e.patterns[i])};return n}translateMinus(e){if(!e.patterns||e.patterns.length===0)throw new me("MINUS pattern must have patterns");return{type:"minus",left:{type:"bgp",triples:[]},right:this.translateWhere(e.patterns)}}translateValues(e){if(!e.values||!Array.isArray(e.values))throw new me("VALUES pattern must have values array");let t=new Set;for(let i of e.values)for(let s of Object.keys(i)){let a=s.startsWith("?")?s.slice(1):s;t.add(a)}let n=e.values.map(i=>this.translateValuesBinding(i));return{type:"values",variables:Array.from(t),bindings:n}}translateValuesBinding(e){let t={};for(let[n,i]of Object.entries(e)){let s=n.startsWith("?")?n.slice(1):n,a=i;if(a)if(a.termType==="NamedNode")t[s]={type:"iri",value:a.value};else if(a.termType==="Literal"){let c={type:"literal",value:a.value,datatype:a.datatype?.value,language:a.language||void 0};if(a.language){let u=this.directionMappings.get(a.language.toLowerCase());u&&(c.direction=u)}t[s]=c}else throw new me(`Unsupported VALUES term type: ${a.termType}`)}return t}translateBind(e,t){if(!e.variable||!e.expression)throw new me("BIND pattern must have variable and expression");return{type:"extend",variable:e.variable.value,expression:this.translateExpression(e.expression),input:t}}translateOrderComparator(e){return{expression:this.translateExpression(e.expression),descending:e.descending||!1}}isLateralSubquery(e){return e.queryType!=="SELECT"||!e.variables?!1:e.variables.some(t=>t.termType==="Variable"&&t.value===Rb.LateralTransformer.LATERAL_MARKER)}removeLateralMarker(e){return e.variables?{...e,variables:e.variables.filter(t=>!(t.termType==="Variable"&&t.value===Rb.LateralTransformer.LATERAL_MARKER))}:e}translateSubquery(e){if(e.queryType!=="SELECT")throw new me(`Only SELECT subqueries are supported, got: ${e.queryType}`);let t=this.removeLateralMarker(e);return{type:"subquery",query:this.translateSelect(t)}}translateService(e){if(!e.name||e.name.termType!=="NamedNode")throw new me("SERVICE pattern must have a NamedNode endpoint");if(!e.patterns||!Array.isArray(e.patterns))throw new me("SERVICE pattern must have patterns array");let t=this.translateWhere(e.patterns);return{type:"service",endpoint:e.name.value,pattern:t,silent:e.silent||!1}}translateGraph(e){if(!e.name)throw new me("GRAPH pattern must have a name (IRI or variable)");if(!e.patterns||!Array.isArray(e.patterns))throw new me("GRAPH pattern must have patterns array");let t;if(e.name.termType==="NamedNode")t={type:"iri",value:e.name.value};else if(e.name.termType==="Variable")t={type:"variable",value:e.name.value};else throw new me(`GRAPH pattern name must be NamedNode or Variable, got: ${e.name.termType}`);let n=this.translateWhere(e.patterns);return{type:"graph",name:t,pattern:n}}translateDescribe(e){let t=[];if(e.variables&&Array.isArray(e.variables))for(let s of e.variables){let a=s;a.termType==="Wildcard"||a.value==="*"||(a.termType==="Variable"?t.push({type:"variable",value:a.value}):a.termType==="NamedNode"&&t.push({type:"iri",value:a.value}))}let n;e.where&&e.where.length>0&&(n=this.translateWhere(e.where));let i=e.describeOptions;return{type:"describe",resources:t,where:n,depth:i?.depth,symmetric:i?.symmetric}}};co.AlgebraTranslator=ey});var ry=_(Xf=>{"use strict";Object.defineProperty(Xf,"__esModule",{value:!0});Xf.FilterContainsOptimizer=void 0;var jN=Ye(),$N=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i,ty=class{static{o(this,"FilterContainsOptimizer")}constructor(){this.tripleStore=null,this.lastOptimizationHints=[]}setTripleStore(e){this.tripleStore=e}getLastOptimizationHints(){return this.lastOptimizationHints}clearHints(){this.lastOptimizationHints=[]}async optimize(e){return this.clearHints(),this.optimizeRecursive(e)}optimizeSync(e,t){return this.clearHints(),this.optimizeSyncRecursive(e,t)}async optimizeRecursive(e){return e.type==="filter"?this.optimizeFilter(e):e.type==="join"?{type:"join",left:await this.optimizeRecursive(e.left),right:await this.optimizeRecursive(e.right)}:e.type==="leftjoin"?{...e,left:await this.optimizeRecursive(e.left),right:await this.optimizeRecursive(e.right)}:e.type==="union"?{type:"union",left:await this.optimizeRecursive(e.left),right:await this.optimizeRecursive(e.right)}:e.type==="minus"?{...e,left:await this.optimizeRecursive(e.left),right:await this.optimizeRecursive(e.right)}:e.type==="project"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="orderby"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="slice"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="distinct"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="reduced"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="group"?{...e,input:await this.optimizeRecursive(e.input)}:e.type==="extend"?{...e,input:await this.optimizeRecursive(e.input)}:e}optimizeSyncRecursive(e,t){return e.type==="filter"?this.optimizeFilterSync(e,t):e.type==="join"?{type:"join",left:this.optimizeSyncRecursive(e.left,t),right:this.optimizeSyncRecursive(e.right,t)}:e.type==="leftjoin"?{...e,left:this.optimizeSyncRecursive(e.left,t),right:this.optimizeSyncRecursive(e.right,t)}:e.type==="union"?{type:"union",left:this.optimizeSyncRecursive(e.left,t),right:this.optimizeSyncRecursive(e.right,t)}:e.type==="minus"?{...e,left:this.optimizeSyncRecursive(e.left,t),right:this.optimizeSyncRecursive(e.right,t)}:e.type==="project"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="orderby"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="slice"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="distinct"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="reduced"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="group"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e.type==="extend"?{...e,input:this.optimizeSyncRecursive(e.input,t)}:e}async optimizeFilter(e){let t=this.detectContainsUUIDPattern(e.expression);if(!t)return{type:"filter",expression:e.expression,input:await this.optimizeRecursive(e.input)};let n=[];return this.tripleStore&&(n=await this.findSubjectsContainingUUID(t.uuid)),this.rewriteFilter(e,t,n)}optimizeFilterSync(e,t){let n=this.detectContainsUUIDPattern(e.expression);if(!n)return{type:"filter",expression:e.expression,input:this.optimizeSyncRecursive(e.input,t)};let i=t?t.filter(s=>s.includes(n.uuid)):[];return this.rewriteFilter(e,n,i)}rewriteFilter(e,t,n){if(this.lastOptimizationHints.push({type:"uuid-index-lookup",originalPattern:`FILTER(CONTAINS(STR(?${t.variable}), "${t.uuid}"))`,suggestedRewrite:n.length===1?`VALUES ?${t.variable} { <${n[0]}> }`:n.length>1?`VALUES ?${t.variable} { ${n.map(i=>`<${i}>`).join(" ")} }`:"No matching URIs found for UUID",estimatedSpeedup:n.length>0?"O(n) \u2192 O(1)":"N/A",matchedUri:n.length===1?n[0]:void 0}),n.length===0)return{type:"filter",expression:e.expression,input:this.optimizeSyncRecursive(e.input)};if(n.length===1){let i=this.injectSubjectConstraint(e.input,t.variable,n[0]);if(i!==e.input)return i}return this.createValuesJoin(e,t,n)}detectContainsUUIDPattern(e){if(e.type==="function"||e.type==="functionCall"){let t=e;if((typeof t.function=="string"?t.function.toLowerCase():t.function?.value?.toLowerCase()??"")==="contains"&&t.args.length===2)return this.analyzeContainsArgs(t.args[0],t.args[1],e)}if(e.type==="logical"&&e.operator==="&&")for(let t of e.operands){let n=this.detectContainsUUIDPattern(t);if(n)return n}return null}analyzeContainsArgs(e,t,n){let i=null;if(e.type==="function"||e.type==="functionCall"){let s=e;if((typeof s.function=="string"?s.function.toLowerCase():s.function?.value?.toLowerCase()??"")==="str"&&s.args.length===1){let c=s.args[0];c.type==="variable"&&(i=c.name)}}if(!i&&e.type==="variable"&&(i=e.name),!i)return null;if(t.type==="literal"){let c=String(t.value).match($N);if(c)return{variable:i,uuid:c[0].toLowerCase(),originalExpression:n}}return null}async findSubjectsContainingUUID(e){if(!this.tripleStore)return[];if(this.tripleStore.findSubjectsByUUID)return(await this.tripleStore.findSubjectsByUUID(e)).map(s=>s.value);let t=await this.tripleStore.subjects(),n=[];for(let i of t)i instanceof jN.IRI&&i.value.toLowerCase().includes(e.toLowerCase())&&n.push(i.value);return n}injectSubjectConstraint(e,t,n){if(e.type==="bgp"){let i=e.triples.map(a=>a.subject.type==="variable"&&a.subject.value===t?{...a,subject:{type:"iri",value:n}}:a);if(i.some((a,c)=>a.subject!==e.triples[c].subject))return{type:"bgp",triples:i}}if(e.type==="join"){let i=this.injectSubjectConstraint(e.left,t,n),s=this.injectSubjectConstraint(e.right,t,n);if(i!==e.left||s!==e.right)return{type:"join",left:i,right:s}}if(e.type==="filter"){let i=this.injectSubjectConstraint(e.input,t,n);if(i!==e.input)return{...e,input:i}}return e}createValuesJoin(e,t,n){return{type:"join",left:{type:"values",variables:[t.variable],bindings:n.map(a=>({[t.variable]:{type:"iri",value:a}}))},right:this.optimizeSyncRecursive(e.input)}}analyzeQuery(e){let t=[];return this.analyzeRecursive(e,t),t}analyzeRecursive(e,t){if(e.type==="filter"){let n=this.detectContainsUUIDPattern(e.expression);n&&t.push({type:"uuid-index-lookup",originalPattern:`FILTER(CONTAINS(STR(?${n.variable}), "${n.uuid}"))`,suggestedRewrite:`Use --optimize flag or rewrite as VALUES ?${n.variable} { <uri-containing-uuid> }`,estimatedSpeedup:"O(n) \u2192 O(1) with UUID index lookup"}),this.analyzeRecursive(e.input,t);return}e.type==="join"?(this.analyzeRecursive(e.left,t),this.analyzeRecursive(e.right,t)):e.type==="leftjoin"?(this.analyzeRecursive(e.left,t),this.analyzeRecursive(e.right,t)):e.type==="union"?(this.analyzeRecursive(e.left,t),this.analyzeRecursive(e.right,t)):e.type==="minus"?(this.analyzeRecursive(e.left,t),this.analyzeRecursive(e.right,t)):e.type==="project"?this.analyzeRecursive(e.input,t):e.type==="orderby"?this.analyzeRecursive(e.input,t):e.type==="slice"?this.analyzeRecursive(e.input,t):e.type==="distinct"?this.analyzeRecursive(e.input,t):e.type==="reduced"?this.analyzeRecursive(e.input,t):e.type==="group"?this.analyzeRecursive(e.input,t):e.type==="extend"&&this.analyzeRecursive(e.input,t)}};Xf.FilterContainsOptimizer=ty});var Lb=_(Jf=>{"use strict";Object.defineProperty(Jf,"__esModule",{value:!0});Jf.AlgebraOptimizer=void 0;var BN=ry(),ny=class{static{o(this,"AlgebraOptimizer")}constructor(){this.stats=new Map,this.tripleStore=null,this.filterContainsOptimizer=new BN.FilterContainsOptimizer}setTripleStore(e){this.tripleStore=e,this.filterContainsOptimizer.setTripleStore(e)}getOptimizationHints(){return this.filterContainsOptimizer.getLastOptimizationHints()}analyzeQuery(e){return this.filterContainsOptimizer.analyzeQuery(e)}optimize(e){let t=e;return t=this.eliminateEmptyBGPInFilterJoin(t),t=this.filterPushDown(t),t=this.joinReordering(t),t}async optimizeAsync(e){let t=e;return t=this.eliminateEmptyBGPInFilterJoin(t),this.tripleStore&&(t=await this.filterContainsOptimizer.optimize(t)),t=this.filterPushDown(t),t=this.joinReordering(t),t}optimizeWithSubjects(e,t){let n=e;return n=this.eliminateEmptyBGPInFilterJoin(n),n=this.filterContainsOptimizer.optimizeSync(n,t),n=this.filterPushDown(n),n=this.joinReordering(n),n}eliminateEmptyBGPInFilterJoin(e){if(e.type==="join"){if(e.left.type==="filter"){let t=e.left;if(t.input.type==="bgp"&&t.input.triples.length===0)return{type:"filter",expression:t.expression,input:this.eliminateEmptyBGPInFilterJoin(e.right)}}if(e.right.type==="filter"){let t=e.right;if(t.input.type==="bgp"&&t.input.triples.length===0)return{type:"filter",expression:t.expression,input:this.eliminateEmptyBGPInFilterJoin(e.left)}}return{type:"join",left:this.eliminateEmptyBGPInFilterJoin(e.left),right:this.eliminateEmptyBGPInFilterJoin(e.right)}}return e.type==="filter"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e.type==="leftjoin"?{...e,left:this.eliminateEmptyBGPInFilterJoin(e.left),right:this.eliminateEmptyBGPInFilterJoin(e.right)}:e.type==="union"?{...e,left:this.eliminateEmptyBGPInFilterJoin(e.left),right:this.eliminateEmptyBGPInFilterJoin(e.right)}:e.type==="minus"?{...e,left:this.eliminateEmptyBGPInFilterJoin(e.left),right:this.eliminateEmptyBGPInFilterJoin(e.right)}:e.type==="project"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e.type==="orderby"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e.type==="slice"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e.type==="distinct"?{...e,input:this.eliminateEmptyBGPInFilterJoin(e.input)}:e}filterPushDown(e){return e.type==="filter"?this.pushDownFilter(e):e.type==="join"?{type:"join",left:this.filterPushDown(e.left),right:this.filterPushDown(e.right)}:e.type==="leftjoin"?{...e,left:this.filterPushDown(e.left),right:this.filterPushDown(e.right)}:e.type==="union"?{type:"union",left:this.filterPushDown(e.left),right:this.filterPushDown(e.right)}:e.type==="minus"?{...e,left:this.filterPushDown(e.left),right:this.filterPushDown(e.right)}:e.type==="project"?{...e,input:this.filterPushDown(e.input)}:e.type==="orderby"?{...e,input:this.filterPushDown(e.input)}:e.type==="slice"?{...e,input:this.filterPushDown(e.input)}:e.type==="distinct"?{...e,input:this.filterPushDown(e.input)}:e}pushDownFilter(e){let t=e.input;if(t.type==="join"){let n=this.getFilterVariables(e.expression),i=this.getOperationVariables(t.left),s=this.getOperationVariables(t.right),a=n.every(u=>i.has(u)),c=n.every(u=>s.has(u));return a&&!c?{type:"join",left:{type:"filter",expression:e.expression,input:this.filterPushDown(t.left)},right:this.filterPushDown(t.right)}:c&&!a?{type:"join",left:this.filterPushDown(t.left),right:{type:"filter",expression:e.expression,input:this.filterPushDown(t.right)}}:{type:"filter",expression:e.expression,input:{type:"join",left:this.filterPushDown(t.left),right:this.filterPushDown(t.right)}}}return t.type==="union"?{type:"union",left:{type:"filter",expression:e.expression,input:this.filterPushDown(t.left)},right:{type:"filter",expression:e.expression,input:this.filterPushDown(t.right)}}:{type:"filter",expression:e.expression,input:this.filterPushDown(t)}}getFilterVariables(e){let t=[];if(e.type==="variable")t.push(e.name);else if(e.type==="comparison")t.push(...this.getFilterVariables(e.left)),t.push(...this.getFilterVariables(e.right));else if(e.type==="logical")for(let n of e.operands)t.push(...this.getFilterVariables(n));else if(e.type==="function")for(let n of e.args)t.push(...this.getFilterVariables(n));return Array.from(new Set(t))}getOperationVariables(e){let t=new Set;if(e.type==="bgp")for(let n of e.triples)n.subject.type==="variable"&&t.add(n.subject.value),n.predicate.type==="variable"&&t.add(n.predicate.value),n.object.type==="variable"&&t.add(n.object.value);else if(e.type==="join"){let n=this.getOperationVariables(e.left),i=this.getOperationVariables(e.right);return new Set([...n,...i])}else{if(e.type==="filter")return this.getOperationVariables(e.input);if(e.type==="leftjoin"){let n=this.getOperationVariables(e.left),i=this.getOperationVariables(e.right);return new Set([...n,...i])}else if(e.type==="union"){let n=this.getOperationVariables(e.left),i=this.getOperationVariables(e.right);return new Set([...n,...i])}else{if(e.type==="minus")return this.getOperationVariables(e.left);if(e.type==="project")return new Set(e.variables)}}return t}joinReordering(e){return e.type==="join"?this.reorderJoin(e):e.type==="filter"?{...e,input:this.joinReordering(e.input)}:e.type==="leftjoin"?{...e,left:this.joinReordering(e.left),right:this.joinReordering(e.right)}:e.type==="union"?{...e,left:this.joinReordering(e.left),right:this.joinReordering(e.right)}:e.type==="minus"?{...e,left:this.joinReordering(e.left),right:this.joinReordering(e.right)}:e.type==="project"?{...e,input:this.joinReordering(e.input)}:e.type==="orderby"?{...e,input:this.joinReordering(e.input)}:e.type==="slice"?{...e,input:this.joinReordering(e.input)}:e.type==="distinct"?{...e,input:this.joinReordering(e.input)}:e}reorderJoin(e){let t=this.estimateCost(e.left);return this.estimateCost(e.right)<t?{type:"join",left:this.joinReordering(e.right),right:this.joinReordering(e.left)}:{type:"join",left:this.joinReordering(e.left),right:this.joinReordering(e.right)}}estimateCost(e){if(e.type==="bgp"){let t=e.triples.length*100;for(let n of e.triples)n.subject.type==="variable"&&(t+=10),n.predicate.type==="variable"&&(t+=20),n.object.type==="variable"&&(t+=10);return t}return e.type==="filter"?this.estimateCost(e.input)*.3:e.type==="join"?this.estimateCost(e.left)*this.estimateCost(e.right):e.type==="leftjoin"?this.estimateCost(e.left)+this.estimateCost(e.right)*.5:e.type==="union"?this.estimateCost(e.left)+this.estimateCost(e.right):e.type==="minus"?this.estimateCost(e.left)+this.estimateCost(e.right)*.3:100}setStatistics(e,t){this.stats.set(e,t)}getStatistics(e){return this.stats.get(e)}};Jf.AlgebraOptimizer=ny});var Mb=_(Zf=>{"use strict";Object.defineProperty(Zf,"__esModule",{value:!0});Zf.AlgebraSerializer=void 0;var iy=class{static{o(this,"AlgebraSerializer")}toString(e,t=0){let n=" ".repeat(t);switch(e.type){case"bgp":return`${n}BGP [
261
261
  ${e.triples.map(l=>`${n} ${this.tripleToString(l)}`).join(`
262
262
  `)}
263
263
  ${n}]`;case"filter":return`${n}Filter(
@@ -461,7 +461,7 @@ globstar while`,e,d,t,p,v),this.matchOne(e.slice(d),t.slice(p),n))return this.de
461
461
  ${t}
462
462
  Continue? (y/n): `,s=>{n.close(),i(s.toLowerCase()==="y"||s.toLowerCase()==="yes")})})}};var qd=class{static{o(this,"CLIContainer")}static setup(){ac.container.register(Hu.DI_TOKENS.ILogger,{useFactory:o(()=>new jd("exocortex-cli"),"useFactory")}),ac.container.register(Hu.DI_TOKENS.IEventBus,{useClass:$d}),ac.container.register(Hu.DI_TOKENS.IConfiguration,{useClass:Bd}),ac.container.register(Hu.DI_TOKENS.INotificationService,{useClass:Ud})}static reset(){ac.container.clearInstances()}};function zu(r){qd.setup(),Pa.container.register(Ds.DI_TOKENS.IVaultAdapter,{useFactory:o(()=>new Ti(r),"useFactory")})}o(zu,"setupContainer");function w$(r){if(r.length===0)return"No practices found.";let e=[];for(let t of r){let n="\u2B1C";t.doneToday?n="\u2705":t.inProgressToday&&(n="\u{1F504}");let i=t.estimatedDuration?` (${t.estimatedDuration}m)`:"";e.push(`${n} ${t.label}${i}`)}return e.join(`
463
463
  `)}o(w$,"formatPractices");function E$(r){let e=[`\u{1F4C5} Daily Review: ${r.date}`,"","\u{1F4CA} Tasks:",` Planned: ${r.plannedCount}`,` Completed: ${r.completedCount}`,` In Progress: ${r.inProgressCount}`,` Progress: ${r.completionPercentage}%`,"",`\u23F1\uFE0F Total time: ${Math.round(r.totalTimeMinutes)} minutes`];if(r.practicesDue.length>0){e.push(""),e.push(`\u{1F4CB} Practices due (${r.practicesDue.length}):`);for(let t of r.practicesDue){let n=t.estimatedDuration?` (${t.estimatedDuration}m)`:"";e.push(` \u2B1C ${t.label}${n}`)}}return e.join(`
464
- `)}o(E$,"formatSummary");function Yx(){let r=new It("daily").description("Daily review operations for mobile-friendly workflow");return r.command("practices").description("List today's practices (recurring tasks)").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async e=>{let t=e.format||"text";Y.setFormat(t);try{let n=(0,oc.resolve)(e.vault);if(!(0,cc.existsSync)(n))throw new jt(n);zu(n);let s=await Pa.container.resolve(Ds.DailyReviewService).getPractices();if(t==="json"){let a=$e.success({practices:s,count:s.length});console.log(JSON.stringify(a,null,2))}else console.log(w$(s))}catch(n){Y.handle(n)}}),r.command("summary").description("Show today's daily review summary").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").option("--date <value>","Date in YYYY-MM-DD format (default: today)").action(async e=>{let t=e.format||"text";Y.setFormat(t);try{let n=(0,oc.resolve)(e.vault);if(!(0,cc.existsSync)(n))throw new jt(n);zu(n);let i=Pa.container.resolve(Ds.DailyReviewService),s;if(e.date&&(s=new Date(e.date),isNaN(s.getTime())))throw new st(`Invalid date format: ${e.date}`,"exocortex daily summary --date YYYY-MM-DD",{date:e.date});let a=await i.getDailyReviewSummary(s);if(t==="json"){let c=$e.success(a);console.log(JSON.stringify(c,null,2))}else console.log(E$(a))}catch(n){Y.handle(n)}}),r.command("log").description("Quick capture an activity").argument("<label>","Activity label/description").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").option("--start","Start the task immediately (default: true)").option("--no-start","Don't start the task immediately").action(async(e,t)=>{let n=t.format||"text";Y.setFormat(n);try{let i=(0,oc.resolve)(t.vault);if(!(0,cc.existsSync)(i))throw new jt(i);zu(i);let s=Pa.container.resolve(Ds.DailyReviewService),a=t.start!==!1,c=await s.quickCapture(e,a);if(n==="json"){let u=$e.success(c);console.log(JSON.stringify(u,null,2))}else{let u=c.started?"\u{1F504}":"\u2B1C";console.log(`${u} Created: ${c.label}`),console.log(` Path: ${c.path}`)}}catch(i){Y.handle(i)}}),r.command("start").description("Start a practice (create task instance from prototype)").argument("<prototype-uid>","Practice/prototype UID to start").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async(e,t)=>{let n=t.format||"text";Y.setFormat(n);try{let i=(0,oc.resolve)(t.vault);if(!(0,cc.existsSync)(i))throw new jt(i);zu(i);let a=await Pa.container.resolve(Ds.DailyReviewService).createFromPractice({prototypeUid:e,startImmediately:!0});if(n==="json"){let c=$e.success(a);console.log(JSON.stringify(c,null,2))}else console.log(`\u{1F504} Started: ${a.label}`),console.log(` Path: ${a.path}`)}catch(i){Y.handle(i)}}),r.command("done").description("Mark a practice as done").argument("<prototype-uid>","Practice/prototype UID to mark as done").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async(e,t)=>{let n=t.format||"text";Y.setFormat(n);try{let i=(0,oc.resolve)(t.vault);if(!(0,cc.existsSync)(i))throw new jt(i);if(zu(i),await Pa.container.resolve(Ds.DailyReviewService).markPracticeDone(e),n==="json"){let a=$e.success({prototypeUid:e,status:"done"});console.log(JSON.stringify(a,null,2))}else console.log(`\u2705 Marked as done: ${e}`)}catch(i){Y.handle(i)}}),r}o(Yx,"dailyReviewCommand");var Oi=new It;Oi.name("exocortex").description("CLI tool for Exocortex knowledge management system").version("15.14.0");var Qx=Oi.command("sparql").description("SPARQL query execution and cache management");Qx.addCommand(wA());Qx.addCommand(AA());Oi.addCommand(Fx());Oi.addCommand(Lx());Oi.addCommand(Mx());Oi.addCommand(jx());Oi.addCommand($x());Oi.addCommand(Gx());Oi.addCommand(Yx());Oi.parse();
464
+ `)}o(E$,"formatSummary");function Yx(){let r=new It("daily").description("Daily review operations for mobile-friendly workflow");return r.command("practices").description("List today's practices (recurring tasks)").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async e=>{let t=e.format||"text";Y.setFormat(t);try{let n=(0,oc.resolve)(e.vault);if(!(0,cc.existsSync)(n))throw new jt(n);zu(n);let s=await Pa.container.resolve(Ds.DailyReviewService).getPractices();if(t==="json"){let a=$e.success({practices:s,count:s.length});console.log(JSON.stringify(a,null,2))}else console.log(w$(s))}catch(n){Y.handle(n)}}),r.command("summary").description("Show today's daily review summary").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").option("--date <value>","Date in YYYY-MM-DD format (default: today)").action(async e=>{let t=e.format||"text";Y.setFormat(t);try{let n=(0,oc.resolve)(e.vault);if(!(0,cc.existsSync)(n))throw new jt(n);zu(n);let i=Pa.container.resolve(Ds.DailyReviewService),s;if(e.date&&(s=new Date(e.date),isNaN(s.getTime())))throw new st(`Invalid date format: ${e.date}`,"exocortex daily summary --date YYYY-MM-DD",{date:e.date});let a=await i.getDailyReviewSummary(s);if(t==="json"){let c=$e.success(a);console.log(JSON.stringify(c,null,2))}else console.log(E$(a))}catch(n){Y.handle(n)}}),r.command("log").description("Quick capture an activity").argument("<label>","Activity label/description").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").option("--start","Start the task immediately (default: true)").option("--no-start","Don't start the task immediately").action(async(e,t)=>{let n=t.format||"text";Y.setFormat(n);try{let i=(0,oc.resolve)(t.vault);if(!(0,cc.existsSync)(i))throw new jt(i);zu(i);let s=Pa.container.resolve(Ds.DailyReviewService),a=t.start!==!1,c=await s.quickCapture(e,a);if(n==="json"){let u=$e.success(c);console.log(JSON.stringify(u,null,2))}else{let u=c.started?"\u{1F504}":"\u2B1C";console.log(`${u} Created: ${c.label}`),console.log(` Path: ${c.path}`)}}catch(i){Y.handle(i)}}),r.command("start").description("Start a practice (create task instance from prototype)").argument("<prototype-uid>","Practice/prototype UID to start").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async(e,t)=>{let n=t.format||"text";Y.setFormat(n);try{let i=(0,oc.resolve)(t.vault);if(!(0,cc.existsSync)(i))throw new jt(i);zu(i);let a=await Pa.container.resolve(Ds.DailyReviewService).createFromPractice({prototypeUid:e,startImmediately:!0});if(n==="json"){let c=$e.success(a);console.log(JSON.stringify(c,null,2))}else console.log(`\u{1F504} Started: ${a.label}`),console.log(` Path: ${a.path}`)}catch(i){Y.handle(i)}}),r.command("done").description("Mark a practice as done").argument("<prototype-uid>","Practice/prototype UID to mark as done").option("--vault <path>","Path to Obsidian vault",process.cwd()).option("--format <type>","Output format: text|json","text").action(async(e,t)=>{let n=t.format||"text";Y.setFormat(n);try{let i=(0,oc.resolve)(t.vault);if(!(0,cc.existsSync)(i))throw new jt(i);if(zu(i),await Pa.container.resolve(Ds.DailyReviewService).markPracticeDone(e),n==="json"){let a=$e.success({prototypeUid:e,status:"done"});console.log(JSON.stringify(a,null,2))}else console.log(`\u2705 Marked as done: ${e}`)}catch(i){Y.handle(i)}}),r}o(Yx,"dailyReviewCommand");var Oi=new It;Oi.name("exocortex").description("CLI tool for Exocortex knowledge management system").version("15.14.1");var Qx=Oi.command("sparql").description("SPARQL query execution and cache management");Qx.addCommand(wA());Qx.addCommand(AA());Oi.addCommand(Fx());Oi.addCommand(Lx());Oi.addCommand(Mx());Oi.addCommand(jx());Oi.addCommand($x());Oi.addCommand(Gx());Oi.addCommand(Yx());Oi.parse();
465
465
  /*! Bundled license information:
466
466
 
467
467
  reflect-metadata/Reflect.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kitelev/exocortex-cli",
3
- "version": "15.14.0",
3
+ "version": "15.14.1",
4
4
  "description": "CLI tool for Exocortex knowledge management system - SPARQL queries, task management, and more",
5
5
  "main": "dist/index.js",
6
6
  "bin": {