@statedelta-libs/expressions 0.1.1 → 0.2.0
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/LICENSE +21 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +11 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +1 -1
- package/package.json +13 -13
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Anderson D. Rosa
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var conditions=require('@statedelta-libs/conditions'),omniAst=require('omni-ast');var en=Object.defineProperty;var tn=(n,e)=>{for(var i in e)en(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,E=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",C=n=>n!==null&&typeof n=="object"&&"$pipe"in n&&Array.isArray(n.$pipe),I=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&&I.has(n.op)&&!("$"in n)&&!("$if"in n)&&!("$fn"in n),y=n=>n!==null&&typeof n=="object"&&"logic"in n&&"conditions"in n,on=n=>g(n)||y(n),P=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&&I.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 V(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 u=parseInt(f,10);e.push({type:"index",value:isNaN(u)?f:u});}}else o+=s,t++;}return o&&e.push({type:"key",value:o}),e}function L(n){return n.includes("[*]")}function O(n){let e=R.get(n);return e||(e=L(n)?sn(n):rn(n),R.set(n,e),e)}function rn(n){if(!n.includes(".")&&!n.includes("["))return o=>o?.[n];let e=V(n),i=e.length;if(i===2){let[o,s]=e,r=o.value,f=s.value;return u=>u?.[r]?.[f]}if(i===3){let[o,s,r]=e,f=o.value,u=s.value,c=r.value;return a=>a?.[f]?.[u]?.[c]}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 sn(n){let e=V(n),i=[];for(let t=0;t<e.length;t++)e[t].type==="wildcard"&&i.push(t);return i.length===1?ln(e,i[0]):fn(e,i)}function ln(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 u=0;u<o&&f!=null;u++)f=f[i[u]];return f}}if(s===1){let r=t[0];if(o===1){let f=i[0];return u=>{let c=u?.[f];if(Array.isArray(c))return c.map(a=>a?.[r])}}return f=>{let u=f;for(let c=0;c<o&&u!=null;c++)u=u[i[c]];if(Array.isArray(u))return u.map(c=>c?.[r])}}return r=>{let f=r;for(let u=0;u<o&&f!=null;u++)f=f[i[u]];if(Array.isArray(f))return f.map(u=>{let c=u;for(let a=0;a<s&&c!=null;a++)c=c[t[a]];return c})}}function fn(n,e){let i=[],t=0;for(let s=0;s<e.length;s++){let r=e[s],f=s===e.length-1,u=n.slice(t,r).map(c=>c.value);u.length>0&&i.push({type:"access",keys:u}),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 u of f.keys){if(r==null)return;r=r[u];}else if(f.type==="flatMap"){if(!Array.isArray(r))return;r=r.flatMap(u=>{let c=u;return Array.isArray(c)?c:[c]});}else if(f.type==="map"){if(!Array.isArray(r))return;o.length>0&&(r=r.map(u=>{let c=u;for(let a of o){if(c==null)return;c=c[a];}return c}));}}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 an(){return R.size}function S(n){let e=new Set;return $(n,e),Array.from(e)}function $(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let o=0;o<n.length;o++)$(n[o],e);return}if(m(n)){e.add(k(n.$));return}if(E(n)){if(typeof n.$if=="string"){let o=n.$if.startsWith("!")?n.$if.slice(1):n.$if;e.add(k(o));}else $(n.$if,e);$(n.then,e),n.else!==void 0&&$(n.else,e);return}if(C(n)){for(let o=0;o<n.$pipe.length;o++)$(n.$pipe[o],e);return}if(T(n)){if(n.args)for(let o=0;o<n.args.length;o++)$(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++)$(n.conditions[o],e);return}let i=n,t=Object.keys(i);for(let o=0;o<t.length;o++)$(i[t[o]],e);}function dn(n){return S(n).length>0}function mn(n){return S(n).length===0}function gn(n){return JSON.stringify(n)}function F(n,e={}){let i=e.scope??{},t=e.accessor,o=A(n,i,t),s=S(n),r=gn(n);return {fn:o,deps:s,hash:r}}function A(n,e,i){if(n===null)return ()=>null;if(typeof n!="object")return ()=>n;if(Array.isArray(n)){let t=n.map(o=>A(o,e,i));return o=>t.map(s=>s(o))}if(m(n))return yn(n,i);if(E(n))return hn(n,e,i);if(C(n))return En(n,e,i);if(T(n))return Tn(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(P(n)){let t=n,o=Object.keys(t),s=o.map(r=>A(t[r],e,i));return r=>{let f={};for(let u=0;u<o.length;u++)f[o[u]]=s[u](r);return f}}return ()=>n}function q(n,e){return e?i=>e(n,i):O(n)}function yn(n,e){return q(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=q(r,i);t=n.$if.startsWith("!")?c=>!f(c):c=>!!f(c);}else {let r=A(n.$if,e,i);t=f=>!!r(f);}let o=A(n.then,e,i),s=n.else!==void 0?A(n.else,e,i):()=>{};return r=>t(r)?o(r):s(r)}function En(n,e,i){let t=n.$pipe;if(t.length===0)return ()=>{};if(t.length===1)return A(t[0],e,i);let o=A(t[0],e,i),s=t.slice(1).map(f=>A(f,e,i)),r=s.length;if(r===1){let[f]=s;return u=>{let c=o(u),a=f(u);return typeof a=="function"?a(c):a}}if(r===2){let[f,u]=s;return c=>{let a=o(c),p=f(c);return a=typeof p=="function"?p(a):p,p=u(c),typeof p=="function"?p(a):p}}if(r===3){let[f,u,c]=s;return a=>{let p=o(a),h=f(a);return p=typeof h=="function"?h(p):h,h=u(a),p=typeof h=="function"?h(p):h,h=c(a),typeof h=="function"?h(p):h}}return f=>{let u=o(f);for(let c=0;c<r;c++){let a=s[c](f);u=typeof a=="function"?a(u):a;}return u}}function Tn(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=>A(f,e,i)),r=s.length;if(r===0)return f=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u()};if(r===1){let[f]=s;return u=>{let c=e[t];if(!c)throw new Error(`Function not found in scope: ${t}`);return c(f(u))}}if(r===2){let[f,u]=s;return c=>{let a=e[t];if(!a)throw new Error(`Function not found in scope: ${t}`);return a(f(c),u(c))}}if(r===3){let[f,u,c]=s;return a=>{let p=e[t];if(!p)throw new Error(`Function not found in scope: ${t}`);return p(f(a),u(a),c(a))}}return f=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u(...s.map(c=>c(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);}}},J=new v;function An(n,e={}){return J.get(n,e)}function z(n,e="root",i={}){let t=[];return x(n,e,t,i),{valid:t.length===0,errors:t}}function x(n,e,i,t){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let r=0;r<n.length;r++)x(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(E(n)){typeof n.$if=="string"?(n.$if.startsWith("!")?n.$if.slice(1):n.$if)||i.push(`${e}.$if: empty path in string shorthand`):x(n.$if,`${e}.$if`,i,t),x(n.then,`${e}.then`,i,t),n.else!==void 0&&x(n.else,`${e}.else`,i,t);return}if(C(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++)x(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++)x(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];x(o[f],`${e}.${f}`,i,t);}}function bn(n,e={}){let i=z(n,"root",e);if(!i.valid)throw new Error(`Invalid expression: ${i.errors.join("; ")}`)}function $n(n,e={}){return z(n,"root",e).valid}var Q={};tn(Q,{$:()=>K,$fn:()=>Y,$if:()=>kn,$pipe:()=>H,fn:()=>Sn,pipe:()=>wn,ref:()=>xn});function K(n){return {$:n}}var xn=K;function Y(n,e){return e===void 0||e.length===0?{$fn:n}:{$fn:n,args:e}}var Sn=Y;function kn(n,e,i){return i===void 0?{$if:n,then:e}:{$if:n,then:e,else:i}}function H(...n){return {$pipe:n}}var wn=H;var D="data",U="scope",Rn={eq:"===",neq:"!==",gt:">",gte:">=",lt:"<",lte:"<="};function j(n,e={}){let{dataParam:i=D,scopeParam:t=U,noPrefixes:o=false}=e;return d(n,i,t,o)}function d(n,e,i,t){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=>d(o,e,i,t)));if(m(n))return On(n.$,e,t);if(E(n))return vn(n,e,i,t);if(C(n))return jn(n.$pipe,e,i,t);if(T(n))return Nn(n,e,i,t);if(g(n))return Gn(n,e,i,t);if(y(n))return Wn(n,e,i,t);if(typeof n=="object"){let s=Object.entries(n).map(([r,f])=>omniAst.builders.property(omniAst.builders.identifier(r),d(f,e,i,t)));return omniAst.builders.objectExpression(s)}return omniAst.builders.literal(null)}function On(n,e,i){return n.includes("[*]")?Fn(n,e,i):w(n,e,i)}function w(n,e,i){let t=N(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 Fn(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 X(r,s);let f="_i",u=s.startsWith(".")?s.slice(1):s,c=omniAst.builders.identifier(f);if(u){let a=N(u);for(let p of a)p.type==="key"?c=omniAst.builders.memberExpression(c,omniAst.builders.identifier(p.value),false,true):c=omniAst.builders.memberExpression(c,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)],c)])}function X(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 c=N(r);for(let a of c)a.type==="key"&&(f=omniAst.builders.memberExpression(f,omniAst.builders.identifier(a.value),false,true));}if(o.includes("[*]")){let c=X(f,o);return omniAst.builders.callExpression(omniAst.builders.memberExpression(n,omniAst.builders.identifier("flatMap"),false,true),[omniAst.builders.arrowFunctionExpression([omniAst.builders.identifier(s)],c)])}let u=o.startsWith(".")?o.slice(1):o;if(u){let c=N(u);for(let a of c)a.type==="key"&&(f=omniAst.builders.memberExpression(f,omniAst.builders.identifier(a.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 vn(n,e,i,t){let o;if(typeof n.$if=="string"){let f=n.$if.startsWith("!"),u=f?n.$if.slice(1):n.$if,c=w(u,e,t);o=f?omniAst.builders.unaryExpression("!",c):c;}else o=d(n.$if,e,i,t);let s=d(n.then,e,i,t),r=n.else!==void 0?d(n.else,e,i,t):omniAst.builders.identifier("undefined");return omniAst.builders.conditionalExpression(o,s,r)}function Nn(n,e,i,t){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(r=>d(r,e,i,t));return omniAst.builders.callExpression(o,s)}function jn(n,e,i,t){if(n.length===0)return omniAst.builders.identifier("undefined");if(n.length===1)return d(n[0],e,i,t);let o=d(n[0],e,i,t);for(let s=1;s<n.length;s++){let r=d(n[s],e,i,t);o=omniAst.builders.callExpression(r,[o]);}return o}function Gn(n,e,i,t){let o=w(n.path,e,t),s=n.value!==void 0?m(n.value)?w(n.value.$,e,t):d(n.value,e,i,t):omniAst.builders.literal(null),r=Rn[n.op];if(r)return omniAst.builders.binaryExpression(r,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 Wn(n,e,i,t){let{logic:o,conditions:s}=n,r=o==="AND"?"&&":"||";if(s.length===0)return omniAst.builders.literal(o==="AND");if(s.length===1)return d(s[0],e,i,t);let f=d(s[0],e,i,t);for(let u=1;u<s.length;u++){let c=d(s[u],e,i,t);f=omniAst.builders.logicalExpression(r,f,c);}return f}function N(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 u=parseInt(f,10);e.push({type:"index",value:isNaN(u)?f:u});}}else o+=s,t++;}return o&&e.push({type:"key",value:o}),e}function Z(n,e=[D]){return omniAst.builders.arrowFunctionExpression(e.map(i=>omniAst.builders.identifier(i)),n)}function G(n){let e=new Set;return b(n,e),e}function b(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let t of n)b(t,e);return}if(m(n))return;if(E(n)){b(n.$if,e),b(n.then,e),n.else!==void 0&&b(n.else,e);return}if(C(n)){for(let t of n.$pipe)b(t,e);return}if(T(n)){if(e.add(n.$fn),n.args)for(let t of n.args)b(t,e);return}if(g(n)){n.value!==void 0&&typeof n.value=="object"&&b(n.value,e);return}if(y(n)){for(let t of n.conditions)b(t,e);return}let i=n;for(let t of Object.keys(i))b(i[t],e);}function W(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 zn(n){return JSON.stringify(n)}function Dn(n,e,i){let t=j(n,{noPrefixes:true}),o=omniAst.generate(t),s=e.size>0?`const{${[...e].join(",")}}=data??{};`:"",r=i.size>0?`const{${[...i].join(",")}}=scope;`:"";return r?`(function(scope){${r}return function(data){${s}return ${o}}})`:`(function(){return function(data){${s}return ${o}}})`}function M(n,e={}){let{scope:i={},returnCode:t=false}=e,o=S(n),s=W(o),r=G(n),f=zn(n),u=Dn(n,s,r);if(t)return {code:u,deps:o,hash:f,dataRoots:[...s],scopeFns:[...r]};let c;try{c=new Function(`return ${u}`)()(i);}catch(a){throw new Error(`AST compilation failed. If this is due to CSP, use the standard compile() function instead. Error: ${a instanceof Error?a.message:String(a)}`)}return {fn:c,deps:o,hash:f}}function nn(n,e,i={}){let{fn:t}=M(n,i);return t(e)}var ye="0.1.1";exports.ExpressionCache=v;exports.VERSION=ye;exports.assertValid=bn;exports.builders=Q;exports.cache=J;exports.cached=An;exports.clearPathCache=cn;exports.compile=F;exports.compileAST=M;exports.compilePath=O;exports.dslToAST=j;exports.evaluate=Cn;exports.evaluateAST=nn;exports.extractDataRoots=W;exports.extractDeps=S;exports.extractScopeFns=G;exports.get=un;exports.getPathCacheSize=an;exports.hasDeps=dn;exports.hasWildcard=L;exports.isCondition=g;exports.isConditionExpr=on;exports.isConditionGroup=y;exports.isConditional=E;exports.isFn=T;exports.isLiteral=P;exports.isPipe=C;exports.isPure=mn;exports.isRef=m;exports.isValid=$n;exports.normalizePath=k;exports.validate=z;exports.wrapInFunction=Z;
|
|
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;
|
package/dist/index.d.cts
CHANGED
|
@@ -483,6 +483,12 @@ interface TransformOptions {
|
|
|
483
483
|
* - `add(a, b)` instead of `scope.add(data?.a, data?.b)`
|
|
484
484
|
*/
|
|
485
485
|
noPrefixes?: boolean;
|
|
486
|
+
/**
|
|
487
|
+
* When true, generates accessor("path") instead of property access.
|
|
488
|
+
* Requires `accessor` function in scope.
|
|
489
|
+
* - `accessor("user.name")` instead of `user?.name`
|
|
490
|
+
*/
|
|
491
|
+
useAccessor?: boolean;
|
|
486
492
|
}
|
|
487
493
|
/**
|
|
488
494
|
* Transform DSL expression to AST node
|
|
@@ -567,6 +573,11 @@ interface CompileASTOptions {
|
|
|
567
573
|
scope?: Scope;
|
|
568
574
|
/** Return generated code instead of function (for debugging) */
|
|
569
575
|
returnCode?: boolean;
|
|
576
|
+
/**
|
|
577
|
+
* When true, generates accessor("path") instead of property access.
|
|
578
|
+
* Requires `accessor` function in scope.
|
|
579
|
+
*/
|
|
580
|
+
useAccessor?: boolean;
|
|
570
581
|
}
|
|
571
582
|
/** Result when returnCode is true */
|
|
572
583
|
interface CompileASTCodeResult {
|
package/dist/index.d.ts
CHANGED
|
@@ -483,6 +483,12 @@ interface TransformOptions {
|
|
|
483
483
|
* - `add(a, b)` instead of `scope.add(data?.a, data?.b)`
|
|
484
484
|
*/
|
|
485
485
|
noPrefixes?: boolean;
|
|
486
|
+
/**
|
|
487
|
+
* When true, generates accessor("path") instead of property access.
|
|
488
|
+
* Requires `accessor` function in scope.
|
|
489
|
+
* - `accessor("user.name")` instead of `user?.name`
|
|
490
|
+
*/
|
|
491
|
+
useAccessor?: boolean;
|
|
486
492
|
}
|
|
487
493
|
/**
|
|
488
494
|
* Transform DSL expression to AST node
|
|
@@ -567,6 +573,11 @@ interface CompileASTOptions {
|
|
|
567
573
|
scope?: Scope;
|
|
568
574
|
/** Return generated code instead of function (for debugging) */
|
|
569
575
|
returnCode?: boolean;
|
|
576
|
+
/**
|
|
577
|
+
* When true, generates accessor("path") instead of property access.
|
|
578
|
+
* Requires `accessor` function in scope.
|
|
579
|
+
*/
|
|
580
|
+
useAccessor?: boolean;
|
|
570
581
|
}
|
|
571
582
|
/** Result when returnCode is true */
|
|
572
583
|
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 en=Object.defineProperty;var tn=(n,e)=>{for(var i in e)en(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,E=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",C=n=>n!==null&&typeof n=="object"&&"$pipe"in n&&Array.isArray(n.$pipe),I=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&&I.has(n.op)&&!("$"in n)&&!("$if"in n)&&!("$fn"in n),y=n=>n!==null&&typeof n=="object"&&"logic"in n&&"conditions"in n,on=n=>g(n)||y(n),P=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&&I.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 V(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 u=parseInt(f,10);e.push({type:"index",value:isNaN(u)?f:u});}}else o+=s,t++;}return o&&e.push({type:"key",value:o}),e}function L(n){return n.includes("[*]")}function O(n){let e=R.get(n);return e||(e=L(n)?sn(n):rn(n),R.set(n,e),e)}function rn(n){if(!n.includes(".")&&!n.includes("["))return o=>o?.[n];let e=V(n),i=e.length;if(i===2){let[o,s]=e,r=o.value,f=s.value;return u=>u?.[r]?.[f]}if(i===3){let[o,s,r]=e,f=o.value,u=s.value,c=r.value;return a=>a?.[f]?.[u]?.[c]}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 sn(n){let e=V(n),i=[];for(let t=0;t<e.length;t++)e[t].type==="wildcard"&&i.push(t);return i.length===1?ln(e,i[0]):fn(e,i)}function ln(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 u=0;u<o&&f!=null;u++)f=f[i[u]];return f}}if(s===1){let r=t[0];if(o===1){let f=i[0];return u=>{let c=u?.[f];if(Array.isArray(c))return c.map(a=>a?.[r])}}return f=>{let u=f;for(let c=0;c<o&&u!=null;c++)u=u[i[c]];if(Array.isArray(u))return u.map(c=>c?.[r])}}return r=>{let f=r;for(let u=0;u<o&&f!=null;u++)f=f[i[u]];if(Array.isArray(f))return f.map(u=>{let c=u;for(let a=0;a<s&&c!=null;a++)c=c[t[a]];return c})}}function fn(n,e){let i=[],t=0;for(let s=0;s<e.length;s++){let r=e[s],f=s===e.length-1,u=n.slice(t,r).map(c=>c.value);u.length>0&&i.push({type:"access",keys:u}),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 u of f.keys){if(r==null)return;r=r[u];}else if(f.type==="flatMap"){if(!Array.isArray(r))return;r=r.flatMap(u=>{let c=u;return Array.isArray(c)?c:[c]});}else if(f.type==="map"){if(!Array.isArray(r))return;o.length>0&&(r=r.map(u=>{let c=u;for(let a of o){if(c==null)return;c=c[a];}return c}));}}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 an(){return R.size}function S(n){let e=new Set;return $(n,e),Array.from(e)}function $(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let o=0;o<n.length;o++)$(n[o],e);return}if(m(n)){e.add(k(n.$));return}if(E(n)){if(typeof n.$if=="string"){let o=n.$if.startsWith("!")?n.$if.slice(1):n.$if;e.add(k(o));}else $(n.$if,e);$(n.then,e),n.else!==void 0&&$(n.else,e);return}if(C(n)){for(let o=0;o<n.$pipe.length;o++)$(n.$pipe[o],e);return}if(T(n)){if(n.args)for(let o=0;o<n.args.length;o++)$(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++)$(n.conditions[o],e);return}let i=n,t=Object.keys(i);for(let o=0;o<t.length;o++)$(i[t[o]],e);}function dn(n){return S(n).length>0}function mn(n){return S(n).length===0}function gn(n){return JSON.stringify(n)}function F(n,e={}){let i=e.scope??{},t=e.accessor,o=A(n,i,t),s=S(n),r=gn(n);return {fn:o,deps:s,hash:r}}function A(n,e,i){if(n===null)return ()=>null;if(typeof n!="object")return ()=>n;if(Array.isArray(n)){let t=n.map(o=>A(o,e,i));return o=>t.map(s=>s(o))}if(m(n))return yn(n,i);if(E(n))return hn(n,e,i);if(C(n))return En(n,e,i);if(T(n))return Tn(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(P(n)){let t=n,o=Object.keys(t),s=o.map(r=>A(t[r],e,i));return r=>{let f={};for(let u=0;u<o.length;u++)f[o[u]]=s[u](r);return f}}return ()=>n}function q(n,e){return e?i=>e(n,i):O(n)}function yn(n,e){return q(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=q(r,i);t=n.$if.startsWith("!")?c=>!f(c):c=>!!f(c);}else {let r=A(n.$if,e,i);t=f=>!!r(f);}let o=A(n.then,e,i),s=n.else!==void 0?A(n.else,e,i):()=>{};return r=>t(r)?o(r):s(r)}function En(n,e,i){let t=n.$pipe;if(t.length===0)return ()=>{};if(t.length===1)return A(t[0],e,i);let o=A(t[0],e,i),s=t.slice(1).map(f=>A(f,e,i)),r=s.length;if(r===1){let[f]=s;return u=>{let c=o(u),a=f(u);return typeof a=="function"?a(c):a}}if(r===2){let[f,u]=s;return c=>{let a=o(c),p=f(c);return a=typeof p=="function"?p(a):p,p=u(c),typeof p=="function"?p(a):p}}if(r===3){let[f,u,c]=s;return a=>{let p=o(a),h=f(a);return p=typeof h=="function"?h(p):h,h=u(a),p=typeof h=="function"?h(p):h,h=c(a),typeof h=="function"?h(p):h}}return f=>{let u=o(f);for(let c=0;c<r;c++){let a=s[c](f);u=typeof a=="function"?a(u):a;}return u}}function Tn(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=>A(f,e,i)),r=s.length;if(r===0)return f=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u()};if(r===1){let[f]=s;return u=>{let c=e[t];if(!c)throw new Error(`Function not found in scope: ${t}`);return c(f(u))}}if(r===2){let[f,u]=s;return c=>{let a=e[t];if(!a)throw new Error(`Function not found in scope: ${t}`);return a(f(c),u(c))}}if(r===3){let[f,u,c]=s;return a=>{let p=e[t];if(!p)throw new Error(`Function not found in scope: ${t}`);return p(f(a),u(a),c(a))}}return f=>{let u=e[t];if(!u)throw new Error(`Function not found in scope: ${t}`);return u(...s.map(c=>c(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);}}},J=new v;function An(n,e={}){return J.get(n,e)}function z(n,e="root",i={}){let t=[];return x(n,e,t,i),{valid:t.length===0,errors:t}}function x(n,e,i,t){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let r=0;r<n.length;r++)x(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(E(n)){typeof n.$if=="string"?(n.$if.startsWith("!")?n.$if.slice(1):n.$if)||i.push(`${e}.$if: empty path in string shorthand`):x(n.$if,`${e}.$if`,i,t),x(n.then,`${e}.then`,i,t),n.else!==void 0&&x(n.else,`${e}.else`,i,t);return}if(C(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++)x(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++)x(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];x(o[f],`${e}.${f}`,i,t);}}function bn(n,e={}){let i=z(n,"root",e);if(!i.valid)throw new Error(`Invalid expression: ${i.errors.join("; ")}`)}function $n(n,e={}){return z(n,"root",e).valid}var Q={};tn(Q,{$:()=>K,$fn:()=>Y,$if:()=>kn,$pipe:()=>H,fn:()=>Sn,pipe:()=>wn,ref:()=>xn});function K(n){return {$:n}}var xn=K;function Y(n,e){return e===void 0||e.length===0?{$fn:n}:{$fn:n,args:e}}var Sn=Y;function kn(n,e,i){return i===void 0?{$if:n,then:e}:{$if:n,then:e,else:i}}function H(...n){return {$pipe:n}}var wn=H;var D="data",U="scope",Rn={eq:"===",neq:"!==",gt:">",gte:">=",lt:"<",lte:"<="};function j(n,e={}){let{dataParam:i=D,scopeParam:t=U,noPrefixes:o=false}=e;return d(n,i,t,o)}function d(n,e,i,t){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=>d(o,e,i,t)));if(m(n))return On(n.$,e,t);if(E(n))return vn(n,e,i,t);if(C(n))return jn(n.$pipe,e,i,t);if(T(n))return Nn(n,e,i,t);if(g(n))return Gn(n,e,i,t);if(y(n))return Wn(n,e,i,t);if(typeof n=="object"){let s=Object.entries(n).map(([r,f])=>builders.property(builders.identifier(r),d(f,e,i,t)));return builders.objectExpression(s)}return builders.literal(null)}function On(n,e,i){return n.includes("[*]")?Fn(n,e,i):w(n,e,i)}function w(n,e,i){let t=N(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 Fn(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 X(r,s);let f="_i",u=s.startsWith(".")?s.slice(1):s,c=builders.identifier(f);if(u){let a=N(u);for(let p of a)p.type==="key"?c=builders.memberExpression(c,builders.identifier(p.value),false,true):c=builders.memberExpression(c,builders.literal(p.value),true,true);}return builders.callExpression(builders.memberExpression(r,builders.identifier("map"),false,true),[builders.arrowFunctionExpression([builders.identifier(f)],c)])}function X(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 c=N(r);for(let a of c)a.type==="key"&&(f=builders.memberExpression(f,builders.identifier(a.value),false,true));}if(o.includes("[*]")){let c=X(f,o);return builders.callExpression(builders.memberExpression(n,builders.identifier("flatMap"),false,true),[builders.arrowFunctionExpression([builders.identifier(s)],c)])}let u=o.startsWith(".")?o.slice(1):o;if(u){let c=N(u);for(let a of c)a.type==="key"&&(f=builders.memberExpression(f,builders.identifier(a.value),false,true));}return builders.callExpression(builders.memberExpression(n,builders.identifier("flatMap"),false,true),[builders.arrowFunctionExpression([builders.identifier(s)],f)])}function vn(n,e,i,t){let o;if(typeof n.$if=="string"){let f=n.$if.startsWith("!"),u=f?n.$if.slice(1):n.$if,c=w(u,e,t);o=f?builders.unaryExpression("!",c):c;}else o=d(n.$if,e,i,t);let s=d(n.then,e,i,t),r=n.else!==void 0?d(n.else,e,i,t):builders.identifier("undefined");return builders.conditionalExpression(o,s,r)}function Nn(n,e,i,t){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(r=>d(r,e,i,t));return builders.callExpression(o,s)}function jn(n,e,i,t){if(n.length===0)return builders.identifier("undefined");if(n.length===1)return d(n[0],e,i,t);let o=d(n[0],e,i,t);for(let s=1;s<n.length;s++){let r=d(n[s],e,i,t);o=builders.callExpression(r,[o]);}return o}function Gn(n,e,i,t){let o=w(n.path,e,t),s=n.value!==void 0?m(n.value)?w(n.value.$,e,t):d(n.value,e,i,t):builders.literal(null),r=Rn[n.op];if(r)return builders.binaryExpression(r,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 Wn(n,e,i,t){let{logic:o,conditions:s}=n,r=o==="AND"?"&&":"||";if(s.length===0)return builders.literal(o==="AND");if(s.length===1)return d(s[0],e,i,t);let f=d(s[0],e,i,t);for(let u=1;u<s.length;u++){let c=d(s[u],e,i,t);f=builders.logicalExpression(r,f,c);}return f}function N(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 u=parseInt(f,10);e.push({type:"index",value:isNaN(u)?f:u});}}else o+=s,t++;}return o&&e.push({type:"key",value:o}),e}function Z(n,e=[D]){return builders.arrowFunctionExpression(e.map(i=>builders.identifier(i)),n)}function G(n){let e=new Set;return b(n,e),e}function b(n,e){if(n===null||typeof n!="object")return;if(Array.isArray(n)){for(let t of n)b(t,e);return}if(m(n))return;if(E(n)){b(n.$if,e),b(n.then,e),n.else!==void 0&&b(n.else,e);return}if(C(n)){for(let t of n.$pipe)b(t,e);return}if(T(n)){if(e.add(n.$fn),n.args)for(let t of n.args)b(t,e);return}if(g(n)){n.value!==void 0&&typeof n.value=="object"&&b(n.value,e);return}if(y(n)){for(let t of n.conditions)b(t,e);return}let i=n;for(let t of Object.keys(i))b(i[t],e);}function W(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 zn(n){return JSON.stringify(n)}function Dn(n,e,i){let t=j(n,{noPrefixes:true}),o=generate(t),s=e.size>0?`const{${[...e].join(",")}}=data??{};`:"",r=i.size>0?`const{${[...i].join(",")}}=scope;`:"";return r?`(function(scope){${r}return function(data){${s}return ${o}}})`:`(function(){return function(data){${s}return ${o}}})`}function M(n,e={}){let{scope:i={},returnCode:t=false}=e,o=S(n),s=W(o),r=G(n),f=zn(n),u=Dn(n,s,r);if(t)return {code:u,deps:o,hash:f,dataRoots:[...s],scopeFns:[...r]};let c;try{c=new Function(`return ${u}`)()(i);}catch(a){throw new Error(`AST compilation failed. If this is due to CSP, use the standard compile() function instead. Error: ${a instanceof Error?a.message:String(a)}`)}return {fn:c,deps:o,hash:f}}function nn(n,e,i={}){let{fn:t}=M(n,i);return t(e)}var ye="0.1.1";export{v as ExpressionCache,ye as VERSION,bn as assertValid,Q as builders,J as cache,An as cached,cn as clearPathCache,F as compile,M as compileAST,O as compilePath,j as dslToAST,Cn as evaluate,nn as evaluateAST,W as extractDataRoots,S as extractDeps,G as extractScopeFns,un as get,an as getPathCacheSize,dn as hasDeps,L as hasWildcard,g as isCondition,on as isConditionExpr,y as isConditionGroup,E as isConditional,T as isFn,P as isLiteral,C as isPipe,mn as isPure,m as isRef,$n as isValid,k as normalizePath,z as validate,Z as wrapInFunction};
|
|
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};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@statedelta-libs/expressions",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "JSON DSL compiler for optimized functions - StateDelta expression engine",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -13,17 +13,6 @@
|
|
|
13
13
|
"require": "./dist/index.cjs"
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": "tsup",
|
|
18
|
-
"dev": "tsup --watch",
|
|
19
|
-
"test": "vitest run",
|
|
20
|
-
"test:watch": "vitest",
|
|
21
|
-
"test:coverage": "vitest run --coverage",
|
|
22
|
-
"typecheck": "tsc --noEmit",
|
|
23
|
-
"clean": "rm -rf dist",
|
|
24
|
-
"format": "prettier --write \"src/**/*.ts\"",
|
|
25
|
-
"format:check": "prettier --check \"src/**/*.ts\""
|
|
26
|
-
},
|
|
27
16
|
"dependencies": {
|
|
28
17
|
"@statedelta-libs/conditions": "^0.1.1",
|
|
29
18
|
"omni-ast": "^2.0.0"
|
|
@@ -57,5 +46,16 @@
|
|
|
57
46
|
},
|
|
58
47
|
"devDependencies": {
|
|
59
48
|
"@vitest/coverage-v8": "^4.0.16"
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "tsup",
|
|
52
|
+
"dev": "tsup --watch",
|
|
53
|
+
"test": "vitest run",
|
|
54
|
+
"test:watch": "vitest",
|
|
55
|
+
"test:coverage": "vitest run --coverage",
|
|
56
|
+
"typecheck": "tsc --noEmit",
|
|
57
|
+
"clean": "rm -rf dist",
|
|
58
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
59
|
+
"format:check": "prettier --check \"src/**/*.ts\""
|
|
60
60
|
}
|
|
61
|
-
}
|
|
61
|
+
}
|