@dcupl/common 2.0.0-beta.23 → 2.0.0-beta.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Compiles customer-authored JavaScript (scripts, custom operators, loader transformers) into a
3
+ * callable function. `source` is the function body, `params` the parameter names, exactly as
4
+ * `new Function(...params, source)` takes them.
5
+ *
6
+ * The default compiles in the caller's realm. A host that runs code it does not trust (the app
7
+ * runner, the workflow runner) replaces it with a compiler that evaluates inside a sandbox, so
8
+ * the code never sees `process`, `require` or the host's globals (dcupl-app-runner#72).
9
+ */
10
+ export type ScriptCompiler = (source: string, params: string[]) => (...args: any[]) => any;
11
+ export declare const defaultScriptCompiler: ScriptCompiler;
@@ -1,7 +1,12 @@
1
+ import { ScriptCompiler } from './script-compiler.js';
1
2
  export type ScriptType = 'script' | 'async_script' | 'sort' | 'operator' | 'validator';
2
3
  export declare class ScriptController {
3
4
  private scripts;
4
5
  private scriptFunctions;
6
+ /** How script text becomes a function; hosts running untrusted code swap in a sandboxed compiler. */
7
+ compiler: ScriptCompiler;
8
+ /** `false` refuses to run any script; set from `DcuplInitOptions.scripting.enabled`. */
9
+ enabled: boolean;
5
10
  constructor();
6
11
  keys(): any;
7
12
  setScript(key: string, script: any): void;
@@ -7,6 +7,7 @@ import { DcuplItemsOptions } from './list.types.js';
7
7
  import { DcuplGlobalQueryOptions } from './query.types.js';
8
8
  import { SuggestionOptions } from './suggestion.types.js';
9
9
  import { LogLevel, LogEntry } from '../logger/index.js';
10
+ import { ScriptCompiler } from '../script-compiler.js';
10
11
  export type DcuplInitOptions = {
11
12
  config?: DcuplInitConfig;
12
13
  /**
@@ -27,6 +28,23 @@ export type DcuplInitOptions = {
27
28
  * Configure logging behavior
28
29
  */
29
30
  logging?: DcuplInitLoggingConfig;
31
+ /**
32
+ * How customer JavaScript (scripts, custom operators, loader transformers) is compiled and
33
+ * whether it runs at all
34
+ */
35
+ scripting?: DcuplInitScriptingConfig;
36
+ };
37
+ export type DcuplInitScriptingConfig = {
38
+ /**
39
+ * `false` runs no customer JavaScript at all: `dcupl.scripts.execute` throws and the loader skips
40
+ * `script`, `operator` and `transformer` resources with a `ScriptingDisabled` quality error. Default `true`.
41
+ */
42
+ enabled?: boolean;
43
+ /**
44
+ * Compiles script text into a function. Defaults to `new Function` in the caller's realm; hosts that
45
+ * run untrusted code pass a sandboxed compiler.
46
+ */
47
+ compile?: ScriptCompiler;
30
48
  };
31
49
  export type DcuplInitPerformanceConfig = {
32
50
  /**
@@ -106,7 +106,7 @@ export declare namespace QualityAnalyzer {
106
106
  attribute?: string;
107
107
  };
108
108
  type LoaderErrorGroup = 'LoaderConfigError' | 'ResourceError';
109
- type LoaderErrorType = 'InvalidConfig' | 'InvalidResource';
109
+ type LoaderErrorType = 'InvalidConfig' | 'InvalidResource' | 'ScriptingDisabled' | 'TransformerError';
110
110
  type LoaderErrors = DcuplErrorBase & {
111
111
  type: 'loader';
112
112
  errorGroup: LoaderErrorGroup;
@@ -1,5 +1,5 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("lodash-es");function I(i){const e=M(i);return oe(e)}function M(i){if(typeof i!="object"||i===null)return String(i);if(Array.isArray(i))return"["+i.map(M).join(",")+"]";const e=Object.keys(i).sort();let t="{";for(let r=0;r<e.length;r++){const s=e[r];t+=s+":"+M(i[s]),r<e.length-1&&(t+=",")}return t+="}",t}function oe(i){let e=0;for(let t=0;t<i.length;t++){const r=i.charCodeAt(t);e=(e<<5)-e+r,e|=0}return e.toString(16)}const b={now:()=>typeof performance<"u"&&performance.now?performance.now():new Date().getTime(),mark:i=>{typeof performance<"u"&&performance.mark&&performance.mark(i)},measure:(i,e,t)=>{typeof performance<"u"&&performance.measure&&performance.measure(i,e,t)},getEntriesByName(i){if(typeof performance<"u"&&performance.getEntriesByName)return performance.getEntriesByName(i)},getEntriesByType(i){if(typeof performance<"u"&&performance.getEntriesByType)return performance.getEntriesByType(i)}};class ae{data;enabled=!1;constructor(){}init(e){this.data=new Map,this.enabled=e}set(e){if(!this.enabled)return e.value;const t=this.getKey(e.value.name,e.context);return this.data.set(t,e.value),this.data.get(t)}mark(e){if(!this.enabled)return;const t=this.getKey(e.name,e.context),r={name:e.name,type:"mark",value:b.now(),createdAt:Date.now()};return this.data.set(t,r),r}measure(e){if(!this.enabled)return;const t=this.getKey(e.name,e.context),r=this.data.get(this.getKey(e.start,e.context)),s=this.data.get(this.getKey(e.end,e.context));if(!r||!s)return;const n=s.value-r.value,o=Math.round(n*100)/100,a=this.data.get(t);if(a&&e.sum){const u=a.value+o,f={...a,value:u};return this.data.set(t,f),f}const c={name:e.name,type:"measure",value:o,createdAt:Date.now()};return e.detail&&(c.detail=e.detail),this.data.set(t,c),c}update(e){if(!this.enabled)return e.value;const t=this.getKey(e.value.name,e.context),r=this.data.get(t);if(r){const s={...r,...e.value};this.data.set(t,s)}else this.data.set(t,e.value);return this.data.get(t)}getResourceInfosFromPerformanceAPI(){return typeof performance>"u"?[]:b.getEntriesByType("resource")}get(e){const t=this.getKey(e.name,e.context);return this.data.get(t)}getByType(e){return Array.from(this.data.values()).filter(t=>t.type===e)}getByName(e){return Array.from(this.data.values()).filter(t=>t.name===e)}clear(){this.data.clear()}getKey(e,t){if(!t)return e;const r=I(t);return e+"_"+r}}let P=class _{nodes;edges;nodeKinds=new Map;nodeMeta=new Map;edgePolicy;constructor(){this.nodes=new Set,this.edges=new Map}addNode(e,t){this.nodes.has(e)||(this.nodes.add(e),this.edges.set(e,new Set)),t?.kind!==void 0&&this.nodeKinds.set(e,t.kind),t?.meta!==void 0&&this.nodeMeta.set(e,t.meta)}addDependency(e,t){if(!this.nodes.has(e)||!this.nodes.has(t))throw new Error("Both nodes must exist before adding a dependency.");if(this.edgePolicy&&!this.edgePolicy({name:e,kind:this.nodeKinds.get(e)},{name:t,kind:this.nodeKinds.get(t)}))throw new Error(`Edge policy rejected dependency from "${e}" to "${t}".`);this.edges.get(e).add(t)}setEdgePolicy(e){this.edgePolicy=e}setNodeKind(e,t){if(!this.nodes.has(e))throw new Error("Node does not exist.");t===void 0?this.nodeKinds.delete(e):this.nodeKinds.set(e,t)}getNodeKind(e){return this.nodeKinds.get(e)}setNodeMeta(e,t){if(!this.nodes.has(e))throw new Error("Node does not exist.");this.nodeMeta.set(e,t)}getNodeMeta(e){return this.nodeMeta.get(e)}removeNode(e){if(!this.nodes.has(e))throw new Error("Node does not exist.");this.nodes.delete(e),this.edges.delete(e);for(let t of this.edges.values())t.delete(e)}removeDependency(e,t){if(!this.edges.has(e))throw new Error("From node does not exist.");this.edges.get(e).delete(t)}hasNode(e){return this.nodes.has(e)}hasDependency(e,t){return this.edges.has(e)?this.edges.get(e).has(t):!1}getDependencies(e){if(!this.edges.has(e))throw new Error("Node does not exist.");return Array.from(this.edges.get(e))}getDependents(e){const t=[];for(let[r,s]of this.edges)s.has(e)&&t.push(r);return t}isCyclic(){const e=new Set,t=new Set,r=s=>{if(e.has(s))return!1;if(t.has(s))return!0;t.add(s);const n=this.edges.get(s);if(n){for(let o of n)if(r(o))return!0}return t.delete(s),e.add(s),!1};for(let s of this.nodes)if(r(s))return!0;return!1}validateNoCycles(){const e=new Set,t=new Set,r=[],s=n=>{if(e.has(n))return null;if(t.has(n)){const a=r.indexOf(n);return r.slice(a).concat([n])}t.add(n),r.push(n);const o=this.edges.get(n);if(o)for(let a of o){const c=s(a);if(c)return c}return r.pop(),t.delete(n),e.add(n),null};for(let n of this.nodes){const o=s(n);if(o)return{hasCycle:!0,path:o}}return{hasCycle:!1}}order(e){const t=new Set,r=new Set,s=[],n=e?.allowCycles??!1,o=a=>{if(t.has(a))return;if(r.has(a)){if(n)return;throw new Error("Graph has a cycle.")}r.add(a);const c=this.edges.get(a);if(c)for(let u of c)o(u);r.delete(a),t.add(a),s.push(a)};for(let a of this.nodes)t.has(a)||o(a);return s}clear(){this.nodes.clear(),this.edges.clear()}getNodes(){return Array.from(this.nodes)}getAllEdges(){const e=[];for(let[t,r]of this.edges)for(let s of r)e.push([t,s]);return e}getNodesWithNoDependants(){if(this.nodes.size===0)return[];const e=new Set;for(const r of this.edges.values())for(const s of r)e.add(s);const t=[];for(const r of this.nodes)e.has(r)||t.push(r);return t}getNodesByKind(e){const t=[];for(const r of this.nodes)this.nodeKinds.get(r)===e&&t.push(r);return t}getRootsByKind(e){const t=new Set(this.getNodesWithNoDependants()),r=Array.from(t);return e?r.filter(s=>this.nodeKinds.get(s)===e):r}getLeavesByKind(e){const t=[];for(const r of this.nodes){const s=this.edges.get(r);(!s||s.size===0)&&(!e||this.nodeKinds.get(r)===e)&&t.push(r)}return t}getDependenciesOfKind(e,t){return this.getDependencies(e).filter(s=>this.nodeKinds.get(s)===t)}getDependentsOfKind(e,t){return this.getDependents(e).filter(s=>this.nodeKinds.get(s)===t)}plan(e){const t=new Map;for(const o of this.nodes)t.set(o,0);for(const o of this.edges.values())for(const a of o)t.set(a,(t.get(a)||0)+1);const r=[];let s=Array.from(this.nodes).filter(o=>(t.get(o)||0)===0);const n=new Set;for(;s.length>0;){const o=s.slice();r.push(o),s=[];for(const a of o){if(n.has(a))continue;n.add(a);const c=this.edges.get(a);if(c)for(const u of c)t.set(u,(t.get(u)||0)-1),(t.get(u)||0)===0&&s.push(u)}}if(n.size!==this.nodes.size)throw new Error("Graph has a cycle.");if(e?.filterKinds&&e.filterKinds.length>0){const o=new Set(e.filterKinds);return{batches:r.map(a=>a.filter(c=>o.has(this.nodeKinds.get(c))))}}return{batches:r}}getImpactedNodes(e,t="downstream",r){const s=new Set(e),n=u=>!r||r.length===0||r.includes(this.nodeKinds.get(u)??void 0),o=()=>{const u=new Set,f=Array.from(s);for(;f.length;){const l=f.shift();for(const[d,h]of this.edges)h.has(l)&&!u.has(d)&&(u.add(d),f.push(d))}return u},a=()=>{const u=new Set,f=Array.from(s);for(;f.length;){const l=f.shift(),d=this.edges.get(l);if(d)for(const h of d)u.has(h)||(u.add(h),f.push(h))}return u};let c;return t==="both"?c=new Set([...o(),...a()]):t==="upstream"?c=a():c=o(),Array.from(c).filter(n)}toJSON(){const e=Array.from(this.nodes).map(r=>({name:r,kind:this.nodeKinds.get(r),meta:this.nodeMeta.get(r)})),t=this.getAllEdges().map(([r,s])=>({from:r,to:s}));return{nodes:e,edges:t}}static fromJSON(e){const t=new _;for(const r of e.nodes)t.addNode(r.name,{kind:r.kind,meta:r.meta});for(const r of e.edges)t.addDependency(r.from,r.to);return t}diff(e){const t=new Set(this.getNodes()),r=new Set(e.getNodes()),s=Array.from(r).filter(l=>!t.has(l)),n=Array.from(t).filter(l=>!r.has(l)),o=new Set(this.getAllEdges().map(l=>l.join("→"))),a=new Set(e.getAllEdges().map(l=>l.join("→"))),c=Array.from(a).filter(l=>!o.has(l)).map(l=>l.split("→")),u=Array.from(o).filter(l=>!a.has(l)).map(l=>l.split("→")),f=[];for(const l of new Set([...t,...r])){const d=this.nodeKinds.get(l),h=e.nodeKinds.get(l);d!==h&&f.push({name:l,from:d,to:h})}return{addedNodes:s,removedNodes:n,addedEdges:c,removedEdges:u,kindChanges:f}}};class ce{graph;nodeIndex;constructor(){this.graph=new P,this.nodeIndex=new Map}getNodeId(e,t){return`${e}.${t}`}parseNodeId(e){const t=e.split(".");return{modelKey:t[0],attributeKey:t.slice(1).join(".")}}addAttribute(e){const t=this.getNodeId(e.modelKey,e.attributeKey);this.nodeIndex.has(t)||(this.graph.addNode(t,{meta:e}),this.nodeIndex.set(t,e))}addAttributeDependency(e,t){this.addAttribute(e),this.addAttribute(t);const r=this.getNodeId(e.modelKey,e.attributeKey),s=this.getNodeId(t.modelKey,t.attributeKey);this.graph.hasDependency(r,s)||this.graph.addDependency(r,s)}getImpactedAttributes(e){const t=e.map(a=>this.getNodeId(a.modelKey,a.attributeKey)),s=this.graph.getImpactedNodes(t,"downstream").map(a=>this.nodeIndex.get(a)).filter(a=>a!==void 0),n=[...e,...s],o=new Set;return n.filter(a=>{const c=this.getNodeId(a.modelKey,a.attributeKey);return o.has(c)?!1:(o.add(c),!0)})}getProcessingOrder(e){const t=new Map,r=[...e].sort((s,n)=>s.processingStep-n.processingStep);for(const s of r){const{modelKey:n,attributeKey:o,processingStep:a}=s;t.has(n)||t.set(n,new Map);const c=t.get(n);c.has(a)||c.set(a,new Set),c.get(a).add(o)}return t}getAttributesForModel(e){const t=[];for(const r of this.nodeIndex.values())r.modelKey===e&&t.push(r);return t}getDependencies(e){const t=this.getNodeId(e.modelKey,e.attributeKey);return this.graph.hasNode(t)?this.graph.getDependencies(t).map(s=>this.nodeIndex.get(s)).filter(s=>s!==void 0):[]}getDependents(e){const t=this.getNodeId(e.modelKey,e.attributeKey);return this.graph.hasNode(t)?this.graph.getDependents(t).map(s=>this.nodeIndex.get(s)).filter(s=>s!==void 0):[]}hasDependencies(e){const t=this.getNodeId(e.modelKey,e.attributeKey);return this.graph.hasNode(t)?this.graph.getDependencies(t).length>0:!1}hasNode(e){return this.nodeIndex.has(e)}getAllAttributes(){return Array.from(this.nodeIndex.values())}getMaxDepth(){let e=0;const t=(r,s=new Set)=>{if(s.has(r))return 0;s.add(r);const n=this.graph.getDependencies(r);if(n.length===0)return 1;let o=0;for(const a of n){const c=t(a,new Set(s));o=Math.max(o,c)}return o+1};for(const r of this.graph.getNodes()){const s=t(r);e=Math.max(e,s)}return e}validateCompleteness(e){const t=[];for(const[r,s]of e)for(const n of s){const o=this.getNodeId(r,n);this.hasNode(o)||t.push({modelKey:r,attributeKey:n})}return{isComplete:t.length===0,missing:t}}clear(){this.graph.clear(),this.nodeIndex.clear()}getStats(){const e=new Map,t=new Map;for(const r of this.nodeIndex.values())e.set(r.modelKey,(e.get(r.modelKey)||0)+1),t.set(r.processingStep,(t.get(r.processingStep)||0)+1);return{totalAttributes:this.nodeIndex.size,totalDependencies:this.graph.getAllEdges().length,maxDepth:this.getMaxDepth(),attributesByModel:e,attributesByStep:t}}toJSON(){return{nodes:Array.from(this.nodeIndex.values()),edges:this.graph.getAllEdges().map(([e,t])=>{const r=this.parseNodeId(e),s=this.parseNodeId(t);return{from:r,to:s}})}}}const T={silent:0,error:1,warn:2,info:3,debug:4};class g{config;static globalConfig={};constructor(e={}){this.config={level:e.level??g.globalConfig.level??this.getDefaultLevel(),format:e.format??g.globalConfig.format??this.getDefaultFormat(),prefix:e.prefix,onLog:e.onLog??g.globalConfig.onLog,onTrackError:e.onTrackError??g.globalConfig.onTrackError}}static setGlobalConfig(e){g.globalConfig={...g.globalConfig,...e}}static getGlobalConfig(){return{...g.globalConfig}}static setModuleLevel(e,t){g.globalConfig.onLog||(g.globalConfig.onLog=void 0),g._moduleOverrides||(g._moduleOverrides=new Map),g._moduleOverrides.set(e,t)}static getModuleLevel(e){if(!(!e||!g._moduleOverrides))return g._moduleOverrides.get(e)}getDefaultLevel(){return"info"}getDefaultFormat(){return"pretty"}getEffectiveLevel(){if(this.config.prefix){const e=g.getModuleLevel(this.config.prefix);if(e)return e}return this.config.level}shouldLog(e){const t=this.getEffectiveLevel();return T[e]<=T[t]}formatMessage(e){if(this.config.format==="json"){const o={timestamp:new Date(e.timestamp).toISOString(),level:e.level,message:e.message};return e.prefix&&(o.module=e.prefix),e.context&&(o.context=e.context),e.error&&(o.error={name:e.error.name,message:e.error.message,stack:e.error.stack}),JSON.stringify(o)}const t=new Date(e.timestamp).toISOString().substring(11,23),r=e.prefix?`[${e.prefix}]`:"",s=this.getLevelIcon(e.level),n=e.context?` ${JSON.stringify(e.context)}`:"";return`${t} ${s} ${r} ${e.message}${n}`.trim()}getLevelIcon(e){switch(e){case"error":return"✖";case"warn":return"⚠";case"info":return"ℹ";case"debug":return"⚙";default:return" "}}log(e,t,r,s){if(!this.shouldLog(e))return;const n={level:e,message:t,timestamp:Date.now(),prefix:this.config.prefix,context:r,error:s};if(this.config.onLog){this.config.onLog(n);return}const o=this.formatMessage(n);if(typeof console<"u")switch(e){case"error":s?console.error(o,s):console.error(o);break;case"warn":console.warn(o);break;case"debug":console.debug?console.debug(o):console.log(o);break;default:console.log(o)}}error(e,t,r){const s=t instanceof Error?t:void 0,n=t instanceof Error?r:t;this.log("error",e,n,s)}trackError(e,t,r){if(this.error(e,t,r?.context),this.config.onTrackError){const s={level:"error",message:e,timestamp:Date.now(),prefix:this.config.prefix,context:r?.context,error:t,errorType:r?.errorType,errorGroup:r?.errorGroup};this.config.onTrackError(s)}}warn(e,t){this.log("warn",e,t)}info(e,t){this.log("info",e,t)}debug(e,t){this.log("debug",e,t)}child(e){const t={...this.config,...e,prefix:e.prefix?this.config.prefix?`${this.config.prefix}:${e.prefix}`:e.prefix:this.config.prefix};return new g(t)}configure(e){Object.assign(this.config,e)}}const z=new g;class ue{constructor(e){this.enabled=e,this.cache=new Map,this.cacheDependencies=new Map}enabled;cache;cacheDependencies;hitCount=0;missCount=0;log=z.child({prefix:"CacheController"});get(e,t){if(!this.enabled)return;const r=this.getCacheName(e,t);return this.cache.has(r)?this.hitCount++:this.missCount++,this.cache.get(r)}set(e,t,r,s){if(!this.enabled)return;const n=this.getCacheName(e,t);this.cache.set(n,r),s?this.cacheDependencies.set(n,s):this.log.debug(`Cache entry '${e}' stored without dependencies. This prevents granular invalidation and may cause stale data.`)}has(e,t){return this.cache.has(this.getCacheName(e,t))}clear(){this.cache.clear(),this.cacheDependencies.clear(),this.hitCount=0,this.missCount=0}invalidateByDependencies(e){if(!this.enabled)return;const t=[];for(const[r,s]of this.cacheDependencies){let n=!1;for(const[o,a]of e){if(s.models.has(o))if(s.modelAttributes.has(o)){const c=s.modelAttributes.get(o);for(const u of a)if(c.has(u)){n=!0;break}}else n=!0;if(n)break}n&&t.push(r)}for(const r of t)this.cache.delete(r),this.cacheDependencies.delete(r)}invalidateByModels(e){if(!this.enabled)return;const t=new Set(e),r=[];for(const[s,n]of this.cacheDependencies)for(const o of t)if(n.models.has(o)){r.push(s);break}for(const s of r)this.cache.delete(s),this.cacheDependencies.delete(s)}invalidateByKeyPrefix(e){if(!this.enabled)return;const t=[];for(const r of this.cache.keys())r.startsWith(e+"_")&&t.push(r);for(const r of t)this.cache.delete(r),this.cacheDependencies.delete(r)}invalidateForModel(e){this.invalidateByModels([e])}invalidateForAttribute(e,t){if(!this.enabled)return;const r=new Map;r.set(e,new Set([t])),this.invalidateByDependencies(r)}invalidateMatching(e){if(!this.enabled)return;const t=[];for(const r of this.cache.keys())e(r)&&t.push(r);for(const r of t)this.cache.delete(r),this.cacheDependencies.delete(r)}generateContext(e){try{return p.cloneDeep(e)}catch(t){return this.log.error("Error in cache generateContext",t),e}}getCacheName(e,t){const r=I(t);return e+"_"+r}getStats(){const e=this.hitCount+this.missCount,t=e>0?this.hitCount/e:0;return{size:this.cache.size,hitRate:t,totalEntries:this.cache.size,entriesWithDependencies:this.cacheDependencies.size,hits:this.hitCount,misses:this.missCount}}}const N=(i,e="")=>{if(!(typeof i!="string"||!i.startsWith("/")||!i.endsWith("/")))return{pattern:i.slice(1,-1),flags:e}},fe=(i,e="")=>`${i}#${e}`,le=i=>`${i.gt}_${i.gte}_${i.lt}_${i.lte}_${i.eq}_${i.ne}`,de=i=>`${i.gt}_${i.gte}_${i.lt}_${i.lte}_${i.eq}_${i.ne}`,he=(i,e)=>{const t=typeof e=="function"?e:r=>r[e];return[...i.reduce((r,s)=>{const n=s==null?s:t(s);return r.has(n)||r.set(n,s),r},new Map).values()]},pe=(i,e)=>i.reduce(function(t,r){const s=typeof e=="function"?e(r):r[e];return Object.prototype.hasOwnProperty.call(t,s)||(t[s]=[]),t[s].push(r),t},{});function B(i=10){let e="";const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";for(let r=0;r<i;r++)e+=t.charAt(Math.floor(Math.random()*t.length));return e}const ge=i=>i.replace(/\/+$/,""),j=i=>typeof i!="string"?"":i.replace(/[[\]{}()*+?.,\\^$|#]/g,"\\$&"),ye=i=>typeof i!="string"?"":i.replace(/\\([[\]{}()*+?.,\\^$|#])/g,"$1"),me=(i,e)=>{try{return L(i,e)>=0}catch{return!1}},L=(i,e)=>{if(!E(i)||!E(e))throw new Error(`Invalid version format: v1="${i}", v2="${e}". Expected format: "x.y.z"`);const t=i.split(".").map(Number),r=e.split(".").map(Number);for(let s=0;s<3;s++){const n=t[s]||0,o=r[s]||0;if(n>o)return 1;if(n<o)return-1}return 0},E=i=>/^\d+(\.\d+){0,2}$/.test(i);class ve{key;parentCd;dcuplInitOptions;analyticsController;off;updateListener=new Set;counter=0;constructor(){}_init(e){this.key=e.cdRefKey,this.analyticsController=e.analyticsController,this.parentCd=e.parentCd,this.dcuplInitOptions=e.dcuplInitOptions,this.parentCd&&(this.off=this.parentCd.on(t=>{t.action==="update"&&t.originCdRefKey===this.parentCd?.key&&(t.connectMessage=!1,this.trigger(t))}))}getCounter(){return this.parentCd?this.parentCd.getCounter():this.counter}increaseCounter(){this.parentCd?this.parentCd.increaseCounter():this.counter++}destroy(){this.off&&this.off()}trigger(e){e.originCdRefKey||(e.originCdRefKey=this.key),e.key||(this.increaseCounter(),e.key=this.getCounter()),e.end||(e.end=b.now(),e.duration=e.start-e.end),this.updateListener.forEach(t=>{t(e)})}on(e){return this.updateListener.add(e),()=>{this.updateListener.delete(e)}}}const O=(i,e)=>e?typeof structuredClone<"u"?structuredClone(i):p.cloneDeep(i):i,F=(i,e,t,r,s,n)=>{try{const o=!!e.dcuplInitOptions.performance?.clone?.enabled&&!!t.cloneResult,a=O(n,o);if(t.scope==="list"&&(t.listKey=i.cdRef?.key||i.key,t.modelKey=i.model?.key||i.modelKey),t.type==="list_created"&&t.args[0].listKey.startsWith("__global_list__")||t.listKey?.startsWith("__global_list__"))return a;const c=b.now(),u=c-r,f=Math.round(u*1e3)/1e3;t.duration=f,t.start=r,t.end=c;const l={duration:t.duration};return t.modelKey&&(l.model=t.modelKey),t.connectMessageResult&&(t.result=a),t.args&&(l.args=t.args),e?.trigger(t),e.analyticsController.mark({name:`${t.type}:end`,context:s}),e.analyticsController.measure({name:t.type,start:`${t.type}:start`,end:`${t.type}:end`,context:s,detail:l}),a}catch{return n}},we=i=>(t,r,s)=>{const n=s.value;return s.value=function(...o){const a=b.now(),c=this.cdRef,u=O(i,!0);u.key||(c.increaseCounter(),u.key=c.getCounter());const f=B();c.analyticsController.mark({name:`${u.type}:start`,context:f});const l=this.model?.key;!u.originCdRefKey&&c.key&&(u.originCdRefKey=c.key),l&&(u.modelKey=l);const d=n.apply(this,o);return u.method=r,u.args=o,d&&typeof d=="object"&&"then"in d?d.then(h=>F(this,c,u,a,f,h)):F(this,c,u,a,f,d)},s};function xe(i,e,t,r){t.max||(t.max=20);const s=[],n=t.transform?r.transformValue(t.value,t.transform):t.value;for(const[o,a]of e.entries()){const c=Array.from(a).some(f=>i.has(f)),u=t.transform?r.transformValue(o,t.transform):o;if(!(t.excludeUndefineds&&typeof o>"u")&&!(t.excludeNulls&&o===null)){if(c&&(n===""||n==="//")){const f={value:o,keys:t.calculateResultKeys?Array.from(a):[]};s.push(f)}else if(c&&N(n)){if(r.queryFind(u,n,"some",t.regexFlags)){const f={value:o,keys:t.calculateResultKeys?Array.from(a):[]};s.push(f)}}else if(c&&typeof n=="string"){const f=String(u??""),l=n;if(f.toLowerCase().startsWith(l.toLowerCase())){const d={value:o,keys:t.calculateResultKeys?Array.from(a):[]};s.push(d)}}else if(c&&r.queryFind(u,n,"some")){const f={value:o,keys:t.calculateResultKeys?Array.from(a):[]};s.push(f)}if(s.length===t.max)break}}return s}function V(i){return i instanceof Date}function U(i){return i instanceof Date&&!isNaN(i.getTime())}const Ae={yyyy:{type:"year",pattern:"yyyy",regex:"(\\d{4})"},yy:{type:"year",pattern:"yy",regex:"(\\d{2})"},MM:{type:"month",pattern:"MM",regex:"(\\d{2})"},M:{type:"month",pattern:"M",regex:"(\\d{1,2})"},dd:{type:"day",pattern:"dd",regex:"(\\d{2})"},d:{type:"day",pattern:"d",regex:"(\\d{1,2})"},HH:{type:"hour",pattern:"HH",regex:"(\\d{2})"},H:{type:"hour",pattern:"H",regex:"(\\d{1,2})"},mm:{type:"minute",pattern:"mm",regex:"(\\d{2})"},m:{type:"minute",pattern:"m",regex:"(\\d{1,2})"},ss:{type:"second",pattern:"ss",regex:"(\\d{2})"},s:{type:"second",pattern:"s",regex:"(\\d{1,2})"},SSS:{type:"millisecond",pattern:"SSS",regex:"(\\d{3})"}};function be(i){let e="^";const t=[];let r=i;const s=Object.entries(Ae).sort((n,o)=>o[0].length-n[0].length);for(;r.length>0;){let n=!1;for(const[o,a]of s)if(r.startsWith(o)){e+=a.regex,t.push({type:a.type,pattern:o}),r=r.slice(o.length),n=!0;break}if(!n){const o=r[0];if(!o)break;e+=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=r.slice(1)}}return e+="$",{regex:new RegExp(e),tokenOrder:t}}function De(i,e){const t={year:1970,month:1,day:1,hour:0,minute:0,second:0,millisecond:0};for(let r=0;r<e.length;r++){const s=i[r+1];if(!s)continue;const n=parseInt(s,10),o=e[r];o&&(o.type==="year"&&o.pattern==="yy"?t.year=2e3+n:t[o.type]=n)}return t}function Se(i){if(i.month<1||i.month>12)return new Date(NaN);if(i.day<1||i.day>31)return new Date(NaN);if(i.hour<0||i.hour>23)return new Date(NaN);if(i.minute<0||i.minute>59)return new Date(NaN);if(i.second<0||i.second>59)return new Date(NaN);if(i.millisecond<0||i.millisecond>999)return new Date(NaN);const e=new Date(i.year,i.month-1,i.day,i.hour,i.minute,i.second,i.millisecond);return U(e)?e.getFullYear()!==i.year||e.getMonth()!==i.month-1||e.getDate()!==i.day?new Date(NaN):e:new Date(NaN)}function Ie(i,e,t){if(i=i.trim(),e==="t"){const a=Number(i);return isNaN(a)?new Date(NaN):new Date(a*1e3)}if(e==="T"){const a=Number(i);return isNaN(a)?new Date(NaN):new Date(a)}const{regex:r,tokenOrder:s}=be(e),n=i.match(r);if(!n)return new Date(NaN);const o=De(n,s);return Se(o)}class Qe{cache;maxSize;accessOrder;constructor(e){this.cache=new Map,this.maxSize=e,this.accessOrder=[]}get(e){const t=this.cache.get(e);return t!==void 0&&this.updateAccessOrder(e),t}set(e,t){if(this.cache.has(e))this.cache.set(e,t),this.updateAccessOrder(e);else{if(this.cache.size>=this.maxSize){const r=this.accessOrder.shift();r!==void 0&&this.cache.delete(r)}this.cache.set(e,t),this.accessOrder.push(e)}}has(e){return this.cache.has(e)}clear(){this.cache.clear(),this.accessOrder=[]}get size(){return this.cache.size}updateAccessOrder(e){const t=this.accessOrder.indexOf(e);t>-1&&this.accessOrder.splice(t,1),this.accessOrder.push(e)}getStats(){return{size:this.cache.size,maxSize:this.maxSize}}}class Ke{graph;constructor(){this.graph=new Map}addDependency(e,t){this.graph.has(e)||this.graph.set(e,new Set),this.graph.get(e).add(t)}hasCycle(e){if(e.length===0)return!1;const t=new Set,r=new Set,s=n=>{t.add(n),r.add(n);const o=this.graph.get(n);if(o){for(const a of o)if(t.has(a)){if(r.has(a))return!0}else if(s(a))return!0}return r.delete(n),!1};for(let n=0;n<e.length-1;n++){const o=e[n],a=e[n+1];o&&a&&this.addDependency(o,a)}for(const n of e)if(!t.has(n)&&s(n))return!0;return!1}clear(){this.graph.clear()}}class W{parseCache;circularRefDetector;cacheHits=0;cacheMisses=0;constructor(e=1e3){this.parseCache=new Qe(e),this.circularRefDetector=new Ke}parse(e){if(this.parseCache.has(e))return this.cacheHits++,this.parseCache.get(e);this.cacheMisses++;let t,r;const s=e.includes("."),n=e.includes("["),o=s||n;if(o){r=e.split(/[.[]/)[0];const c=e.indexOf("."),u=e.indexOf("[");if(n&&(c===-1||u<c)){const l=e.indexOf("]");if(l>-1){const d=e.indexOf(".",l+1);d>-1?t=e.substring(d+1):t=void 0}else s&&(t=e.substring(c+1))}else s&&(t=e.substring(c+1))}const a={attribute:e,isDeepQuery:o};return r&&(a.reference=r),typeof t<"u"&&t!==""&&(a.referenceAttribute=t),this.parseCache.set(e,a),a}detectCircular(e){return e.length===0?!1:new Set(e).size!==e.length?!0:this.circularRefDetector.hasCycle(e)}validatePath(e,t=10){const r=[];if(!e||e.trim().length===0)return r.push("Attribute path cannot be empty"),{valid:!1,errors:r};(e.startsWith(".")||e.endsWith("."))&&r.push(`Invalid path: Leading or trailing dots are not allowed: ${e}`),e.includes("..")&&r.push(`Invalid path: Consecutive dots are not allowed: ${e}`);const s=(e.match(/\[/g)||[]).length,n=(e.match(/]/g)||[]).length;s!==n&&r.push(`Invalid bracket notation: Mismatched brackets in ${e}`),e.includes("[]")&&r.push(`Invalid bracket notation: Empty brackets not allowed: ${e}`);const o=/\[([^\]]+)\]/g;let a;for(;(a=o.exec(e))!==null;){const f=a[1];f&&f!=="*"&&!/^\d+$/.test(f)&&r.push(`Invalid bracket content: Must be a number or '*', got '${f}' in ${e}`)}const c=(e.match(/\./g)||[]).length+1;c>t&&r.push(`Path too deep: Maximum depth is ${t}, got ${c} in ${e}`);const u=e.match(/[^a-zA-Z0-9._[\]*-]/g);return u&&r.push(`Invalid characters in path: ${u.join(", ")} in ${e}`),{valid:r.length===0,errors:r.length>0?r:void 0}}clearCache(){this.parseCache.clear(),this.cacheHits=0,this.cacheMisses=0}clearCircularDetector(){this.circularRefDetector.clear()}getCacheStats(){const e=this.parseCache.getStats(),t=this.cacheHits+this.cacheMisses,r=t>0?this.cacheHits/t:0;return{...e,hits:this.cacheHits,misses:this.cacheMisses,hitRate:r}}getPathSegments(e){return e.replace(/\[[^\]]+\]/g,"").split(".").filter(r=>r.length>0)}getPathDepth(e){return this.getPathSegments(e).length}}const m=new W;function w(i,e){if(e.includes("[*]")){const n=e.indexOf("[*]"),o=e.substring(0,n),a=e.substring(n+3),c=o?p.get(i,o):i;if(!Array.isArray(c))return[];const u=[];for(const f of c)!a||a===""?f!==void 0&&u.push(f):a.startsWith(".")&&u.push(...w(f,a.slice(1)));return u}const t=e.split(".");let r=[i];for(const n of t){const o=[];for(const a of r)if(a!=null)if(Array.isArray(a))for(const c of a){if(c==null)continue;const u=c[n];u!==void 0&&o.push(u)}else{const c=a[n];c!==void 0&&o.push(c)}if(r=o,r.length===0)return[]}const s=[];for(const n of r)if(Array.isArray(n))for(const o of n)o!==void 0&&s.push(o);else n!==void 0&&s.push(n);return s}function k(i){let e=0;for(let t of i){const r=t.toString().split(".")[1];r&&(e=Math.max(e,r.length))}return Math.pow(10,e)}function G(i,e,t){return(i*t+e*t)/t}function ke(i,e,t){return i*t/(e*t)}const Q=(i,e,t,r)=>{if(!r)throw new Error("Attribute not found");const s={attribute:r,types:i.types};let n;(s.types.includes("sum")||s.types.includes("avg"))&&(n=Ne(r,e));let o;return(s.types.includes("min")||s.types.includes("max"))&&(o=Ee(r,e)),i.types.forEach(a=>{a==="sum"?s.sum=n?.sum:a==="avg"?s.avg=n?.average:a==="count"?s.count=Me(r,e):a==="min"?s.min=o&&o[0]:a==="max"?s.max=o&&o[1]:a==="distinct"?s.distinct=H(i,e,t):a==="group"&&(s.group=Ce(i,e))}),s},Me=(i,e)=>{const r=m.parse(i).isDeepQuery;let s=0;for(const n of e.values())if(n)if(r)s+=w(n,i).filter(o=>o!=null).length;else{const o=n[i];if(o==null)continue;Array.isArray(o)?s+=o.filter(a=>a!=null).length:s++}return s},Ee=(i,e)=>{let t,r;const n=m.parse(i).isDeepQuery;for(const o of e.values()){if(!o)continue;let a;if(n)a=w(o,i);else{const c=o[i];c===void 0?a=[]:Array.isArray(c)?a=c.filter(u=>u!==void 0):a=[c]}for(const c of a)c==null||typeof c=="object"||((t===void 0||c<t)&&(t=c),(r===void 0||c>r)&&(r=c))}if(!(t===void 0||r===void 0))return[t,r]},Ce=(i,e)=>{const t=[];i.groupOptions?.groups?.forEach(o=>{t.push({option:o,count:0,keys:[]})});const r={option:{value:["$dcupl_not_found"]},count:0,keys:[]},n=m.parse(i.attribute).isDeepQuery;for(const o of e.values()){let a;n?a=w(o,i.attribute):a=[o[i.attribute]];let c=!1;for(const u of a)for(const f of t)(typeof f.option.value<"u"&&f.option.value.includes(u)||typeof f.option.from<"u"&&f.option.from<u&&typeof f.option.to<"u"&&f.option.to>u)&&(f.keys.includes(o.key)||(f.count++,f.keys.push(o.key)),c=!0);!c&&i?.groupOptions?.calculateNotFound&&(r.count++,r.keys.push(o.key))}return i?.groupOptions?.calculateNotFound&&t.push(r),t},Ne=(i,e)=>{let t=0,r=0;const n=m.parse(i).isDeepQuery;for(const a of e.values()){if(!a)continue;let c;if(n)c=w(a,i);else{const u=a[i];u===void 0?c=[]:Array.isArray(u)?c=u:c=[u]}for(const u of c)if(Array.isArray(u))for(const f of u)typeof f=="number"&&(t=G(t,f,k([t,f])),r++);else typeof u=="number"&&(t=G(t,u,k([t,u])),r++)}return r===0?void 0:{average:ke(t,r,k([t,r])),count:r,sum:t}},H=(i,e,t)=>{const r=[];for(const[s,n]of t)if(!(i.excludeUndefineds&&typeof s>"u")&&Array.from(n).find(o=>e.has(o))){const o={value:s,count:n.size};if(i.distinctOptions?.skipKeys||(o.keys=Array.from(n)),r.push(o),i.distinctOptions?.limit&&r.length>=i.distinctOptions.limit)break}return r};class x extends Error{query;constructor(e,t){const r=`Query Error: ${e} in ${JSON.stringify(t,null,2)}`;super(r),this.query=t,this.name="DcuplQueryError"}}class ${_defaultQueryOptions={modelKey:"",groupKey:"root",groupType:"and",queries:[]};_initOptions;currentQuery=p.cloneDeep(this._defaultQueryOptions);deepQueryService;constructor(e){this.deepQueryService=e||m}init(e){this._initOptions=p.cloneDeep(e),this.currentQuery=p.cloneDeep(this._defaultQueryOptions),this.currentQuery.modelKey=e.modelKey,"queries"in e&&Array.isArray(e.queries)&&(e.groupType&&(this.currentQuery.groupType=e.groupType),e.queries&&(this.currentQuery.queries=p.cloneDeep(e.queries)),e.count!==void 0&&(this.currentQuery.count=e.count),e.start!==void 0&&(this.currentQuery.start=e.start),e.sort&&(this.currentQuery.sort=e.sort),e.projection&&(this.currentQuery.projection=e.projection))}reset(){return this.init(this._initOptions),this.getQuery()}isQuery(e){return"attribute"in e}isQueryGroup(e){return"queries"in e||"groupKey"in e}isRootQueryGroup(e){return this.isQueryGroup(e)&&e.groupKey==="root"}getQueryGroup(e){return this.currentQuery.queries.find(t=>this.isQueryGroup(t)&&t.groupKey===e)}findQueryGroup(e,t){const r=this.locateQueryGroup(e,(t??this.currentQuery).queries);return r?this.groupAtPath(r):void 0}locateQueryGroup(e,t){const r=t.findIndex(s=>this.isQueryGroup(s)&&s.groupKey===e);if(r>-1)return[{queries:t,idx:r}];for(const[s,n]of t.entries())if(this.isQueryGroup(n)){const o=this.locateQueryGroup(e,n.queries);if(o)return[{queries:t,idx:s},...o]}}groupAtPath(e){const t=e[e.length-1];return t.queries[t.idx]}pruneEmptyGroups(e){for(let t=e.length-1;t>=0;t--){const{queries:r,idx:s}=e[t];if(r[s].queries.length>0)break;r.splice(s,1)}}getQuery(){return p.cloneDeep(this.currentQuery)}hasQueryGroup(e){return this.currentQuery.queries.some(t=>this.isQueryGroup(t)&&t.groupKey===e)}has(e){if(e.groupKey&&e.queryKey){const t=this.getQueryGroup(e.groupKey);if(t)return t.queries.some(r=>this.isQuery(r)&&r.queryKey===e.queryKey)}else if(e.groupKey)return this.hasQueryGroup(e.groupKey);return!1}validate(e){const t=e.queries.map(s=>this.validateQuery(s));return{valid:p.every(t,s=>s.valid),errors:t.map(s=>s.errors).flat()}}applyOptions(e,t="update"){return t==="set"?(this.currentQuery.count=e.count,this.currentQuery.start=e.start,this.currentQuery.sort=e.sort,this.currentQuery.projection=e.projection):(typeof e?.sort<"u"&&(this.currentQuery.sort=e.sort),typeof e?.count<"u"&&(this.currentQuery.count=e.count),typeof e?.start<"u"&&(this.currentQuery.start=e?.start),typeof e?.projection<"u"&&(this.currentQuery.projection=e?.projection)),this.getQuery()}applyQuery(e,t,r){if(r||(r=this.currentQuery),Array.isArray(e))for(const s of e)this.applyQuery(s,t,r);else if(this.isRootQueryGroup(e))e.groupType&&(r.groupType=e.groupType),t?.mode==="set"?r.queries=e.queries:r.queries=[...r.queries,...e.queries],this.applyOptions(e,"set");else if(this.isQuery(e)){const s=r.queries.findIndex(n=>this.isQueryGroup(n)&&n.groupKey===e.attribute);if(s>-1){const n=r.queries[s];t?.mode==="set"?n.queries=[e]:n.queries.push(e)}else r.queries.push({groupKey:e.attribute,groupType:"or",queries:[e]})}else if(this.isQueryGroup(e)){const n=e.groupKey===void 0&&t?.mode!=="set"?-1:r.queries.findIndex(o=>this.isQueryGroup(o)&&o.groupKey===e.groupKey);if(n>-1){const o=r.queries[n];e.groupType&&(o.groupType=e.groupType),t?.mode==="set"?r.queries[n]=e:o.queries=[...o.queries,...e.queries]}else r.queries.push({groupKey:e.groupKey,groupType:e.groupType||"or",queries:e.queries})}return r}removeAllQueries(){return this.currentQuery.queries=[],this.getQuery()}removeQuery(e,t){if(t||(t=this.currentQuery),this.isQuery(e)){const r=this.locateQueryGroup(e.attribute,t.queries);if(r){const s=this.groupAtPath(r),n=p.findIndex(s.queries,e);n>-1&&s.queries.splice(n,1),this.pruneEmptyGroups(r)}}else if(this.isQueryGroup(e)){const r=this.locateQueryGroup(e.groupKey,t.queries);if(r)if(e.queries){const s=this.groupAtPath(r);for(const n of e.queries){const o=p.findIndex(s.queries,n);o>-1&&s.queries.splice(o,1)}this.pruneEmptyGroups(r)}else{const s=r[r.length-1];s.queries.splice(s.idx,1),this.pruneEmptyGroups(r.slice(0,-1))}}return t}validateQuery(e){const t=[];if(this.isQuery(e))return e.attribute||t.push(new x("Missing attribute",e)),e.operator||t.push(new x("Missing operator",e)),typeof e.value>"u"&&t.push(new x("Missing value",e)),e.operator==="find"&&Array.isArray(e.value)&&t.push(new x("find operator cannot have array value",e)),e.operator==="in"&&typeof e.value<"u"&&!Array.isArray(e.value)&&t.push(new x("in operator needs an array value",e)),t.length>0?{valid:!1,errors:t}:{valid:!0};if(this.isQueryGroup(e)){const n=e.queries.map(o=>this.validateQuery(o)).filter(o=>!o.valid).map(o=>o.errors).flat();return n.length>0?{valid:!1,errors:n}:{valid:!0}}return t.push(new x("Invalid query definition",e)),{valid:!1,errors:t}}getQueryAttributes(e){const t=[],r=new Set,s=n=>{for(const o of n)this.isQuery(o)?o.attribute&&!r.has(o.attribute)&&(t.push(o.attribute),r.add(o.attribute)):this.isQueryGroup(o)&&s(o.queries)};return s(e?.queries||this.currentQuery.queries),t}extractQueryAttributes(e){const t=[],r=new Set,s=n=>{for(const o of n)if(this.isQuery(o)){if(o.attribute&&!r.has(o.attribute)){const a=this.getQueryAttributeForString(o.attribute);t.push(a),r.add(o.attribute)}}else this.isQueryGroup(o)&&s(o.queries)};return s(e?.queries||this.currentQuery.queries),t}getQueryAttributeForString(e){return this.deepQueryService.parse(e)}getDeepQueryService(){return this.deepQueryService}getProjectionForAttributes(e){const t={};return e.forEach(r=>{t[r]=!0}),t}getProjectionForAttributeEntries(e){const t={$:!0};return e.forEach(r=>{if(r.isDeepQuery){if(r.reference)if(r.referenceAttribute&&r.referenceAttribute.length>0){t[r.reference]||(t[r.reference]={$:!0});const s=this.deepQueryService.parse(r.referenceAttribute);if(s.isDeepQuery&&r.reference){const n=this.getProjectionForAttributeEntries([s]);Object.keys(n).forEach(o=>{o!=="$"&&r.reference&&(t[r.reference][o]=n[o])})}else r.reference&&(t[r.reference][r.referenceAttribute]=!0)}else t[r.reference]=!0}else t[r.attribute]=!0}),t}getAttributeNames(e){return this.getQueryAttributes(e)}getAttributeDetails(e){return this.extractQueryAttributes(e||this.currentQuery)}getCurrentAttributeNames(){return this.getAttributeNames(this.currentQuery)}getCurrentAttributeDetails(){return this.getAttributeDetails(this.currentQuery)}addCondition(e){return this.applyQuery(e,{mode:"add"})}addGroup(e){return this.applyQuery(e,{mode:"add"})}setCondition(e){return this.applyQuery(e,{mode:"set"})}setGroup(e){return this.applyQuery(e,{mode:"set"})}mergeQuery(e){if(e.queries&&Array.isArray(e.queries))for(const t of e.queries)this.applyQuery(t,{mode:"add"});return this.currentQuery}replaceQuery(e){return this.currentQuery.queries=[],e.groupType&&(this.currentQuery.groupType=e.groupType),e.queries&&Array.isArray(e.queries)&&(this.currentQuery.queries=e.queries),this.currentQuery}clear(){return this.reset()}clearConditions(){return this.removeAllQueries()}getCurrentQuery(){return this.getQuery()}isEmpty(){return this.currentQuery.queries.length===0}hasCondition(e){const t=r=>{for(const s of r)if(this.isQuery(s)){let n=!0;for(const o in e)if(s[o]!==e[o]){n=!1;break}if(n)return!0}else if(this.isQueryGroup(s)&&t(s.queries))return!0;return!1};return t(this.currentQuery.queries)}hasGroup(e){return this.hasQueryGroup(e)}getUsedAttributes(){return this.getAttributeNames()}getDeepQueryAttributes(){return this.getAttributeDetails().filter(t=>t.isDeepQuery)}getGroups(){return this.currentQuery.queries.filter(e=>this.isQueryGroup(e))}getTopLevelConditions(){return this.currentQuery.queries.filter(e=>this.isQuery(e))}getGroup(e){return this.getQueryGroup(e)}getConditionCount(){const e=t=>{let r=0;for(const s of t)this.isQuery(s)?r++:this.isQueryGroup(s)&&(r+=e(s.queries));return r};return e(this.currentQuery.queries)}}const C=new $;function Oe(i,e,t,r,s,n,o){const a=t.excludeGroup??s,c=C.removeQuery({groupKey:a},p.cloneDeep(r)),u=o.queryData(i,c,!1,n),f=e?[...e.keys()]:[],l=new Set(f),d=n.get(s)??new Map;if(!t.excludeUnresolved)for(const y of d.keys())l.add(y);if(t.excludeUndefineds?l.delete(void 0):l.add(void 0),t.sort){const y=[];for(const K of l.values())y.push(q(K,d,u,e,s,a,r,!0));const v=t.excludeZeros?y.filter(K=>K.size>0):y;return v.sort($e(t.sort)),t.count?v.slice(0,t.count):v}const h=[];for(const y of l.values()){const v=q(y,d,u,e,s,a,r,!!t?.calculateFacets);if(!(t?.excludeZeros&&v.size===0)){if(t?.count&&h.length===t?.count)return h;h.push(v)}}return h}function q(i,e,t,r,s,n,o,a){const c=new Map,u=e.get(i)||new Set;for(const f of u){const l=t.get(f);if(l&&(c.set(f,l),!a))break}return{key:String(i),value:i,selected:Re(n,s,i,o),enabled:c.size>0,size:c.size,entry:r?.get(i),resultKeys:Array.from(c.keys())}}function D(i,e){if(i===void 0&&e===void 0)return 0;if(i===void 0)return 1;if(e===void 0)return-1;const t=typeof i,r=typeof e;if(t!==r)return t<r?-1:1;if(t==="number")return i-e;if(t==="string")return i.localeCompare(e);const s=String(i),n=String(e);return s<n?-1:s>n?1:0}function $e(i){switch(i){case"size-desc":return(e,t)=>t.size-e.size||D(e.value,t.value);case"size-asc":return(e,t)=>e.size-t.size||D(e.value,t.value);case"value-asc":return(e,t)=>D(e.value,t.value);case"value-desc":return(e,t)=>e.value===void 0&&t.value===void 0?0:e.value===void 0?1:t.value===void 0?-1:-D(e.value,t.value)}}const Re=(i,e,t,r)=>{const s=C.findQueryGroup(i,r);return s?!!s.queries.find(n=>C.isQuery(n)?n.attribute!==e?!1:(n.operator==="in"&&Array.isArray(n.value)?n.value:[n.value]).some(a=>(a?.key||a)===t):!1):!1};class J{indexMap=new Map;dataMap=new Map;indexMetadata=new Map;constructor(){}reset(e){e?(this.indexMap.delete(e),this.dataMap.delete(e),this.indexMetadata.delete(e)):(this.indexMap.clear(),this.dataMap.clear(),this.indexMetadata.clear())}resetIndicesWhere(e){for(const t of Array.from(this.indexMap.keys()))e(t)&&this.reset(t)}fillDataMap(e,t){let r=this.dataMap.get(e);r||(r=new Map,this.dataMap.set(e,r));for(const s of t){let n;if(typeof s=="object"&&s&&s.key)n=s.key;else if(Array.isArray(s)){for(const a of s)this.fillDataMap(e,[a]);return}else s instanceof Date?n=s.toISOString():n=s;let o=r.get(n);o||(o={key:n},this.dataMap.get(e)?.set(n,o))}}fillInverseIndex(e,t,r){if(!e||!t||!r||!Array.isArray(r))return;const s=this.indexMap.get(e)||new Map;for(const n of r){let o;if(typeof n=="object"&&n&&n.key)o=n.key;else if(Array.isArray(n)){for(const c of n)this.fillInverseIndex(e,t,[c]);return}else n instanceof Date?o=n.toISOString():o=n;let a=s.get(o);a||(a=new Set,s.set(o,a)),a.add(t)}this.indexMap.set(e,s)}getIndex(e,t){const r=this.getIndexName(e,t);return this.indexMap.get(r)}getData(e,t){const r=this.getIndexName(e,t);return this.dataMap.get(r)}getOrCreateIndex(e,t,r){const s=this.getIndexName(e,r);let n=this.getIndex(s);const o=this.indexMetadata.get(s);if(o)o.lastAccessedAt=Date.now();else if(!n){const c=m.parse(e).isDeepQuery??!1;this.indexMetadata.set(s,{createdAt:Date.now(),lastAccessedAt:Date.now(),context:r,type:c?"deep":"shallow"})}if(!n){this.reset(s),this.indexMap.set(s,new Map);const c=m.parse(e).isDeepQuery;for(const u of t.values()){let f;c?(f=w(u,e),f.length===0&&(f=[void 0])):f=[u[e]],this.fillInverseIndex(s,u.key,f),this.fillDataMap(s,f)}n=this.getIndex(s)||new Map}return n}getIndexName(e,t){return t?e+"_"+I(t):e}removeFromInverseIndex(e,t,r){const s=this.indexMap.get(e);if(s)for(const n of r){let o;if(typeof n=="object"&&n&&n.key)o=n.key;else if(Array.isArray(n)){for(const c of n)this.removeFromInverseIndex(e,t,[c]);return}else n instanceof Date?o=n.toISOString():o=n;const a=s.get(o);a&&(a.delete(t),a.size===0&&s.delete(o))}}updateInverseIndex(e,t,r,s){this.removeFromInverseIndex(e,t,r),this.fillInverseIndex(e,t,s)}removeFromDataMap(e,t){const r=this.dataMap.get(e);if(r)for(const s of t){let n;if(typeof s=="object"&&s&&s.key)n=s.key;else if(Array.isArray(s)){for(const o of s)this.removeFromDataMap(e,[o]);return}else s instanceof Date?n=s.toISOString():n=s;r.delete(n)}}updateDataMap(e,t,r){this.removeFromDataMap(e,t),this.fillDataMap(e,r)}removeItemFromAllIndices(e){for(const t of this.indexMap.values())for(const[r,s]of t)s.delete(e)&&s.size===0&&t.delete(r);for(const t of this.dataMap.values())t.has(e)&&t.delete(e)}resetAttributes(e){for(const t of e)this.reset(t)}isDeepQueryIndex(e){const t=e.includes("_")?e.split("_")[0]:e;try{return m.parse(t).isDeepQuery??!1}catch{return!1}}getDeepIndexKeys(){const e=[];for(const t of this.indexMap.keys())this.isDeepQueryIndex(t)&&e.push(t);return e}resetAllDeepIndices(){const e=this.getDeepIndexKeys();for(const t of e)this.indexMap.delete(t),this.dataMap.delete(t)}getIndexCount(){let e=0,t=0;for(const r of this.indexMap.keys())this.isDeepQueryIndex(r)?t++:e++;return{shallow:e,deep:t,total:e+t}}cleanupStaleIndices(e=300*1e3){const t=Date.now();let r=0;for(const[s,n]of this.indexMetadata)t-n.lastAccessedAt>e&&(this.reset(s),r++);return r}getStats(){const e=this.getIndexCount(),t=Date.now();let r=0,s=0;for(const o of this.indexMetadata.values()){const a=t-o.createdAt;r+=a,a>s&&(s=a)}const n=this.indexMetadata.size>0?r/this.indexMetadata.size:0;return{shallow:e.shallow,deep:e.deep,total:e.total,oldestAge:s,avgAge:n}}}const A="__";function R(i,e,t={key:"root"},r="root",s=new J,n){const o=n||i;for(const a of e.columns)a.attribute&&(m.parse(a.attribute),s.getOrCreateIndex(a.attribute,o));for(const a of e.rows)a.attribute&&(m.parse(a.attribute),s.getOrCreateIndex(a.attribute,o));for(const a of e.values)a.attribute&&(m.parse(a.attribute),s.getOrCreateIndex(a.attribute,o));if(e.rows&&e.rows.length>0){t.rows=t.rows||[];const a=Te(i,e.rows[0],e,s,r,n);t.rows.push(a)}if(e.columns&&e.columns.length>0){t.columns=t.columns||[];const a=X(i,e.columns[0],e,s,r,n);t.columns.push(a)}if(t.key==="root")for(const a of e.values){if(t.values=t.values||[],r==="root"&&e.options?.calculateTotals===!1)continue;const c=Q(a,i,s.getIndex(a.attribute),a.attribute);t.values.push(c)}return t}function Te(i,e,t,r,s="",n){const o={key:e.attribute},a=r.getIndex(e.attribute);if(!a)return o;for(const[c,u]of a.entries()){const f={key:c,value:c},l=new Map;for(const d of u)i.has(d)&&l.set(d,i.get(d));if(l.size){for(const d of t.values){if(f.values=f.values||[],s==="root"&&e?.calculateTotals===!1)continue;const h=Q(d,l,r.getIndex(d.attribute),d.attribute);f.values.push(h)}if(o.rows=o.rows||[],o.rows.push(f),t.rows.length>1){const d={...t,rows:t.rows.slice(1)};R(l,d,f,s+A+e.attribute+A+c,r,n)}else if(t.columns)for(const d of t.columns){f.columns=f.columns||[];const h=X(l,d,t,r,s+A+e.attribute+A+c,n);f.columns.push(h)}}}return o}function X(i,e,t,r,s="",n){const o={key:e.attribute},a=r.getIndex(e.attribute);if(!a)return o;for(const[c,u]of a.entries()){const f={key:c,value:c},l=new Map;for(const d of u)i.has(d)&&l.set(d,i.get(d));if(l.size){for(const d of t.values){if(f.values=f.values||[],s==="root"&&e?.calculateTotals===!1)continue;const h=Q(d,l,r.getIndex(d.attribute),d.attribute);f.values.push(h)}if(o.columns=o.columns||[],o.columns.push(f),t.columns.length>1){const d={...t,columns:t.columns.slice(1)};R(l,d,f,s+A+e.attribute+A+c,r,n)}}}return o}const Fe=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$/,Ge=/^-?\d+$/,qe=/^-?\d+\.\d+$/,Pe=/^\d{1,2}([/.-])\d{1,2}\1\d{2,4}$/,Z=i=>i==="true"||i==="false"?"boolean":Ge.test(i)?"int":qe.test(i)?"float":Fe.test(i)&&!Number.isNaN(Date.parse(i))?"date":"string",Y=i=>Pe.test(i),_e=i=>i==null||i==="",ze=i=>{const e=[...i];return e.length<=1?{type:e[0]??"any",conflict:!1}:e.every(t=>t==="int"||t==="float")?{type:"float",conflict:!1}:{type:"any",conflict:!0}},ee=(i,e={})=>{const r=e.deep??(e.sampleSize!==void 0&&e.sampleSize>1)?e.sampleSize??1/0:1,s=e.coerceStrings??!0,n=new Map,o=[],a=Math.min(i.length,r);for(let f=0;f<a;f++){const l=i[f];if(l)for(const[d,h]of Object.entries(l)){let y=n.get(d);if(y||(y={observed:new Set,empty:0,scanned:0},n.set(d,y),o.push(d)),y.scanned++,_e(h)){y.empty++;continue}let v;typeof h=="string"&&s?(v=Z(h),v==="string"&&!y.hint&&Y(h)&&(y.hint="column looks date-like (non-ISO) — review manually")):v=se(h),y.observed.add(v)}}const c=[],u=[];for(const f of o){const l=n.get(f),{type:d,conflict:h}=ze(l.observed.size?l.observed:new Set(["string"]));c.push({key:f,type:d}),u.push({column:f,inferredType:d,observedTypes:[...l.observed].sort(),emptyRate:l.scanned===0?0:l.empty/l.scanned,conflict:h,hint:l.hint})}return{properties:c,diagnostics:u}},Be=(i,e=!1)=>ee(i,typeof e=="boolean"?{deep:e}:e).properties,te=i=>Number(i)===i&&i%1===0,re=i=>Number(i)===i&&i%1!==0,se=i=>{switch(typeof i){case"string":return"string";case"number":return te(i)?"int":re(i)?"float":"any";case"boolean":return"boolean";case"object":return V(i)?"date":"json";default:return"any"}},je=(i,e)=>{const t=j(i.text||""),r=e?.attributeKey||i.filterKey;let s;const n=e?.comparisonType||"containsIgnoreCase";return n==="containsIgnoreCase"?s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:`/${t}/`,operator:"find",options:{transform:["lowercase"]}}]}:n==="containsIgnoreCaseAndWhitespace"?s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:`/${t}/`,operator:"find",options:{transform:["removeWhitespace","lowercase"]}}]}:n==="contains"?s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:`/${t}/`,operator:"find"}]}:n==="equal"?s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:i.text,operator:"eq"}]}:n==="equalIgnoreCase"&&(s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:i.text,operator:"eq",options:{transform:["lowercase"]}}]}),s},Le=(i,e)=>{const t=e?.attributeKey||i.filterKey;return{groupKey:i.filterKey,queries:[{queryKey:i.value,attribute:t,value:i.value,operator:"eq"}]}},Ve=(i,e)=>{const t=e?.attributeKey||i.filterKey,r={groupKey:i.filterKey,queries:[]};return typeof i.eq<"u"&&(r.groupType="or",Array.isArray(i.eq)?i.eq.forEach(s=>{r.queries.push({attribute:t,value:s,operator:"eq"})}):r.queries.push({attribute:t,value:i.eq,operator:"eq"})),typeof i.ne<"u"&&(r.groupType="and",Array.isArray(i.ne)?i.ne.forEach(s=>{r.queries.push({attribute:t,value:s,operator:"eq",options:{invert:!0}})}):r.queries.push({attribute:t,value:i.ne,operator:"eq",options:{invert:!0}})),typeof i.gt<"u"&&(r.groupType="and",r.queries.push({attribute:t,value:i.gt,operator:"gt"})),typeof i.lt<"u"&&(r.groupType="and",r.queries.push({attribute:t,value:i.lt,operator:"lt"})),typeof i.gte<"u"&&(r.groupType="and",r.queries.push({attribute:t,value:i.gte,operator:"gte"})),typeof i.lte<"u"&&(r.groupType="and",r.queries.push({attribute:t,value:i.lte,operator:"lte"})),r},Ue=(i,e)=>{const t=e?.attributeKey||i.filterKey,r={groupKey:i.filterKey,queries:[]};return i.itemKeys.forEach(s=>{r.queries.push({queryKey:s,attribute:t,value:{key:s},operator:"eq"})}),r},We=i=>!(typeof i.modelKey!="string"||!Array.isArray(i.queries));class He{constructor(e,t,r){this.scriptController=e,this.globalItemService=t,this.modelParser=r}scriptController;globalItemService;modelParser;registeredCustomOperator=new Map;queryBuilder=new $;registerCustomOperator(e,t){this.registeredCustomOperator.set(e,t)}transformValue(e,t){if(Array.isArray(e))return e.map(r=>this.transformValue(r,t));if(typeof e!="string")return e;for(const r of t)r==="lowercase"?e=e.toLowerCase():r==="trim"?e=e.trim():r==="removeWhitespace"&&(e=e.replace(/\s/g,""));return e}evaluateQuery(e,t){let r=e.value;const s=e.options?.arrayValueHandling||"some";Array.isArray(e.options?.transform)&&e.options.transform.length>0&&(r=this.transformValue(r,e.options.transform));let n=this.getAttributeValue(t,e.attribute);if(Array.isArray(e.options?.transform)&&e.options.transform.length>0&&(n=this.transformValue(n,e.options.transform)),(typeof n>"u"||n===null)&&!["typeof","isTruthy","eq","in"].includes(e.operator))return!1;let o;switch(e.operator){case"eq":o=this.queryEq(n,r,s);break;case"in":o=this.queryIn(n,r,s);break;case"find":o=this.queryFind(n,r,s,e.options?.regexFlags);break;case"lt":case"gt":case"lte":case"gte":{const a=e.operator;o=this.matchValues(n,s,c=>this.compareValue(a,c,r));break}case"typeof":o=this.matchValues(n,s,a=>typeof a===r);break;case"isTruthy":{const a=r===!0;o=this.matchValues(n,s,c=>!!c===a);break}case"size":typeof n=="string"?o=n.length===r:o=p.size(n)===r;break;default:if(this.scriptController.hasScript(e.operator))return this.scriptController.executeScript(e.operator,"operator",{query:e,item:t});if(this.registeredCustomOperator.has(e.operator)){const a=this.registeredCustomOperator.get(e.operator);if(typeof a=="function")return a(e,t)}return!1}return e.options?.invert?!o:o}compareValue(e,t,r){if(t==null)return!1;switch(e){case"lt":return t<r;case"gt":return t>r;case"lte":return t<=r;case"gte":return t>=r}}getAttributeValue(e,t){if(t in e||!(t.includes(".")||t.includes("[")))return e[t];if(t.includes("["))return p.get(e,t);const r=t.split(".");let s=e;for(let n=0;n<r.length;n++){const o=r[n];if(s==null)return;if(Array.isArray(s)&&o!=="length"&&!/^\d+$/.test(o))return w(s,r.slice(n).join("."));s=s[o]}return s}matchValues(e,t,r){return Array.isArray(e)?t==="every"?e.length>0&&e.every(r):e.some(r):r(e)}queryEq(e,t,r){return Array.isArray(e)&&!Array.isArray(t)?this.matchValues(e,r,s=>this.equalsQueryValue(s,t)):this.equalsQueryValue(e,t)}queryIn(e,t,r){return!Array.isArray(t)||t.length===0?!1:this.matchValues(e,r,s=>t.some(n=>this.equalsQueryValue(s,n)))}getIndexKey(e){if(typeof e=="string")return e;if(e?.key&&Object.keys(e).length===1)return e.key}equalsQueryValue(e,t){const r=this.getIndexKey(t);return typeof r>"u"?p.isEqual(e,t):e instanceof Date?!isNaN(e.getTime())&&e.toISOString()===r:typeof e=="object"&&e?.key?e.key===r:e===r}canUseIndex(e){return e.options?.arrayValueHandling!=="every"&&!e.options?.transform?.length}evaluateEqOperator(e,t,r,s){const n=new Map,o=this.canUseIndex(t)?s.get(t.attribute):void 0;if(o){const a=this.getIndexKey(t.value);if(typeof a<"u"){const c=o.get(a);if(c)if(c.forEach(u=>{r.has(u)&&n.set(u,r.get(u))}),t.options?.invert){const u=p.differenceBy(Array.from(r.values()),Array.from(n.values()),"key"),f=new Map;return u.forEach(l=>{f.set(l.key,l)}),f}else return n}}return this.scanDataset(e,t,r)}evaluateInOperator(e,t,r,s){const n=this.canUseIndex(t)?s.get(t.attribute):void 0;if(!n)return this.scanDataset(e,t,r);const o=new Map,a=[];for(const u of t.value){const f=this.getIndexKey(u),l=typeof f<"u"?n.get(f):void 0;if(!l){a.push(u);continue}l.forEach(d=>{const h=r.get(d);h&&o.set(d,h)})}if(a.length>0){const u=new Map;r.forEach((l,d)=>{o.has(d)||u.set(d,l)});const f={...t,value:a,options:{...t.options,invert:!1}};this.scanDataset(e,f,u).forEach((l,d)=>o.set(d,l))}if(!t.options?.invert)return o;const c=new Map;return r.forEach((u,f)=>{o.has(f)||c.set(f,u)}),c}scanDataset(e,t,r){const s=new Map,n=this.queryBuilder.extractQueryAttributes({queries:[t]}).filter(a=>a.isDeepQuery),o=n.length>0?this.queryBuilder.getProjectionForAttributeEntries(n):void 0;for(let[a,c]of r)o&&(c=this.globalItemService.getProjectedData(o,this.modelParser.models.get(e.modelKey),c)),this.evaluateQuery(t,c)&&s.set(a,c);return s}equalRegexFn(e,t,r){const s=N(t,r);if(s)try{return new RegExp(s.pattern,s.flags).test(e)}catch{return!1}else return Array.isArray(e)?!!e.find(n=>p.isEqualWith(n,t,(o,a)=>this.equalRegexFn(o,a,r))):typeof t=="object"?p.isMatch(e,t):e===t}queryFind(e,t,r,s){const n=(o,a)=>this.equalRegexFn(o,a,s);return Array.isArray(e)?typeof t=="string"||typeof t=="number"||typeof t=="boolean"?this.matchValues(e,r,o=>p.isEqualWith(o,t,n)):t!==null&&typeof t=="object"?this.matchValues(e,r,o=>p.isMatch(o,t)):!!p.find(e,t):p.isEqualWith(e,t,n)}validateQuery(e){if(this.queryBuilder.isQuery(e)){if(!e.attribute||!e.operator)throw new Error("invalid query - missing attribute or operator");if(e.operator==="find"&&Array.isArray(e.value))throw new Error("invalid query - find operator cannot have array value");if(e.operator==="in"&&!Array.isArray(e.value))throw new Error("invalid query - in operator needs an array value");return!0}else{if(this.queryBuilder.isQueryGroup(e))return p.every(e.queries,t=>this.validateQuery(t));throw new Error("invalid query - missing query or attribute")}}getEvaluatedQueryDataset(e,t,r,s){const n=new Map;if(t.attribute.includes("[*]")){const o=t.options?.invert===!0,a=new Set;for(let c of r.values()){const u=this.queryBuilder.extractQueryAttributes({queries:[t]});if(u.some(h=>h.isDeepQuery)){const h=this.queryBuilder.getProjectionForAttributeEntries(u.filter(y=>y.isDeepQuery));c=this.globalItemService.getProjectedData(h,this.modelParser.models.get(e.modelKey),c)}const l=this.handleArrayStarQuery(t,c).queries.map(h=>({...h,options:{...h.options,invert:!1}}));this.matchValues(l,t.options?.arrayValueHandling||"some",h=>this.evaluateQuery(h,c))&&(a.add(c.key),o||n.set(c.key,c))}if(o)for(const[c,u]of r)a.has(c)||n.set(c,u)}else return t.operator==="eq"?this.evaluateEqOperator(e,t,r,s):t.operator==="in"?this.evaluateInOperator(e,t,r,s):this.scanDataset(e,t,r);return n}handleArrayStarQuery(e,t){const r=e.attribute.indexOf("[*]"),s={groupKey:e.queryKey||e.attribute+"[*]",groupType:"or",queries:[]};if(r!==-1){const n=e.attribute.substring(0,r),o=n.includes(".")?p.get(t,n):t[n];if(Array.isArray(o))for(let a=0;a<o.length;a++){const c=e.attribute.replace("[*]",`[${a}]`);s.queries.push({attribute:c,operator:e.operator,value:e.value,options:e.options})}}return s}evaluateQueryGroup(e,t,r,s,n){let o=new Map,a=r;if(!t.queries||t.queries?.length===0)return a;const c=t.groupType==="or";for(const u of t.queries){let f=new Map;if(this.queryBuilder.isQuery(u)?f=this.getEvaluatedQueryDataset(e,u,a,n):f=this.evaluateQueryGroup(e,u,a,s,n),o.size===0&&(o=f),c)f.forEach(l=>{o.set(l.key,l)}),a=r;else{const l=p.differenceBy(Array.from(o.values()),Array.from(f.values()),"key");for(const d of l)o.delete(d.key);a=o}}return o}queryData(e,t,r,s){if(t.queries.length===0)return e;const n=new Map(e);return t.groupKey||(t.groupKey="root"),t.groupType||(t.groupType="and"),t.queries||(t.queries=[]),this.validateQuery(t),this.evaluateQueryGroup(t,t,n,r,s)}}const Je=new Set(["apikey","api-key","managerkey","token","proxy-key","proxykey","manager-key","sdk-key"]);function Xe(i){const e=i.indexOf("?");if(e<0)return i;const t=i.slice(e+1).split("&").map(r=>{const s=r.indexOf("=");if(s<0)return r;const n=r.slice(0,s);return Je.has(n.toLowerCase())?`${n}=<redacted>`:r}).join("&");return`${i.slice(0,e)}?${t}`}const ne="k:",ie="h:";function S(i,e=0){if(i.key)return`${ne}${i.key}`;const t=I({type:i.type,url:i.rawUrl??i.url,model:i.model??"",occurrence:e});return`${ie}${t}`}function Ze(i){const e=new Map,t=new Set;return i.map(r=>{const s=`${r.key??""}|${r.type}|${r.rawUrl??r.url}|${r.model??""}`;let n=e.get(s)??0,o=S(r,n);for(;t.has(o);)n+=1,o=r.key?`${S(r)}#${n}`:S(r,n);return e.set(s,n+1),t.add(o),o})}function Ye(){const i=globalThis;return typeof i.scheduler?.yield=="function"?i.scheduler.yield():typeof i.setImmediate=="function"?new Promise(e=>i.setImmediate(()=>e())):typeof i.MessageChannel=="function"?new Promise(e=>{const t=new i.MessageChannel;t.port1.onmessage=()=>{t.port1.close(),e()},t.port2.postMessage(null)}):new Promise(e=>setTimeout(e,0))}class et{scripts=new Map;scriptFunctions=new Map;constructor(){}keys(){return Array.from(this.scripts.keys())}setScript(e,t){this.scripts.set(e,t)}removeScript(e){this.scripts.delete(e)}getScript(e){return this.scripts.get(e)}hasScript(e){return this.scripts.has(e)}getScriptAsFn(e,t){if(this.scriptFunctions.has(e))return this.scriptFunctions.get(e);const r=this.getScript(e);if(!r)throw new Error(`Script ${e} not found`);const s=this.getWrapperScript(r),n=new Function("script_type",...t,s);return this.scriptFunctions.set(e,n),n}getWrapperScript(e){return`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("lodash-es");function I(i){const e=M(i);return ae(e)}function M(i){if(typeof i!="object"||i===null)return String(i);if(Array.isArray(i))return"["+i.map(M).join(",")+"]";const e=Object.keys(i).sort();let t="{";for(let r=0;r<e.length;r++){const s=e[r];t+=s+":"+M(i[s]),r<e.length-1&&(t+=",")}return t+="}",t}function ae(i){let e=0;for(let t=0;t<i.length;t++){const r=i.charCodeAt(t);e=(e<<5)-e+r,e|=0}return e.toString(16)}const b={now:()=>typeof performance<"u"&&performance.now?performance.now():new Date().getTime(),mark:i=>{typeof performance<"u"&&performance.mark&&performance.mark(i)},measure:(i,e,t)=>{typeof performance<"u"&&performance.measure&&performance.measure(i,e,t)},getEntriesByName(i){if(typeof performance<"u"&&performance.getEntriesByName)return performance.getEntriesByName(i)},getEntriesByType(i){if(typeof performance<"u"&&performance.getEntriesByType)return performance.getEntriesByType(i)}};class ce{data;enabled=!1;constructor(){}init(e){this.data=new Map,this.enabled=e}set(e){if(!this.enabled)return e.value;const t=this.getKey(e.value.name,e.context);return this.data.set(t,e.value),this.data.get(t)}mark(e){if(!this.enabled)return;const t=this.getKey(e.name,e.context),r={name:e.name,type:"mark",value:b.now(),createdAt:Date.now()};return this.data.set(t,r),r}measure(e){if(!this.enabled)return;const t=this.getKey(e.name,e.context),r=this.data.get(this.getKey(e.start,e.context)),s=this.data.get(this.getKey(e.end,e.context));if(!r||!s)return;const n=s.value-r.value,o=Math.round(n*100)/100,a=this.data.get(t);if(a&&e.sum){const u=a.value+o,f={...a,value:u};return this.data.set(t,f),f}const c={name:e.name,type:"measure",value:o,createdAt:Date.now()};return e.detail&&(c.detail=e.detail),this.data.set(t,c),c}update(e){if(!this.enabled)return e.value;const t=this.getKey(e.value.name,e.context),r=this.data.get(t);if(r){const s={...r,...e.value};this.data.set(t,s)}else this.data.set(t,e.value);return this.data.get(t)}getResourceInfosFromPerformanceAPI(){return typeof performance>"u"?[]:b.getEntriesByType("resource")}get(e){const t=this.getKey(e.name,e.context);return this.data.get(t)}getByType(e){return Array.from(this.data.values()).filter(t=>t.type===e)}getByName(e){return Array.from(this.data.values()).filter(t=>t.name===e)}clear(){this.data.clear()}getKey(e,t){if(!t)return e;const r=I(t);return e+"_"+r}}let P=class _{nodes;edges;nodeKinds=new Map;nodeMeta=new Map;edgePolicy;constructor(){this.nodes=new Set,this.edges=new Map}addNode(e,t){this.nodes.has(e)||(this.nodes.add(e),this.edges.set(e,new Set)),t?.kind!==void 0&&this.nodeKinds.set(e,t.kind),t?.meta!==void 0&&this.nodeMeta.set(e,t.meta)}addDependency(e,t){if(!this.nodes.has(e)||!this.nodes.has(t))throw new Error("Both nodes must exist before adding a dependency.");if(this.edgePolicy&&!this.edgePolicy({name:e,kind:this.nodeKinds.get(e)},{name:t,kind:this.nodeKinds.get(t)}))throw new Error(`Edge policy rejected dependency from "${e}" to "${t}".`);this.edges.get(e).add(t)}setEdgePolicy(e){this.edgePolicy=e}setNodeKind(e,t){if(!this.nodes.has(e))throw new Error("Node does not exist.");t===void 0?this.nodeKinds.delete(e):this.nodeKinds.set(e,t)}getNodeKind(e){return this.nodeKinds.get(e)}setNodeMeta(e,t){if(!this.nodes.has(e))throw new Error("Node does not exist.");this.nodeMeta.set(e,t)}getNodeMeta(e){return this.nodeMeta.get(e)}removeNode(e){if(!this.nodes.has(e))throw new Error("Node does not exist.");this.nodes.delete(e),this.edges.delete(e);for(let t of this.edges.values())t.delete(e)}removeDependency(e,t){if(!this.edges.has(e))throw new Error("From node does not exist.");this.edges.get(e).delete(t)}hasNode(e){return this.nodes.has(e)}hasDependency(e,t){return this.edges.has(e)?this.edges.get(e).has(t):!1}getDependencies(e){if(!this.edges.has(e))throw new Error("Node does not exist.");return Array.from(this.edges.get(e))}getDependents(e){const t=[];for(let[r,s]of this.edges)s.has(e)&&t.push(r);return t}isCyclic(){const e=new Set,t=new Set,r=s=>{if(e.has(s))return!1;if(t.has(s))return!0;t.add(s);const n=this.edges.get(s);if(n){for(let o of n)if(r(o))return!0}return t.delete(s),e.add(s),!1};for(let s of this.nodes)if(r(s))return!0;return!1}validateNoCycles(){const e=new Set,t=new Set,r=[],s=n=>{if(e.has(n))return null;if(t.has(n)){const a=r.indexOf(n);return r.slice(a).concat([n])}t.add(n),r.push(n);const o=this.edges.get(n);if(o)for(let a of o){const c=s(a);if(c)return c}return r.pop(),t.delete(n),e.add(n),null};for(let n of this.nodes){const o=s(n);if(o)return{hasCycle:!0,path:o}}return{hasCycle:!1}}order(e){const t=new Set,r=new Set,s=[],n=e?.allowCycles??!1,o=a=>{if(t.has(a))return;if(r.has(a)){if(n)return;throw new Error("Graph has a cycle.")}r.add(a);const c=this.edges.get(a);if(c)for(let u of c)o(u);r.delete(a),t.add(a),s.push(a)};for(let a of this.nodes)t.has(a)||o(a);return s}clear(){this.nodes.clear(),this.edges.clear()}getNodes(){return Array.from(this.nodes)}getAllEdges(){const e=[];for(let[t,r]of this.edges)for(let s of r)e.push([t,s]);return e}getNodesWithNoDependants(){if(this.nodes.size===0)return[];const e=new Set;for(const r of this.edges.values())for(const s of r)e.add(s);const t=[];for(const r of this.nodes)e.has(r)||t.push(r);return t}getNodesByKind(e){const t=[];for(const r of this.nodes)this.nodeKinds.get(r)===e&&t.push(r);return t}getRootsByKind(e){const t=new Set(this.getNodesWithNoDependants()),r=Array.from(t);return e?r.filter(s=>this.nodeKinds.get(s)===e):r}getLeavesByKind(e){const t=[];for(const r of this.nodes){const s=this.edges.get(r);(!s||s.size===0)&&(!e||this.nodeKinds.get(r)===e)&&t.push(r)}return t}getDependenciesOfKind(e,t){return this.getDependencies(e).filter(s=>this.nodeKinds.get(s)===t)}getDependentsOfKind(e,t){return this.getDependents(e).filter(s=>this.nodeKinds.get(s)===t)}plan(e){const t=new Map;for(const o of this.nodes)t.set(o,0);for(const o of this.edges.values())for(const a of o)t.set(a,(t.get(a)||0)+1);const r=[];let s=Array.from(this.nodes).filter(o=>(t.get(o)||0)===0);const n=new Set;for(;s.length>0;){const o=s.slice();r.push(o),s=[];for(const a of o){if(n.has(a))continue;n.add(a);const c=this.edges.get(a);if(c)for(const u of c)t.set(u,(t.get(u)||0)-1),(t.get(u)||0)===0&&s.push(u)}}if(n.size!==this.nodes.size)throw new Error("Graph has a cycle.");if(e?.filterKinds&&e.filterKinds.length>0){const o=new Set(e.filterKinds);return{batches:r.map(a=>a.filter(c=>o.has(this.nodeKinds.get(c))))}}return{batches:r}}getImpactedNodes(e,t="downstream",r){const s=new Set(e),n=u=>!r||r.length===0||r.includes(this.nodeKinds.get(u)??void 0),o=()=>{const u=new Set,f=Array.from(s);for(;f.length;){const l=f.shift();for(const[d,h]of this.edges)h.has(l)&&!u.has(d)&&(u.add(d),f.push(d))}return u},a=()=>{const u=new Set,f=Array.from(s);for(;f.length;){const l=f.shift(),d=this.edges.get(l);if(d)for(const h of d)u.has(h)||(u.add(h),f.push(h))}return u};let c;return t==="both"?c=new Set([...o(),...a()]):t==="upstream"?c=a():c=o(),Array.from(c).filter(n)}toJSON(){const e=Array.from(this.nodes).map(r=>({name:r,kind:this.nodeKinds.get(r),meta:this.nodeMeta.get(r)})),t=this.getAllEdges().map(([r,s])=>({from:r,to:s}));return{nodes:e,edges:t}}static fromJSON(e){const t=new _;for(const r of e.nodes)t.addNode(r.name,{kind:r.kind,meta:r.meta});for(const r of e.edges)t.addDependency(r.from,r.to);return t}diff(e){const t=new Set(this.getNodes()),r=new Set(e.getNodes()),s=Array.from(r).filter(l=>!t.has(l)),n=Array.from(t).filter(l=>!r.has(l)),o=new Set(this.getAllEdges().map(l=>l.join("→"))),a=new Set(e.getAllEdges().map(l=>l.join("→"))),c=Array.from(a).filter(l=>!o.has(l)).map(l=>l.split("→")),u=Array.from(o).filter(l=>!a.has(l)).map(l=>l.split("→")),f=[];for(const l of new Set([...t,...r])){const d=this.nodeKinds.get(l),h=e.nodeKinds.get(l);d!==h&&f.push({name:l,from:d,to:h})}return{addedNodes:s,removedNodes:n,addedEdges:c,removedEdges:u,kindChanges:f}}};class ue{graph;nodeIndex;constructor(){this.graph=new P,this.nodeIndex=new Map}getNodeId(e,t){return`${e}.${t}`}parseNodeId(e){const t=e.split(".");return{modelKey:t[0],attributeKey:t.slice(1).join(".")}}addAttribute(e){const t=this.getNodeId(e.modelKey,e.attributeKey);this.nodeIndex.has(t)||(this.graph.addNode(t,{meta:e}),this.nodeIndex.set(t,e))}addAttributeDependency(e,t){this.addAttribute(e),this.addAttribute(t);const r=this.getNodeId(e.modelKey,e.attributeKey),s=this.getNodeId(t.modelKey,t.attributeKey);this.graph.hasDependency(r,s)||this.graph.addDependency(r,s)}getImpactedAttributes(e){const t=e.map(a=>this.getNodeId(a.modelKey,a.attributeKey)),s=this.graph.getImpactedNodes(t,"downstream").map(a=>this.nodeIndex.get(a)).filter(a=>a!==void 0),n=[...e,...s],o=new Set;return n.filter(a=>{const c=this.getNodeId(a.modelKey,a.attributeKey);return o.has(c)?!1:(o.add(c),!0)})}getProcessingOrder(e){const t=new Map,r=[...e].sort((s,n)=>s.processingStep-n.processingStep);for(const s of r){const{modelKey:n,attributeKey:o,processingStep:a}=s;t.has(n)||t.set(n,new Map);const c=t.get(n);c.has(a)||c.set(a,new Set),c.get(a).add(o)}return t}getAttributesForModel(e){const t=[];for(const r of this.nodeIndex.values())r.modelKey===e&&t.push(r);return t}getDependencies(e){const t=this.getNodeId(e.modelKey,e.attributeKey);return this.graph.hasNode(t)?this.graph.getDependencies(t).map(s=>this.nodeIndex.get(s)).filter(s=>s!==void 0):[]}getDependents(e){const t=this.getNodeId(e.modelKey,e.attributeKey);return this.graph.hasNode(t)?this.graph.getDependents(t).map(s=>this.nodeIndex.get(s)).filter(s=>s!==void 0):[]}hasDependencies(e){const t=this.getNodeId(e.modelKey,e.attributeKey);return this.graph.hasNode(t)?this.graph.getDependencies(t).length>0:!1}hasNode(e){return this.nodeIndex.has(e)}getAllAttributes(){return Array.from(this.nodeIndex.values())}getMaxDepth(){let e=0;const t=(r,s=new Set)=>{if(s.has(r))return 0;s.add(r);const n=this.graph.getDependencies(r);if(n.length===0)return 1;let o=0;for(const a of n){const c=t(a,new Set(s));o=Math.max(o,c)}return o+1};for(const r of this.graph.getNodes()){const s=t(r);e=Math.max(e,s)}return e}validateCompleteness(e){const t=[];for(const[r,s]of e)for(const n of s){const o=this.getNodeId(r,n);this.hasNode(o)||t.push({modelKey:r,attributeKey:n})}return{isComplete:t.length===0,missing:t}}clear(){this.graph.clear(),this.nodeIndex.clear()}getStats(){const e=new Map,t=new Map;for(const r of this.nodeIndex.values())e.set(r.modelKey,(e.get(r.modelKey)||0)+1),t.set(r.processingStep,(t.get(r.processingStep)||0)+1);return{totalAttributes:this.nodeIndex.size,totalDependencies:this.graph.getAllEdges().length,maxDepth:this.getMaxDepth(),attributesByModel:e,attributesByStep:t}}toJSON(){return{nodes:Array.from(this.nodeIndex.values()),edges:this.graph.getAllEdges().map(([e,t])=>{const r=this.parseNodeId(e),s=this.parseNodeId(t);return{from:r,to:s}})}}}const T={silent:0,error:1,warn:2,info:3,debug:4};class g{config;static globalConfig={};constructor(e={}){this.config={level:e.level??g.globalConfig.level??this.getDefaultLevel(),format:e.format??g.globalConfig.format??this.getDefaultFormat(),prefix:e.prefix,onLog:e.onLog??g.globalConfig.onLog,onTrackError:e.onTrackError??g.globalConfig.onTrackError}}static setGlobalConfig(e){g.globalConfig={...g.globalConfig,...e}}static getGlobalConfig(){return{...g.globalConfig}}static setModuleLevel(e,t){g.globalConfig.onLog||(g.globalConfig.onLog=void 0),g._moduleOverrides||(g._moduleOverrides=new Map),g._moduleOverrides.set(e,t)}static getModuleLevel(e){if(!(!e||!g._moduleOverrides))return g._moduleOverrides.get(e)}getDefaultLevel(){return"info"}getDefaultFormat(){return"pretty"}getEffectiveLevel(){if(this.config.prefix){const e=g.getModuleLevel(this.config.prefix);if(e)return e}return this.config.level}shouldLog(e){const t=this.getEffectiveLevel();return T[e]<=T[t]}formatMessage(e){if(this.config.format==="json"){const o={timestamp:new Date(e.timestamp).toISOString(),level:e.level,message:e.message};return e.prefix&&(o.module=e.prefix),e.context&&(o.context=e.context),e.error&&(o.error={name:e.error.name,message:e.error.message,stack:e.error.stack}),JSON.stringify(o)}const t=new Date(e.timestamp).toISOString().substring(11,23),r=e.prefix?`[${e.prefix}]`:"",s=this.getLevelIcon(e.level),n=e.context?` ${JSON.stringify(e.context)}`:"";return`${t} ${s} ${r} ${e.message}${n}`.trim()}getLevelIcon(e){switch(e){case"error":return"✖";case"warn":return"⚠";case"info":return"ℹ";case"debug":return"⚙";default:return" "}}log(e,t,r,s){if(!this.shouldLog(e))return;const n={level:e,message:t,timestamp:Date.now(),prefix:this.config.prefix,context:r,error:s};if(this.config.onLog){this.config.onLog(n);return}const o=this.formatMessage(n);if(typeof console<"u")switch(e){case"error":s?console.error(o,s):console.error(o);break;case"warn":console.warn(o);break;case"debug":console.debug?console.debug(o):console.log(o);break;default:console.log(o)}}error(e,t,r){const s=t instanceof Error?t:void 0,n=t instanceof Error?r:t;this.log("error",e,n,s)}trackError(e,t,r){if(this.error(e,t,r?.context),this.config.onTrackError){const s={level:"error",message:e,timestamp:Date.now(),prefix:this.config.prefix,context:r?.context,error:t,errorType:r?.errorType,errorGroup:r?.errorGroup};this.config.onTrackError(s)}}warn(e,t){this.log("warn",e,t)}info(e,t){this.log("info",e,t)}debug(e,t){this.log("debug",e,t)}child(e){const t={...this.config,...e,prefix:e.prefix?this.config.prefix?`${this.config.prefix}:${e.prefix}`:e.prefix:this.config.prefix};return new g(t)}configure(e){Object.assign(this.config,e)}}const z=new g;class fe{constructor(e){this.enabled=e,this.cache=new Map,this.cacheDependencies=new Map}enabled;cache;cacheDependencies;hitCount=0;missCount=0;log=z.child({prefix:"CacheController"});get(e,t){if(!this.enabled)return;const r=this.getCacheName(e,t);return this.cache.has(r)?this.hitCount++:this.missCount++,this.cache.get(r)}set(e,t,r,s){if(!this.enabled)return;const n=this.getCacheName(e,t);this.cache.set(n,r),s?this.cacheDependencies.set(n,s):this.log.debug(`Cache entry '${e}' stored without dependencies. This prevents granular invalidation and may cause stale data.`)}has(e,t){return this.cache.has(this.getCacheName(e,t))}clear(){this.cache.clear(),this.cacheDependencies.clear(),this.hitCount=0,this.missCount=0}invalidateByDependencies(e){if(!this.enabled)return;const t=[];for(const[r,s]of this.cacheDependencies){let n=!1;for(const[o,a]of e){if(s.models.has(o))if(s.modelAttributes.has(o)){const c=s.modelAttributes.get(o);for(const u of a)if(c.has(u)){n=!0;break}}else n=!0;if(n)break}n&&t.push(r)}for(const r of t)this.cache.delete(r),this.cacheDependencies.delete(r)}invalidateByModels(e){if(!this.enabled)return;const t=new Set(e),r=[];for(const[s,n]of this.cacheDependencies)for(const o of t)if(n.models.has(o)){r.push(s);break}for(const s of r)this.cache.delete(s),this.cacheDependencies.delete(s)}invalidateByKeyPrefix(e){if(!this.enabled)return;const t=[];for(const r of this.cache.keys())r.startsWith(e+"_")&&t.push(r);for(const r of t)this.cache.delete(r),this.cacheDependencies.delete(r)}invalidateForModel(e){this.invalidateByModels([e])}invalidateForAttribute(e,t){if(!this.enabled)return;const r=new Map;r.set(e,new Set([t])),this.invalidateByDependencies(r)}invalidateMatching(e){if(!this.enabled)return;const t=[];for(const r of this.cache.keys())e(r)&&t.push(r);for(const r of t)this.cache.delete(r),this.cacheDependencies.delete(r)}generateContext(e){try{return p.cloneDeep(e)}catch(t){return this.log.error("Error in cache generateContext",t),e}}getCacheName(e,t){const r=I(t);return e+"_"+r}getStats(){const e=this.hitCount+this.missCount,t=e>0?this.hitCount/e:0;return{size:this.cache.size,hitRate:t,totalEntries:this.cache.size,entriesWithDependencies:this.cacheDependencies.size,hits:this.hitCount,misses:this.missCount}}}const N=(i,e="")=>{if(!(typeof i!="string"||!i.startsWith("/")||!i.endsWith("/")))return{pattern:i.slice(1,-1),flags:e}},le=(i,e="")=>`${i}#${e}`,de=i=>`${i.gt}_${i.gte}_${i.lt}_${i.lte}_${i.eq}_${i.ne}`,he=i=>`${i.gt}_${i.gte}_${i.lt}_${i.lte}_${i.eq}_${i.ne}`,pe=(i,e)=>{const t=typeof e=="function"?e:r=>r[e];return[...i.reduce((r,s)=>{const n=s==null?s:t(s);return r.has(n)||r.set(n,s),r},new Map).values()]},ge=(i,e)=>i.reduce(function(t,r){const s=typeof e=="function"?e(r):r[e];return Object.prototype.hasOwnProperty.call(t,s)||(t[s]=[]),t[s].push(r),t},{});function B(i=10){let e="";const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";for(let r=0;r<i;r++)e+=t.charAt(Math.floor(Math.random()*t.length));return e}const ye=i=>i.replace(/\/+$/,""),j=i=>typeof i!="string"?"":i.replace(/[[\]{}()*+?.,\\^$|#]/g,"\\$&"),me=i=>typeof i!="string"?"":i.replace(/\\([[\]{}()*+?.,\\^$|#])/g,"$1"),ve=(i,e)=>{try{return L(i,e)>=0}catch{return!1}},L=(i,e)=>{if(!E(i)||!E(e))throw new Error(`Invalid version format: v1="${i}", v2="${e}". Expected format: "x.y.z"`);const t=i.split(".").map(Number),r=e.split(".").map(Number);for(let s=0;s<3;s++){const n=t[s]||0,o=r[s]||0;if(n>o)return 1;if(n<o)return-1}return 0},E=i=>/^\d+(\.\d+){0,2}$/.test(i);class we{key;parentCd;dcuplInitOptions;analyticsController;off;updateListener=new Set;counter=0;constructor(){}_init(e){this.key=e.cdRefKey,this.analyticsController=e.analyticsController,this.parentCd=e.parentCd,this.dcuplInitOptions=e.dcuplInitOptions,this.parentCd&&(this.off=this.parentCd.on(t=>{t.action==="update"&&t.originCdRefKey===this.parentCd?.key&&(t.connectMessage=!1,this.trigger(t))}))}getCounter(){return this.parentCd?this.parentCd.getCounter():this.counter}increaseCounter(){this.parentCd?this.parentCd.increaseCounter():this.counter++}destroy(){this.off&&this.off()}trigger(e){e.originCdRefKey||(e.originCdRefKey=this.key),e.key||(this.increaseCounter(),e.key=this.getCounter()),e.end||(e.end=b.now(),e.duration=e.start-e.end),this.updateListener.forEach(t=>{t(e)})}on(e){return this.updateListener.add(e),()=>{this.updateListener.delete(e)}}}const O=(i,e)=>e?typeof structuredClone<"u"?structuredClone(i):p.cloneDeep(i):i,F=(i,e,t,r,s,n)=>{try{const o=!!e.dcuplInitOptions.performance?.clone?.enabled&&!!t.cloneResult,a=O(n,o);if(t.scope==="list"&&(t.listKey=i.cdRef?.key||i.key,t.modelKey=i.model?.key||i.modelKey),t.type==="list_created"&&t.args[0].listKey.startsWith("__global_list__")||t.listKey?.startsWith("__global_list__"))return a;const c=b.now(),u=c-r,f=Math.round(u*1e3)/1e3;t.duration=f,t.start=r,t.end=c;const l={duration:t.duration};return t.modelKey&&(l.model=t.modelKey),t.connectMessageResult&&(t.result=a),t.args&&(l.args=t.args),e?.trigger(t),e.analyticsController.mark({name:`${t.type}:end`,context:s}),e.analyticsController.measure({name:t.type,start:`${t.type}:start`,end:`${t.type}:end`,context:s,detail:l}),a}catch{return n}},xe=i=>(t,r,s)=>{const n=s.value;return s.value=function(...o){const a=b.now(),c=this.cdRef,u=O(i,!0);u.key||(c.increaseCounter(),u.key=c.getCounter());const f=B();c.analyticsController.mark({name:`${u.type}:start`,context:f});const l=this.model?.key;!u.originCdRefKey&&c.key&&(u.originCdRefKey=c.key),l&&(u.modelKey=l);const d=n.apply(this,o);return u.method=r,u.args=o,d&&typeof d=="object"&&"then"in d?d.then(h=>F(this,c,u,a,f,h)):F(this,c,u,a,f,d)},s};function Ae(i,e,t,r){t.max||(t.max=20);const s=[],n=t.transform?r.transformValue(t.value,t.transform):t.value;for(const[o,a]of e.entries()){const c=Array.from(a).some(f=>i.has(f)),u=t.transform?r.transformValue(o,t.transform):o;if(!(t.excludeUndefineds&&typeof o>"u")&&!(t.excludeNulls&&o===null)){if(c&&(n===""||n==="//")){const f={value:o,keys:t.calculateResultKeys?Array.from(a):[]};s.push(f)}else if(c&&N(n)){if(r.queryFind(u,n,"some",t.regexFlags)){const f={value:o,keys:t.calculateResultKeys?Array.from(a):[]};s.push(f)}}else if(c&&typeof n=="string"){const f=String(u??""),l=n;if(f.toLowerCase().startsWith(l.toLowerCase())){const d={value:o,keys:t.calculateResultKeys?Array.from(a):[]};s.push(d)}}else if(c&&r.queryFind(u,n,"some")){const f={value:o,keys:t.calculateResultKeys?Array.from(a):[]};s.push(f)}if(s.length===t.max)break}}return s}function V(i){return i instanceof Date}function U(i){return i instanceof Date&&!isNaN(i.getTime())}const be={yyyy:{type:"year",pattern:"yyyy",regex:"(\\d{4})"},yy:{type:"year",pattern:"yy",regex:"(\\d{2})"},MM:{type:"month",pattern:"MM",regex:"(\\d{2})"},M:{type:"month",pattern:"M",regex:"(\\d{1,2})"},dd:{type:"day",pattern:"dd",regex:"(\\d{2})"},d:{type:"day",pattern:"d",regex:"(\\d{1,2})"},HH:{type:"hour",pattern:"HH",regex:"(\\d{2})"},H:{type:"hour",pattern:"H",regex:"(\\d{1,2})"},mm:{type:"minute",pattern:"mm",regex:"(\\d{2})"},m:{type:"minute",pattern:"m",regex:"(\\d{1,2})"},ss:{type:"second",pattern:"ss",regex:"(\\d{2})"},s:{type:"second",pattern:"s",regex:"(\\d{1,2})"},SSS:{type:"millisecond",pattern:"SSS",regex:"(\\d{3})"}};function De(i){let e="^";const t=[];let r=i;const s=Object.entries(be).sort((n,o)=>o[0].length-n[0].length);for(;r.length>0;){let n=!1;for(const[o,a]of s)if(r.startsWith(o)){e+=a.regex,t.push({type:a.type,pattern:o}),r=r.slice(o.length),n=!0;break}if(!n){const o=r[0];if(!o)break;e+=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=r.slice(1)}}return e+="$",{regex:new RegExp(e),tokenOrder:t}}function Se(i,e){const t={year:1970,month:1,day:1,hour:0,minute:0,second:0,millisecond:0};for(let r=0;r<e.length;r++){const s=i[r+1];if(!s)continue;const n=parseInt(s,10),o=e[r];o&&(o.type==="year"&&o.pattern==="yy"?t.year=2e3+n:t[o.type]=n)}return t}function Ie(i){if(i.month<1||i.month>12)return new Date(NaN);if(i.day<1||i.day>31)return new Date(NaN);if(i.hour<0||i.hour>23)return new Date(NaN);if(i.minute<0||i.minute>59)return new Date(NaN);if(i.second<0||i.second>59)return new Date(NaN);if(i.millisecond<0||i.millisecond>999)return new Date(NaN);const e=new Date(i.year,i.month-1,i.day,i.hour,i.minute,i.second,i.millisecond);return U(e)?e.getFullYear()!==i.year||e.getMonth()!==i.month-1||e.getDate()!==i.day?new Date(NaN):e:new Date(NaN)}function Qe(i,e,t){if(i=i.trim(),e==="t"){const a=Number(i);return isNaN(a)?new Date(NaN):new Date(a*1e3)}if(e==="T"){const a=Number(i);return isNaN(a)?new Date(NaN):new Date(a)}const{regex:r,tokenOrder:s}=De(e),n=i.match(r);if(!n)return new Date(NaN);const o=Se(n,s);return Ie(o)}class Ke{cache;maxSize;accessOrder;constructor(e){this.cache=new Map,this.maxSize=e,this.accessOrder=[]}get(e){const t=this.cache.get(e);return t!==void 0&&this.updateAccessOrder(e),t}set(e,t){if(this.cache.has(e))this.cache.set(e,t),this.updateAccessOrder(e);else{if(this.cache.size>=this.maxSize){const r=this.accessOrder.shift();r!==void 0&&this.cache.delete(r)}this.cache.set(e,t),this.accessOrder.push(e)}}has(e){return this.cache.has(e)}clear(){this.cache.clear(),this.accessOrder=[]}get size(){return this.cache.size}updateAccessOrder(e){const t=this.accessOrder.indexOf(e);t>-1&&this.accessOrder.splice(t,1),this.accessOrder.push(e)}getStats(){return{size:this.cache.size,maxSize:this.maxSize}}}class ke{graph;constructor(){this.graph=new Map}addDependency(e,t){this.graph.has(e)||this.graph.set(e,new Set),this.graph.get(e).add(t)}hasCycle(e){if(e.length===0)return!1;const t=new Set,r=new Set,s=n=>{t.add(n),r.add(n);const o=this.graph.get(n);if(o){for(const a of o)if(t.has(a)){if(r.has(a))return!0}else if(s(a))return!0}return r.delete(n),!1};for(let n=0;n<e.length-1;n++){const o=e[n],a=e[n+1];o&&a&&this.addDependency(o,a)}for(const n of e)if(!t.has(n)&&s(n))return!0;return!1}clear(){this.graph.clear()}}class W{parseCache;circularRefDetector;cacheHits=0;cacheMisses=0;constructor(e=1e3){this.parseCache=new Ke(e),this.circularRefDetector=new ke}parse(e){if(this.parseCache.has(e))return this.cacheHits++,this.parseCache.get(e);this.cacheMisses++;let t,r;const s=e.includes("."),n=e.includes("["),o=s||n;if(o){r=e.split(/[.[]/)[0];const c=e.indexOf("."),u=e.indexOf("[");if(n&&(c===-1||u<c)){const l=e.indexOf("]");if(l>-1){const d=e.indexOf(".",l+1);d>-1?t=e.substring(d+1):t=void 0}else s&&(t=e.substring(c+1))}else s&&(t=e.substring(c+1))}const a={attribute:e,isDeepQuery:o};return r&&(a.reference=r),typeof t<"u"&&t!==""&&(a.referenceAttribute=t),this.parseCache.set(e,a),a}detectCircular(e){return e.length===0?!1:new Set(e).size!==e.length?!0:this.circularRefDetector.hasCycle(e)}validatePath(e,t=10){const r=[];if(!e||e.trim().length===0)return r.push("Attribute path cannot be empty"),{valid:!1,errors:r};(e.startsWith(".")||e.endsWith("."))&&r.push(`Invalid path: Leading or trailing dots are not allowed: ${e}`),e.includes("..")&&r.push(`Invalid path: Consecutive dots are not allowed: ${e}`);const s=(e.match(/\[/g)||[]).length,n=(e.match(/]/g)||[]).length;s!==n&&r.push(`Invalid bracket notation: Mismatched brackets in ${e}`),e.includes("[]")&&r.push(`Invalid bracket notation: Empty brackets not allowed: ${e}`);const o=/\[([^\]]+)\]/g;let a;for(;(a=o.exec(e))!==null;){const f=a[1];f&&f!=="*"&&!/^\d+$/.test(f)&&r.push(`Invalid bracket content: Must be a number or '*', got '${f}' in ${e}`)}const c=(e.match(/\./g)||[]).length+1;c>t&&r.push(`Path too deep: Maximum depth is ${t}, got ${c} in ${e}`);const u=e.match(/[^a-zA-Z0-9._[\]*-]/g);return u&&r.push(`Invalid characters in path: ${u.join(", ")} in ${e}`),{valid:r.length===0,errors:r.length>0?r:void 0}}clearCache(){this.parseCache.clear(),this.cacheHits=0,this.cacheMisses=0}clearCircularDetector(){this.circularRefDetector.clear()}getCacheStats(){const e=this.parseCache.getStats(),t=this.cacheHits+this.cacheMisses,r=t>0?this.cacheHits/t:0;return{...e,hits:this.cacheHits,misses:this.cacheMisses,hitRate:r}}getPathSegments(e){return e.replace(/\[[^\]]+\]/g,"").split(".").filter(r=>r.length>0)}getPathDepth(e){return this.getPathSegments(e).length}}const m=new W;function w(i,e){if(e.includes("[*]")){const n=e.indexOf("[*]"),o=e.substring(0,n),a=e.substring(n+3),c=o?p.get(i,o):i;if(!Array.isArray(c))return[];const u=[];for(const f of c)!a||a===""?f!==void 0&&u.push(f):a.startsWith(".")&&u.push(...w(f,a.slice(1)));return u}const t=e.split(".");let r=[i];for(const n of t){const o=[];for(const a of r)if(a!=null)if(Array.isArray(a))for(const c of a){if(c==null)continue;const u=c[n];u!==void 0&&o.push(u)}else{const c=a[n];c!==void 0&&o.push(c)}if(r=o,r.length===0)return[]}const s=[];for(const n of r)if(Array.isArray(n))for(const o of n)o!==void 0&&s.push(o);else n!==void 0&&s.push(n);return s}function k(i){let e=0;for(let t of i){const r=t.toString().split(".")[1];r&&(e=Math.max(e,r.length))}return Math.pow(10,e)}function G(i,e,t){return(i*t+e*t)/t}function Me(i,e,t){return i*t/(e*t)}const Q=(i,e,t,r)=>{if(!r)throw new Error("Attribute not found");const s={attribute:r,types:i.types};let n;(s.types.includes("sum")||s.types.includes("avg"))&&(n=Oe(r,e));let o;return(s.types.includes("min")||s.types.includes("max"))&&(o=Ce(r,e)),i.types.forEach(a=>{a==="sum"?s.sum=n?.sum:a==="avg"?s.avg=n?.average:a==="count"?s.count=Ee(r,e):a==="min"?s.min=o&&o[0]:a==="max"?s.max=o&&o[1]:a==="distinct"?s.distinct=H(i,e,t):a==="group"&&(s.group=Ne(i,e))}),s},Ee=(i,e)=>{const r=m.parse(i).isDeepQuery;let s=0;for(const n of e.values())if(n)if(r)s+=w(n,i).filter(o=>o!=null).length;else{const o=n[i];if(o==null)continue;Array.isArray(o)?s+=o.filter(a=>a!=null).length:s++}return s},Ce=(i,e)=>{let t,r;const n=m.parse(i).isDeepQuery;for(const o of e.values()){if(!o)continue;let a;if(n)a=w(o,i);else{const c=o[i];c===void 0?a=[]:Array.isArray(c)?a=c.filter(u=>u!==void 0):a=[c]}for(const c of a)c==null||typeof c=="object"||((t===void 0||c<t)&&(t=c),(r===void 0||c>r)&&(r=c))}if(!(t===void 0||r===void 0))return[t,r]},Ne=(i,e)=>{const t=[];i.groupOptions?.groups?.forEach(o=>{t.push({option:o,count:0,keys:[]})});const r={option:{value:["$dcupl_not_found"]},count:0,keys:[]},n=m.parse(i.attribute).isDeepQuery;for(const o of e.values()){let a;n?a=w(o,i.attribute):a=[o[i.attribute]];let c=!1;for(const u of a)for(const f of t)(typeof f.option.value<"u"&&f.option.value.includes(u)||typeof f.option.from<"u"&&f.option.from<u&&typeof f.option.to<"u"&&f.option.to>u)&&(f.keys.includes(o.key)||(f.count++,f.keys.push(o.key)),c=!0);!c&&i?.groupOptions?.calculateNotFound&&(r.count++,r.keys.push(o.key))}return i?.groupOptions?.calculateNotFound&&t.push(r),t},Oe=(i,e)=>{let t=0,r=0;const n=m.parse(i).isDeepQuery;for(const a of e.values()){if(!a)continue;let c;if(n)c=w(a,i);else{const u=a[i];u===void 0?c=[]:Array.isArray(u)?c=u:c=[u]}for(const u of c)if(Array.isArray(u))for(const f of u)typeof f=="number"&&(t=G(t,f,k([t,f])),r++);else typeof u=="number"&&(t=G(t,u,k([t,u])),r++)}return r===0?void 0:{average:Me(t,r,k([t,r])),count:r,sum:t}},H=(i,e,t)=>{const r=[];for(const[s,n]of t)if(!(i.excludeUndefineds&&typeof s>"u")&&Array.from(n).find(o=>e.has(o))){const o={value:s,count:n.size};if(i.distinctOptions?.skipKeys||(o.keys=Array.from(n)),r.push(o),i.distinctOptions?.limit&&r.length>=i.distinctOptions.limit)break}return r};class x extends Error{query;constructor(e,t){const r=`Query Error: ${e} in ${JSON.stringify(t,null,2)}`;super(r),this.query=t,this.name="DcuplQueryError"}}class ${_defaultQueryOptions={modelKey:"",groupKey:"root",groupType:"and",queries:[]};_initOptions;currentQuery=p.cloneDeep(this._defaultQueryOptions);deepQueryService;constructor(e){this.deepQueryService=e||m}init(e){this._initOptions=p.cloneDeep(e),this.currentQuery=p.cloneDeep(this._defaultQueryOptions),this.currentQuery.modelKey=e.modelKey,"queries"in e&&Array.isArray(e.queries)&&(e.groupType&&(this.currentQuery.groupType=e.groupType),e.queries&&(this.currentQuery.queries=p.cloneDeep(e.queries)),e.count!==void 0&&(this.currentQuery.count=e.count),e.start!==void 0&&(this.currentQuery.start=e.start),e.sort&&(this.currentQuery.sort=e.sort),e.projection&&(this.currentQuery.projection=e.projection))}reset(){return this.init(this._initOptions),this.getQuery()}isQuery(e){return"attribute"in e}isQueryGroup(e){return"queries"in e||"groupKey"in e}isRootQueryGroup(e){return this.isQueryGroup(e)&&e.groupKey==="root"}getQueryGroup(e){return this.currentQuery.queries.find(t=>this.isQueryGroup(t)&&t.groupKey===e)}findQueryGroup(e,t){const r=this.locateQueryGroup(e,(t??this.currentQuery).queries);return r?this.groupAtPath(r):void 0}locateQueryGroup(e,t){const r=t.findIndex(s=>this.isQueryGroup(s)&&s.groupKey===e);if(r>-1)return[{queries:t,idx:r}];for(const[s,n]of t.entries())if(this.isQueryGroup(n)){const o=this.locateQueryGroup(e,n.queries);if(o)return[{queries:t,idx:s},...o]}}groupAtPath(e){const t=e[e.length-1];return t.queries[t.idx]}pruneEmptyGroups(e){for(let t=e.length-1;t>=0;t--){const{queries:r,idx:s}=e[t];if(r[s].queries.length>0)break;r.splice(s,1)}}getQuery(){return p.cloneDeep(this.currentQuery)}hasQueryGroup(e){return this.currentQuery.queries.some(t=>this.isQueryGroup(t)&&t.groupKey===e)}has(e){if(e.groupKey&&e.queryKey){const t=this.getQueryGroup(e.groupKey);if(t)return t.queries.some(r=>this.isQuery(r)&&r.queryKey===e.queryKey)}else if(e.groupKey)return this.hasQueryGroup(e.groupKey);return!1}validate(e){const t=e.queries.map(s=>this.validateQuery(s));return{valid:p.every(t,s=>s.valid),errors:t.map(s=>s.errors).flat()}}applyOptions(e,t="update"){return t==="set"?(this.currentQuery.count=e.count,this.currentQuery.start=e.start,this.currentQuery.sort=e.sort,this.currentQuery.projection=e.projection):(typeof e?.sort<"u"&&(this.currentQuery.sort=e.sort),typeof e?.count<"u"&&(this.currentQuery.count=e.count),typeof e?.start<"u"&&(this.currentQuery.start=e?.start),typeof e?.projection<"u"&&(this.currentQuery.projection=e?.projection)),this.getQuery()}applyQuery(e,t,r){if(r||(r=this.currentQuery),Array.isArray(e))for(const s of e)this.applyQuery(s,t,r);else if(this.isRootQueryGroup(e))e.groupType&&(r.groupType=e.groupType),t?.mode==="set"?r.queries=e.queries:r.queries=[...r.queries,...e.queries],this.applyOptions(e,"set");else if(this.isQuery(e)){const s=r.queries.findIndex(n=>this.isQueryGroup(n)&&n.groupKey===e.attribute);if(s>-1){const n=r.queries[s];t?.mode==="set"?n.queries=[e]:n.queries.push(e)}else r.queries.push({groupKey:e.attribute,groupType:"or",queries:[e]})}else if(this.isQueryGroup(e)){const n=e.groupKey===void 0&&t?.mode!=="set"?-1:r.queries.findIndex(o=>this.isQueryGroup(o)&&o.groupKey===e.groupKey);if(n>-1){const o=r.queries[n];e.groupType&&(o.groupType=e.groupType),t?.mode==="set"?r.queries[n]=e:o.queries=[...o.queries,...e.queries]}else r.queries.push({groupKey:e.groupKey,groupType:e.groupType||"or",queries:e.queries})}return r}removeAllQueries(){return this.currentQuery.queries=[],this.getQuery()}removeQuery(e,t){if(t||(t=this.currentQuery),this.isQuery(e)){const r=this.locateQueryGroup(e.attribute,t.queries);if(r){const s=this.groupAtPath(r),n=p.findIndex(s.queries,e);n>-1&&s.queries.splice(n,1),this.pruneEmptyGroups(r)}}else if(this.isQueryGroup(e)){const r=this.locateQueryGroup(e.groupKey,t.queries);if(r)if(e.queries){const s=this.groupAtPath(r);for(const n of e.queries){const o=p.findIndex(s.queries,n);o>-1&&s.queries.splice(o,1)}this.pruneEmptyGroups(r)}else{const s=r[r.length-1];s.queries.splice(s.idx,1),this.pruneEmptyGroups(r.slice(0,-1))}}return t}validateQuery(e){const t=[];if(this.isQuery(e))return e.attribute||t.push(new x("Missing attribute",e)),e.operator||t.push(new x("Missing operator",e)),typeof e.value>"u"&&t.push(new x("Missing value",e)),e.operator==="find"&&Array.isArray(e.value)&&t.push(new x("find operator cannot have array value",e)),e.operator==="in"&&typeof e.value<"u"&&!Array.isArray(e.value)&&t.push(new x("in operator needs an array value",e)),t.length>0?{valid:!1,errors:t}:{valid:!0};if(this.isQueryGroup(e)){const n=e.queries.map(o=>this.validateQuery(o)).filter(o=>!o.valid).map(o=>o.errors).flat();return n.length>0?{valid:!1,errors:n}:{valid:!0}}return t.push(new x("Invalid query definition",e)),{valid:!1,errors:t}}getQueryAttributes(e){const t=[],r=new Set,s=n=>{for(const o of n)this.isQuery(o)?o.attribute&&!r.has(o.attribute)&&(t.push(o.attribute),r.add(o.attribute)):this.isQueryGroup(o)&&s(o.queries)};return s(e?.queries||this.currentQuery.queries),t}extractQueryAttributes(e){const t=[],r=new Set,s=n=>{for(const o of n)if(this.isQuery(o)){if(o.attribute&&!r.has(o.attribute)){const a=this.getQueryAttributeForString(o.attribute);t.push(a),r.add(o.attribute)}}else this.isQueryGroup(o)&&s(o.queries)};return s(e?.queries||this.currentQuery.queries),t}getQueryAttributeForString(e){return this.deepQueryService.parse(e)}getDeepQueryService(){return this.deepQueryService}getProjectionForAttributes(e){const t={};return e.forEach(r=>{t[r]=!0}),t}getProjectionForAttributeEntries(e){const t={$:!0};return e.forEach(r=>{if(r.isDeepQuery){if(r.reference)if(r.referenceAttribute&&r.referenceAttribute.length>0){t[r.reference]||(t[r.reference]={$:!0});const s=this.deepQueryService.parse(r.referenceAttribute);if(s.isDeepQuery&&r.reference){const n=this.getProjectionForAttributeEntries([s]);Object.keys(n).forEach(o=>{o!=="$"&&r.reference&&(t[r.reference][o]=n[o])})}else r.reference&&(t[r.reference][r.referenceAttribute]=!0)}else t[r.reference]=!0}else t[r.attribute]=!0}),t}getAttributeNames(e){return this.getQueryAttributes(e)}getAttributeDetails(e){return this.extractQueryAttributes(e||this.currentQuery)}getCurrentAttributeNames(){return this.getAttributeNames(this.currentQuery)}getCurrentAttributeDetails(){return this.getAttributeDetails(this.currentQuery)}addCondition(e){return this.applyQuery(e,{mode:"add"})}addGroup(e){return this.applyQuery(e,{mode:"add"})}setCondition(e){return this.applyQuery(e,{mode:"set"})}setGroup(e){return this.applyQuery(e,{mode:"set"})}mergeQuery(e){if(e.queries&&Array.isArray(e.queries))for(const t of e.queries)this.applyQuery(t,{mode:"add"});return this.currentQuery}replaceQuery(e){return this.currentQuery.queries=[],e.groupType&&(this.currentQuery.groupType=e.groupType),e.queries&&Array.isArray(e.queries)&&(this.currentQuery.queries=e.queries),this.currentQuery}clear(){return this.reset()}clearConditions(){return this.removeAllQueries()}getCurrentQuery(){return this.getQuery()}isEmpty(){return this.currentQuery.queries.length===0}hasCondition(e){const t=r=>{for(const s of r)if(this.isQuery(s)){let n=!0;for(const o in e)if(s[o]!==e[o]){n=!1;break}if(n)return!0}else if(this.isQueryGroup(s)&&t(s.queries))return!0;return!1};return t(this.currentQuery.queries)}hasGroup(e){return this.hasQueryGroup(e)}getUsedAttributes(){return this.getAttributeNames()}getDeepQueryAttributes(){return this.getAttributeDetails().filter(t=>t.isDeepQuery)}getGroups(){return this.currentQuery.queries.filter(e=>this.isQueryGroup(e))}getTopLevelConditions(){return this.currentQuery.queries.filter(e=>this.isQuery(e))}getGroup(e){return this.getQueryGroup(e)}getConditionCount(){const e=t=>{let r=0;for(const s of t)this.isQuery(s)?r++:this.isQueryGroup(s)&&(r+=e(s.queries));return r};return e(this.currentQuery.queries)}}const C=new $;function $e(i,e,t,r,s,n,o){const a=t.excludeGroup??s,c=C.removeQuery({groupKey:a},p.cloneDeep(r)),u=o.queryData(i,c,!1,n),f=e?[...e.keys()]:[],l=new Set(f),d=n.get(s)??new Map;if(!t.excludeUnresolved)for(const y of d.keys())l.add(y);if(t.excludeUndefineds?l.delete(void 0):l.add(void 0),t.sort){const y=[];for(const K of l.values())y.push(q(K,d,u,e,s,a,r,!0));const v=t.excludeZeros?y.filter(K=>K.size>0):y;return v.sort(Re(t.sort)),t.count?v.slice(0,t.count):v}const h=[];for(const y of l.values()){const v=q(y,d,u,e,s,a,r,!!t?.calculateFacets);if(!(t?.excludeZeros&&v.size===0)){if(t?.count&&h.length===t?.count)return h;h.push(v)}}return h}function q(i,e,t,r,s,n,o,a){const c=new Map,u=e.get(i)||new Set;for(const f of u){const l=t.get(f);if(l&&(c.set(f,l),!a))break}return{key:String(i),value:i,selected:Te(n,s,i,o),enabled:c.size>0,size:c.size,entry:r?.get(i),resultKeys:Array.from(c.keys())}}function D(i,e){if(i===void 0&&e===void 0)return 0;if(i===void 0)return 1;if(e===void 0)return-1;const t=typeof i,r=typeof e;if(t!==r)return t<r?-1:1;if(t==="number")return i-e;if(t==="string")return i.localeCompare(e);const s=String(i),n=String(e);return s<n?-1:s>n?1:0}function Re(i){switch(i){case"size-desc":return(e,t)=>t.size-e.size||D(e.value,t.value);case"size-asc":return(e,t)=>e.size-t.size||D(e.value,t.value);case"value-asc":return(e,t)=>D(e.value,t.value);case"value-desc":return(e,t)=>e.value===void 0&&t.value===void 0?0:e.value===void 0?1:t.value===void 0?-1:-D(e.value,t.value)}}const Te=(i,e,t,r)=>{const s=C.findQueryGroup(i,r);return s?!!s.queries.find(n=>C.isQuery(n)?n.attribute!==e?!1:(n.operator==="in"&&Array.isArray(n.value)?n.value:[n.value]).some(a=>(a?.key||a)===t):!1):!1};class J{indexMap=new Map;dataMap=new Map;indexMetadata=new Map;constructor(){}reset(e){e?(this.indexMap.delete(e),this.dataMap.delete(e),this.indexMetadata.delete(e)):(this.indexMap.clear(),this.dataMap.clear(),this.indexMetadata.clear())}resetIndicesWhere(e){for(const t of Array.from(this.indexMap.keys()))e(t)&&this.reset(t)}fillDataMap(e,t){let r=this.dataMap.get(e);r||(r=new Map,this.dataMap.set(e,r));for(const s of t){let n;if(typeof s=="object"&&s&&s.key)n=s.key;else if(Array.isArray(s)){for(const a of s)this.fillDataMap(e,[a]);return}else s instanceof Date?n=s.toISOString():n=s;let o=r.get(n);o||(o={key:n},this.dataMap.get(e)?.set(n,o))}}fillInverseIndex(e,t,r){if(!e||!t||!r||!Array.isArray(r))return;const s=this.indexMap.get(e)||new Map;for(const n of r){let o;if(typeof n=="object"&&n&&n.key)o=n.key;else if(Array.isArray(n)){for(const c of n)this.fillInverseIndex(e,t,[c]);return}else n instanceof Date?o=n.toISOString():o=n;let a=s.get(o);a||(a=new Set,s.set(o,a)),a.add(t)}this.indexMap.set(e,s)}getIndex(e,t){const r=this.getIndexName(e,t);return this.indexMap.get(r)}getData(e,t){const r=this.getIndexName(e,t);return this.dataMap.get(r)}getOrCreateIndex(e,t,r){const s=this.getIndexName(e,r);let n=this.getIndex(s);const o=this.indexMetadata.get(s);if(o)o.lastAccessedAt=Date.now();else if(!n){const c=m.parse(e).isDeepQuery??!1;this.indexMetadata.set(s,{createdAt:Date.now(),lastAccessedAt:Date.now(),context:r,type:c?"deep":"shallow"})}if(!n){this.reset(s),this.indexMap.set(s,new Map);const c=m.parse(e).isDeepQuery;for(const u of t.values()){let f;c?(f=w(u,e),f.length===0&&(f=[void 0])):f=[u[e]],this.fillInverseIndex(s,u.key,f),this.fillDataMap(s,f)}n=this.getIndex(s)||new Map}return n}getIndexName(e,t){return t?e+"_"+I(t):e}removeFromInverseIndex(e,t,r){const s=this.indexMap.get(e);if(s)for(const n of r){let o;if(typeof n=="object"&&n&&n.key)o=n.key;else if(Array.isArray(n)){for(const c of n)this.removeFromInverseIndex(e,t,[c]);return}else n instanceof Date?o=n.toISOString():o=n;const a=s.get(o);a&&(a.delete(t),a.size===0&&s.delete(o))}}updateInverseIndex(e,t,r,s){this.removeFromInverseIndex(e,t,r),this.fillInverseIndex(e,t,s)}removeFromDataMap(e,t){const r=this.dataMap.get(e);if(r)for(const s of t){let n;if(typeof s=="object"&&s&&s.key)n=s.key;else if(Array.isArray(s)){for(const o of s)this.removeFromDataMap(e,[o]);return}else s instanceof Date?n=s.toISOString():n=s;r.delete(n)}}updateDataMap(e,t,r){this.removeFromDataMap(e,t),this.fillDataMap(e,r)}removeItemFromAllIndices(e){for(const t of this.indexMap.values())for(const[r,s]of t)s.delete(e)&&s.size===0&&t.delete(r);for(const t of this.dataMap.values())t.has(e)&&t.delete(e)}resetAttributes(e){for(const t of e)this.reset(t)}isDeepQueryIndex(e){const t=e.includes("_")?e.split("_")[0]:e;try{return m.parse(t).isDeepQuery??!1}catch{return!1}}getDeepIndexKeys(){const e=[];for(const t of this.indexMap.keys())this.isDeepQueryIndex(t)&&e.push(t);return e}resetAllDeepIndices(){const e=this.getDeepIndexKeys();for(const t of e)this.indexMap.delete(t),this.dataMap.delete(t)}getIndexCount(){let e=0,t=0;for(const r of this.indexMap.keys())this.isDeepQueryIndex(r)?t++:e++;return{shallow:e,deep:t,total:e+t}}cleanupStaleIndices(e=300*1e3){const t=Date.now();let r=0;for(const[s,n]of this.indexMetadata)t-n.lastAccessedAt>e&&(this.reset(s),r++);return r}getStats(){const e=this.getIndexCount(),t=Date.now();let r=0,s=0;for(const o of this.indexMetadata.values()){const a=t-o.createdAt;r+=a,a>s&&(s=a)}const n=this.indexMetadata.size>0?r/this.indexMetadata.size:0;return{shallow:e.shallow,deep:e.deep,total:e.total,oldestAge:s,avgAge:n}}}const A="__";function R(i,e,t={key:"root"},r="root",s=new J,n){const o=n||i;for(const a of e.columns)a.attribute&&(m.parse(a.attribute),s.getOrCreateIndex(a.attribute,o));for(const a of e.rows)a.attribute&&(m.parse(a.attribute),s.getOrCreateIndex(a.attribute,o));for(const a of e.values)a.attribute&&(m.parse(a.attribute),s.getOrCreateIndex(a.attribute,o));if(e.rows&&e.rows.length>0){t.rows=t.rows||[];const a=Fe(i,e.rows[0],e,s,r,n);t.rows.push(a)}if(e.columns&&e.columns.length>0){t.columns=t.columns||[];const a=X(i,e.columns[0],e,s,r,n);t.columns.push(a)}if(t.key==="root")for(const a of e.values){if(t.values=t.values||[],r==="root"&&e.options?.calculateTotals===!1)continue;const c=Q(a,i,s.getIndex(a.attribute),a.attribute);t.values.push(c)}return t}function Fe(i,e,t,r,s="",n){const o={key:e.attribute},a=r.getIndex(e.attribute);if(!a)return o;for(const[c,u]of a.entries()){const f={key:c,value:c},l=new Map;for(const d of u)i.has(d)&&l.set(d,i.get(d));if(l.size){for(const d of t.values){if(f.values=f.values||[],s==="root"&&e?.calculateTotals===!1)continue;const h=Q(d,l,r.getIndex(d.attribute),d.attribute);f.values.push(h)}if(o.rows=o.rows||[],o.rows.push(f),t.rows.length>1){const d={...t,rows:t.rows.slice(1)};R(l,d,f,s+A+e.attribute+A+c,r,n)}else if(t.columns)for(const d of t.columns){f.columns=f.columns||[];const h=X(l,d,t,r,s+A+e.attribute+A+c,n);f.columns.push(h)}}}return o}function X(i,e,t,r,s="",n){const o={key:e.attribute},a=r.getIndex(e.attribute);if(!a)return o;for(const[c,u]of a.entries()){const f={key:c,value:c},l=new Map;for(const d of u)i.has(d)&&l.set(d,i.get(d));if(l.size){for(const d of t.values){if(f.values=f.values||[],s==="root"&&e?.calculateTotals===!1)continue;const h=Q(d,l,r.getIndex(d.attribute),d.attribute);f.values.push(h)}if(o.columns=o.columns||[],o.columns.push(f),t.columns.length>1){const d={...t,columns:t.columns.slice(1)};R(l,d,f,s+A+e.attribute+A+c,r,n)}}}return o}const Ge=/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$/,qe=/^-?\d+$/,Pe=/^-?\d+\.\d+$/,_e=/^\d{1,2}([/.-])\d{1,2}\1\d{2,4}$/,Z=i=>i==="true"||i==="false"?"boolean":qe.test(i)?"int":Pe.test(i)?"float":Ge.test(i)&&!Number.isNaN(Date.parse(i))?"date":"string",Y=i=>_e.test(i),ze=i=>i==null||i==="",Be=i=>{const e=[...i];return e.length<=1?{type:e[0]??"any",conflict:!1}:e.every(t=>t==="int"||t==="float")?{type:"float",conflict:!1}:{type:"any",conflict:!0}},ee=(i,e={})=>{const r=e.deep??(e.sampleSize!==void 0&&e.sampleSize>1)?e.sampleSize??1/0:1,s=e.coerceStrings??!0,n=new Map,o=[],a=Math.min(i.length,r);for(let f=0;f<a;f++){const l=i[f];if(l)for(const[d,h]of Object.entries(l)){let y=n.get(d);if(y||(y={observed:new Set,empty:0,scanned:0},n.set(d,y),o.push(d)),y.scanned++,ze(h)){y.empty++;continue}let v;typeof h=="string"&&s?(v=Z(h),v==="string"&&!y.hint&&Y(h)&&(y.hint="column looks date-like (non-ISO) — review manually")):v=se(h),y.observed.add(v)}}const c=[],u=[];for(const f of o){const l=n.get(f),{type:d,conflict:h}=Be(l.observed.size?l.observed:new Set(["string"]));c.push({key:f,type:d}),u.push({column:f,inferredType:d,observedTypes:[...l.observed].sort(),emptyRate:l.scanned===0?0:l.empty/l.scanned,conflict:h,hint:l.hint})}return{properties:c,diagnostics:u}},je=(i,e=!1)=>ee(i,typeof e=="boolean"?{deep:e}:e).properties,te=i=>Number(i)===i&&i%1===0,re=i=>Number(i)===i&&i%1!==0,se=i=>{switch(typeof i){case"string":return"string";case"number":return te(i)?"int":re(i)?"float":"any";case"boolean":return"boolean";case"object":return V(i)?"date":"json";default:return"any"}},Le=(i,e)=>{const t=j(i.text||""),r=e?.attributeKey||i.filterKey;let s;const n=e?.comparisonType||"containsIgnoreCase";return n==="containsIgnoreCase"?s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:`/${t}/`,operator:"find",options:{transform:["lowercase"]}}]}:n==="containsIgnoreCaseAndWhitespace"?s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:`/${t}/`,operator:"find",options:{transform:["removeWhitespace","lowercase"]}}]}:n==="contains"?s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:`/${t}/`,operator:"find"}]}:n==="equal"?s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:i.text,operator:"eq"}]}:n==="equalIgnoreCase"&&(s={groupKey:i.filterKey,queries:[{queryKey:i.text,attribute:r,value:i.text,operator:"eq",options:{transform:["lowercase"]}}]}),s},Ve=(i,e)=>{const t=e?.attributeKey||i.filterKey;return{groupKey:i.filterKey,queries:[{queryKey:i.value,attribute:t,value:i.value,operator:"eq"}]}},Ue=(i,e)=>{const t=e?.attributeKey||i.filterKey,r={groupKey:i.filterKey,queries:[]};return typeof i.eq<"u"&&(r.groupType="or",Array.isArray(i.eq)?i.eq.forEach(s=>{r.queries.push({attribute:t,value:s,operator:"eq"})}):r.queries.push({attribute:t,value:i.eq,operator:"eq"})),typeof i.ne<"u"&&(r.groupType="and",Array.isArray(i.ne)?i.ne.forEach(s=>{r.queries.push({attribute:t,value:s,operator:"eq",options:{invert:!0}})}):r.queries.push({attribute:t,value:i.ne,operator:"eq",options:{invert:!0}})),typeof i.gt<"u"&&(r.groupType="and",r.queries.push({attribute:t,value:i.gt,operator:"gt"})),typeof i.lt<"u"&&(r.groupType="and",r.queries.push({attribute:t,value:i.lt,operator:"lt"})),typeof i.gte<"u"&&(r.groupType="and",r.queries.push({attribute:t,value:i.gte,operator:"gte"})),typeof i.lte<"u"&&(r.groupType="and",r.queries.push({attribute:t,value:i.lte,operator:"lte"})),r},We=(i,e)=>{const t=e?.attributeKey||i.filterKey,r={groupKey:i.filterKey,queries:[]};return i.itemKeys.forEach(s=>{r.queries.push({queryKey:s,attribute:t,value:{key:s},operator:"eq"})}),r},He=i=>!(typeof i.modelKey!="string"||!Array.isArray(i.queries));class Je{constructor(e,t,r){this.scriptController=e,this.globalItemService=t,this.modelParser=r}scriptController;globalItemService;modelParser;registeredCustomOperator=new Map;queryBuilder=new $;registerCustomOperator(e,t){this.registeredCustomOperator.set(e,t)}transformValue(e,t){if(Array.isArray(e))return e.map(r=>this.transformValue(r,t));if(typeof e!="string")return e;for(const r of t)r==="lowercase"?e=e.toLowerCase():r==="trim"?e=e.trim():r==="removeWhitespace"&&(e=e.replace(/\s/g,""));return e}evaluateQuery(e,t){let r=e.value;const s=e.options?.arrayValueHandling||"some";Array.isArray(e.options?.transform)&&e.options.transform.length>0&&(r=this.transformValue(r,e.options.transform));let n=this.getAttributeValue(t,e.attribute);if(Array.isArray(e.options?.transform)&&e.options.transform.length>0&&(n=this.transformValue(n,e.options.transform)),(typeof n>"u"||n===null)&&!["typeof","isTruthy","eq","in"].includes(e.operator))return!1;let o;switch(e.operator){case"eq":o=this.queryEq(n,r,s);break;case"in":o=this.queryIn(n,r,s);break;case"find":o=this.queryFind(n,r,s,e.options?.regexFlags);break;case"lt":case"gt":case"lte":case"gte":{const a=e.operator;o=this.matchValues(n,s,c=>this.compareValue(a,c,r));break}case"typeof":o=this.matchValues(n,s,a=>typeof a===r);break;case"isTruthy":{const a=r===!0;o=this.matchValues(n,s,c=>!!c===a);break}case"size":typeof n=="string"?o=n.length===r:o=p.size(n)===r;break;default:if(this.scriptController.hasScript(e.operator))return this.scriptController.executeScript(e.operator,"operator",{query:e,item:t});if(this.registeredCustomOperator.has(e.operator)){const a=this.registeredCustomOperator.get(e.operator);if(typeof a=="function")return a(e,t)}return!1}return e.options?.invert?!o:o}compareValue(e,t,r){if(t==null)return!1;switch(e){case"lt":return t<r;case"gt":return t>r;case"lte":return t<=r;case"gte":return t>=r}}getAttributeValue(e,t){if(t in e||!(t.includes(".")||t.includes("[")))return e[t];if(t.includes("["))return p.get(e,t);const r=t.split(".");let s=e;for(let n=0;n<r.length;n++){const o=r[n];if(s==null)return;if(Array.isArray(s)&&o!=="length"&&!/^\d+$/.test(o))return w(s,r.slice(n).join("."));s=s[o]}return s}matchValues(e,t,r){return Array.isArray(e)?t==="every"?e.length>0&&e.every(r):e.some(r):r(e)}queryEq(e,t,r){return Array.isArray(e)&&!Array.isArray(t)?this.matchValues(e,r,s=>this.equalsQueryValue(s,t)):this.equalsQueryValue(e,t)}queryIn(e,t,r){return!Array.isArray(t)||t.length===0?!1:this.matchValues(e,r,s=>t.some(n=>this.equalsQueryValue(s,n)))}getIndexKey(e){if(typeof e=="string")return e;if(e?.key&&Object.keys(e).length===1)return e.key}equalsQueryValue(e,t){const r=this.getIndexKey(t);return typeof r>"u"?p.isEqual(e,t):e instanceof Date?!isNaN(e.getTime())&&e.toISOString()===r:typeof e=="object"&&e?.key?e.key===r:e===r}canUseIndex(e){return e.options?.arrayValueHandling!=="every"&&!e.options?.transform?.length}evaluateEqOperator(e,t,r,s){const n=new Map,o=this.canUseIndex(t)?s.get(t.attribute):void 0;if(o){const a=this.getIndexKey(t.value);if(typeof a<"u"){const c=o.get(a);if(c)if(c.forEach(u=>{r.has(u)&&n.set(u,r.get(u))}),t.options?.invert){const u=p.differenceBy(Array.from(r.values()),Array.from(n.values()),"key"),f=new Map;return u.forEach(l=>{f.set(l.key,l)}),f}else return n}}return this.scanDataset(e,t,r)}evaluateInOperator(e,t,r,s){const n=this.canUseIndex(t)?s.get(t.attribute):void 0;if(!n)return this.scanDataset(e,t,r);const o=new Map,a=[];for(const u of t.value){const f=this.getIndexKey(u),l=typeof f<"u"?n.get(f):void 0;if(!l){a.push(u);continue}l.forEach(d=>{const h=r.get(d);h&&o.set(d,h)})}if(a.length>0){const u=new Map;r.forEach((l,d)=>{o.has(d)||u.set(d,l)});const f={...t,value:a,options:{...t.options,invert:!1}};this.scanDataset(e,f,u).forEach((l,d)=>o.set(d,l))}if(!t.options?.invert)return o;const c=new Map;return r.forEach((u,f)=>{o.has(f)||c.set(f,u)}),c}scanDataset(e,t,r){const s=new Map,n=this.queryBuilder.extractQueryAttributes({queries:[t]}).filter(a=>a.isDeepQuery),o=n.length>0?this.queryBuilder.getProjectionForAttributeEntries(n):void 0;for(let[a,c]of r)o&&(c=this.globalItemService.getProjectedData(o,this.modelParser.models.get(e.modelKey),c)),this.evaluateQuery(t,c)&&s.set(a,c);return s}equalRegexFn(e,t,r){const s=N(t,r);if(s)try{return new RegExp(s.pattern,s.flags).test(e)}catch{return!1}else return Array.isArray(e)?!!e.find(n=>p.isEqualWith(n,t,(o,a)=>this.equalRegexFn(o,a,r))):typeof t=="object"?p.isMatch(e,t):e===t}queryFind(e,t,r,s){const n=(o,a)=>this.equalRegexFn(o,a,s);return Array.isArray(e)?typeof t=="string"||typeof t=="number"||typeof t=="boolean"?this.matchValues(e,r,o=>p.isEqualWith(o,t,n)):t!==null&&typeof t=="object"?this.matchValues(e,r,o=>p.isMatch(o,t)):!!p.find(e,t):p.isEqualWith(e,t,n)}validateQuery(e){if(this.queryBuilder.isQuery(e)){if(!e.attribute||!e.operator)throw new Error("invalid query - missing attribute or operator");if(e.operator==="find"&&Array.isArray(e.value))throw new Error("invalid query - find operator cannot have array value");if(e.operator==="in"&&!Array.isArray(e.value))throw new Error("invalid query - in operator needs an array value");return!0}else{if(this.queryBuilder.isQueryGroup(e))return p.every(e.queries,t=>this.validateQuery(t));throw new Error("invalid query - missing query or attribute")}}getEvaluatedQueryDataset(e,t,r,s){const n=new Map;if(t.attribute.includes("[*]")){const o=t.options?.invert===!0,a=new Set;for(let c of r.values()){const u=this.queryBuilder.extractQueryAttributes({queries:[t]});if(u.some(h=>h.isDeepQuery)){const h=this.queryBuilder.getProjectionForAttributeEntries(u.filter(y=>y.isDeepQuery));c=this.globalItemService.getProjectedData(h,this.modelParser.models.get(e.modelKey),c)}const l=this.handleArrayStarQuery(t,c).queries.map(h=>({...h,options:{...h.options,invert:!1}}));this.matchValues(l,t.options?.arrayValueHandling||"some",h=>this.evaluateQuery(h,c))&&(a.add(c.key),o||n.set(c.key,c))}if(o)for(const[c,u]of r)a.has(c)||n.set(c,u)}else return t.operator==="eq"?this.evaluateEqOperator(e,t,r,s):t.operator==="in"?this.evaluateInOperator(e,t,r,s):this.scanDataset(e,t,r);return n}handleArrayStarQuery(e,t){const r=e.attribute.indexOf("[*]"),s={groupKey:e.queryKey||e.attribute+"[*]",groupType:"or",queries:[]};if(r!==-1){const n=e.attribute.substring(0,r),o=n.includes(".")?p.get(t,n):t[n];if(Array.isArray(o))for(let a=0;a<o.length;a++){const c=e.attribute.replace("[*]",`[${a}]`);s.queries.push({attribute:c,operator:e.operator,value:e.value,options:e.options})}}return s}evaluateQueryGroup(e,t,r,s,n){let o=new Map,a=r;if(!t.queries||t.queries?.length===0)return a;const c=t.groupType==="or";for(const u of t.queries){let f=new Map;if(this.queryBuilder.isQuery(u)?f=this.getEvaluatedQueryDataset(e,u,a,n):f=this.evaluateQueryGroup(e,u,a,s,n),o.size===0&&(o=f),c)f.forEach(l=>{o.set(l.key,l)}),a=r;else{const l=p.differenceBy(Array.from(o.values()),Array.from(f.values()),"key");for(const d of l)o.delete(d.key);a=o}}return o}queryData(e,t,r,s){if(t.queries.length===0)return e;const n=new Map(e);return t.groupKey||(t.groupKey="root"),t.groupType||(t.groupType="and"),t.queries||(t.queries=[]),this.validateQuery(t),this.evaluateQueryGroup(t,t,n,r,s)}}const Xe=new Set(["apikey","api-key","managerkey","token","proxy-key","proxykey","manager-key","sdk-key"]);function Ze(i){const e=i.indexOf("?");if(e<0)return i;const t=i.slice(e+1).split("&").map(r=>{const s=r.indexOf("=");if(s<0)return r;const n=r.slice(0,s);return Xe.has(n.toLowerCase())?`${n}=<redacted>`:r}).join("&");return`${i.slice(0,e)}?${t}`}const ne="k:",ie="h:";function S(i,e=0){if(i.key)return`${ne}${i.key}`;const t=I({type:i.type,url:i.rawUrl??i.url,model:i.model??"",occurrence:e});return`${ie}${t}`}function Ye(i){const e=new Map,t=new Set;return i.map(r=>{const s=`${r.key??""}|${r.type}|${r.rawUrl??r.url}|${r.model??""}`;let n=e.get(s)??0,o=S(r,n);for(;t.has(o);)n+=1,o=r.key?`${S(r)}#${n}`:S(r,n);return e.set(s,n+1),t.add(o),o})}function et(){const i=globalThis;return typeof i.scheduler?.yield=="function"?i.scheduler.yield():typeof i.setImmediate=="function"?new Promise(e=>i.setImmediate(()=>e())):typeof i.MessageChannel=="function"?new Promise(e=>{const t=new i.MessageChannel;t.port1.onmessage=()=>{t.port1.close(),e()},t.port2.postMessage(null)}):new Promise(e=>setTimeout(e,0))}const oe=(i,e)=>new Function(...e,i);class tt{scripts=new Map;scriptFunctions=new Map;compiler=oe;enabled=!0;constructor(){}keys(){return Array.from(this.scripts.keys())}setScript(e,t){this.scripts.set(e,t)}removeScript(e){this.scripts.delete(e)}getScript(e){return this.scripts.get(e)}hasScript(e){return this.scripts.has(e)}getScriptAsFn(e,t){if(this.scriptFunctions.has(e))return this.scriptFunctions.get(e);const r=this.getScript(e);if(!r)throw new Error(`Script ${e} not found`);const s=this.getWrapperScript(r),n=this.compiler(s,["script_type",...t]);return this.scriptFunctions.set(e,n),n}getWrapperScript(e){return`
2
2
  "use strict";
3
3
  ${e}
4
- `}executeScript(e,t,r){if(!this.getScript(e))throw new Error(`Script ${e} not found`);r.context||(r.context=r.options||{});const n=Object.keys(r),o=Object.values(r);return this.getScriptAsFn(e,n)(t,...o)}}const tt=(i,e)=>i?(e||(e={}),i.replace(/\$\{(.*?)\}/g,(t,r)=>p.get(e,r.trim(),""))):"",rt=i=>{const e=new Set;return i.replace(/\$\{(.*?)\}/g,(r,s)=>(e.add(s.trim()),"")),{variables:Array.from(e).map(r=>({name:r}))}},st=["any","Array<date>","Array<float>","Array<int>","Array<string>","boolean","date","float","int","json","string"],nt=["int","float","Array<int>","Array<float>"],it=["date","Array<date>"],ot=["eq","in","find","gt","gte","lt","lte","typeof","isTruthy","size"];exports.AUTHORED_RESOURCE_ID_PREFIX=ne;exports.AnalyticsController=ae;exports.AttributeDependencyGraph=ce;exports.CacheController=ue;exports.ChangeDetector=ve;exports.DERIVED_RESOURCE_ID_PREFIX=ie;exports.DatePropertyTypes=it;exports.DcuplQueryBuilder=$;exports.DcuplQueryOperatorsAsArray=ot;exports.DeepQueryService=W;exports.DependencyGraph=P;exports.IndicesController=J;exports.Logger=g;exports.NumberPropertyTypes=nt;exports.PropertyTypesAsArray=st;exports.QueryManager=He;exports.ScriptController=et;exports.clone=O;exports.coerceStringType=Z;exports.compareVersions=L;exports.computeSuggestions=xe;exports.deepQueryService=m;exports.escapeRegExp=j;exports.evaluateTemplate=tt;exports.generateBooleanQuery=Le;exports.generateKey=B;exports.generateNumberAndDateQuery=Ve;exports.generateReferenceQuery=Ue;exports.generateTextQuery=je;exports.getAggregation=Q;exports.getDateConstraintUid=de;exports.getDcuplPropertyTypeForNativeType=se;exports.getDeepPathValues=w;exports.getDistinct=H;exports.getFacets=Oe;exports.getFilterEntryId=fe;exports.getNumberConstraintUid=le;exports.getPropertiesForData=Be;exports.groupBy=pe;exports.hasMinimumVersion=me;exports.inferModel=ee;exports.isDateInstance=V;exports.isFloat=re;exports.isInt=te;exports.isValidDate=U;exports.isValidQueryStatement=We;exports.isValidVersion=E;exports.logger=z;exports.looksDateLike=Y;exports.parseDate=Ie;exports.parseRegexLiteral=N;exports.parseTemplate=rt;exports.perf=b;exports.pivot=R;exports.redactUrl=Xe;exports.removeTrailingSlash=ge;exports.resolveResourceId=S;exports.resolveResourceIds=Ze;exports.trigger=we;exports.unescapeRegExp=ye;exports.uniqBy=he;exports.yieldToEventLoop=Ye;
4
+ `}executeScript(e,t,r){if(!this.enabled)throw new Error("Scripting is disabled for this dcupl instance");if(!this.getScript(e))throw new Error(`Script ${e} not found`);r.context||(r.context=r.options||{});const n=Object.keys(r),o=Object.values(r);return this.getScriptAsFn(e,n)(t,...o)}}const rt=(i,e)=>i?(e||(e={}),i.replace(/\$\{(.*?)\}/g,(t,r)=>p.get(e,r.trim(),""))):"",st=i=>{const e=new Set;return i.replace(/\$\{(.*?)\}/g,(r,s)=>(e.add(s.trim()),"")),{variables:Array.from(e).map(r=>({name:r}))}},nt=["any","Array<date>","Array<float>","Array<int>","Array<string>","boolean","date","float","int","json","string"],it=["int","float","Array<int>","Array<float>"],ot=["date","Array<date>"],at=["eq","in","find","gt","gte","lt","lte","typeof","isTruthy","size"];exports.AUTHORED_RESOURCE_ID_PREFIX=ne;exports.AnalyticsController=ce;exports.AttributeDependencyGraph=ue;exports.CacheController=fe;exports.ChangeDetector=we;exports.DERIVED_RESOURCE_ID_PREFIX=ie;exports.DatePropertyTypes=ot;exports.DcuplQueryBuilder=$;exports.DcuplQueryOperatorsAsArray=at;exports.DeepQueryService=W;exports.DependencyGraph=P;exports.IndicesController=J;exports.Logger=g;exports.NumberPropertyTypes=it;exports.PropertyTypesAsArray=nt;exports.QueryManager=Je;exports.ScriptController=tt;exports.clone=O;exports.coerceStringType=Z;exports.compareVersions=L;exports.computeSuggestions=Ae;exports.deepQueryService=m;exports.defaultScriptCompiler=oe;exports.escapeRegExp=j;exports.evaluateTemplate=rt;exports.generateBooleanQuery=Ve;exports.generateKey=B;exports.generateNumberAndDateQuery=Ue;exports.generateReferenceQuery=We;exports.generateTextQuery=Le;exports.getAggregation=Q;exports.getDateConstraintUid=he;exports.getDcuplPropertyTypeForNativeType=se;exports.getDeepPathValues=w;exports.getDistinct=H;exports.getFacets=$e;exports.getFilterEntryId=le;exports.getNumberConstraintUid=de;exports.getPropertiesForData=je;exports.groupBy=ge;exports.hasMinimumVersion=ve;exports.inferModel=ee;exports.isDateInstance=V;exports.isFloat=re;exports.isInt=te;exports.isValidDate=U;exports.isValidQueryStatement=He;exports.isValidVersion=E;exports.logger=z;exports.looksDateLike=Y;exports.parseDate=Qe;exports.parseRegexLiteral=N;exports.parseTemplate=st;exports.perf=b;exports.pivot=R;exports.redactUrl=Ze;exports.removeTrailingSlash=ye;exports.resolveResourceId=S;exports.resolveResourceIds=Ye;exports.trigger=xe;exports.unescapeRegExp=me;exports.uniqBy=pe;exports.yieldToEventLoop=et;
5
5
  //# sourceMappingURL=index.cjs.map