@statedelta-libs/expressions 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +15 -3
- package/dist/index.d.ts +15 -3
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var conditions=require('@statedelta-libs/conditions'),omniAst=require('omni-ast');var tn=Object.defineProperty;var on=(n,e)=>{for(var i in e)tn(n,i,{get:e[i],enumerable:true});};var m=n=>n!==null&&typeof n=="object"&&"$"in n&&typeof n.$=="string"&&Object.keys(n).length===1,h=n=>n!==null&&typeof n=="object"&&"$if"in n&&"then"in n,T=n=>n!==null&&typeof n=="object"&&"$fn"in n&&typeof n.$fn=="string",b=n=>n!==null&&typeof n=="object"&&"$pipe"in n&&Array.isArray(n.$pipe),V=new Set(["eq","neq","gt","gte","lt","lte","in","notIn","contains","notContains","exists","notExists","matches","notMatches","startsWith","endsWith"]),g=n=>n!==null&&typeof n=="object"&&"path"in n&&"op"in n&&V.has(n.op)&&!("$"in n)&&!("$if"in n)&&!("$fn"in n),y=n=>n!==null&&typeof n=="object"&&"logic"in n&&"conditions"in n,rn=n=>g(n)||y(n),M=n=>{if(n===null)return true;let e=typeof n;if(e==="string"||e==="number"||e==="boolean"||Array.isArray(n))return true;if(e==="object"&&n!==null){let i=n,t="path"in i&&"op"in i&&V.has(i.op);return !("$"in i)&&!("$if"in i)&&!("$fn"in i)&&!("$pipe"in i)&&!t&&!("logic"in i)}return false};var R=new Map;function L(n){let e=[],i=n.length,t=0,o="";for(;t<i;){let s=n[t];if(s===".")o&&(e.push({type:"key",value:o}),o=""),t++;else if(s==="["){o&&(e.push({type:"key",value:o}),o=""),t++;let r=t;for(;t<i&&n[t]!=="]";)t++;let f=n.slice(r,t);if(t++,f==="*")e.push({type:"wildcard",value:"*"});else {let a=parseInt(f,10);e.push({type:"index",value:isNaN(a)?f:a});}}else o+=s,t++;}return o&&e.push({type:"key",value:o}),e}function _(n){return n.includes("[*]")}function O(n){let e=R.get(n);return e||(e=_(n)?ln(n):sn(n),R.set(n,e),e)}function sn(n){if(!n.includes(".")&&!n.includes("["))return o=>o?.[n];let e=L(n),i=e.length;if(i===2){let[o,s]=e,r=o.value,f=s.value;return a=>a?.[r]?.[f]}if(i===3){let[o,s,r]=e,f=o.value,a=s.value,u=r.value;return c=>c?.[f]?.[a]?.[u]}let t=e.map(o=>o.value);return o=>{let s=o;for(let r=0;r<i&&s!=null;r++)s=s[t[r]];return s}}function ln(n){let e=L(n),i=[];for(let t=0;t<e.length;t++)e[t].type==="wildcard"&&i.push(t);return i.length===1?fn(e,i[0]):an(e,i)}function fn(n,e){let i=n.slice(0,e).map(r=>r.value),t=n.slice(e+1).map(r=>r.value),o=i.length,s=t.length;if(s===0){if(o===1){let r=i[0];return f=>f?.[r]}return r=>{let f=r;for(let a=0;a<o&&f!=null;a++)f=f[i[a]];return f}}if(s===1){let r=t[0];if(o===1){let f=i[0];return a=>{let u=a?.[f];if(Array.isArray(u))return u.map(c=>c?.[r])}}return f=>{let a=f;for(let u=0;u<o&&a!=null;u++)a=a[i[u]];if(Array.isArray(a))return a.map(u=>u?.[r])}}return r=>{let f=r;for(let a=0;a<o&&f!=null;a++)f=f[i[a]];if(Array.isArray(f))return f.map(a=>{let u=a;for(let c=0;c<s&&u!=null;c++)u=u[t[c]];return u})}}function an(n,e){let i=[],t=0;for(let s=0;s<e.length;s++){let r=e[s],f=s===e.length-1,a=n.slice(t,r).map(u=>u.value);a.length>0&&i.push({type:"access",keys:a}),i.push({type:f?"map":"flatMap",keys:[]}),t=r+1;}let o=n.slice(t).map(s=>s.value);return s=>{let r=s;for(let f of i){if(r==null)return;if(f.type==="access")for(let a of f.keys){if(r==null)return;r=r[a];}else if(f.type==="flatMap"){if(!Array.isArray(r))return;r=r.flatMap(a=>{let u=a;return Array.isArray(u)?u:[u]});}else if(f.type==="map"){if(!Array.isArray(r))return;o.length>0&&(r=r.map(a=>{let u=a;for(let c of o){if(u==null)return;u=u[c];}return u}));}}return r}}function un(n,e){return O(e)(n)}function k(n){let e=n.indexOf("[*]");return e===-1?n:n.slice(0,e)}function cn(){R.clear();}function pn(){return R.size}function A(n){let e=new Set;return x(n,e),Array.from(e)}function x(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let o=0;o<n.length;o++)x(n[o],e);return}if(m(n)){e.add(k(n.$));return}if(h(n)){if(typeof n.$if=="string"){let o=n.$if.startsWith("!")?n.$if.slice(1):n.$if;e.add(k(o));}else x(n.$if,e);x(n.then,e),n.else!==void 0&&x(n.else,e);return}if(b(n)){for(let o=0;o<n.$pipe.length;o++)x(n.$pipe[o],e);return}if(T(n)){if(n.args)for(let o=0;o<n.args.length;o++)x(n.args[o],e);return}if(g(n)){e.add(k(n.path)),n.value!==void 0&&conditions.isRef(n.value)&&e.add(k(n.value.$));return}if(y(n)){for(let o=0;o<n.conditions.length;o++)x(n.conditions[o],e);return}let i=n,t=Object.keys(i);for(let o=0;o<t.length;o++)x(i[t[o]],e);}function mn(n){return A(n).length>0}function gn(n){return A(n).length===0}function yn(n){return JSON.stringify(n)}function F(n,e={}){let i=e.scope??{},t=e.accessor,o=C(n,i,t),s=A(n),r=yn(n);return {fn:o,deps:s,hash:r}}function C(n,e,i){if(n===null)return ()=>null;if(typeof n!="object")return ()=>n;if(Array.isArray(n)){let t=n.map(o=>C(o,e,i));return o=>t.map(s=>s(o))}if(m(n))return En(n,i);if(h(n))return hn(n,e,i);if(b(n))return Tn(n,e,i);if(T(n))return bn(n,e,i);if(g(n))return conditions.compile(n,i?{accessor:i}:void 0);if(y(n))return conditions.compile(n,i?{accessor:i}:void 0);if(M(n)){let t=n,o=Object.keys(t),s=o.map(r=>C(t[r],e,i));return r=>{let f={};for(let a=0;a<o.length;a++)f[o[a]]=s[a](r);return f}}return ()=>n}function J(n,e){return e?i=>e(n,i):O(n)}function En(n,e){return J(n.$,e)}function hn(n,e,i){let t;if(typeof n.$if=="string"){let r=n.$if.startsWith("!")?n.$if.slice(1):n.$if,f=J(r,i);t=n.$if.startsWith("!")?u=>!f(u):u=>!!f(u);}else {let r=C(n.$if,e,i);t=f=>!!r(f);}let o=C(n.then,e,i),s=n.else!==void 0?C(n.else,e,i):()=>{};return r=>t(r)?o(r):s(r)}function Tn(n,e,i){let t=n.$pipe;if(t.length===0)return ()=>{};if(t.length===1)return C(t[0],e,i);let o=C(t[0],e,i),s=t.slice(1).map(f=>C(f,e,i)),r=s.length;if(r===1){let[f]=s;return a=>{let u=o(a),c=f(a);return typeof c=="function"?c(u):c}}if(r===2){let[f,a]=s;return u=>{let c=o(u),p=f(u);return c=typeof p=="function"?p(c):p,p=a(u),typeof p=="function"?p(c):p}}if(r===3){let[f,a,u]=s;return c=>{let p=o(c),E=f(c);return p=typeof E=="function"?E(p):E,E=a(c),p=typeof E=="function"?E(p):E,E=u(c),typeof E=="function"?E(p):E}}return f=>{let a=o(f);for(let u=0;u<r;u++){let c=s[u](f);a=typeof c=="function"?c(a):c;}return a}}function bn(n,e,i){let t=n.$fn,o=n.args;if(o===void 0)return ()=>{let f=e[t];if(!f)throw new Error(`Function not found in scope: ${t}`);return f};let s=o.map(f=>C(f,e,i)),r=s.length;if(r===0)return f=>{let a=e[t];if(!a)throw new Error(`Function not found in scope: ${t}`);return a()};if(r===1){let[f]=s;return a=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u(f(a))}}if(r===2){let[f,a]=s;return u=>{let c=e[t];if(!c)throw new Error(`Function not found in scope: ${t}`);return c(f(u),a(u))}}if(r===3){let[f,a,u]=s;return c=>{let p=e[t];if(!p)throw new Error(`Function not found in scope: ${t}`);return p(f(c),a(c),u(c))}}return f=>{let a=e[t];if(!a)throw new Error(`Function not found in scope: ${t}`);return a(...s.map(u=>u(f)))}}function Cn(n,e,i={}){return F(n,i).fn(e)}var v=class{constructor(e=1e3){this.cache=new Map,this._maxSize=e;}get(e,i={}){let t=JSON.stringify(e),o=this.cache.get(t);if(o)return this.cache.delete(t),this.cache.set(t,o),o;let s=F(e,i);if(this.cache.size>=this._maxSize){let r=this.cache.keys().next().value;r&&this.cache.delete(r);}return this.cache.set(t,s),s}has(e){return this.cache.has(JSON.stringify(e))}delete(e){return this.cache.delete(JSON.stringify(e))}clear(){this.cache.clear();}get size(){return this.cache.size}get maxSize(){return this._maxSize}set maxSize(e){for(this._maxSize=e;this.cache.size>this._maxSize;){let i=this.cache.keys().next().value;i&&this.cache.delete(i);}}},B=new v;function $n(n,e={}){return B.get(n,e)}function D(n,e="root",i={}){let t=[];return S(n,e,t,i),{valid:t.length===0,errors:t}}function S(n,e,i,t){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let r=0;r<n.length;r++)S(n[r],`${e}[${r}]`,i,t);return}if(m(n)){(!n.$||typeof n.$!="string")&&i.push(`${e}: invalid reference, $ must be non-empty string`);return}if(h(n)){typeof n.$if=="string"?(n.$if.startsWith("!")?n.$if.slice(1):n.$if)||i.push(`${e}.$if: empty path in string shorthand`):S(n.$if,`${e}.$if`,i,t),S(n.then,`${e}.then`,i,t),n.else!==void 0&&S(n.else,`${e}.else`,i,t);return}if(b(n)){if(!Array.isArray(n.$pipe)){i.push(`${e}.$pipe: must be an array`);return}if(n.$pipe.length===0){i.push(`${e}.$pipe: must have at least one element`);return}for(let r=0;r<n.$pipe.length;r++)S(n.$pipe[r],`${e}.$pipe[${r}]`,i,t);return}if(T(n)){if(!n.$fn||typeof n.$fn!="string"){i.push(`${e}: invalid function, $fn must be non-empty string`);return}if(t.scope&&!(n.$fn in t.scope)&&i.push(`${e}: function "${n.$fn}" not found in scope`),n.args!==void 0)if(!Array.isArray(n.args))i.push(`${e}.args: must be an array`);else for(let r=0;r<n.args.length;r++)S(n.args[r],`${e}.args[${r}]`,i,t);return}if(g(n)){let r=conditions.validate(n,e);r.valid||i.push(...r.errors);return}if(y(n)){let r=conditions.validate(n,e);r.valid||i.push(...r.errors);return}let o=n,s=Object.keys(o);for(let r=0;r<s.length;r++){let f=s[r];S(o[f],`${e}.${f}`,i,t);}}function xn(n,e={}){let i=D(n,"root",e);if(!i.valid)throw new Error(`Invalid expression: ${i.errors.join("; ")}`)}function Sn(n,e={}){return D(n,"root",e).valid}var U={};on(U,{$:()=>Y,$fn:()=>H,$if:()=>wn,$pipe:()=>Q,fn:()=>kn,pipe:()=>Rn,ref:()=>An});function Y(n){return {$:n}}var An=Y;function H(n,e){return e===void 0||e.length===0?{$fn:n}:{$fn:n,args:e}}var kn=H;function wn(n,e,i){return i===void 0?{$if:n,then:e}:{$if:n,then:e,else:i}}function Q(...n){return {$pipe:n}}var Rn=Q;var P="data",X="scope",On={eq:"===",neq:"!==",gt:">",gte:">=",lt:"<",lte:"<="};function G(n,e={}){let{dataParam:i=P,scopeParam:t=X,noPrefixes:o=false,useAccessor:s=false}=e;return d(n,i,t,o,s)}function d(n,e,i,t,o){if(n===null)return omniAst.builders.literal(null);if(typeof n=="string")return omniAst.builders.literal(n);if(typeof n=="number")return omniAst.builders.literal(n);if(typeof n=="boolean")return omniAst.builders.literal(n);if(Array.isArray(n))return omniAst.builders.arrayExpression(n.map(s=>d(s,e,i,t,o)));if(m(n))return Fn(n.$,e,t,o);if(h(n))return Nn(n,e,i,t,o);if(b(n))return Gn(n.$pipe,e,i,t,o);if(T(n))return jn(n,e,i,t,o);if(g(n))return Wn(n,e,i,t,o);if(y(n))return zn(n,e,i,t,o);if(typeof n=="object"){let r=Object.entries(n).map(([f,a])=>omniAst.builders.property(omniAst.builders.identifier(f),d(a,e,i,t,o)));return omniAst.builders.objectExpression(r)}return omniAst.builders.literal(null)}var N="accessor";function Fn(n,e,i,t){return t?omniAst.builders.callExpression(omniAst.builders.identifier(N),[omniAst.builders.literal(n),omniAst.builders.identifier(e)]):n.includes("[*]")?vn(n,e,i):w(n,e,i)}function w(n,e,i){let t=j(n);if(t.length===0)return i?omniAst.builders.identifier("undefined"):omniAst.builders.identifier(e);let o;if(i){let s=t[0];o=omniAst.builders.identifier(s.value);for(let r=1;r<t.length;r++){let f=t[r];f.type==="key"?o=omniAst.builders.memberExpression(o,omniAst.builders.identifier(f.value),false,true):o=omniAst.builders.memberExpression(o,omniAst.builders.literal(f.value),true,true);}}else {o=omniAst.builders.identifier(e);for(let s of t)s.type==="key"?o=omniAst.builders.memberExpression(o,omniAst.builders.identifier(s.value),false,true):o=omniAst.builders.memberExpression(o,omniAst.builders.literal(s.value),true,true);}return o}function vn(n,e,i){let t=n.indexOf("[*]"),o=n.slice(0,t),s=n.slice(t+3),r;if(o?r=w(o,e,i):r=i?omniAst.builders.identifier("undefined"):omniAst.builders.identifier(e),!s||s==="")return r;if(s.includes("[*]"))return Z(r,s);let f="_i",a=s.startsWith(".")?s.slice(1):s,u=omniAst.builders.identifier(f);if(a){let c=j(a);for(let p of c)p.type==="key"?u=omniAst.builders.memberExpression(u,omniAst.builders.identifier(p.value),false,true):u=omniAst.builders.memberExpression(u,omniAst.builders.literal(p.value),true,true);}return omniAst.builders.callExpression(omniAst.builders.memberExpression(r,omniAst.builders.identifier("map"),false,true),[omniAst.builders.arrowFunctionExpression([omniAst.builders.identifier(f)],u)])}function Z(n,e){let i=e.indexOf("[*]"),t=e.slice(0,i),o=e.slice(i+3),s="_i",r=t.startsWith(".")?t.slice(1):t,f=omniAst.builders.identifier(s);if(r){let u=j(r);for(let c of u)c.type==="key"&&(f=omniAst.builders.memberExpression(f,omniAst.builders.identifier(c.value),false,true));}if(o.includes("[*]")){let u=Z(f,o);return omniAst.builders.callExpression(omniAst.builders.memberExpression(n,omniAst.builders.identifier("flatMap"),false,true),[omniAst.builders.arrowFunctionExpression([omniAst.builders.identifier(s)],u)])}let a=o.startsWith(".")?o.slice(1):o;if(a){let u=j(a);for(let c of u)c.type==="key"&&(f=omniAst.builders.memberExpression(f,omniAst.builders.identifier(c.value),false,true));}return omniAst.builders.callExpression(omniAst.builders.memberExpression(n,omniAst.builders.identifier("flatMap"),false,true),[omniAst.builders.arrowFunctionExpression([omniAst.builders.identifier(s)],f)])}function Nn(n,e,i,t,o){let s;if(typeof n.$if=="string"){let a=n.$if.startsWith("!"),u=a?n.$if.slice(1):n.$if,c=o?omniAst.builders.callExpression(omniAst.builders.identifier(N),[omniAst.builders.literal(u),omniAst.builders.identifier(e)]):w(u,e,t);s=a?omniAst.builders.unaryExpression("!",c):c;}else s=d(n.$if,e,i,t,o);let r=d(n.then,e,i,t,o),f=n.else!==void 0?d(n.else,e,i,t,o):omniAst.builders.identifier("undefined");return omniAst.builders.conditionalExpression(s,r,f)}function jn(n,e,i,t,o){let s=t?omniAst.builders.identifier(n.$fn):omniAst.builders.memberExpression(omniAst.builders.identifier(i),omniAst.builders.identifier(n.$fn),false,false);if(n.args===void 0)return s;let r=n.args.map(f=>d(f,e,i,t,o));return omniAst.builders.callExpression(s,r)}function Gn(n,e,i,t,o){if(n.length===0)return omniAst.builders.identifier("undefined");if(n.length===1)return d(n[0],e,i,t,o);let s=d(n[0],e,i,t,o);for(let r=1;r<n.length;r++){let f=d(n[r],e,i,t,o);s=omniAst.builders.callExpression(f,[s]);}return s}function Wn(n,e,i,t,o){let s=o?omniAst.builders.callExpression(omniAst.builders.identifier(N),[omniAst.builders.literal(n.path),omniAst.builders.identifier(e)]):w(n.path,e,t),r=n.value!==void 0?m(n.value)?o?omniAst.builders.callExpression(omniAst.builders.identifier(N),[omniAst.builders.literal(n.value.$),omniAst.builders.identifier(e)]):w(n.value.$,e,t):d(n.value,e,i,t,o):omniAst.builders.literal(null),f=On[n.op];if(f)return omniAst.builders.binaryExpression(f,s,r);switch(n.op){case "in":return omniAst.builders.callExpression(omniAst.builders.memberExpression(r,omniAst.builders.identifier("includes")),[s]);case "notIn":return omniAst.builders.unaryExpression("!",omniAst.builders.callExpression(omniAst.builders.memberExpression(r,omniAst.builders.identifier("includes")),[s]));case "contains":return omniAst.builders.callExpression(omniAst.builders.memberExpression(s,omniAst.builders.identifier("includes"),false,true),[r]);case "notContains":return omniAst.builders.unaryExpression("!",omniAst.builders.callExpression(omniAst.builders.memberExpression(s,omniAst.builders.identifier("includes"),false,true),[r]));case "exists":return omniAst.builders.binaryExpression("!=",s,omniAst.builders.literal(null));case "notExists":return omniAst.builders.binaryExpression("==",s,omniAst.builders.literal(null));case "matches":return omniAst.builders.callExpression(omniAst.builders.memberExpression(omniAst.builders.newExpression(omniAst.builders.identifier("RegExp"),[r]),omniAst.builders.identifier("test")),[s]);case "notMatches":return omniAst.builders.unaryExpression("!",omniAst.builders.callExpression(omniAst.builders.memberExpression(omniAst.builders.newExpression(omniAst.builders.identifier("RegExp"),[r]),omniAst.builders.identifier("test")),[s]));case "startsWith":return omniAst.builders.callExpression(omniAst.builders.memberExpression(s,omniAst.builders.identifier("startsWith"),false,true),[r]);case "endsWith":return omniAst.builders.callExpression(omniAst.builders.memberExpression(s,omniAst.builders.identifier("endsWith"),false,true),[r]);default:return omniAst.builders.binaryExpression("===",s,r)}}function zn(n,e,i,t,o){let{logic:s,conditions:r}=n,f=s==="AND"?"&&":"||";if(r.length===0)return omniAst.builders.literal(s==="AND");if(r.length===1)return d(r[0],e,i,t,o);let a=d(r[0],e,i,t,o);for(let u=1;u<r.length;u++){let c=d(r[u],e,i,t,o);a=omniAst.builders.logicalExpression(f,a,c);}return a}function j(n){let e=[],i=n.length,t=0,o="";for(;t<i;){let s=n[t];if(s===".")o&&(e.push({type:"key",value:o}),o=""),t++;else if(s==="["){o&&(e.push({type:"key",value:o}),o=""),t++;let r=t;for(;t<i&&n[t]!=="]";)t++;let f=n.slice(r,t);if(t++,f!=="*"){let a=parseInt(f,10);e.push({type:"index",value:isNaN(a)?f:a});}}else o+=s,t++;}return o&&e.push({type:"key",value:o}),e}function nn(n,e=[P]){return omniAst.builders.arrowFunctionExpression(e.map(i=>omniAst.builders.identifier(i)),n)}function W(n){let e=new Set;return $(n,e),e}function $(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let t of n)$(t,e);return}if(m(n))return;if(h(n)){$(n.$if,e),$(n.then,e),n.else!==void 0&&$(n.else,e);return}if(b(n)){for(let t of n.$pipe)$(t,e);return}if(T(n)){if(e.add(n.$fn),n.args)for(let t of n.args)$(t,e);return}if(g(n)){n.value!==void 0&&typeof n.value=="object"&&$(n.value,e);return}if(y(n)){for(let t of n.conditions)$(t,e);return}let i=n;for(let t of Object.keys(i))$(i[t],e);}function z(n){let e=new Set;for(let i of n){let t=i.indexOf("."),o=i.indexOf("["),s=i.length;t!==-1&&(s=Math.min(s,t)),o!==-1&&(s=Math.min(s,o));let r=i.slice(0,s);r&&e.add(r);}return e}function Dn(n){return JSON.stringify(n)}function Pn(n,e,i,t){let o=G(n,{noPrefixes:true,useAccessor:t}),s=omniAst.generate(o),r=!t&&e.size>0?`const{${[...e].join(",")}}=data??{};`:"",f=t?new Set([...i,"accessor"]):i,a=f.size>0?`const{${[...f].join(",")}}=scope;`:"";return a?`(function(scope){${a}return function(data){${r}return ${s}}})`:`(function(){return function(data){${r}return ${s}}})`}function I(n,e={}){let{scope:i={},returnCode:t=false,useAccessor:o=false}=e,s=A(n),r=z(s),f=W(n),a=Dn(n),u=Pn(n,r,f,o);if(t)return {code:u,deps:s,hash:a,dataRoots:[...r],scopeFns:[...f]};let c;try{c=new Function(`return ${u}`)()(i);}catch(p){throw new Error(`AST compilation failed. If this is due to CSP, use the standard compile() function instead. Error: ${p instanceof Error?p.message:String(p)}`)}return {fn:c,deps:s,hash:a}}function en(n,e,i={}){let{fn:t}=I(n,i);return t(e)}var Ee="0.1.1";exports.ExpressionCache=v;exports.VERSION=Ee;exports.assertValid=xn;exports.builders=U;exports.cache=B;exports.cached=$n;exports.clearPathCache=cn;exports.compile=F;exports.compileAST=I;exports.compilePath=O;exports.dslToAST=G;exports.evaluate=Cn;exports.evaluateAST=en;exports.extractDataRoots=z;exports.extractDeps=A;exports.extractScopeFns=W;exports.get=un;exports.getPathCacheSize=pn;exports.hasDeps=mn;exports.hasWildcard=_;exports.isCondition=g;exports.isConditionExpr=rn;exports.isConditionGroup=y;exports.isConditional=h;exports.isFn=T;exports.isLiteral=M;exports.isPipe=b;exports.isPure=gn;exports.isRef=m;exports.isValid=Sn;exports.normalizePath=k;exports.validate=D;exports.wrapInFunction=nn;
|
|
1
|
+
'use strict';var conditions=require('@statedelta-libs/conditions'),omniAst=require('omni-ast');var on=Object.defineProperty;var rn=(n,e)=>{for(var i in e)on(n,i,{get:e[i],enumerable:true});};var g=n=>n!==null&&typeof n=="object"&&"$"in n&&typeof n.$=="string"&&Object.keys(n).length===1,h=n=>n!==null&&typeof n=="object"&&"$if"in n&&"then"in n,T=n=>n!==null&&typeof n=="object"&&"$fn"in n&&typeof n.$fn=="string",b=n=>n!==null&&typeof n=="object"&&"$pipe"in n&&Array.isArray(n.$pipe),_=new Set(["eq","neq","gt","gte","lt","lte","in","notIn","contains","notContains","exists","notExists","matches","notMatches","startsWith","endsWith"]),y=n=>n!==null&&typeof n=="object"&&"path"in n&&"op"in n&&_.has(n.op)&&!("$"in n)&&!("$if"in n)&&!("$fn"in n),E=n=>n!==null&&typeof n=="object"&&"logic"in n&&"conditions"in n,sn=n=>y(n)||E(n),D=n=>{if(n===null)return true;let e=typeof n;if(e==="string"||e==="number"||e==="boolean"||Array.isArray(n))return true;if(e==="object"&&n!==null){let i=n,t="path"in i&&"op"in i&&_.has(i.op);return !("$"in i)&&!("$if"in i)&&!("$fn"in i)&&!("$pipe"in i)&&!t&&!("logic"in i)}return false};var x=new Map;function q(n){let e=[],i=n.length,t=0,r="";for(;t<i;){let f=n[t];if(f===".")r&&(e.push({type:"key",value:r}),r=""),t++;else if(f==="["){r&&(e.push({type:"key",value:r}),r=""),t++;let o=t;for(;t<i&&n[t]!=="]";)t++;let s=n.slice(o,t);if(t++,s==="*")e.push({type:"wildcard",value:"*"});else {let u=parseInt(s,10);e.push({type:"index",value:isNaN(u)?s:u});}}else r+=f,t++;}return r&&e.push({type:"key",value:r}),e}function J(n){return n.includes("[*]")}function O(n){let e=x.get(n);return e||(e=J(n)?fn(n):ln(n),x.set(n,e),e)}function ln(n){if(!n.includes(".")&&!n.includes("["))return r=>r?.[n];let e=q(n),i=e.length;if(i===2){let[r,f]=e,o=r.value,s=f.value;return u=>u?.[o]?.[s]}if(i===3){let[r,f,o]=e,s=r.value,u=f.value,a=o.value;return c=>c?.[s]?.[u]?.[a]}let t=e.map(r=>r.value);return r=>{let f=r;for(let o=0;o<i&&f!=null;o++)f=f[t[o]];return f}}function fn(n){let e=q(n),i=[];for(let t=0;t<e.length;t++)e[t].type==="wildcard"&&i.push(t);return i.length===1?un(e,i[0]):an(e,i)}function un(n,e){let i=n.slice(0,e).map(o=>o.value),t=n.slice(e+1).map(o=>o.value),r=i.length,f=t.length;if(f===0){if(r===1){let o=i[0];return s=>s?.[o]}return o=>{let s=o;for(let u=0;u<r&&s!=null;u++)s=s[i[u]];return s}}if(f===1){let o=t[0];if(r===1){let s=i[0];return u=>{let a=u?.[s];if(Array.isArray(a))return a.map(c=>c?.[o])}}return s=>{let u=s;for(let a=0;a<r&&u!=null;a++)u=u[i[a]];if(Array.isArray(u))return u.map(a=>a?.[o])}}return o=>{let s=o;for(let u=0;u<r&&s!=null;u++)s=s[i[u]];if(Array.isArray(s))return s.map(u=>{let a=u;for(let c=0;c<f&&a!=null;c++)a=a[t[c]];return a})}}function an(n,e){let i=[],t=0;for(let f=0;f<e.length;f++){let o=e[f],s=f===e.length-1,u=n.slice(t,o).map(a=>a.value);u.length>0&&i.push({type:"access",keys:u}),i.push({type:s?"map":"flatMap",keys:[]}),t=o+1;}let r=n.slice(t).map(f=>f.value);return f=>{let o=f;for(let s of i){if(o==null)return;if(s.type==="access")for(let u of s.keys){if(o==null)return;o=o[u];}else if(s.type==="flatMap"){if(!Array.isArray(o))return;o=o.flatMap(u=>{let a=u;return Array.isArray(a)?a:[a]});}else if(s.type==="map"){if(!Array.isArray(o))return;r.length>0&&(o=o.map(u=>{let a=u;for(let c of r){if(a==null)return;a=a[c];}return a}));}}return o}}function cn(n,e){return O(e)(n)}function R(n){let e=n.indexOf("[*]");return e===-1?n:n.slice(0,e)}function pn(){x.clear();}function dn(){return x.size}function w(n){let e=new Set;return S(n,e),Array.from(e)}function S(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let r=0;r<n.length;r++)S(n[r],e);return}if(g(n)){e.add(R(n.$));return}if(h(n)){if(typeof n.$if=="string"){let r=n.$if.startsWith("!")?n.$if.slice(1):n.$if;e.add(R(r));}else S(n.$if,e);S(n.then,e),n.else!==void 0&&S(n.else,e);return}if(b(n)){for(let r=0;r<n.$pipe.length;r++)S(n.$pipe[r],e);return}if(T(n)){if(n.args)for(let r=0;r<n.args.length;r++)S(n.args[r],e);return}if(y(n)){e.add(R(n.path)),n.value!==void 0&&conditions.isRef(n.value)&&e.add(R(n.value.$));return}if(E(n)){for(let r=0;r<n.conditions.length;r++)S(n.conditions[r],e);return}let i=n,t=Object.keys(i);for(let r=0;r<t.length;r++)S(i[t[r]],e);}function gn(n){return w(n).length>0}function yn(n){return w(n).length===0}function En(n){return JSON.stringify(n)}function F(n,e={}){let i=e.scope??{},t=e.accessor,r=C(n,i,t),f=w(n),o=En(n);return {fn:r,deps:f,hash:o}}function C(n,e,i){if(n===null)return ()=>null;if(typeof n!="object")return ()=>n;if(Array.isArray(n)){let t=n.map(r=>C(r,e,i));return r=>t.map(f=>f(r))}if(g(n))return hn(n,i);if(h(n))return Tn(n,e,i);if(b(n))return bn(n,e,i);if(T(n))return Cn(n,e,i);if(y(n))return conditions.compile(n,i?{accessor:i}:void 0);if(E(n))return conditions.compile(n,i?{accessor:i}:void 0);if(D(n)){let t=n,r=Object.keys(t),f=r.map(o=>C(t[o],e,i));return o=>{let s={};for(let u=0;u<r.length;u++)s[r[u]]=f[u](o);return s}}return ()=>n}function K(n,e){return e?i=>e(n,i):O(n)}function hn(n,e){return K(n.$,e)}function Tn(n,e,i){let t;if(typeof n.$if=="string"){let o=n.$if.startsWith("!")?n.$if.slice(1):n.$if,s=K(o,i);t=n.$if.startsWith("!")?a=>!s(a):a=>!!s(a);}else {let o=C(n.$if,e,i);t=s=>!!o(s);}let r=C(n.then,e,i),f=n.else!==void 0?C(n.else,e,i):()=>{};return o=>t(o)?r(o):f(o)}function bn(n,e,i){let t=n.$pipe;if(t.length===0)return ()=>{};if(t.length===1)return C(t[0],e,i);let r=C(t[0],e,i),f=t.slice(1).map(s=>C(s,e,i)),o=f.length;if(o===1){let[s]=f;return u=>{let a=r(u),c=s(u);return typeof c=="function"?c(a):c}}if(o===2){let[s,u]=f;return a=>{let c=r(a),p=s(a);return c=typeof p=="function"?p(c):p,p=u(a),typeof p=="function"?p(c):p}}if(o===3){let[s,u,a]=f;return c=>{let p=r(c),d=s(c);return p=typeof d=="function"?d(p):d,d=u(c),p=typeof d=="function"?d(p):d,d=a(c),typeof d=="function"?d(p):d}}return s=>{let u=r(s);for(let a=0;a<o;a++){let c=f[a](s);u=typeof c=="function"?c(u):c;}return u}}function Cn(n,e,i){let t=n.$fn,r=n.args;if(r===void 0)return ()=>{let s=e[t];if(!s)throw new Error(`Function not found in scope: ${t}`);return s};let f=r.map(s=>C(s,e,i)),o=f.length;if(o===0)return s=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u()};if(o===1){let[s]=f;return u=>{let a=e[t];if(!a)throw new Error(`Function not found in scope: ${t}`);return a(s(u))}}if(o===2){let[s,u]=f;return a=>{let c=e[t];if(!c)throw new Error(`Function not found in scope: ${t}`);return c(s(a),u(a))}}if(o===3){let[s,u,a]=f;return c=>{let p=e[t];if(!p)throw new Error(`Function not found in scope: ${t}`);return p(s(c),u(c),a(c))}}return s=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u(...f.map(a=>a(s)))}}function $n(n,e,i={}){return F(n,i).fn(e)}var v=class{constructor(e=1e3){this.cache=new Map,this._maxSize=e;}get(e,i={}){let t=JSON.stringify(e),r=this.cache.get(t);if(r)return this.cache.delete(t),this.cache.set(t,r),r;let f=F(e,i);if(this.cache.size>=this._maxSize){let o=this.cache.keys().next().value;o&&this.cache.delete(o);}return this.cache.set(t,f),f}has(e){return this.cache.has(JSON.stringify(e))}delete(e){return this.cache.delete(JSON.stringify(e))}clear(){this.cache.clear();}get size(){return this.cache.size}get maxSize(){return this._maxSize}set maxSize(e){for(this._maxSize=e;this.cache.size>this._maxSize;){let i=this.cache.keys().next().value;i&&this.cache.delete(i);}}},Y=new v;function Sn(n,e={}){return Y.get(n,e)}function I(n,e="root",i={}){let t=[];return k(n,e,t,i),{valid:t.length===0,errors:t}}function k(n,e,i,t){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let o=0;o<n.length;o++)k(n[o],`${e}[${o}]`,i,t);return}if(g(n)){(!n.$||typeof n.$!="string")&&i.push(`${e}: invalid reference, $ must be non-empty string`);return}if(h(n)){typeof n.$if=="string"?(n.$if.startsWith("!")?n.$if.slice(1):n.$if)||i.push(`${e}.$if: empty path in string shorthand`):k(n.$if,`${e}.$if`,i,t),k(n.then,`${e}.then`,i,t),n.else!==void 0&&k(n.else,`${e}.else`,i,t);return}if(b(n)){if(!Array.isArray(n.$pipe)){i.push(`${e}.$pipe: must be an array`);return}if(n.$pipe.length===0){i.push(`${e}.$pipe: must have at least one element`);return}for(let o=0;o<n.$pipe.length;o++)k(n.$pipe[o],`${e}.$pipe[${o}]`,i,t);return}if(T(n)){if(!n.$fn||typeof n.$fn!="string"){i.push(`${e}: invalid function, $fn must be non-empty string`);return}if(t.scope&&!(n.$fn in t.scope)&&i.push(`${e}: function "${n.$fn}" not found in scope`),n.args!==void 0)if(!Array.isArray(n.args))i.push(`${e}.args: must be an array`);else for(let o=0;o<n.args.length;o++)k(n.args[o],`${e}.args[${o}]`,i,t);return}if(y(n)){let o=conditions.validate(n,e);o.valid||i.push(...o.errors);return}if(E(n)){let o=conditions.validate(n,e);o.valid||i.push(...o.errors);return}let r=n,f=Object.keys(r);for(let o=0;o<f.length;o++){let s=f[o];k(r[s],`${e}.${s}`,i,t);}}function An(n,e={}){let i=I(n,"root",e);if(!i.valid)throw new Error(`Invalid expression: ${i.errors.join("; ")}`)}function kn(n,e={}){return I(n,"root",e).valid}var Z={};rn(Z,{$:()=>Q,$fn:()=>U,$if:()=>xn,$pipe:()=>X,fn:()=>Rn,pipe:()=>On,ref:()=>wn});function Q(n){return {$:n}}var wn=Q;function U(n,e){return e===void 0||e.length===0?{$fn:n}:{$fn:n,args:e}}var Rn=U;function xn(n,e,i){return i===void 0?{$if:n,then:e}:{$if:n,then:e,else:i}}function X(...n){return {$pipe:n}}var On=X;var L="data",P="scope",Fn={eq:"===",neq:"!==",gt:">",gte:">=",lt:"<",lte:"<="};function W(n,e={}){let{dataParam:i=L,scopeParam:t=P,noPrefixes:r=false,useAccessor:f=false,lexicalPrefix:o}=e;return m(n,i,t,r,f,o)}function m(n,e,i,t,r,f){if(n===null)return omniAst.builders.literal(null);if(typeof n=="string")return omniAst.builders.literal(n);if(typeof n=="number")return omniAst.builders.literal(n);if(typeof n=="boolean")return omniAst.builders.literal(n);if(Array.isArray(n))return omniAst.builders.arrayExpression(n.map(o=>m(o,e,i,t,r,f)));if(g(n))return vn(n.$,e,t,r,f);if(h(n))return jn(n,e,i,t,r,f);if(b(n))return Wn(n.$pipe,e,i,t,r,f);if(T(n))return Gn(n,e,i,t,r,f);if(y(n))return zn(n,e,i,t,r,f);if(E(n))return Mn(n,e,i,t,r,f);if(typeof n=="object"){let s=Object.entries(n).map(([u,a])=>omniAst.builders.property(omniAst.builders.identifier(u),m(a,e,i,t,r,f)));return omniAst.builders.objectExpression(s)}return omniAst.builders.literal(null)}var N="accessor";function j(n,e){return e?n===e||n.startsWith(e+"."):false}function vn(n,e,i,t,r){return t?j(n,r)?A(n,e,true):omniAst.builders.callExpression(omniAst.builders.identifier(N),[omniAst.builders.literal(n),omniAst.builders.identifier(e)]):n.includes("[*]")?Nn(n,e,i):A(n,e,i)}function A(n,e,i){let t=G(n);if(t.length===0)return i?omniAst.builders.identifier("undefined"):omniAst.builders.identifier(e);let r;if(i){let f=t[0];r=omniAst.builders.identifier(f.value);for(let o=1;o<t.length;o++){let s=t[o];s.type==="key"?r=omniAst.builders.memberExpression(r,omniAst.builders.identifier(s.value),false,true):r=omniAst.builders.memberExpression(r,omniAst.builders.literal(s.value),true,true);}}else {r=omniAst.builders.identifier(e);for(let f of t)f.type==="key"?r=omniAst.builders.memberExpression(r,omniAst.builders.identifier(f.value),false,true):r=omniAst.builders.memberExpression(r,omniAst.builders.literal(f.value),true,true);}return r}function Nn(n,e,i){let t=n.indexOf("[*]"),r=n.slice(0,t),f=n.slice(t+3),o;if(r?o=A(r,e,i):o=i?omniAst.builders.identifier("undefined"):omniAst.builders.identifier(e),!f||f==="")return o;if(f.includes("[*]"))return nn(o,f);let s="_i",u=f.startsWith(".")?f.slice(1):f,a=omniAst.builders.identifier(s);if(u){let c=G(u);for(let p of c)p.type==="key"?a=omniAst.builders.memberExpression(a,omniAst.builders.identifier(p.value),false,true):a=omniAst.builders.memberExpression(a,omniAst.builders.literal(p.value),true,true);}return omniAst.builders.callExpression(omniAst.builders.memberExpression(o,omniAst.builders.identifier("map"),false,true),[omniAst.builders.arrowFunctionExpression([omniAst.builders.identifier(s)],a)])}function nn(n,e){let i=e.indexOf("[*]"),t=e.slice(0,i),r=e.slice(i+3),f="_i",o=t.startsWith(".")?t.slice(1):t,s=omniAst.builders.identifier(f);if(o){let a=G(o);for(let c of a)c.type==="key"&&(s=omniAst.builders.memberExpression(s,omniAst.builders.identifier(c.value),false,true));}if(r.includes("[*]")){let a=nn(s,r);return omniAst.builders.callExpression(omniAst.builders.memberExpression(n,omniAst.builders.identifier("flatMap"),false,true),[omniAst.builders.arrowFunctionExpression([omniAst.builders.identifier(f)],a)])}let u=r.startsWith(".")?r.slice(1):r;if(u){let a=G(u);for(let c of a)c.type==="key"&&(s=omniAst.builders.memberExpression(s,omniAst.builders.identifier(c.value),false,true));}return omniAst.builders.callExpression(omniAst.builders.memberExpression(n,omniAst.builders.identifier("flatMap"),false,true),[omniAst.builders.arrowFunctionExpression([omniAst.builders.identifier(f)],s)])}function jn(n,e,i,t,r,f){let o;if(typeof n.$if=="string"){let a=n.$if.startsWith("!"),c=a?n.$if.slice(1):n.$if,p;r?j(c,f)?p=A(c,e,true):p=omniAst.builders.callExpression(omniAst.builders.identifier(N),[omniAst.builders.literal(c),omniAst.builders.identifier(e)]):p=A(c,e,t),o=a?omniAst.builders.unaryExpression("!",p):p;}else o=m(n.$if,e,i,t,r,f);let s=m(n.then,e,i,t,r,f),u=n.else!==void 0?m(n.else,e,i,t,r,f):omniAst.builders.identifier("undefined");return omniAst.builders.conditionalExpression(o,s,u)}function Gn(n,e,i,t,r,f){let o=t?omniAst.builders.identifier(n.$fn):omniAst.builders.memberExpression(omniAst.builders.identifier(i),omniAst.builders.identifier(n.$fn),false,false);if(n.args===void 0)return o;let s=n.args.map(u=>m(u,e,i,t,r,f));return omniAst.builders.callExpression(o,s)}function Wn(n,e,i,t,r,f){if(n.length===0)return omniAst.builders.identifier("undefined");if(n.length===1)return m(n[0],e,i,t,r,f);let o=m(n[0],e,i,t,r,f);for(let s=1;s<n.length;s++){let u=m(n[s],e,i,t,r,f);o=omniAst.builders.callExpression(u,[o]);}return o}function zn(n,e,i,t,r,f){let o;r?j(n.path,f)?o=A(n.path,e,true):o=omniAst.builders.callExpression(omniAst.builders.identifier(N),[omniAst.builders.literal(n.path),omniAst.builders.identifier(e)]):o=A(n.path,e,t);let s=n.value!==void 0?g(n.value)?r?j(n.value.$,f)?A(n.value.$,e,true):omniAst.builders.callExpression(omniAst.builders.identifier(N),[omniAst.builders.literal(n.value.$),omniAst.builders.identifier(e)]):A(n.value.$,e,t):m(n.value,e,i,t,r,f):omniAst.builders.literal(null),u=Fn[n.op];if(u)return omniAst.builders.binaryExpression(u,o,s);switch(n.op){case "in":return omniAst.builders.callExpression(omniAst.builders.memberExpression(s,omniAst.builders.identifier("includes")),[o]);case "notIn":return omniAst.builders.unaryExpression("!",omniAst.builders.callExpression(omniAst.builders.memberExpression(s,omniAst.builders.identifier("includes")),[o]));case "contains":return omniAst.builders.callExpression(omniAst.builders.memberExpression(o,omniAst.builders.identifier("includes"),false,true),[s]);case "notContains":return omniAst.builders.unaryExpression("!",omniAst.builders.callExpression(omniAst.builders.memberExpression(o,omniAst.builders.identifier("includes"),false,true),[s]));case "exists":return omniAst.builders.binaryExpression("!=",o,omniAst.builders.literal(null));case "notExists":return omniAst.builders.binaryExpression("==",o,omniAst.builders.literal(null));case "matches":return omniAst.builders.callExpression(omniAst.builders.memberExpression(omniAst.builders.newExpression(omniAst.builders.identifier("RegExp"),[s]),omniAst.builders.identifier("test")),[o]);case "notMatches":return omniAst.builders.unaryExpression("!",omniAst.builders.callExpression(omniAst.builders.memberExpression(omniAst.builders.newExpression(omniAst.builders.identifier("RegExp"),[s]),omniAst.builders.identifier("test")),[o]));case "startsWith":return omniAst.builders.callExpression(omniAst.builders.memberExpression(o,omniAst.builders.identifier("startsWith"),false,true),[s]);case "endsWith":return omniAst.builders.callExpression(omniAst.builders.memberExpression(o,omniAst.builders.identifier("endsWith"),false,true),[s]);default:return omniAst.builders.binaryExpression("===",o,s)}}function Mn(n,e,i,t,r,f){let{logic:o,conditions:s}=n,u=o==="AND"?"&&":"||";if(s.length===0)return omniAst.builders.literal(o==="AND");if(s.length===1)return m(s[0],e,i,t,r,f);let a=m(s[0],e,i,t,r,f);for(let c=1;c<s.length;c++){let p=m(s[c],e,i,t,r,f);a=omniAst.builders.logicalExpression(u,a,p);}return a}function G(n){let e=[],i=n.length,t=0,r="";for(;t<i;){let f=n[t];if(f===".")r&&(e.push({type:"key",value:r}),r=""),t++;else if(f==="["){r&&(e.push({type:"key",value:r}),r=""),t++;let o=t;for(;t<i&&n[t]!=="]";)t++;let s=n.slice(o,t);if(t++,s!=="*"){let u=parseInt(s,10);e.push({type:"index",value:isNaN(u)?s:u});}}else r+=f,t++;}return r&&e.push({type:"key",value:r}),e}function en(n,e=[L]){return omniAst.builders.arrowFunctionExpression(e.map(i=>omniAst.builders.identifier(i)),n)}function z(n){let e=new Set;return $(n,e),e}function $(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let t of n)$(t,e);return}if(g(n))return;if(h(n)){$(n.$if,e),$(n.then,e),n.else!==void 0&&$(n.else,e);return}if(b(n)){for(let t of n.$pipe)$(t,e);return}if(T(n)){if(e.add(n.$fn),n.args)for(let t of n.args)$(t,e);return}if(y(n)){n.value!==void 0&&typeof n.value=="object"&&$(n.value,e);return}if(E(n)){for(let t of n.conditions)$(t,e);return}let i=n;for(let t of Object.keys(i))$(i[t],e);}function M(n){let e=new Set;for(let i of n){let t=i.indexOf("."),r=i.indexOf("["),f=i.length;t!==-1&&(f=Math.min(f,t)),r!==-1&&(f=Math.min(f,r));let o=i.slice(0,f);o&&e.add(o);}return e}function In(n){return JSON.stringify(n)}function Ln(n,e,i,t,r){let f=W(n,{noPrefixes:true,useAccessor:t,lexicalPrefix:r}),o=omniAst.generate(f),s="";t?r&&(s=`const{${r}}=data??{};`):e.size>0&&(s=`const{${[...e].join(",")}}=data??{};`);let u=t?new Set([...i,"accessor"]):i,a=u.size>0?`const{${[...u].join(",")}}=scope;`:"";return a?`(function(scope){${a}return function(data){${s}return ${o}}})`:`(function(){return function(data){${s}return ${o}}})`}function V(n,e={}){let{scope:i={},returnCode:t=false,useAccessor:r=false,lexicalPrefix:f}=e,o=w(n),s=M(o),u=z(n),a=In(n),c=Ln(n,s,u,r,f);if(t)return {code:c,deps:o,hash:a,dataRoots:[...s],scopeFns:[...u]};let p;try{p=new Function(`return ${c}`)()(i);}catch(d){throw new Error(`AST compilation failed. If this is due to CSP, use the standard compile() function instead. Error: ${d instanceof Error?d.message:String(d)}`)}return {fn:p,deps:o,hash:a}}function tn(n,e,i={}){let{fn:t}=V(n,i);return t(e)}var he="0.1.1";exports.ExpressionCache=v;exports.VERSION=he;exports.assertValid=An;exports.builders=Z;exports.cache=Y;exports.cached=Sn;exports.clearPathCache=pn;exports.compile=F;exports.compileAST=V;exports.compilePath=O;exports.dslToAST=W;exports.evaluate=$n;exports.evaluateAST=tn;exports.extractDataRoots=M;exports.extractDeps=w;exports.extractScopeFns=z;exports.get=cn;exports.getPathCacheSize=dn;exports.hasDeps=gn;exports.hasWildcard=J;exports.isCondition=y;exports.isConditionExpr=sn;exports.isConditionGroup=E;exports.isConditional=h;exports.isFn=T;exports.isLiteral=D;exports.isPipe=b;exports.isPure=yn;exports.isRef=g;exports.isValid=kn;exports.normalizePath=R;exports.validate=I;exports.wrapInFunction=en;
|
package/dist/index.d.cts
CHANGED
|
@@ -484,11 +484,17 @@ interface TransformOptions {
|
|
|
484
484
|
*/
|
|
485
485
|
noPrefixes?: boolean;
|
|
486
486
|
/**
|
|
487
|
-
* When true, generates accessor("path") instead of property access.
|
|
487
|
+
* When true, generates accessor("path", data) instead of property access.
|
|
488
488
|
* Requires `accessor` function in scope.
|
|
489
|
-
* - `accessor("user.name")` instead of `user?.name`
|
|
489
|
+
* - `accessor("user.name", data)` instead of `user?.name`
|
|
490
490
|
*/
|
|
491
491
|
useAccessor?: boolean;
|
|
492
|
+
/**
|
|
493
|
+
* Path prefix that should use direct property access instead of accessor.
|
|
494
|
+
* Only used when useAccessor is true.
|
|
495
|
+
* - `lexicalPrefix: "params"` → `params?.foo` instead of `accessor("params.foo", data)`
|
|
496
|
+
*/
|
|
497
|
+
lexicalPrefix?: string;
|
|
492
498
|
}
|
|
493
499
|
/**
|
|
494
500
|
* Transform DSL expression to AST node
|
|
@@ -574,10 +580,16 @@ interface CompileASTOptions {
|
|
|
574
580
|
/** Return generated code instead of function (for debugging) */
|
|
575
581
|
returnCode?: boolean;
|
|
576
582
|
/**
|
|
577
|
-
* When true, generates accessor("path") instead of property access.
|
|
583
|
+
* When true, generates accessor("path", data) instead of property access.
|
|
578
584
|
* Requires `accessor` function in scope.
|
|
579
585
|
*/
|
|
580
586
|
useAccessor?: boolean;
|
|
587
|
+
/**
|
|
588
|
+
* Path prefix that should use direct property access instead of accessor.
|
|
589
|
+
* Only used when useAccessor is true.
|
|
590
|
+
* - `lexicalPrefix: "params"` → `params?.foo` instead of `accessor("params.foo", data)`
|
|
591
|
+
*/
|
|
592
|
+
lexicalPrefix?: string;
|
|
581
593
|
}
|
|
582
594
|
/** Result when returnCode is true */
|
|
583
595
|
interface CompileASTCodeResult {
|
package/dist/index.d.ts
CHANGED
|
@@ -484,11 +484,17 @@ interface TransformOptions {
|
|
|
484
484
|
*/
|
|
485
485
|
noPrefixes?: boolean;
|
|
486
486
|
/**
|
|
487
|
-
* When true, generates accessor("path") instead of property access.
|
|
487
|
+
* When true, generates accessor("path", data) instead of property access.
|
|
488
488
|
* Requires `accessor` function in scope.
|
|
489
|
-
* - `accessor("user.name")` instead of `user?.name`
|
|
489
|
+
* - `accessor("user.name", data)` instead of `user?.name`
|
|
490
490
|
*/
|
|
491
491
|
useAccessor?: boolean;
|
|
492
|
+
/**
|
|
493
|
+
* Path prefix that should use direct property access instead of accessor.
|
|
494
|
+
* Only used when useAccessor is true.
|
|
495
|
+
* - `lexicalPrefix: "params"` → `params?.foo` instead of `accessor("params.foo", data)`
|
|
496
|
+
*/
|
|
497
|
+
lexicalPrefix?: string;
|
|
492
498
|
}
|
|
493
499
|
/**
|
|
494
500
|
* Transform DSL expression to AST node
|
|
@@ -574,10 +580,16 @@ interface CompileASTOptions {
|
|
|
574
580
|
/** Return generated code instead of function (for debugging) */
|
|
575
581
|
returnCode?: boolean;
|
|
576
582
|
/**
|
|
577
|
-
* When true, generates accessor("path") instead of property access.
|
|
583
|
+
* When true, generates accessor("path", data) instead of property access.
|
|
578
584
|
* Requires `accessor` function in scope.
|
|
579
585
|
*/
|
|
580
586
|
useAccessor?: boolean;
|
|
587
|
+
/**
|
|
588
|
+
* Path prefix that should use direct property access instead of accessor.
|
|
589
|
+
* Only used when useAccessor is true.
|
|
590
|
+
* - `lexicalPrefix: "params"` → `params?.foo` instead of `accessor("params.foo", data)`
|
|
591
|
+
*/
|
|
592
|
+
lexicalPrefix?: string;
|
|
581
593
|
}
|
|
582
594
|
/** Result when returnCode is true */
|
|
583
595
|
interface CompileASTCodeResult {
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {isRef,compile,validate}from'@statedelta-libs/conditions';import {builders,generate}from'omni-ast';var tn=Object.defineProperty;var on=(n,e)=>{for(var i in e)tn(n,i,{get:e[i],enumerable:true});};var m=n=>n!==null&&typeof n=="object"&&"$"in n&&typeof n.$=="string"&&Object.keys(n).length===1,h=n=>n!==null&&typeof n=="object"&&"$if"in n&&"then"in n,T=n=>n!==null&&typeof n=="object"&&"$fn"in n&&typeof n.$fn=="string",b=n=>n!==null&&typeof n=="object"&&"$pipe"in n&&Array.isArray(n.$pipe),V=new Set(["eq","neq","gt","gte","lt","lte","in","notIn","contains","notContains","exists","notExists","matches","notMatches","startsWith","endsWith"]),g=n=>n!==null&&typeof n=="object"&&"path"in n&&"op"in n&&V.has(n.op)&&!("$"in n)&&!("$if"in n)&&!("$fn"in n),y=n=>n!==null&&typeof n=="object"&&"logic"in n&&"conditions"in n,rn=n=>g(n)||y(n),M=n=>{if(n===null)return true;let e=typeof n;if(e==="string"||e==="number"||e==="boolean"||Array.isArray(n))return true;if(e==="object"&&n!==null){let i=n,t="path"in i&&"op"in i&&V.has(i.op);return !("$"in i)&&!("$if"in i)&&!("$fn"in i)&&!("$pipe"in i)&&!t&&!("logic"in i)}return false};var R=new Map;function L(n){let e=[],i=n.length,t=0,o="";for(;t<i;){let s=n[t];if(s===".")o&&(e.push({type:"key",value:o}),o=""),t++;else if(s==="["){o&&(e.push({type:"key",value:o}),o=""),t++;let r=t;for(;t<i&&n[t]!=="]";)t++;let f=n.slice(r,t);if(t++,f==="*")e.push({type:"wildcard",value:"*"});else {let a=parseInt(f,10);e.push({type:"index",value:isNaN(a)?f:a});}}else o+=s,t++;}return o&&e.push({type:"key",value:o}),e}function _(n){return n.includes("[*]")}function O(n){let e=R.get(n);return e||(e=_(n)?ln(n):sn(n),R.set(n,e),e)}function sn(n){if(!n.includes(".")&&!n.includes("["))return o=>o?.[n];let e=L(n),i=e.length;if(i===2){let[o,s]=e,r=o.value,f=s.value;return a=>a?.[r]?.[f]}if(i===3){let[o,s,r]=e,f=o.value,a=s.value,u=r.value;return c=>c?.[f]?.[a]?.[u]}let t=e.map(o=>o.value);return o=>{let s=o;for(let r=0;r<i&&s!=null;r++)s=s[t[r]];return s}}function ln(n){let e=L(n),i=[];for(let t=0;t<e.length;t++)e[t].type==="wildcard"&&i.push(t);return i.length===1?fn(e,i[0]):an(e,i)}function fn(n,e){let i=n.slice(0,e).map(r=>r.value),t=n.slice(e+1).map(r=>r.value),o=i.length,s=t.length;if(s===0){if(o===1){let r=i[0];return f=>f?.[r]}return r=>{let f=r;for(let a=0;a<o&&f!=null;a++)f=f[i[a]];return f}}if(s===1){let r=t[0];if(o===1){let f=i[0];return a=>{let u=a?.[f];if(Array.isArray(u))return u.map(c=>c?.[r])}}return f=>{let a=f;for(let u=0;u<o&&a!=null;u++)a=a[i[u]];if(Array.isArray(a))return a.map(u=>u?.[r])}}return r=>{let f=r;for(let a=0;a<o&&f!=null;a++)f=f[i[a]];if(Array.isArray(f))return f.map(a=>{let u=a;for(let c=0;c<s&&u!=null;c++)u=u[t[c]];return u})}}function an(n,e){let i=[],t=0;for(let s=0;s<e.length;s++){let r=e[s],f=s===e.length-1,a=n.slice(t,r).map(u=>u.value);a.length>0&&i.push({type:"access",keys:a}),i.push({type:f?"map":"flatMap",keys:[]}),t=r+1;}let o=n.slice(t).map(s=>s.value);return s=>{let r=s;for(let f of i){if(r==null)return;if(f.type==="access")for(let a of f.keys){if(r==null)return;r=r[a];}else if(f.type==="flatMap"){if(!Array.isArray(r))return;r=r.flatMap(a=>{let u=a;return Array.isArray(u)?u:[u]});}else if(f.type==="map"){if(!Array.isArray(r))return;o.length>0&&(r=r.map(a=>{let u=a;for(let c of o){if(u==null)return;u=u[c];}return u}));}}return r}}function un(n,e){return O(e)(n)}function k(n){let e=n.indexOf("[*]");return e===-1?n:n.slice(0,e)}function cn(){R.clear();}function pn(){return R.size}function A(n){let e=new Set;return x(n,e),Array.from(e)}function x(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let o=0;o<n.length;o++)x(n[o],e);return}if(m(n)){e.add(k(n.$));return}if(h(n)){if(typeof n.$if=="string"){let o=n.$if.startsWith("!")?n.$if.slice(1):n.$if;e.add(k(o));}else x(n.$if,e);x(n.then,e),n.else!==void 0&&x(n.else,e);return}if(b(n)){for(let o=0;o<n.$pipe.length;o++)x(n.$pipe[o],e);return}if(T(n)){if(n.args)for(let o=0;o<n.args.length;o++)x(n.args[o],e);return}if(g(n)){e.add(k(n.path)),n.value!==void 0&&isRef(n.value)&&e.add(k(n.value.$));return}if(y(n)){for(let o=0;o<n.conditions.length;o++)x(n.conditions[o],e);return}let i=n,t=Object.keys(i);for(let o=0;o<t.length;o++)x(i[t[o]],e);}function mn(n){return A(n).length>0}function gn(n){return A(n).length===0}function yn(n){return JSON.stringify(n)}function F(n,e={}){let i=e.scope??{},t=e.accessor,o=C(n,i,t),s=A(n),r=yn(n);return {fn:o,deps:s,hash:r}}function C(n,e,i){if(n===null)return ()=>null;if(typeof n!="object")return ()=>n;if(Array.isArray(n)){let t=n.map(o=>C(o,e,i));return o=>t.map(s=>s(o))}if(m(n))return En(n,i);if(h(n))return hn(n,e,i);if(b(n))return Tn(n,e,i);if(T(n))return bn(n,e,i);if(g(n))return compile(n,i?{accessor:i}:void 0);if(y(n))return compile(n,i?{accessor:i}:void 0);if(M(n)){let t=n,o=Object.keys(t),s=o.map(r=>C(t[r],e,i));return r=>{let f={};for(let a=0;a<o.length;a++)f[o[a]]=s[a](r);return f}}return ()=>n}function J(n,e){return e?i=>e(n,i):O(n)}function En(n,e){return J(n.$,e)}function hn(n,e,i){let t;if(typeof n.$if=="string"){let r=n.$if.startsWith("!")?n.$if.slice(1):n.$if,f=J(r,i);t=n.$if.startsWith("!")?u=>!f(u):u=>!!f(u);}else {let r=C(n.$if,e,i);t=f=>!!r(f);}let o=C(n.then,e,i),s=n.else!==void 0?C(n.else,e,i):()=>{};return r=>t(r)?o(r):s(r)}function Tn(n,e,i){let t=n.$pipe;if(t.length===0)return ()=>{};if(t.length===1)return C(t[0],e,i);let o=C(t[0],e,i),s=t.slice(1).map(f=>C(f,e,i)),r=s.length;if(r===1){let[f]=s;return a=>{let u=o(a),c=f(a);return typeof c=="function"?c(u):c}}if(r===2){let[f,a]=s;return u=>{let c=o(u),p=f(u);return c=typeof p=="function"?p(c):p,p=a(u),typeof p=="function"?p(c):p}}if(r===3){let[f,a,u]=s;return c=>{let p=o(c),E=f(c);return p=typeof E=="function"?E(p):E,E=a(c),p=typeof E=="function"?E(p):E,E=u(c),typeof E=="function"?E(p):E}}return f=>{let a=o(f);for(let u=0;u<r;u++){let c=s[u](f);a=typeof c=="function"?c(a):c;}return a}}function bn(n,e,i){let t=n.$fn,o=n.args;if(o===void 0)return ()=>{let f=e[t];if(!f)throw new Error(`Function not found in scope: ${t}`);return f};let s=o.map(f=>C(f,e,i)),r=s.length;if(r===0)return f=>{let a=e[t];if(!a)throw new Error(`Function not found in scope: ${t}`);return a()};if(r===1){let[f]=s;return a=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u(f(a))}}if(r===2){let[f,a]=s;return u=>{let c=e[t];if(!c)throw new Error(`Function not found in scope: ${t}`);return c(f(u),a(u))}}if(r===3){let[f,a,u]=s;return c=>{let p=e[t];if(!p)throw new Error(`Function not found in scope: ${t}`);return p(f(c),a(c),u(c))}}return f=>{let a=e[t];if(!a)throw new Error(`Function not found in scope: ${t}`);return a(...s.map(u=>u(f)))}}function Cn(n,e,i={}){return F(n,i).fn(e)}var v=class{constructor(e=1e3){this.cache=new Map,this._maxSize=e;}get(e,i={}){let t=JSON.stringify(e),o=this.cache.get(t);if(o)return this.cache.delete(t),this.cache.set(t,o),o;let s=F(e,i);if(this.cache.size>=this._maxSize){let r=this.cache.keys().next().value;r&&this.cache.delete(r);}return this.cache.set(t,s),s}has(e){return this.cache.has(JSON.stringify(e))}delete(e){return this.cache.delete(JSON.stringify(e))}clear(){this.cache.clear();}get size(){return this.cache.size}get maxSize(){return this._maxSize}set maxSize(e){for(this._maxSize=e;this.cache.size>this._maxSize;){let i=this.cache.keys().next().value;i&&this.cache.delete(i);}}},B=new v;function $n(n,e={}){return B.get(n,e)}function D(n,e="root",i={}){let t=[];return S(n,e,t,i),{valid:t.length===0,errors:t}}function S(n,e,i,t){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let r=0;r<n.length;r++)S(n[r],`${e}[${r}]`,i,t);return}if(m(n)){(!n.$||typeof n.$!="string")&&i.push(`${e}: invalid reference, $ must be non-empty string`);return}if(h(n)){typeof n.$if=="string"?(n.$if.startsWith("!")?n.$if.slice(1):n.$if)||i.push(`${e}.$if: empty path in string shorthand`):S(n.$if,`${e}.$if`,i,t),S(n.then,`${e}.then`,i,t),n.else!==void 0&&S(n.else,`${e}.else`,i,t);return}if(b(n)){if(!Array.isArray(n.$pipe)){i.push(`${e}.$pipe: must be an array`);return}if(n.$pipe.length===0){i.push(`${e}.$pipe: must have at least one element`);return}for(let r=0;r<n.$pipe.length;r++)S(n.$pipe[r],`${e}.$pipe[${r}]`,i,t);return}if(T(n)){if(!n.$fn||typeof n.$fn!="string"){i.push(`${e}: invalid function, $fn must be non-empty string`);return}if(t.scope&&!(n.$fn in t.scope)&&i.push(`${e}: function "${n.$fn}" not found in scope`),n.args!==void 0)if(!Array.isArray(n.args))i.push(`${e}.args: must be an array`);else for(let r=0;r<n.args.length;r++)S(n.args[r],`${e}.args[${r}]`,i,t);return}if(g(n)){let r=validate(n,e);r.valid||i.push(...r.errors);return}if(y(n)){let r=validate(n,e);r.valid||i.push(...r.errors);return}let o=n,s=Object.keys(o);for(let r=0;r<s.length;r++){let f=s[r];S(o[f],`${e}.${f}`,i,t);}}function xn(n,e={}){let i=D(n,"root",e);if(!i.valid)throw new Error(`Invalid expression: ${i.errors.join("; ")}`)}function Sn(n,e={}){return D(n,"root",e).valid}var U={};on(U,{$:()=>Y,$fn:()=>H,$if:()=>wn,$pipe:()=>Q,fn:()=>kn,pipe:()=>Rn,ref:()=>An});function Y(n){return {$:n}}var An=Y;function H(n,e){return e===void 0||e.length===0?{$fn:n}:{$fn:n,args:e}}var kn=H;function wn(n,e,i){return i===void 0?{$if:n,then:e}:{$if:n,then:e,else:i}}function Q(...n){return {$pipe:n}}var Rn=Q;var P="data",X="scope",On={eq:"===",neq:"!==",gt:">",gte:">=",lt:"<",lte:"<="};function G(n,e={}){let{dataParam:i=P,scopeParam:t=X,noPrefixes:o=false,useAccessor:s=false}=e;return d(n,i,t,o,s)}function d(n,e,i,t,o){if(n===null)return builders.literal(null);if(typeof n=="string")return builders.literal(n);if(typeof n=="number")return builders.literal(n);if(typeof n=="boolean")return builders.literal(n);if(Array.isArray(n))return builders.arrayExpression(n.map(s=>d(s,e,i,t,o)));if(m(n))return Fn(n.$,e,t,o);if(h(n))return Nn(n,e,i,t,o);if(b(n))return Gn(n.$pipe,e,i,t,o);if(T(n))return jn(n,e,i,t,o);if(g(n))return Wn(n,e,i,t,o);if(y(n))return zn(n,e,i,t,o);if(typeof n=="object"){let r=Object.entries(n).map(([f,a])=>builders.property(builders.identifier(f),d(a,e,i,t,o)));return builders.objectExpression(r)}return builders.literal(null)}var N="accessor";function Fn(n,e,i,t){return t?builders.callExpression(builders.identifier(N),[builders.literal(n),builders.identifier(e)]):n.includes("[*]")?vn(n,e,i):w(n,e,i)}function w(n,e,i){let t=j(n);if(t.length===0)return i?builders.identifier("undefined"):builders.identifier(e);let o;if(i){let s=t[0];o=builders.identifier(s.value);for(let r=1;r<t.length;r++){let f=t[r];f.type==="key"?o=builders.memberExpression(o,builders.identifier(f.value),false,true):o=builders.memberExpression(o,builders.literal(f.value),true,true);}}else {o=builders.identifier(e);for(let s of t)s.type==="key"?o=builders.memberExpression(o,builders.identifier(s.value),false,true):o=builders.memberExpression(o,builders.literal(s.value),true,true);}return o}function vn(n,e,i){let t=n.indexOf("[*]"),o=n.slice(0,t),s=n.slice(t+3),r;if(o?r=w(o,e,i):r=i?builders.identifier("undefined"):builders.identifier(e),!s||s==="")return r;if(s.includes("[*]"))return Z(r,s);let f="_i",a=s.startsWith(".")?s.slice(1):s,u=builders.identifier(f);if(a){let c=j(a);for(let p of c)p.type==="key"?u=builders.memberExpression(u,builders.identifier(p.value),false,true):u=builders.memberExpression(u,builders.literal(p.value),true,true);}return builders.callExpression(builders.memberExpression(r,builders.identifier("map"),false,true),[builders.arrowFunctionExpression([builders.identifier(f)],u)])}function Z(n,e){let i=e.indexOf("[*]"),t=e.slice(0,i),o=e.slice(i+3),s="_i",r=t.startsWith(".")?t.slice(1):t,f=builders.identifier(s);if(r){let u=j(r);for(let c of u)c.type==="key"&&(f=builders.memberExpression(f,builders.identifier(c.value),false,true));}if(o.includes("[*]")){let u=Z(f,o);return builders.callExpression(builders.memberExpression(n,builders.identifier("flatMap"),false,true),[builders.arrowFunctionExpression([builders.identifier(s)],u)])}let a=o.startsWith(".")?o.slice(1):o;if(a){let u=j(a);for(let c of u)c.type==="key"&&(f=builders.memberExpression(f,builders.identifier(c.value),false,true));}return builders.callExpression(builders.memberExpression(n,builders.identifier("flatMap"),false,true),[builders.arrowFunctionExpression([builders.identifier(s)],f)])}function Nn(n,e,i,t,o){let s;if(typeof n.$if=="string"){let a=n.$if.startsWith("!"),u=a?n.$if.slice(1):n.$if,c=o?builders.callExpression(builders.identifier(N),[builders.literal(u),builders.identifier(e)]):w(u,e,t);s=a?builders.unaryExpression("!",c):c;}else s=d(n.$if,e,i,t,o);let r=d(n.then,e,i,t,o),f=n.else!==void 0?d(n.else,e,i,t,o):builders.identifier("undefined");return builders.conditionalExpression(s,r,f)}function jn(n,e,i,t,o){let s=t?builders.identifier(n.$fn):builders.memberExpression(builders.identifier(i),builders.identifier(n.$fn),false,false);if(n.args===void 0)return s;let r=n.args.map(f=>d(f,e,i,t,o));return builders.callExpression(s,r)}function Gn(n,e,i,t,o){if(n.length===0)return builders.identifier("undefined");if(n.length===1)return d(n[0],e,i,t,o);let s=d(n[0],e,i,t,o);for(let r=1;r<n.length;r++){let f=d(n[r],e,i,t,o);s=builders.callExpression(f,[s]);}return s}function Wn(n,e,i,t,o){let s=o?builders.callExpression(builders.identifier(N),[builders.literal(n.path),builders.identifier(e)]):w(n.path,e,t),r=n.value!==void 0?m(n.value)?o?builders.callExpression(builders.identifier(N),[builders.literal(n.value.$),builders.identifier(e)]):w(n.value.$,e,t):d(n.value,e,i,t,o):builders.literal(null),f=On[n.op];if(f)return builders.binaryExpression(f,s,r);switch(n.op){case "in":return builders.callExpression(builders.memberExpression(r,builders.identifier("includes")),[s]);case "notIn":return builders.unaryExpression("!",builders.callExpression(builders.memberExpression(r,builders.identifier("includes")),[s]));case "contains":return builders.callExpression(builders.memberExpression(s,builders.identifier("includes"),false,true),[r]);case "notContains":return builders.unaryExpression("!",builders.callExpression(builders.memberExpression(s,builders.identifier("includes"),false,true),[r]));case "exists":return builders.binaryExpression("!=",s,builders.literal(null));case "notExists":return builders.binaryExpression("==",s,builders.literal(null));case "matches":return builders.callExpression(builders.memberExpression(builders.newExpression(builders.identifier("RegExp"),[r]),builders.identifier("test")),[s]);case "notMatches":return builders.unaryExpression("!",builders.callExpression(builders.memberExpression(builders.newExpression(builders.identifier("RegExp"),[r]),builders.identifier("test")),[s]));case "startsWith":return builders.callExpression(builders.memberExpression(s,builders.identifier("startsWith"),false,true),[r]);case "endsWith":return builders.callExpression(builders.memberExpression(s,builders.identifier("endsWith"),false,true),[r]);default:return builders.binaryExpression("===",s,r)}}function zn(n,e,i,t,o){let{logic:s,conditions:r}=n,f=s==="AND"?"&&":"||";if(r.length===0)return builders.literal(s==="AND");if(r.length===1)return d(r[0],e,i,t,o);let a=d(r[0],e,i,t,o);for(let u=1;u<r.length;u++){let c=d(r[u],e,i,t,o);a=builders.logicalExpression(f,a,c);}return a}function j(n){let e=[],i=n.length,t=0,o="";for(;t<i;){let s=n[t];if(s===".")o&&(e.push({type:"key",value:o}),o=""),t++;else if(s==="["){o&&(e.push({type:"key",value:o}),o=""),t++;let r=t;for(;t<i&&n[t]!=="]";)t++;let f=n.slice(r,t);if(t++,f!=="*"){let a=parseInt(f,10);e.push({type:"index",value:isNaN(a)?f:a});}}else o+=s,t++;}return o&&e.push({type:"key",value:o}),e}function nn(n,e=[P]){return builders.arrowFunctionExpression(e.map(i=>builders.identifier(i)),n)}function W(n){let e=new Set;return $(n,e),e}function $(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let t of n)$(t,e);return}if(m(n))return;if(h(n)){$(n.$if,e),$(n.then,e),n.else!==void 0&&$(n.else,e);return}if(b(n)){for(let t of n.$pipe)$(t,e);return}if(T(n)){if(e.add(n.$fn),n.args)for(let t of n.args)$(t,e);return}if(g(n)){n.value!==void 0&&typeof n.value=="object"&&$(n.value,e);return}if(y(n)){for(let t of n.conditions)$(t,e);return}let i=n;for(let t of Object.keys(i))$(i[t],e);}function z(n){let e=new Set;for(let i of n){let t=i.indexOf("."),o=i.indexOf("["),s=i.length;t!==-1&&(s=Math.min(s,t)),o!==-1&&(s=Math.min(s,o));let r=i.slice(0,s);r&&e.add(r);}return e}function Dn(n){return JSON.stringify(n)}function Pn(n,e,i,t){let o=G(n,{noPrefixes:true,useAccessor:t}),s=generate(o),r=!t&&e.size>0?`const{${[...e].join(",")}}=data??{};`:"",f=t?new Set([...i,"accessor"]):i,a=f.size>0?`const{${[...f].join(",")}}=scope;`:"";return a?`(function(scope){${a}return function(data){${r}return ${s}}})`:`(function(){return function(data){${r}return ${s}}})`}function I(n,e={}){let{scope:i={},returnCode:t=false,useAccessor:o=false}=e,s=A(n),r=z(s),f=W(n),a=Dn(n),u=Pn(n,r,f,o);if(t)return {code:u,deps:s,hash:a,dataRoots:[...r],scopeFns:[...f]};let c;try{c=new Function(`return ${u}`)()(i);}catch(p){throw new Error(`AST compilation failed. If this is due to CSP, use the standard compile() function instead. Error: ${p instanceof Error?p.message:String(p)}`)}return {fn:c,deps:s,hash:a}}function en(n,e,i={}){let{fn:t}=I(n,i);return t(e)}var Ee="0.1.1";export{v as ExpressionCache,Ee as VERSION,xn as assertValid,U as builders,B as cache,$n as cached,cn as clearPathCache,F as compile,I as compileAST,O as compilePath,G as dslToAST,Cn as evaluate,en as evaluateAST,z as extractDataRoots,A as extractDeps,W as extractScopeFns,un as get,pn as getPathCacheSize,mn as hasDeps,_ as hasWildcard,g as isCondition,rn as isConditionExpr,y as isConditionGroup,h as isConditional,T as isFn,M as isLiteral,b as isPipe,gn as isPure,m as isRef,Sn as isValid,k as normalizePath,D as validate,nn as wrapInFunction};
|
|
1
|
+
import {isRef,compile,validate}from'@statedelta-libs/conditions';import {builders,generate}from'omni-ast';var on=Object.defineProperty;var rn=(n,e)=>{for(var i in e)on(n,i,{get:e[i],enumerable:true});};var g=n=>n!==null&&typeof n=="object"&&"$"in n&&typeof n.$=="string"&&Object.keys(n).length===1,h=n=>n!==null&&typeof n=="object"&&"$if"in n&&"then"in n,T=n=>n!==null&&typeof n=="object"&&"$fn"in n&&typeof n.$fn=="string",b=n=>n!==null&&typeof n=="object"&&"$pipe"in n&&Array.isArray(n.$pipe),_=new Set(["eq","neq","gt","gte","lt","lte","in","notIn","contains","notContains","exists","notExists","matches","notMatches","startsWith","endsWith"]),y=n=>n!==null&&typeof n=="object"&&"path"in n&&"op"in n&&_.has(n.op)&&!("$"in n)&&!("$if"in n)&&!("$fn"in n),E=n=>n!==null&&typeof n=="object"&&"logic"in n&&"conditions"in n,sn=n=>y(n)||E(n),D=n=>{if(n===null)return true;let e=typeof n;if(e==="string"||e==="number"||e==="boolean"||Array.isArray(n))return true;if(e==="object"&&n!==null){let i=n,t="path"in i&&"op"in i&&_.has(i.op);return !("$"in i)&&!("$if"in i)&&!("$fn"in i)&&!("$pipe"in i)&&!t&&!("logic"in i)}return false};var x=new Map;function q(n){let e=[],i=n.length,t=0,r="";for(;t<i;){let f=n[t];if(f===".")r&&(e.push({type:"key",value:r}),r=""),t++;else if(f==="["){r&&(e.push({type:"key",value:r}),r=""),t++;let o=t;for(;t<i&&n[t]!=="]";)t++;let s=n.slice(o,t);if(t++,s==="*")e.push({type:"wildcard",value:"*"});else {let u=parseInt(s,10);e.push({type:"index",value:isNaN(u)?s:u});}}else r+=f,t++;}return r&&e.push({type:"key",value:r}),e}function J(n){return n.includes("[*]")}function O(n){let e=x.get(n);return e||(e=J(n)?fn(n):ln(n),x.set(n,e),e)}function ln(n){if(!n.includes(".")&&!n.includes("["))return r=>r?.[n];let e=q(n),i=e.length;if(i===2){let[r,f]=e,o=r.value,s=f.value;return u=>u?.[o]?.[s]}if(i===3){let[r,f,o]=e,s=r.value,u=f.value,a=o.value;return c=>c?.[s]?.[u]?.[a]}let t=e.map(r=>r.value);return r=>{let f=r;for(let o=0;o<i&&f!=null;o++)f=f[t[o]];return f}}function fn(n){let e=q(n),i=[];for(let t=0;t<e.length;t++)e[t].type==="wildcard"&&i.push(t);return i.length===1?un(e,i[0]):an(e,i)}function un(n,e){let i=n.slice(0,e).map(o=>o.value),t=n.slice(e+1).map(o=>o.value),r=i.length,f=t.length;if(f===0){if(r===1){let o=i[0];return s=>s?.[o]}return o=>{let s=o;for(let u=0;u<r&&s!=null;u++)s=s[i[u]];return s}}if(f===1){let o=t[0];if(r===1){let s=i[0];return u=>{let a=u?.[s];if(Array.isArray(a))return a.map(c=>c?.[o])}}return s=>{let u=s;for(let a=0;a<r&&u!=null;a++)u=u[i[a]];if(Array.isArray(u))return u.map(a=>a?.[o])}}return o=>{let s=o;for(let u=0;u<r&&s!=null;u++)s=s[i[u]];if(Array.isArray(s))return s.map(u=>{let a=u;for(let c=0;c<f&&a!=null;c++)a=a[t[c]];return a})}}function an(n,e){let i=[],t=0;for(let f=0;f<e.length;f++){let o=e[f],s=f===e.length-1,u=n.slice(t,o).map(a=>a.value);u.length>0&&i.push({type:"access",keys:u}),i.push({type:s?"map":"flatMap",keys:[]}),t=o+1;}let r=n.slice(t).map(f=>f.value);return f=>{let o=f;for(let s of i){if(o==null)return;if(s.type==="access")for(let u of s.keys){if(o==null)return;o=o[u];}else if(s.type==="flatMap"){if(!Array.isArray(o))return;o=o.flatMap(u=>{let a=u;return Array.isArray(a)?a:[a]});}else if(s.type==="map"){if(!Array.isArray(o))return;r.length>0&&(o=o.map(u=>{let a=u;for(let c of r){if(a==null)return;a=a[c];}return a}));}}return o}}function cn(n,e){return O(e)(n)}function R(n){let e=n.indexOf("[*]");return e===-1?n:n.slice(0,e)}function pn(){x.clear();}function dn(){return x.size}function w(n){let e=new Set;return S(n,e),Array.from(e)}function S(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let r=0;r<n.length;r++)S(n[r],e);return}if(g(n)){e.add(R(n.$));return}if(h(n)){if(typeof n.$if=="string"){let r=n.$if.startsWith("!")?n.$if.slice(1):n.$if;e.add(R(r));}else S(n.$if,e);S(n.then,e),n.else!==void 0&&S(n.else,e);return}if(b(n)){for(let r=0;r<n.$pipe.length;r++)S(n.$pipe[r],e);return}if(T(n)){if(n.args)for(let r=0;r<n.args.length;r++)S(n.args[r],e);return}if(y(n)){e.add(R(n.path)),n.value!==void 0&&isRef(n.value)&&e.add(R(n.value.$));return}if(E(n)){for(let r=0;r<n.conditions.length;r++)S(n.conditions[r],e);return}let i=n,t=Object.keys(i);for(let r=0;r<t.length;r++)S(i[t[r]],e);}function gn(n){return w(n).length>0}function yn(n){return w(n).length===0}function En(n){return JSON.stringify(n)}function F(n,e={}){let i=e.scope??{},t=e.accessor,r=C(n,i,t),f=w(n),o=En(n);return {fn:r,deps:f,hash:o}}function C(n,e,i){if(n===null)return ()=>null;if(typeof n!="object")return ()=>n;if(Array.isArray(n)){let t=n.map(r=>C(r,e,i));return r=>t.map(f=>f(r))}if(g(n))return hn(n,i);if(h(n))return Tn(n,e,i);if(b(n))return bn(n,e,i);if(T(n))return Cn(n,e,i);if(y(n))return compile(n,i?{accessor:i}:void 0);if(E(n))return compile(n,i?{accessor:i}:void 0);if(D(n)){let t=n,r=Object.keys(t),f=r.map(o=>C(t[o],e,i));return o=>{let s={};for(let u=0;u<r.length;u++)s[r[u]]=f[u](o);return s}}return ()=>n}function K(n,e){return e?i=>e(n,i):O(n)}function hn(n,e){return K(n.$,e)}function Tn(n,e,i){let t;if(typeof n.$if=="string"){let o=n.$if.startsWith("!")?n.$if.slice(1):n.$if,s=K(o,i);t=n.$if.startsWith("!")?a=>!s(a):a=>!!s(a);}else {let o=C(n.$if,e,i);t=s=>!!o(s);}let r=C(n.then,e,i),f=n.else!==void 0?C(n.else,e,i):()=>{};return o=>t(o)?r(o):f(o)}function bn(n,e,i){let t=n.$pipe;if(t.length===0)return ()=>{};if(t.length===1)return C(t[0],e,i);let r=C(t[0],e,i),f=t.slice(1).map(s=>C(s,e,i)),o=f.length;if(o===1){let[s]=f;return u=>{let a=r(u),c=s(u);return typeof c=="function"?c(a):c}}if(o===2){let[s,u]=f;return a=>{let c=r(a),p=s(a);return c=typeof p=="function"?p(c):p,p=u(a),typeof p=="function"?p(c):p}}if(o===3){let[s,u,a]=f;return c=>{let p=r(c),d=s(c);return p=typeof d=="function"?d(p):d,d=u(c),p=typeof d=="function"?d(p):d,d=a(c),typeof d=="function"?d(p):d}}return s=>{let u=r(s);for(let a=0;a<o;a++){let c=f[a](s);u=typeof c=="function"?c(u):c;}return u}}function Cn(n,e,i){let t=n.$fn,r=n.args;if(r===void 0)return ()=>{let s=e[t];if(!s)throw new Error(`Function not found in scope: ${t}`);return s};let f=r.map(s=>C(s,e,i)),o=f.length;if(o===0)return s=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u()};if(o===1){let[s]=f;return u=>{let a=e[t];if(!a)throw new Error(`Function not found in scope: ${t}`);return a(s(u))}}if(o===2){let[s,u]=f;return a=>{let c=e[t];if(!c)throw new Error(`Function not found in scope: ${t}`);return c(s(a),u(a))}}if(o===3){let[s,u,a]=f;return c=>{let p=e[t];if(!p)throw new Error(`Function not found in scope: ${t}`);return p(s(c),u(c),a(c))}}return s=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u(...f.map(a=>a(s)))}}function $n(n,e,i={}){return F(n,i).fn(e)}var v=class{constructor(e=1e3){this.cache=new Map,this._maxSize=e;}get(e,i={}){let t=JSON.stringify(e),r=this.cache.get(t);if(r)return this.cache.delete(t),this.cache.set(t,r),r;let f=F(e,i);if(this.cache.size>=this._maxSize){let o=this.cache.keys().next().value;o&&this.cache.delete(o);}return this.cache.set(t,f),f}has(e){return this.cache.has(JSON.stringify(e))}delete(e){return this.cache.delete(JSON.stringify(e))}clear(){this.cache.clear();}get size(){return this.cache.size}get maxSize(){return this._maxSize}set maxSize(e){for(this._maxSize=e;this.cache.size>this._maxSize;){let i=this.cache.keys().next().value;i&&this.cache.delete(i);}}},Y=new v;function Sn(n,e={}){return Y.get(n,e)}function I(n,e="root",i={}){let t=[];return k(n,e,t,i),{valid:t.length===0,errors:t}}function k(n,e,i,t){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let o=0;o<n.length;o++)k(n[o],`${e}[${o}]`,i,t);return}if(g(n)){(!n.$||typeof n.$!="string")&&i.push(`${e}: invalid reference, $ must be non-empty string`);return}if(h(n)){typeof n.$if=="string"?(n.$if.startsWith("!")?n.$if.slice(1):n.$if)||i.push(`${e}.$if: empty path in string shorthand`):k(n.$if,`${e}.$if`,i,t),k(n.then,`${e}.then`,i,t),n.else!==void 0&&k(n.else,`${e}.else`,i,t);return}if(b(n)){if(!Array.isArray(n.$pipe)){i.push(`${e}.$pipe: must be an array`);return}if(n.$pipe.length===0){i.push(`${e}.$pipe: must have at least one element`);return}for(let o=0;o<n.$pipe.length;o++)k(n.$pipe[o],`${e}.$pipe[${o}]`,i,t);return}if(T(n)){if(!n.$fn||typeof n.$fn!="string"){i.push(`${e}: invalid function, $fn must be non-empty string`);return}if(t.scope&&!(n.$fn in t.scope)&&i.push(`${e}: function "${n.$fn}" not found in scope`),n.args!==void 0)if(!Array.isArray(n.args))i.push(`${e}.args: must be an array`);else for(let o=0;o<n.args.length;o++)k(n.args[o],`${e}.args[${o}]`,i,t);return}if(y(n)){let o=validate(n,e);o.valid||i.push(...o.errors);return}if(E(n)){let o=validate(n,e);o.valid||i.push(...o.errors);return}let r=n,f=Object.keys(r);for(let o=0;o<f.length;o++){let s=f[o];k(r[s],`${e}.${s}`,i,t);}}function An(n,e={}){let i=I(n,"root",e);if(!i.valid)throw new Error(`Invalid expression: ${i.errors.join("; ")}`)}function kn(n,e={}){return I(n,"root",e).valid}var Z={};rn(Z,{$:()=>Q,$fn:()=>U,$if:()=>xn,$pipe:()=>X,fn:()=>Rn,pipe:()=>On,ref:()=>wn});function Q(n){return {$:n}}var wn=Q;function U(n,e){return e===void 0||e.length===0?{$fn:n}:{$fn:n,args:e}}var Rn=U;function xn(n,e,i){return i===void 0?{$if:n,then:e}:{$if:n,then:e,else:i}}function X(...n){return {$pipe:n}}var On=X;var L="data",P="scope",Fn={eq:"===",neq:"!==",gt:">",gte:">=",lt:"<",lte:"<="};function W(n,e={}){let{dataParam:i=L,scopeParam:t=P,noPrefixes:r=false,useAccessor:f=false,lexicalPrefix:o}=e;return m(n,i,t,r,f,o)}function m(n,e,i,t,r,f){if(n===null)return builders.literal(null);if(typeof n=="string")return builders.literal(n);if(typeof n=="number")return builders.literal(n);if(typeof n=="boolean")return builders.literal(n);if(Array.isArray(n))return builders.arrayExpression(n.map(o=>m(o,e,i,t,r,f)));if(g(n))return vn(n.$,e,t,r,f);if(h(n))return jn(n,e,i,t,r,f);if(b(n))return Wn(n.$pipe,e,i,t,r,f);if(T(n))return Gn(n,e,i,t,r,f);if(y(n))return zn(n,e,i,t,r,f);if(E(n))return Mn(n,e,i,t,r,f);if(typeof n=="object"){let s=Object.entries(n).map(([u,a])=>builders.property(builders.identifier(u),m(a,e,i,t,r,f)));return builders.objectExpression(s)}return builders.literal(null)}var N="accessor";function j(n,e){return e?n===e||n.startsWith(e+"."):false}function vn(n,e,i,t,r){return t?j(n,r)?A(n,e,true):builders.callExpression(builders.identifier(N),[builders.literal(n),builders.identifier(e)]):n.includes("[*]")?Nn(n,e,i):A(n,e,i)}function A(n,e,i){let t=G(n);if(t.length===0)return i?builders.identifier("undefined"):builders.identifier(e);let r;if(i){let f=t[0];r=builders.identifier(f.value);for(let o=1;o<t.length;o++){let s=t[o];s.type==="key"?r=builders.memberExpression(r,builders.identifier(s.value),false,true):r=builders.memberExpression(r,builders.literal(s.value),true,true);}}else {r=builders.identifier(e);for(let f of t)f.type==="key"?r=builders.memberExpression(r,builders.identifier(f.value),false,true):r=builders.memberExpression(r,builders.literal(f.value),true,true);}return r}function Nn(n,e,i){let t=n.indexOf("[*]"),r=n.slice(0,t),f=n.slice(t+3),o;if(r?o=A(r,e,i):o=i?builders.identifier("undefined"):builders.identifier(e),!f||f==="")return o;if(f.includes("[*]"))return nn(o,f);let s="_i",u=f.startsWith(".")?f.slice(1):f,a=builders.identifier(s);if(u){let c=G(u);for(let p of c)p.type==="key"?a=builders.memberExpression(a,builders.identifier(p.value),false,true):a=builders.memberExpression(a,builders.literal(p.value),true,true);}return builders.callExpression(builders.memberExpression(o,builders.identifier("map"),false,true),[builders.arrowFunctionExpression([builders.identifier(s)],a)])}function nn(n,e){let i=e.indexOf("[*]"),t=e.slice(0,i),r=e.slice(i+3),f="_i",o=t.startsWith(".")?t.slice(1):t,s=builders.identifier(f);if(o){let a=G(o);for(let c of a)c.type==="key"&&(s=builders.memberExpression(s,builders.identifier(c.value),false,true));}if(r.includes("[*]")){let a=nn(s,r);return builders.callExpression(builders.memberExpression(n,builders.identifier("flatMap"),false,true),[builders.arrowFunctionExpression([builders.identifier(f)],a)])}let u=r.startsWith(".")?r.slice(1):r;if(u){let a=G(u);for(let c of a)c.type==="key"&&(s=builders.memberExpression(s,builders.identifier(c.value),false,true));}return builders.callExpression(builders.memberExpression(n,builders.identifier("flatMap"),false,true),[builders.arrowFunctionExpression([builders.identifier(f)],s)])}function jn(n,e,i,t,r,f){let o;if(typeof n.$if=="string"){let a=n.$if.startsWith("!"),c=a?n.$if.slice(1):n.$if,p;r?j(c,f)?p=A(c,e,true):p=builders.callExpression(builders.identifier(N),[builders.literal(c),builders.identifier(e)]):p=A(c,e,t),o=a?builders.unaryExpression("!",p):p;}else o=m(n.$if,e,i,t,r,f);let s=m(n.then,e,i,t,r,f),u=n.else!==void 0?m(n.else,e,i,t,r,f):builders.identifier("undefined");return builders.conditionalExpression(o,s,u)}function Gn(n,e,i,t,r,f){let o=t?builders.identifier(n.$fn):builders.memberExpression(builders.identifier(i),builders.identifier(n.$fn),false,false);if(n.args===void 0)return o;let s=n.args.map(u=>m(u,e,i,t,r,f));return builders.callExpression(o,s)}function Wn(n,e,i,t,r,f){if(n.length===0)return builders.identifier("undefined");if(n.length===1)return m(n[0],e,i,t,r,f);let o=m(n[0],e,i,t,r,f);for(let s=1;s<n.length;s++){let u=m(n[s],e,i,t,r,f);o=builders.callExpression(u,[o]);}return o}function zn(n,e,i,t,r,f){let o;r?j(n.path,f)?o=A(n.path,e,true):o=builders.callExpression(builders.identifier(N),[builders.literal(n.path),builders.identifier(e)]):o=A(n.path,e,t);let s=n.value!==void 0?g(n.value)?r?j(n.value.$,f)?A(n.value.$,e,true):builders.callExpression(builders.identifier(N),[builders.literal(n.value.$),builders.identifier(e)]):A(n.value.$,e,t):m(n.value,e,i,t,r,f):builders.literal(null),u=Fn[n.op];if(u)return builders.binaryExpression(u,o,s);switch(n.op){case "in":return builders.callExpression(builders.memberExpression(s,builders.identifier("includes")),[o]);case "notIn":return builders.unaryExpression("!",builders.callExpression(builders.memberExpression(s,builders.identifier("includes")),[o]));case "contains":return builders.callExpression(builders.memberExpression(o,builders.identifier("includes"),false,true),[s]);case "notContains":return builders.unaryExpression("!",builders.callExpression(builders.memberExpression(o,builders.identifier("includes"),false,true),[s]));case "exists":return builders.binaryExpression("!=",o,builders.literal(null));case "notExists":return builders.binaryExpression("==",o,builders.literal(null));case "matches":return builders.callExpression(builders.memberExpression(builders.newExpression(builders.identifier("RegExp"),[s]),builders.identifier("test")),[o]);case "notMatches":return builders.unaryExpression("!",builders.callExpression(builders.memberExpression(builders.newExpression(builders.identifier("RegExp"),[s]),builders.identifier("test")),[o]));case "startsWith":return builders.callExpression(builders.memberExpression(o,builders.identifier("startsWith"),false,true),[s]);case "endsWith":return builders.callExpression(builders.memberExpression(o,builders.identifier("endsWith"),false,true),[s]);default:return builders.binaryExpression("===",o,s)}}function Mn(n,e,i,t,r,f){let{logic:o,conditions:s}=n,u=o==="AND"?"&&":"||";if(s.length===0)return builders.literal(o==="AND");if(s.length===1)return m(s[0],e,i,t,r,f);let a=m(s[0],e,i,t,r,f);for(let c=1;c<s.length;c++){let p=m(s[c],e,i,t,r,f);a=builders.logicalExpression(u,a,p);}return a}function G(n){let e=[],i=n.length,t=0,r="";for(;t<i;){let f=n[t];if(f===".")r&&(e.push({type:"key",value:r}),r=""),t++;else if(f==="["){r&&(e.push({type:"key",value:r}),r=""),t++;let o=t;for(;t<i&&n[t]!=="]";)t++;let s=n.slice(o,t);if(t++,s!=="*"){let u=parseInt(s,10);e.push({type:"index",value:isNaN(u)?s:u});}}else r+=f,t++;}return r&&e.push({type:"key",value:r}),e}function en(n,e=[L]){return builders.arrowFunctionExpression(e.map(i=>builders.identifier(i)),n)}function z(n){let e=new Set;return $(n,e),e}function $(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let t of n)$(t,e);return}if(g(n))return;if(h(n)){$(n.$if,e),$(n.then,e),n.else!==void 0&&$(n.else,e);return}if(b(n)){for(let t of n.$pipe)$(t,e);return}if(T(n)){if(e.add(n.$fn),n.args)for(let t of n.args)$(t,e);return}if(y(n)){n.value!==void 0&&typeof n.value=="object"&&$(n.value,e);return}if(E(n)){for(let t of n.conditions)$(t,e);return}let i=n;for(let t of Object.keys(i))$(i[t],e);}function M(n){let e=new Set;for(let i of n){let t=i.indexOf("."),r=i.indexOf("["),f=i.length;t!==-1&&(f=Math.min(f,t)),r!==-1&&(f=Math.min(f,r));let o=i.slice(0,f);o&&e.add(o);}return e}function In(n){return JSON.stringify(n)}function Ln(n,e,i,t,r){let f=W(n,{noPrefixes:true,useAccessor:t,lexicalPrefix:r}),o=generate(f),s="";t?r&&(s=`const{${r}}=data??{};`):e.size>0&&(s=`const{${[...e].join(",")}}=data??{};`);let u=t?new Set([...i,"accessor"]):i,a=u.size>0?`const{${[...u].join(",")}}=scope;`:"";return a?`(function(scope){${a}return function(data){${s}return ${o}}})`:`(function(){return function(data){${s}return ${o}}})`}function V(n,e={}){let{scope:i={},returnCode:t=false,useAccessor:r=false,lexicalPrefix:f}=e,o=w(n),s=M(o),u=z(n),a=In(n),c=Ln(n,s,u,r,f);if(t)return {code:c,deps:o,hash:a,dataRoots:[...s],scopeFns:[...u]};let p;try{p=new Function(`return ${c}`)()(i);}catch(d){throw new Error(`AST compilation failed. If this is due to CSP, use the standard compile() function instead. Error: ${d instanceof Error?d.message:String(d)}`)}return {fn:p,deps:o,hash:a}}function tn(n,e,i={}){let{fn:t}=V(n,i);return t(e)}var he="0.1.1";export{v as ExpressionCache,he as VERSION,An as assertValid,Z as builders,Y as cache,Sn as cached,pn as clearPathCache,F as compile,V as compileAST,O as compilePath,W as dslToAST,$n as evaluate,tn as evaluateAST,M as extractDataRoots,w as extractDeps,z as extractScopeFns,cn as get,dn as getPathCacheSize,gn as hasDeps,J as hasWildcard,y as isCondition,sn as isConditionExpr,E as isConditionGroup,h as isConditional,T as isFn,D as isLiteral,b as isPipe,yn as isPure,g as isRef,kn as isValid,R as normalizePath,I as validate,en as wrapInFunction};
|