fig-tree-evaluator 2.15.0 → 2.15.2

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/README.md CHANGED
@@ -1070,7 +1070,7 @@ const fig = new FigTreeEvaluator({
1070
1070
 
1071
1071
  ```
1072
1072
 
1073
- See the implementation for `axios` and `node-fetch` [in the repo](https://github.com/CarlosNZ/fig-tree-evaluator/blob/91-exclude-axios-from-package/src/httpClients.ts) for specific details.
1073
+ See the implementation for `axios` and `node-fetch` [in the repo](https://github.com/CarlosNZ/fig-tree-evaluator/blob/main/src/httpClients.ts) for specific details.
1074
1074
 
1075
1075
 
1076
1076
  ### GET
@@ -1262,29 +1262,6 @@ Aliases: `sql`, `pgSql`, `postgres`, `pg`, `sqlLite`, `sqlite`, `mySql`
1262
1262
  - `single` (or `singleRecord`): (boolean) -- by default, results are returned as an array of objects. However, if your query is expected to just return a single record, you can set `single: true` and just the record object will be returned (i.e. not in an array). Note that if the query *does* fetch multiple records, only the first will be returned.
1263
1263
  - `flatten` (or `flat`): (boolean) -- Instead of returning an object, `flatten: true` will just return an array of values. e.g, instead of `{name: "Tom", age: 49}`, it will return `["Tom", 49]`. This would usually be used in conjunction with the `single` property -- if not, it will return an array of flattened arrays.
1264
1264
 
1265
- ##### SQLite
1266
-
1267
-
1268
- ```js
1269
- import sqlite3 from 'sqlite3'
1270
- import { open, Database } from 'sqlite'
1271
- import { FigTreeEvaluator, SQLite } from 'fig-tree-evaluator'
1272
-
1273
- open({
1274
- filename: '/path/to/sqlite.db',
1275
- driver: sqlite3.Database
1276
- }).then((db) => {
1277
- const fig = new FigTreeEvaluator({
1278
- sqlConnection: SQLite(db),
1279
- ...otherOptions
1280
- })
1281
-
1282
- fig.evaluate(...) // Continue app operations
1283
- })
1284
- ```
1285
-
1286
- To create additional abstractions for other database connections, check out `SQLNodePostgres` and `SQLite` [in the repo](https://github.com/CarlosNZ/fig-tree-evaluator/blob/108-generalise-SQL-operator/src/databaseConnections.ts).
1287
-
1288
1265
  #### Examples
1289
1266
 
1290
1267
  The following additional examples query a default installation of the [Northwind](https://github.com/pthom/northwind_psql) demo database.
@@ -1405,7 +1382,7 @@ interface QueryInput {
1405
1382
 
1406
1383
  You then implement in FigTree options the same way as the two described above.
1407
1384
 
1408
- Check out `SQLNodePostgres` and `SQLite` [in the repo](https://github.com/CarlosNZ/fig-tree-evaluator/blob/108-generalise-SQL-operator/src/databaseConnections.ts) for specific details.
1385
+ Check out `SQLNodePostgres` and `SQLite` [in the repo](https://github.com/CarlosNZ/fig-tree-evaluator/blob/main/src/databaseConnections.ts) for specific details.
1409
1386
 
1410
1387
  ----
1411
1388
  ### BUILD_OBJECT
@@ -1 +1 @@
1
- "use strict";var e=require("change-case"),t=require("object-property-extractor"),r=require("dequal/lite");function a(e,t,r,a){return new(r||(r=Promise))((function(i,s){function n(e){try{l(a.next(e))}catch(e){s(e)}}function o(e){try{l(a.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(n,o)}l((a=a.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const i=e=>e instanceof Object&&"operator"in e,s=e=>e instanceof Object&&"fragment"in e,n=t=>{const r=e.camelCase(t);return r||t},o=(e,t)=>t[n(e)],l=(e,t,r)=>{const a=Object.assign({},e);return t.forEach((e=>{r[n(e)]||console.warn(`Invalid operator exclusion: ${e}`),delete a[r[n(e)]]})),a},u=(e,t=200)=>e.length<t?e:`${e.slice(0,t-2).trim()}...`,d=(e,t,r=!1)=>{if(void 0!==e)return e;if(r)return u(t);throw new Error(u(t))},c=(e,t)=>{const r=Object.entries(e).map((([e,r])=>[t(e),r]));return Object.fromEntries(r)},p=e=>/^\$.+/.test(e),h=(e,{resolvedAliasNodes:t})=>{var r;return"string"==typeof e&&p(e)&&null!==(r=null==t?void 0:t[e])&&void 0!==r?r:e},v=(e,t)=>{const r=Object.assign(Object.assign({},e),t);return(e.data||t.data)&&(r.data=Object.assign(Object.assign({},e.data),t.data)),(e.functions||t.functions)&&(r.functions=Object.assign(Object.assign({},e.functions),t.functions)),(e.fragments||t.fragments)&&(r.fragments=Object.assign(Object.assign({},e.fragments),t.fragments)),(e.headers||t.headers)&&(r.headers=Object.assign(Object.assign({},e.headers),t.headers)),r},y={number:e=>f(e),string:e=>String(e),array:e=>Array.isArray(e)?e:[e],boolean:e=>Boolean(e),bool:e=>Boolean(e)},m=e=>e.message,f=e=>{if("string"!=typeof e)return Number.isNaN(Number(e))?e:Number(e);const t=new RegExp(/-?\d*\.?\d+/gm),r=e.match(t);return r?Number(r[0]):0},g=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),b={and:"AND","&":"AND","&&":"AND",or:"OR","|":"OR","||":"OR","=":"EQUAL",eq:"EQUAL",equal:"EQUAL",equals:"EQUAL","!=":"NOT_EQUAL","!":"NOT_EQUAL",ne:"NOT_EQUAL",notEqual:"NOT_EQUAL","+":"PLUS",plus:"PLUS",add:"PLUS",concat:"PLUS",join:"PLUS",merge:"PLUS","-":"SUBTRACT",subtract:"SUBTRACT",minus:"SUBTRACT",takeaway:"SUBTRACT","*":"MULTIPLY",x:"MULTIPLY",multiply:"MULTIPLY",times:"MULTIPLY","/":"DIVIDE",divide:"DIVIDE","÷":"DIVIDE",">":"GREATER_THAN",greaterThan:"GREATER_THAN",higher:"GREATER_THAN",larger:"GREATER_THAN","<":"LESS_THAN",lessThan:"LESS_THAN",lower:"LESS_THAN",smaller:"LESS_THAN","?":"CONDITIONAL",conditional:"CONDITIONAL",ifThen:"CONDITIONAL",regex:"REGEX",patternMatch:"REGEX",regexp:"REGEX",matchPattern:"REGEX",dataProperties:"OBJECT_PROPERTIES",data:"OBJECT_PROPERTIES",getData:"OBJECT_PROPERTIES",objectProperties:"OBJECT_PROPERTIES",objProps:"OBJECT_PROPERTIES",getProperty:"OBJECT_PROPERTIES",getObjProp:"OBJECT_PROPERTIES",stringSubstitution:"STRING_SUBSTITUTION",substitute:"STRING_SUBSTITUTION",stringSub:"STRING_SUBSTITUTION",replace:"STRING_SUBSTITUTION",split:"SPLIT",arraySplit:"SPLIT",count:"COUNT",length:"COUNT",get:"GET",api:"GET",post:"POST",sql:"SQL",pgSql:"SQL",postgres:"SQL",pg:"SQL",sqLite:"SQL",sqlite:"SQL",mySql:"SQL",graphQl:"GRAPHQL",graphql:"GRAPHQL",gql:"GRAPHQL",buildObject:"BUILD_OBJECT",build:"BUILD_OBJECT",object:"BUILD_OBJECT",match:"MATCH",switch:"MATCH",customFunctions:"CUSTOM_FUNCTIONS",customFunction:"CUSTOM_FUNCTIONS",objectFunctions:"CUSTOM_FUNCTIONS",function:"CUSTOM_FUNCTIONS",functions:"CUSTOM_FUNCTIONS",runFunction:"CUSTOM_FUNCTIONS",_:"PASSTHRU",passThru:"PASSTHRU",passthru:"PASSTHRU",pass:"PASSTHRU",ignore:"PASSTHRU",coerce:"PASSTHRU",convert:"PASSTHRU"},T=b,O=/(\$[^()]+)\((.*)\)/,C=(e,t={},r=!0)=>r?"string"==typeof e?q(e,t):g(e)?j(e,t):e:e,q=(e,t)=>{const r=O.exec(e);if(!r)return e;const a=r[1].trim(),i=r[2].split(",").map((e=>C(e.trim(),t)));return S(a,i,t)},j=(e,t)=>{if(i(e)||s(e))return e;const r=Object.entries(e),a=r.filter((([e])=>p(e))),n=r.filter((([e])=>!p(e))),o=a.reduce(((e,[r,a])=>e=Object.assign(Object.assign({},e),S(r,a,t))),{});return Object.assign(Object.assign({},o),Object.fromEntries(n))},S=(e,t,r)=>{const a=e.slice(1),i=o(a,T);return i?Array.isArray(t)?{operator:i,children:t}:g(t)&&!Object.keys(t).some((e=>p(e)))?Object.assign({operator:i},t):{operator:i,children:[t]}:a in r?{fragment:a,parameters:Object.assign({},t)}:{[e]:t}},E=e=>g(e)&&"literal"in e,A=({value:e,name:t,expectedType:r})=>{if(E(r)){const{literal:a}=r;return!!a.includes(e)||x(t,e,`Literal(${a.map((e=>void 0===e?"undefined":`"${e}"`)).join(", ")})`)}if(Array.isArray(r))return!!r.some((r=>!0===A({value:e,name:t,expectedType:r})))||x(t,e,r.join("|"));return!!(0,w[r])(e)||x(t,e,r)},N=(...e)=>{const t=[];return e.forEach((e=>{const r=A(e);!0!==r&&t.push(r)})),!(t.length>0)||t.join("\n")},w={any:e=>void 0!==e,string:e=>"string"==typeof e,number:e=>"number"==typeof e,boolean:e=>"boolean"==typeof e,array:e=>Array.isArray(e),null:e=>null===e,object:e=>g(e),undefined:e=>void 0===e},x=(e,t,r)=>void 0===t&&e?`- Missing required property "${e}" (type: ${r})`:void 0!==e?`- Property "${e}" (value: ${P(t)}) is not of type: ${r}`:`- ${P(t)} is not of type: ${r}`,P=e=>{const t=void 0===e||Number.isNaN(e)?String(e):JSON.stringify(e);return u(t,50)},L=e=>{const t={};return e.forEach((e=>{e.aliases.forEach((r=>t[r]=e.name))})),t},I=(e,t)=>e.map((({name:e,required:r,type:a})=>{if(E(a)){const i=[...a.literal];return r||i.push(void 0),{name:e,value:t[e],expectedType:{literal:i}}}const i=Array.isArray(a)?a:[a];r||i.push("undefined");const s=1===i.length?i[0]:i;return{name:e,value:t[e],expectedType:s}})),U=(e,t)=>{const r=e.map(((e,r)=>[e,t[r]]));return Object.fromEntries(r)},R=e=>{if(e.length%2!=0)throw new Error("Even number of children required to make key/value pairs");const t=e.filter(((e,t)=>t%2==0)),r=N(...t.map((e=>({value:e,expectedType:["string","number","boolean"]}))));if(!0!==r)throw new Error(r);const a=e.filter(((e,t)=>t%2==1)),i={};return t.forEach(((e,t)=>{i[e]=a[t]})),i},k=e=>g(e)&&1===Object.keys(e).length?Object.values(e)[0]:e,D=(e,r,a=void 0)=>{const i=r?t(e,r,a):e;return Array.isArray(i)?i.map((e=>k(e))):r?null===i?null:k(i):i},Q=e=>/^https?:\/\/.+/.test(e),_=(...e)=>e.reduce(((e,t,r)=>{const a="/"===t[0]?1:0,i="/"===t.slice(-1)?-1:void 0,s=t.slice(a,i);return""===s?e:e+(0===r?"":"/")+s}),""),$=(e,t)=>a(void 0,void 0,void 0,(function*(){const{url:r,params:a={},data:i={},headers:s={},method:n="get"}=t;try{return yield e[n]({url:r,headers:Object.assign({"Content-Type":"application/json",Accept:"application/json"},s),params:a,data:i})}catch(t){e.throwError(t)}})),H=(e,t)=>a(void 0,void 0,void 0,(function*(){var r,a,n,l;const{options:u,operators:p,operatorAliases:v}=t;let f=(null==u?void 0:u.allowJSONStringInput)?(e=>{if("string"!=typeof e)return e;try{const t=JSON.parse(e);return i(t)?t:e}catch(t){return e}})(e):e;f=C(f,null===(r=t.options)||void 0===r?void 0:r.fragments,!u.noShorthand),Array.isArray(f)&&(f=yield M(f,t));const b=i(f),T=s(f);if(u.evaluateFullObject&&!b&&!T)return h(yield B(f,t),t);if(!b&&!T)return u.supportDeprecatedValueNodes&&g(f)&&"value"in f?f.value:h(f,t);const{fallback:O}=f,q=null!==(a=null==u?void 0:u.returnErrorAsString)&&void 0!==a&&a;if(T){const[e,r]=yield M([f.fragment,f.parameters],t),a=C(null===(n=null==u?void 0:u.fragments)||void 0===n?void 0:n[e],u.fragments,!u.noShorthand);if(void 0===a)return d(yield H(O,t),`Fragment not defined: ${e}`,q);if(!i(a))return h(a,t);f=Object.assign(Object.assign(Object.assign({},f),a),r),delete f.fragment}try{const e=o(f.operator,v);if(!e)return d(yield H(O,t),`Invalid operator: ${f.operator}`,q);if(!t.operators[e])return d(yield H(O,t),`Excluded operator: ${f.operator}`,q);const{propertyAliases:r,evaluate:a,parseChildren:i}=p[e];f=((e,t)=>c(t,(t=>t in e?e[t]:t)))(r,f);const s=yield F(f,t);T||Object.entries(s).forEach((([e,r])=>t.resolvedAliasNodes[e]=r));const n=T?Object.assign(Object.assign({},t),{resolvedAliasNodes:Object.assign(Object.assign({},t.resolvedAliasNodes),s)}):t;if("children"in f){if(Array.isArray(f.children)||(f.children=yield H(f.children,n)),!Array.isArray(f.children))return d(yield H(O,t),`Operator: ${e}\n- Property "children" is not of type: array`,q);f=yield i(f,n),delete f.children}let u;try{u=yield a(f,n)}catch(r){return d(yield H(f.fallback,t),`Operator: ${e}\n${m(r)}`,q)}const h=null!==(l=null==f?void 0:f.outputType)&&void 0!==l?l:null==f?void 0:f.type;if(!h)return u;const g=yield H(h,t);return g in y?y[g](u):d(yield H(O,t),`Operator: ${e}\n- Invalid output type: ${g}`,q)}catch(e){return d(yield H(O,t),m(e),q)}})),M=(e,t)=>a(void 0,void 0,void 0,(function*(){return Array.isArray(e)?yield Promise.all(e.map((e=>H(e,t)))):yield H(e,t)})),F=(e,t)=>a(void 0,void 0,void 0,(function*(){const r=Object.keys(e).filter(p);if(0===r.length)return{};const a=[];return r.forEach((r=>a.push(H(e[r],t)))),U(r,yield Promise.all(a))})),B=(e,t)=>a(void 0,void 0,void 0,(function*(){if(!g(e))return e;const r=[],a=[];Object.entries(e).forEach((([r,i])=>{p(r)&&(a.push(r,H(i,t)),delete e[r])}));const i=yield Promise.all(a);t.resolvedAliasNodes=Object.assign(Object.assign({},t.resolvedAliasNodes),R(i)),Object.entries(e).forEach((([e,a])=>{r.push(e,H(a,t))}));const s=yield Promise.all(r);return h(R(s),t)})),G=[{name:"values",description:"Returns true if all values are true",aliases:[],required:!0,type:"array",default:[!0,!0]}],z=L(G),W={description:"Logical AND",aliases:["and","&","&&"],parameters:G},J=e=>{const t=e.children;return Object.assign(Object.assign({},e),{values:t})},V={propertyAliases:z,operatorData:W,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);return t.typeChecker(I(W.parameters,{values:r})),r.reduce(((e,t)=>e&&!!t),!0)})),parseChildren:J},Y=[{name:"values",description:"Returns true if any values are true",aliases:[],required:!0,type:"array",default:[!0,!1]}],X=L(Y),K={description:"Logical OR",aliases:["or","|","||"],parameters:Y},Z={propertyAliases:X,operatorData:K,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);return t.typeChecker(I(K.parameters,{values:r})),r.reduce(((e,t)=>e||!!t),!1)})),parseChildren:J},ee=[{name:"values",description:"Array of values to check for equality",aliases:[],required:!0,type:"array",default:["These are equal","These are equal"]},{name:"caseInsensitive",description:"If the values are strings, ignore the case (default: false)",aliases:[],required:!1,type:"boolean",default:!1},{name:"nullEqualsUndefined",description:"Whether a null value should be considered equal to an undefined value (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],te=L(ee),re={description:"Test multiple values are equal",aliases:["=","eq","equal","equals"],parameters:ee},ae={propertyAliases:te,operatorData:re,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var a,i,s;const[n,o,l]=yield M([e.values,e.caseInsensitive,e.nullEqualsUndefined],t);t.typeChecker(I(re.parameters,{values:n,caseInsensitive:o,nullEqualsUndefined:l}));const u=(void 0!==o?o:null!==(i=null===(a=t.options)||void 0===a?void 0:a.caseInsensitive)&&void 0!==i&&i)&&n.every((e=>"string"==typeof e))?n.map((e=>e.toLowerCase())):n;return!(void 0!==l?l:void 0!==(null===(s=t.options)||void 0===s?void 0:s.nullEqualsUndefined)&&t.options.nullEqualsUndefined)||null!==u[0]&&void 0!==u[0]?u.every((e=>r.dequal(e,u[0]))):u.every((e=>null==e))})),parseChildren:J},ie=[{name:"values",description:"Array of values to check for inequality",aliases:[],required:!0,type:"array",default:["These items","don't match"]},{name:"caseInsensitive",description:"If the values are strings, ignore the case (default: false)",aliases:[],required:!1,type:"boolean",default:!1},{name:"nullEqualsUndefined",description:"Whether a null value should be considered equal to an undefined value (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],se=L(ie),ne={description:"Test if any values are different",aliases:["!=","!","ne","notEqual"],parameters:ie},oe={propertyAliases:se,operatorData:ne,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var a,i,s;const[n,o,l]=yield M([e.values,e.caseInsensitive,e.nullEqualsUndefined],t);t.typeChecker(I(ne.parameters,{values:n,caseInsensitive:o,nullEqualsUndefined:l}));const u=(void 0!==o?o:null!==(i=null===(a=t.options)||void 0===a?void 0:a.caseInsensitive)&&void 0!==i&&i)&&n.every((e=>"string"==typeof e))?n.map((e=>e.toLowerCase())):n;return!(void 0!==l?l:void 0!==(null===(s=t.options)||void 0===s?void 0:s.nullEqualsUndefined)&&t.options.nullEqualsUndefined)||null!==u[0]&&void 0!==u[0]?u.some((e=>!r.dequal(e,u[0]))):u.some((e=>null===e&&void 0===e))})),parseChildren:J},le=[{name:"values",description:"Array of values to check to add together",aliases:[],required:!0,type:"array",default:[1,2,3]},{name:"type",description:"Data type to coerce input values to before addition",aliases:[],required:!1,type:{literal:["string","array","number","boolean","bool"]},default:"string"}],ue=L(le),de={description:"Add, concatenate or merge multiple values",aliases:["+","plus","add","concat","join","merge"],parameters:le},ce={propertyAliases:ue,operatorData:de,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);return t.typeChecker(I(de.parameters,{values:r,type:e.type})),0===r.length?r:"string"===(null==e?void 0:e.type)?r.reduce(((e,t)=>e.concat(t)),""):"array"===(null==e?void 0:e.type)?r.reduce(((e,t)=>e.concat(t)),[]):r.every((e=>"string"==typeof e||Array.isArray(e)))?r.reduce(((e,t)=>e.concat(t))):r.every((e=>g(e)))?r.reduce(((e,t)=>Object.assign(Object.assign({},e),t)),{}):r.reduce(((e,t)=>e+t))})),parseChildren:J},pe=[{name:"values",description:"Array of values - 2nd element will be subtracted from the first",aliases:[],required:!1,type:"array",default:[10,5]},{name:"from",description:"Numerical value that will be subtracted from",aliases:["subtractFrom"],required:!1,type:"number",default:100},{name:"subtract",description:"Numerical value to subtract",aliases:[],required:!1,type:"number",default:50}],he=L(pe),ve={description:"Subtract one numerical value from another",aliases:["-","subtract","minus","takeaway"],parameters:pe},ye={propertyAliases:he,operatorData:ve,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a,i]=yield M([e.values,e.from,e.subtract],t);t.typeChecker(I(ve.parameters,{values:r,from:a,subtract:i}));const s=null!=r?r:[a,i].filter((e=>void 0!==e));if(s.length<2)throw new Error("- Not enough values provided");if(s.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");return s[0]-s[1]})),parseChildren:J},me=[{name:"values",description:"Array of values whose product will be calculated",aliases:[],required:!0,type:"array",default:[5,5]}],fe=L(me),ge={description:"Multiply several numerical values together",aliases:["*","x","multiply","times"],parameters:me},be={propertyAliases:fe,operatorData:ge,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);if(t.typeChecker(I(ge.parameters,{values:r})),0===r.length)return 0;if(r.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");return r.reduce(((e,t)=>e*t))})),parseChildren:J},Te=[{name:"values",description:"Array of values - 1st element will be divided by the first",aliases:[],required:!1,type:"array",default:[100,10]},{name:"dividend",description:"The number that will be divided",aliases:["divide"],required:!1,type:"number",default:99},{name:"divisor",description:"The number that dividend will be divided by",aliases:["by","divideBy"],required:!1,type:"number",default:3},{name:"output",description:"Whether to output a quotient, remainder or decimal",aliases:[],required:!1,type:{literal:["quotient","remainder"]},default:"quotient"}],Oe=L(Te),Ce={description:"Divide one numerical value by another",aliases:["/","divide","÷"],parameters:Te},qe={propertyAliases:Oe,operatorData:Ce,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a,i,s]=yield M([e.values,e.dividend,e.divisor,e.output],t);t.typeChecker(I(Ce.parameters,{values:r,dividend:a,divisor:i,output:s}));const n=null!=r?r:[a,i].filter((e=>void 0!==e));if(n.length<2)throw new Error("- Not enough values provided");if(n.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");if(0===n[1])throw new Error("Division by zero!");switch(s){case"quotient":return Math.floor(n[0]/n[1]);case"remainder":return n[0]%n[1];default:return n[0]/n[1]}})),parseChildren:J},je=[{name:"values",description:"Array of values - 1st element will be compared to the second",aliases:[],required:!0,type:"array",default:[10,9]},{name:"strict",description:"Whether value must be strictly greater than (i.e. not equal) (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],Se=L(je),Ee={description:"Test if a value is greater than (or equal to) another value",aliases:[">","greaterThan","higher","larger"],parameters:je},Ae={propertyAliases:Se,operatorData:Ee,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a=!0]=yield M([e.values,e.strict],t);if(t.typeChecker(I(Ee.parameters,{values:r,strict:a})),r.length<2)throw new Error("- Not enough values provided");const[i,s]=r;return i===s&&!a||i>s})),parseChildren:J},Ne=[{name:"values",description:"Array of values - 1st element will be compared to the second",aliases:[],required:!0,type:"array",default:[9,10]},{name:"strict",description:"Whether value must be strictly smaller than (i.e. not equal) (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],we=L(Ne),xe={description:"Test if a value is smaller than (or equal to) another value",aliases:["<","lessThan","lower","smaller"],parameters:Ne},Pe={propertyAliases:we,operatorData:xe,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a=!0]=yield M([e.values,e.strict],t);if(t.typeChecker(I(xe.parameters,{values:r,strict:a})),r.length<2)throw new Error("- Not enough values provided");const[i,s]=r;return i===s&&!a||i<s})),parseChildren:J},Le=[{name:"condition",description:"The expression to check for truthiness",aliases:[],required:!0,type:"any",default:!0},{name:"valueIfTrue",description:"Value to return if condition is true",aliases:["ifTrue"],required:!0,type:"any",default:"The condition is true"},{name:"valueIfFalse",description:"Value to return if condition is false",aliases:["ifFalse","ifNot"],required:!0,type:"any",default:"The condition is false"}],Ie=L(Le),Ue={description:"Return a value based on a condition",aliases:["?","conditional","ifThen"],parameters:Le},Re={propertyAliases:Ie,operatorData:Ue,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){t.typeChecker(I(Ue.parameters,{condition:e.condition,valueIfTrue:e.valueIfTrue,valueIfFalse:e.valueIfFalse}));return(yield H(e.condition,t))?yield H(e.valueIfTrue,t):yield H(e.valueIfFalse,t)})),parseChildren:e=>{const[t,r,a]=e.children;return Object.assign(Object.assign({},e),{condition:t,valueIfTrue:r,valueIfFalse:a})}},ke=[{name:"testString",description:"The string to test",aliases:["string","value"],required:!0,type:"string",default:"test-this"},{name:"pattern",description:"The regular expression pattern",aliases:["regex","regexp","regExp","re"],required:!0,type:"string",default:"^[a-z]{4}-[a-z]{4}$"}],De=L(ke),Qe={description:"Compare a string against a regex pattern",aliases:["regex","patternMatch","regexp","matchPattern"],parameters:ke},_e={propertyAliases:De,operatorData:Qe,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a]=yield M([e.testString,e.pattern],t);t.typeChecker(I(Qe.parameters,{testString:r,pattern:a}));try{return new RegExp(a).test(r)}catch(e){throw new Error("Regex error:"+m(e))}})),parseChildren:e=>{const[t,r]=e.children;return Object.assign(Object.assign({},e),{testString:t,pattern:r})}},$e=[{name:"property",description:'The path to the required property (e.g. "user.firstName")',aliases:["path","propertyName"],required:!0,type:"string",default:"path.to[0].my.data"},{name:"additionalData",description:"Additional data objects to be considered",aliases:["additional","objects","data","additionalObjects"],required:!1,type:"object",default:{}}],He=L($e),Me={description:"Extract values from data objects",aliases:["dataProperties","data","getData","objectProperties","objProps","getProperty","getObjProp"],parameters:$e},Fe={propertyAliases:He,operatorData:Me,evaluate:(e,r)=>a(void 0,void 0,void 0,(function*(){var a,i;const[s,n={}]=yield M([e.property,e.additionalData],r);r.typeChecker(I(Me.parameters,{property:s,additionalData:n}));const o=Object.assign(Object.assign({},null!==(i=null===(a=r.options)||void 0===a?void 0:a.data)&&void 0!==i?i:{}),n);return t(o,s)})),parseChildren:e=>{const[t,r]=e.children,a=Object.assign(Object.assign({},e),{property:t});return void 0!==r&&(a.fallback=r),a}},Be=[{name:"string",description:"A parameterised (%1, %2) string where the parameters are to be replaced",aliases:[],required:!0,type:"string",default:"Hello, %1"},{name:"substitutions",description:"An array of substitution values for the parameterised string",aliases:["replacements","values"],required:!1,type:["array","object"],default:["friend"]},{name:"trimWhiteSpace",description:"Whether or not to trim white space from either end of the substituted strings (default: true)",aliases:["trim","trimWhitespace"],required:!1,type:"boolean",default:!0},{name:"substitutionCharacter",description:'Which character to search for in original string for replacement -- can be "%" or "$" (default: "%")',aliases:["subCharacter","subChar"],required:!1,type:"string",default:"$"},{name:"numberMapping",description:"Rules for mapping number values to text strings, such as pluralisation.",aliases:["numMap","numberMap","pluralisation","pluralization","plurals"],required:!1,type:"object",default:{}}],Ge=L(Be),ze={description:"Replace values in a string using simple parameter substitution",aliases:["stringSubstitution","substitute","stringSub","replace"],parameters:Be},We={propertyAliases:Ge,operatorData:ze,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a={},i=!0,s="%",n={}]=yield M([e.string,e.substitutions,e.trimWhiteSpace,e.substitutionCharacter,e.numberMapping],t);if(t.typeChecker(I(ze.parameters,{string:r,substitutions:a,trimWhiteSpace:i,substitutionCharacter:s,numberMapping:n})),Array.isArray(a)){const e="$"===s?"$":"%",t=new RegExp(`(?<!\\\\)(${"%"===e?"%":"\\$"}[\\d]+)`,"g"),n=(r.match(t)||[]).sort(((e,t)=>Number(e.slice(1))-Number(t.slice(1)))),o=new Set(n),l=U(Array.from(o),a.map((e=>i?String(e).trim():e)));return r.split(t).map((e=>e in l?l[e]:e)).join("").replace(`\\${e}`,e)}return r.split(/(?<!\\)({{(?:[A-Za-z0-9_.]|\[[0-9]+\])+}})/g).map((e=>{if(!/(?<!\\){{(.+)}}/.exec(e))return e.replace("\\{{","{{");const r=Je(e,a,n,t.options.data);return i?String(r).trim():r})).join("")})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{string:t,substitutions:r})}},Je=(e,r,a,i={})=>{const s=e.replace(/{{(.+)}}/,"$1"),n=t(r,s,t(i,s,""));if("number"!=typeof n)return n;if(!(s in a))return n;const o=a[s];if(n in o)return o[n].replace("{}",String(n));const l=Object.keys(a[s]),u=l.find((e=>e.startsWith(">")));if(u){if(n>Number(u.slice(1)))return null==o?void 0:o[u]}const d=l.find((e=>e.startsWith("<")));if(d){if(n<Number(d.slice(1)))return null==o?void 0:o[d]}return o.other?o.other.replace("{}",String(n)):n},Ve=[{name:"values",description:"An array to count",aliases:[],required:!0,type:"array",default:[1,2,3,4,5]}],Ye=L(Ve),Xe={description:"Count elements in an array",aliases:["count","length"],parameters:Ve},Ke={propertyAliases:Ye,operatorData:Xe,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);return t.typeChecker(I(Xe.parameters,{values:r})),r.length})),parseChildren:e=>{const[t]=e.children;return Object.assign(Object.assign({},e),{values:t})}},Ze=[{name:"value",description:"The string to be split",aliases:["string"],required:!0,type:"string",default:"Alpha, Bravo, Charlie"},{name:"delimiter",description:"The value to split the string on (default is white space)",aliases:["separator"],required:!1,type:"string",default:","},{name:"trimWhiteSpace",description:"Whether to trim white space from around the resulting elements (default: true)",aliases:["trim","trimWhitespace"],required:!1,type:"boolean",default:!0},{name:"excludeTrailing",description:"If the input string ends in a delimiter, there will be an additional blank element if this value is false (default: true)",aliases:["removeTrailing","excludeTrailingDelimiter"],required:!1,type:"boolean",default:!0}],et=L(Ze),tt={description:"Split a string into an array",aliases:["split","arraySplit"],parameters:Ze},rt=" ",at={propertyAliases:et,operatorData:tt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,a,i;const[s,n,o,l]=yield M([e.value,null!==(r=e.delimiter)&&void 0!==r?r:rt,null===(a=e.trimWhiteSpace)||void 0===a||a,null===(i=e.excludeTrailing)||void 0===i||i],t);t.typeChecker(I(tt.parameters,{value:s,delimiter:n,trimWhiteSpace:o,excludeTrailing:l}));let u=s.split(n);return o&&(u=u.map((e=>e.trim()))),l&&""===u[u.length-1]&&u.pop(),u})),parseChildren:e=>{const[t,r=rt]=e.children;return Object.assign(Object.assign({},e),{value:t,delimiter:r})}},it=[{name:"query",description:"SQL query string, with parameterised replacements (e.g. $1, $2, etc)",aliases:["text"],required:!0,type:"string"},{name:"values",description:"An array/object of values to replace the SQL string parameters, as per SQL connection specifications ",aliases:["replacements"],required:!1,type:["array","object"]},{name:"single",description:"Specify if returning a single record",aliases:["singleRecord"],required:!1,type:"boolean"},{name:"flatten",description:"Specify whether to flatten resulting record objects to arrays of values",aliases:["flat","array"],required:!1,type:"boolean"},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean"}],st=L(it),nt={description:"Query an SQL database",aliases:["sql","pgSql","postgres","pg","sqLite","sqlite","mySql"],parameters:it},ot={propertyAliases:st,operatorData:nt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,i,s;const n=null===(r=t.options)||void 0===r?void 0:r.sqlConnection;if(!n)throw new Error("No SQL database connection provided");const[o,l,u,d,c,p]=yield M([e.query,e.values||[],e.single,e.flatten,e.useCache,e.type],t);t.typeChecker(I(nt.parameters,{query:o,single:u,flatten:d,values:l,useCache:c}));const h=null===(s=null!==(i=e.useCache)&&void 0!==i?i:t.options.useCache)||void 0===s||s;{const e=t.cache.useCache(h,((e,t,r,i,s)=>a(void 0,void 0,void 0,(function*(){const a=(yield n.query({query:e,values:t}))||[];["array","string","number"].includes(null!=s?s:"")&&(i=!0);const o=i?a.map((e=>{const t=Object.values(e);return t.length<=1?t[0]:t})):a;return r?o[0]:o}))),o,l,u,d,p);return e}})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{query:t,values:r})}},lt=[{name:"query",description:"GraphQL query string",aliases:[],required:!0,type:"string",default:'query getCountries {\n countries(filter: {continent: {eq: "OC"}}) {\n name\n }\n }'},{name:"url",description:"Endpoint for the GraphQL request (if not already provided in options)",aliases:["endpoint"],required:!1,type:["string","null"],default:"https://countries.trevorblades.com/"},{name:"headers",description:"HTTP Headers (if not already provided in options)",aliases:[],required:!1,type:"object",default:{}},{name:"variables",description:"Values for the variables used in query (key-value pairs)",aliases:[],required:!1,type:"object",default:{}},{name:"returnNode",description:"Property path to extract from the query response",aliases:["outputNode","returnProperty"],required:!1,type:"string",default:"data.countries[1].name"},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],ut=L(lt),dt={description:"GraphQL request",aliases:["graphQl","graphql","gql"],parameters:lt},ct={propertyAliases:ut,operatorData:dt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,i,s,n,o,l,u;const d=null!==(r=t.graphQLClient)&&void 0!==r?r:t.httpClient;if(!d)throw new Error("No HTTP client provided for GraphQL connection");const[c,p,h,v,y,m]=yield M([e.query,e.url,e.variables,e.returnNode,e.headers,e.useCache],t),{url:f,headers:g}=p instanceof Object?p:{url:p,headers:null};t.typeChecker([...I(dt.parameters,{url:f,query:c,variables:h,returnNode:v,headers:y,useCache:m}),{name:"headers",value:g,expectedType:["object","null"]}]);const b=f&&"graphqlendpoint"!==f.toLowerCase()?f:"",T=null!==(n=null!==(s=null===(i=t.options.graphQLConnection)||void 0===i?void 0:i.endpoint)&&void 0!==s?s:t.options.baseEndpoint)&&void 0!==n?n:"",O=Q(b)?b:_(T,b),C={query:c,variables:h},q=null===(o=null!=m?m:t.options.useCache)||void 0===o||o,j=yield t.cache.useCache(q,((e,t,r,i)=>a(void 0,void 0,void 0,(function*(){const a=yield $(d,{url:e,method:"post",data:t,headers:r});return D(null==a?void 0:a.data,i)}))),O,C,Object.assign(Object.assign(Object.assign(Object.assign({},null===(l=t.options.graphQLConnection)||void 0===l?void 0:l.headers),null===(u=t.options)||void 0===u?void 0:u.headers),g),y),v);return j})),parseChildren:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a="",i,...s]=yield M(e.children,t),n=Array.isArray(i)?i:[i],o=s.slice(0,n.length),l=U(n,o),u=Object.assign(Object.assign({},e),{query:r,url:a,variables:l});return s.length>n.length&&(u.returnNode=s.pop()),u}))},pt=[{name:"url",description:"Endpoint URL",aliases:["endpoint"],required:!0,type:"string",default:"https://restcountries.com/v3.1/name/zealand"},{name:"returnProperty",description:"Property from request result",aliases:["outputProperty"],required:!1,type:"string",default:"result.path"},{name:"headers",description:"HTTP Headers",aliases:[],required:!1,type:"object",default:{}},{name:"parameters",description:"Query parameters (key-value)",aliases:["queryParams","queryParameters","urlQueries"],required:!1,type:"object",default:{}},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],ht=L(pt),vt={description:"HTTP GET Request",aliases:["get","api"],parameters:pt},yt=(e,t)=>a(void 0,void 0,void 0,(function*(){const[r="",a,...i]=yield M(e.children,t),s=Array.isArray(a)?a:[a],n=i.slice(0,s.length),o=U(s,n),l=Object.assign(Object.assign({},e),{url:r,parameters:o});return i.length>s.length&&(l.returnProperty=i.pop()),l})),mt=yt,ft={propertyAliases:ht,operatorData:vt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,i,s;const n=t.httpClient;if(!n)throw new Error("No HTTP client provided");const[o,l,u,d,c]=yield M([e.url,e.parameters,e.returnProperty,e.headers,e.useCache],t),{url:p,headers:h}=o instanceof Object?o:{url:o,headers:null};t.typeChecker([...I(vt.parameters,{url:p,returnProperty:u,headers:d,parameters:l,useCache:c}),{name:"headers",value:h,expectedType:["object","null"]}]);const v=null!==(r=t.options.baseEndpoint)&&void 0!==r?r:"",y=Object.assign(Object.assign(Object.assign({},null===(i=t.options)||void 0===i?void 0:i.headers),h),d),m=null===(s=null!=c?c:t.options.useCache)||void 0===s||s,f=yield t.cache.useCache(m,((e,t,r,i)=>a(void 0,void 0,void 0,(function*(){const a=yield $(n,{url:e,params:t,headers:r});return D(a,i)}))),Q(p)?p:_(v,p),l,y,u);return f})),parseChildren:yt},gt=[{name:"url",description:"Endpoint URL",aliases:["endpoint"],required:!0,type:"string",default:"https://jsonplaceholder.typicode.com/posts"},{name:"returnProperty",description:"Property path from request result",aliases:["outputProperty"],required:!1,type:"string",default:"result.path"},{name:"headers",description:"HTTP Headers",aliases:[],required:!1,type:"object",default:{}},{name:"parameters",description:"JSON Body parameters (key-value)",aliases:["bodyJson","data"],required:!1,type:"object",default:{}},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],bt=L(gt),Tt={description:"HTTP POST Request",aliases:["post"],parameters:gt},Ot={propertyAliases:bt,operatorData:Tt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,i,s;const n=t.httpClient;if(!n)throw new Error("No HTTP client provided");const[o,l,u,d,c]=yield M([e.url,e.parameters,e.returnProperty,e.headers,e.useCache],t),{url:p,headers:h}=o instanceof Object?o:{url:o,headers:null};t.typeChecker([...I(Tt.parameters,{url:p,headers:d,data:l,returnProperty:u,useCache:c}),{name:"headers",value:h,expectedType:["object","null"]}]);const v=null!==(r=t.options.baseEndpoint)&&void 0!==r?r:"",y=Object.assign(Object.assign(Object.assign({},null===(i=t.options)||void 0===i?void 0:i.headers),h),d),m=null!==(s=null!=c?c:t.options.useCache)&&void 0!==s&&s,f=yield t.cache.useCache(m,((e,t,r,i)=>a(void 0,void 0,void 0,(function*(){const a=yield $(n,{url:e,data:t,headers:r,method:"post"});return D(a,i)}))),Q(p)?p:_(v,p),l,y,u);return f})),parseChildren:mt},Ct=[{name:"properties",description:'An array of objects, each with a "key" property and a "value" property',aliases:["values","keyValPairs","keyValuePairs"],required:!0,type:"array",default:["firstKey","firstValue","secondKey","secondValue"]}],qt=L(Ct),jt={description:"Construct an object using objects defining keys and values",aliases:["buildObject","build","object"],parameters:Ct},St={propertyAliases:qt,operatorData:jt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){t.typeChecker(I(jt.parameters,{properties:e.properties}));const r=e.properties.filter((e=>e instanceof Object&&"key"in e&&"value"in e)).map((({key:e,value:r})=>{return i=[e,r],a(void 0,void 0,void 0,(function*(){const[e,r]=yield M(i,t);return t.typeChecker({name:"key",value:e,expectedType:["string","number","boolean"]}),[e,r]}));var i}));return Object.fromEntries(yield Promise.all(r))})),parseChildren:e=>{const t=e.children;if(t.length%2!=0)throw new Error("Even number of children required to make key/value pairs");const r=t.filter(((e,t)=>t%2==0)),a=t.filter(((e,t)=>t%2==1)),i=r.map(((e,t)=>({key:e,value:a[t]})));return Object.assign(Object.assign({},e),{properties:i})}},Et=[{name:"matchExpression",description:"Expression to match against",aliases:["match"],required:!0,type:["string","number","boolean"],default:"matchMe"},{name:"branches",description:"Object whose keys are compared against the match expression. The value of the matching key is returned",aliases:["arms","cases"],required:!1,type:["object","array"],default:{matchMe:"YES",nonMatch:"NO"}},{name:"[...branches]",description:"Branch properties can optionally be placed at the operator root",aliases:[],required:!1,type:["object","array"]}],At={propertyAliases:L(Et),operatorData:{description:"Return different values depending on a matching expression",aliases:["match","switch"],parameters:Et},evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r;const a=yield H(e.matchExpression,t);t.typeChecker({name:"matchExpression",value:a,expectedType:["string","number","boolean"]});const s=Array.isArray(e.branches)?R(e.branches):null!==(r=e.branches)&&void 0!==r?r:{},n=i(s)?yield H(s,t):s;if(!g(n))throw new Error("Branches don't evaluate to an object");if(a in n)return yield H(n[a],t);if("fallback"in n)return yield H(n.fallback,t);if(a in e)return yield H(e[a],t);throw new Error(`No match found for ${a}`)})),parseChildren:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,...a]=e.children,i=R(yield M(a,t));return Object.assign(Object.assign({},e),{matchExpression:r,branches:i})}))},Nt=[{name:"functionPath",description:"Path (in options.functions) to the required function",aliases:["functionsPath","functionName","funcName","path","name"],required:!0,type:"string",default:null},{name:"args",description:"Arguments for the function",aliases:["arguments","variables"],required:!1,type:"array",default:[]},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!1}],wt=L(Nt),xt={description:"Call a custom function (defined in options)",aliases:["customFunctions","customFunction","objectFunctions","function","functions","runFunction"],parameters:Nt},Pt={propertyAliases:wt,operatorData:xt,evaluate:(e,r)=>a(void 0,void 0,void 0,(function*(){var i,s,n;const[o,l=[],u]=yield M([e.functionPath,e.args,e.useCache],r);r.typeChecker(I(xt.parameters,{functionPath:o,args:l}));const{data:d,functions:c}=r.options,p=null!==(s=null!==(i=t(c,o,null))&&void 0!==i?i:t(d,o,null))&&void 0!==s?s:t(r.options,o,null);if(!p||"function"!=typeof p)throw new Error(`- No function found: "${o}"`);const h=null!==(n=null!=u?u:r.options.useCache)&&void 0!==n&&n;return yield r.cache.useCache(h,((e,...t)=>a(void 0,void 0,void 0,(function*(){return yield p(...t)}))),o,...l)})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{functionPath:t,args:r})}},Lt=[{name:"value",description:"Value to pass through",aliases:["_","data"],required:!0,type:"any",default:null}],It=L(Lt),Ut={description:"Pass through a value unchanged (or change its type)",aliases:["_","passThru","passthru","pass","ignore","coerce","convert"],parameters:Lt},Rt={propertyAliases:It,operatorData:Ut,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){return t.typeChecker(I(Ut.parameters,{value:e.value})),yield H(e.value,t)})),parseChildren:e=>{const[...t]=e.children,r=1===(null==t?void 0:t.length)?t[0]:t;return Object.assign(Object.assign({},e),{value:r})}};var kt=Object.freeze({__proto__:null,AND:V,BUILD_OBJECT:St,CONDITIONAL:Re,COUNT:Ke,CUSTOM_FUNCTIONS:Pt,DIVIDE:qe,EQUAL:ae,GET:ft,GRAPHQL:ct,GREATER_THAN:Ae,LESS_THAN:Pe,MATCH:At,MULTIPLY:be,NOT_EQUAL:oe,OBJECT_PROPERTIES:Fe,OR:Z,PASSTHRU:Rt,PLUS:ce,POST:Ot,REGEX:_e,SPLIT:at,SQL:ot,STRING_SUBSTITUTION:We,SUBTRACT:ye});class Dt{constructor(e){var t,r;this.useCache=(e,t,...r)=>a(this,void 0,void 0,(function*(){if(!e)return yield t(...r);const a=Qt(r),i=a in this.store,s=Date.now(),n=i&&s-this.store[a].timestamp>1e3*this.maxTime;if(i)return this.queue=this.queue.filter((e=>e!==a)),this.queue.unshift(a),this.store[a].timestamp=s,n&&(this.store[a].result=yield t(...r)),this.store[a].result;const o=yield t(...r);return this.store[a]={result:o,timestamp:s},this.queue.unshift(a),this.resizeCache(),o})),this.getMax=()=>this.maxSize,this.setMax=e=>{this.maxSize=e,this.resizeCache()},this.getMaxTime=()=>this.maxTime,this.setMaxTime=e=>{this.maxTime=e},this.getCache=()=>this.store,this.setCache=e=>this.store=e,this.resizeCache=()=>{if(this.queue.length>this.maxSize){this.queue.slice(this.maxSize).forEach((e=>delete this.store[e])),this.queue=this.queue.slice(0,this.maxSize)}},this.store={},this.queue=[],this.maxSize=null!==(t=null==e?void 0:e.maxSize)&&void 0!==t?t:50,this.maxTime=null!==(r=null==e?void 0:e.maxTime)&&void 0!==r?r:1800}}const Qt=e=>e.map((e=>"object"==typeof e?JSON.stringify(e):e)).join("_"),_t=e=>e?"name"in e&&"fetch"===e.name?Ht(e):"Axios"in e&&"Axios"===e.Axios.name?$t(e):e:"undefined"!=typeof window&&"document"in window&&"fetch"in window?Ht(window.fetch):void 0,$t=e=>({get:t=>a(void 0,void 0,void 0,(function*(){return(yield e(Object.assign(Object.assign({},t),{method:"get"}))).data})),post:t=>a(void 0,void 0,void 0,(function*(){return(yield e(Object.assign(Object.assign({},t),{method:"post"}))).data})),throwError:t=>{var r;if(e.isAxiosError(t)){if(!(null==t?void 0:t.response))throw new Error("Network Error");console.log(null===(r=t.response)||void 0===r?void 0:r.data)}throw t}}),Ht=e=>({get:t=>a(void 0,void 0,void 0,(function*(){const{url:r,headers:a,params:i}=t,s=new URLSearchParams(i),n=s.size>0?`?${s.toString()}`:"",o=yield e(r+n,{headers:a,method:"GET"}),l=yield o.json();if(!o.ok)throw console.log(l),new Error(`Request failed with status code ${o.status}`);return l})),post:t=>a(void 0,void 0,void 0,(function*(){const{url:r,headers:a,params:i,data:s}=t,n=new URLSearchParams(i),o=n.size>0?`?${n.toString()}`:"",l=yield e(r+o,{headers:a,body:JSON.stringify(s),method:"POST"}),u=yield l.json();if(!l.ok)throw console.log(u),new Error(`Request failed with status code ${l.status}`);return u})),throwError:e=>{throw new Error(`${m(e)}`)}});class Mt{constructor(e={}){var t,r,a;this.typeChecker=(...e)=>{const t=1===e.length&&Array.isArray(e[0])?e[0]:e,r=N(...t);if(!0!==r)throw new Error(r)},this.getCache=()=>this.cache.getCache(),this.setCache=e=>this.cache.setCache(e),this.getVersion=()=>"2.15.0",this.options=Ft(e),this.operators=l(kt,null!==(r=null===(t=this.options)||void 0===t?void 0:t.excludeOperators)&&void 0!==r?r:[],b),this.operatorAliases=b,this.cache=new Dt({maxSize:e.maxCacheSize,maxTime:e.maxCacheTime}),this.graphQLClient=_t(null===(a=e.graphQLConnection)||void 0===a?void 0:a.httpClient),this.httpClient=_t(e.httpClient)}evaluate(e,t={}){var r;return a(this,void 0,void 0,(function*(){const a=v(this.options,Ft(t));return t.httpClient&&(this.httpClient=_t(t.httpClient)),(null===(r=t.graphQLConnection)||void 0===r?void 0:r.httpClient)&&(this.graphQLClient=_t(t.graphQLConnection.httpClient)),a.maxCacheSize&&a.maxCacheSize!==this.cache.getMax()&&this.cache.setMax(a.maxCacheSize),a.maxCacheTime&&a.maxCacheTime!==this.cache.getMaxTime()&&this.cache.setMaxTime(a.maxCacheTime),yield H(e,{options:a,operators:t.excludeOperators?l(kt,t.excludeOperators,b):this.operators,operatorAliases:this.operatorAliases,typeChecker:a.skipRuntimeTypeCheck?()=>{}:this.typeChecker,resolvedAliasNodes:{},cache:this.cache,graphQLClient:this.graphQLClient,httpClient:this.httpClient})}))}getOptions(){return this.options}updateOptions(e){this.options=v(this.options,Ft(e)),this.options.excludeOperators&&(this.operators=l(kt,this.options.excludeOperators,b))}getOperators(){const e=this.options.excludeOperators?l(kt,this.options.excludeOperators,b):this.operators,t=Object.entries(e).map((([e,t])=>Object.assign({name:e},t.operatorData))),r=[...new Set(Object.values(b))];return t.sort(((e,t)=>r.indexOf(e.name)-r.indexOf(t.name)))}getFragments(){var e;return Object.entries(null!==(e=this.options.fragments)&&void 0!==e?e:{}).map((([e,t])=>Object.assign({name:e},null==t?void 0:t.metadata)))}getCustomFunctions(){var e;return Object.entries(null!==(e=this.options.functions)&&void 0!==e?e:{}).map((([e,t])=>({name:e,numRequiredArgs:t.length})))}}const Ft=e=>"objects"in e?Object.assign(Object.assign({},e),{data:e.objects}):e;exports.AxiosClient=$t,exports.FetchClient=Ht,exports.FigTreeEvaluator=Mt,exports.SQLNodePostgres=e=>({query:({query:t,values:r=[]})=>a(void 0,void 0,void 0,(function*(){const a={text:t,values:null!=r?r:[]},i=yield e.query(a);if(null==i?void 0:i.error)throw new Error(i.error);return i.rows}))}),exports.SQLite=e=>({query:({query:t,values:r=[]})=>a(void 0,void 0,void 0,(function*(){try{return yield e.all(t,r)}catch(e){throw`SQLite error: ${null==e?void 0:e.message}`}}))}),exports.evaluateExpression=(e,t)=>new Mt(t).evaluate(e),exports.isAliasString=p,exports.isFragmentNode=s,exports.isObject=g,exports.isOperatorNode=i,exports.preProcessShorthand=C,exports.standardiseOperatorName=n,exports.truncateString=u;
1
+ "use strict";var e=require("change-case"),t=require("object-property-extractor"),r=require("dequal/lite"),a=require("querystring");function i(e,t,r,a){return new(r||(r=Promise))((function(i,s){function n(e){try{l(a.next(e))}catch(e){s(e)}}function o(e){try{l(a.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(n,o)}l((a=a.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const s=e=>e instanceof Object&&"operator"in e,n=e=>e instanceof Object&&"fragment"in e,o=t=>{const r=e.camelCase(t);return r||t},l=(e,t)=>t[o(e)],u=(e,t,r)=>{const a=Object.assign({},e);return t.forEach((e=>{r[o(e)]||console.warn(`Invalid operator exclusion: ${e}`),delete a[r[o(e)]]})),a},d=(e,t=200)=>e.length<t?e:`${e.slice(0,t-2).trim()}...`,c=(e,t,r=!1)=>{if(void 0!==e)return e;if(r)return d(t);throw new Error(d(t))},p=(e,t)=>{const r=Object.entries(e).map((([e,r])=>[t(e),r]));return Object.fromEntries(r)},h=e=>/^\$.+/.test(e),v=(e,{resolvedAliasNodes:t})=>{var r;return"string"==typeof e&&h(e)&&null!==(r=null==t?void 0:t[e])&&void 0!==r?r:e},y=(e,t)=>{const r=Object.assign(Object.assign({},e),t);return(e.data||t.data)&&(r.data=Object.assign(Object.assign({},e.data),t.data)),(e.functions||t.functions)&&(r.functions=Object.assign(Object.assign({},e.functions),t.functions)),(e.fragments||t.fragments)&&(r.fragments=Object.assign(Object.assign({},e.fragments),t.fragments)),(e.headers||t.headers)&&(r.headers=Object.assign(Object.assign({},e.headers),t.headers)),r},m={number:e=>g(e),string:e=>String(e),array:e=>Array.isArray(e)?e:[e],boolean:e=>Boolean(e),bool:e=>Boolean(e)},f=e=>e.message,g=e=>{if("string"!=typeof e)return Number.isNaN(Number(e))?e:Number(e);const t=new RegExp(/-?\d*\.?\d+/gm),r=e.match(t);return r?Number(r[0]):0},b=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),T={and:"AND","&":"AND","&&":"AND",or:"OR","|":"OR","||":"OR","=":"EQUAL",eq:"EQUAL",equal:"EQUAL",equals:"EQUAL","!=":"NOT_EQUAL","!":"NOT_EQUAL",ne:"NOT_EQUAL",notEqual:"NOT_EQUAL","+":"PLUS",plus:"PLUS",add:"PLUS",concat:"PLUS",join:"PLUS",merge:"PLUS","-":"SUBTRACT",subtract:"SUBTRACT",minus:"SUBTRACT",takeaway:"SUBTRACT","*":"MULTIPLY",x:"MULTIPLY",multiply:"MULTIPLY",times:"MULTIPLY","/":"DIVIDE",divide:"DIVIDE","÷":"DIVIDE",">":"GREATER_THAN",greaterThan:"GREATER_THAN",higher:"GREATER_THAN",larger:"GREATER_THAN","<":"LESS_THAN",lessThan:"LESS_THAN",lower:"LESS_THAN",smaller:"LESS_THAN","?":"CONDITIONAL",conditional:"CONDITIONAL",ifThen:"CONDITIONAL",regex:"REGEX",patternMatch:"REGEX",regexp:"REGEX",matchPattern:"REGEX",dataProperties:"OBJECT_PROPERTIES",data:"OBJECT_PROPERTIES",getData:"OBJECT_PROPERTIES",objectProperties:"OBJECT_PROPERTIES",objProps:"OBJECT_PROPERTIES",getProperty:"OBJECT_PROPERTIES",getObjProp:"OBJECT_PROPERTIES",stringSubstitution:"STRING_SUBSTITUTION",substitute:"STRING_SUBSTITUTION",stringSub:"STRING_SUBSTITUTION",replace:"STRING_SUBSTITUTION",split:"SPLIT",arraySplit:"SPLIT",count:"COUNT",length:"COUNT",get:"GET",api:"GET",post:"POST",sql:"SQL",pgSql:"SQL",postgres:"SQL",pg:"SQL",sqLite:"SQL",sqlite:"SQL",mySql:"SQL",graphQl:"GRAPHQL",graphql:"GRAPHQL",gql:"GRAPHQL",buildObject:"BUILD_OBJECT",build:"BUILD_OBJECT",object:"BUILD_OBJECT",match:"MATCH",switch:"MATCH",customFunctions:"CUSTOM_FUNCTIONS",customFunction:"CUSTOM_FUNCTIONS",objectFunctions:"CUSTOM_FUNCTIONS",function:"CUSTOM_FUNCTIONS",functions:"CUSTOM_FUNCTIONS",runFunction:"CUSTOM_FUNCTIONS",_:"PASSTHRU",passThru:"PASSTHRU",passthru:"PASSTHRU",pass:"PASSTHRU",ignore:"PASSTHRU",coerce:"PASSTHRU",convert:"PASSTHRU"},O=T,C=/(\$[^()]+)\((.*)\)/,q=(e,t={},r=!0)=>r?"string"==typeof e?j(e,t):b(e)?S(e,t):e:e,j=(e,t)=>{const r=C.exec(e);if(!r)return e;const a=r[1].trim(),i=r[2].split(",").map((e=>q(e.trim(),t)));return E(a,i,t)},S=(e,t)=>{if(s(e)||n(e))return e;const r=Object.entries(e),a=r.filter((([e])=>h(e))),i=r.filter((([e])=>!h(e))),o=a.reduce(((e,[r,a])=>e=Object.assign(Object.assign({},e),E(r,a,t))),{});return Object.assign(Object.assign({},o),Object.fromEntries(i))},E=(e,t,r)=>{const a=e.slice(1),i=l(a,O);return i?Array.isArray(t)?{operator:i,children:t}:b(t)&&!Object.keys(t).some((e=>h(e)))?Object.assign({operator:i},t):{operator:i,children:[t]}:a in r?{fragment:a,parameters:Object.assign({},t)}:{[e]:t}},A=e=>b(e)&&"literal"in e,w=({value:e,name:t,expectedType:r})=>{if(A(r)){const{literal:a}=r;return!!a.includes(e)||P(t,e,`Literal(${a.map((e=>void 0===e?"undefined":`"${e}"`)).join(", ")})`)}if(Array.isArray(r))return!!r.some((r=>!0===w({value:e,name:t,expectedType:r})))||P(t,e,r.join("|"));return!!(0,x[r])(e)||P(t,e,r)},N=(...e)=>{const t=[];return e.forEach((e=>{const r=w(e);!0!==r&&t.push(r)})),!(t.length>0)||t.join("\n")},x={any:e=>void 0!==e,string:e=>"string"==typeof e,number:e=>"number"==typeof e,boolean:e=>"boolean"==typeof e,array:e=>Array.isArray(e),null:e=>null===e,object:e=>b(e),undefined:e=>void 0===e},P=(e,t,r)=>void 0===t&&e?`- Missing required property "${e}" (type: ${r})`:void 0!==e?`- Property "${e}" (value: ${L(t)}) is not of type: ${r}`:`- ${L(t)} is not of type: ${r}`,L=e=>{const t=void 0===e||Number.isNaN(e)?String(e):JSON.stringify(e);return d(t,50)},I=e=>{const t={};return e.forEach((e=>{e.aliases.forEach((r=>t[r]=e.name))})),t},U=(e,t)=>e.map((({name:e,required:r,type:a})=>{if(A(a)){const i=[...a.literal];return r||i.push(void 0),{name:e,value:t[e],expectedType:{literal:i}}}const i=Array.isArray(a)?a:[a];r||i.push("undefined");const s=1===i.length?i[0]:i;return{name:e,value:t[e],expectedType:s}})),R=(e,t)=>{const r=e.map(((e,r)=>[e,t[r]]));return Object.fromEntries(r)},k=e=>{if(e.length%2!=0)throw new Error("Even number of children required to make key/value pairs");const t=e.filter(((e,t)=>t%2==0)),r=N(...t.map((e=>({value:e,expectedType:["string","number","boolean"]}))));if(!0!==r)throw new Error(r);const a=e.filter(((e,t)=>t%2==1)),i={};return t.forEach(((e,t)=>{i[e]=a[t]})),i},D=e=>b(e)&&1===Object.keys(e).length?Object.values(e)[0]:e,Q=(e,r,a=void 0)=>{const i=r?t(e,r,a):e;return Array.isArray(i)?i.map((e=>D(e))):r?null===i?null:D(i):i},_=e=>/^https?:\/\/.+/.test(e),$=(...e)=>e.reduce(((e,t,r)=>{const a="/"===t[0]?1:0,i="/"===t.slice(-1)?-1:void 0,s=t.slice(a,i);return""===s?e:e+(0===r?"":"/")+s}),""),H=(e,t)=>i(void 0,void 0,void 0,(function*(){const{url:r,params:a={},data:i={},headers:s={},method:n="get"}=t;if(!r||""===r)throw new Error("Invalid url");try{return yield e[n]({url:r,headers:Object.assign({"Content-Type":"application/json",Accept:"application/json"},s),params:a,data:i})}catch(t){e.throwError(t)}})),M=(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,i,o;const{options:u,operators:d,operatorAliases:h}=t;let y=(null==u?void 0:u.allowJSONStringInput)?(e=>{if("string"!=typeof e)return e;try{const t=JSON.parse(e);return s(t)?t:e}catch(t){return e}})(e):e;y=q(y,null===(r=t.options)||void 0===r?void 0:r.fragments,!u.noShorthand),Array.isArray(y)&&(y=yield F(y,t));const g=s(y),T=n(y);if(u.evaluateFullObject&&!g&&!T)return v(yield G(y,t),t);if(!g&&!T)return u.supportDeprecatedValueNodes&&b(y)&&"value"in y?y.value:v(y,t);const{fallback:O}=y,C=null!==(a=null==u?void 0:u.returnErrorAsString)&&void 0!==a&&a;if(T){const[e,r]=yield F([y.fragment,y.parameters],t),a=q(null===(i=null==u?void 0:u.fragments)||void 0===i?void 0:i[e],u.fragments,!u.noShorthand);if(void 0===a)return c(yield M(O,t),`Fragment not defined: ${e}`,C);if(!s(a))return v(a,t);y=Object.assign(Object.assign(Object.assign({},y),a),r),delete y.fragment}try{const e=l(y.operator,h);if(!e)return c(yield M(O,t),`Invalid operator: ${y.operator}`,C);if(!t.operators[e])return c(yield M(O,t),`Excluded operator: ${y.operator}`,C);const{propertyAliases:r,evaluate:a,parseChildren:i}=d[e];y=((e,t)=>p(t,(t=>t in e?e[t]:t)))(r,y);const s=yield B(y,t);T||Object.entries(s).forEach((([e,r])=>t.resolvedAliasNodes[e]=r));const n=T?Object.assign(Object.assign({},t),{resolvedAliasNodes:Object.assign(Object.assign({},t.resolvedAliasNodes),s)}):t;if("children"in y){if(Array.isArray(y.children)||(y.children=yield M(y.children,n)),!Array.isArray(y.children))return c(yield M(O,t),`Operator: ${e}\n- Property "children" is not of type: array`,C);y=yield i(y,n),delete y.children}let u;try{u=yield a(y,n)}catch(r){return c(yield M(y.fallback,t),`Operator: ${e}\n${f(r)}`,C)}const v=null!==(o=null==y?void 0:y.outputType)&&void 0!==o?o:null==y?void 0:y.type;if(!v)return u;const g=yield M(v,t);return g in m?m[g](u):c(yield M(O,t),`Operator: ${e}\n- Invalid output type: ${g}`,C)}catch(e){return c(yield M(O,t),f(e),C)}})),F=(e,t)=>i(void 0,void 0,void 0,(function*(){return Array.isArray(e)?yield Promise.all(e.map((e=>M(e,t)))):yield M(e,t)})),B=(e,t)=>i(void 0,void 0,void 0,(function*(){const r=Object.keys(e).filter(h);if(0===r.length)return{};const a=[];return r.forEach((r=>a.push(M(e[r],t)))),R(r,yield Promise.all(a))})),G=(e,t)=>i(void 0,void 0,void 0,(function*(){if(!b(e))return e;const r=[],a=[];Object.entries(e).forEach((([r,i])=>{h(r)&&(a.push(r,M(i,t)),delete e[r])}));const i=yield Promise.all(a);t.resolvedAliasNodes=Object.assign(Object.assign({},t.resolvedAliasNodes),k(i)),Object.entries(e).forEach((([e,a])=>{r.push(e,M(a,t))}));const s=yield Promise.all(r);return v(k(s),t)})),z=[{name:"values",description:"Returns true if all values are true",aliases:[],required:!0,type:"array",default:[!0,!0]}],W=I(z),J={description:"Logical AND",aliases:["and","&","&&"],parameters:z},V=e=>{const t=e.children;return Object.assign(Object.assign({},e),{values:t})},Y={propertyAliases:W,operatorData:J,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield F(e.values,t);return t.typeChecker(U(J.parameters,{values:r})),r.reduce(((e,t)=>e&&!!t),!0)})),parseChildren:V},X=[{name:"values",description:"Returns true if any values are true",aliases:[],required:!0,type:"array",default:[!0,!1]}],K=I(X),Z={description:"Logical OR",aliases:["or","|","||"],parameters:X},ee={propertyAliases:K,operatorData:Z,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield F(e.values,t);return t.typeChecker(U(Z.parameters,{values:r})),r.reduce(((e,t)=>e||!!t),!1)})),parseChildren:V},te=[{name:"values",description:"Array of values to check for equality",aliases:[],required:!0,type:"array",default:["These are equal","These are equal"]},{name:"caseInsensitive",description:"If the values are strings, ignore the case (default: false)",aliases:[],required:!1,type:"boolean",default:!1},{name:"nullEqualsUndefined",description:"Whether a null value should be considered equal to an undefined value (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],re=I(te),ae={description:"Test multiple values are equal",aliases:["=","eq","equal","equals"],parameters:te},ie={propertyAliases:re,operatorData:ae,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var a,i,s;const[n,o,l]=yield F([e.values,e.caseInsensitive,e.nullEqualsUndefined],t);t.typeChecker(U(ae.parameters,{values:n,caseInsensitive:o,nullEqualsUndefined:l}));const u=(void 0!==o?o:null!==(i=null===(a=t.options)||void 0===a?void 0:a.caseInsensitive)&&void 0!==i&&i)&&n.every((e=>"string"==typeof e))?n.map((e=>e.toLowerCase())):n;return!(void 0!==l?l:void 0!==(null===(s=t.options)||void 0===s?void 0:s.nullEqualsUndefined)&&t.options.nullEqualsUndefined)||null!==u[0]&&void 0!==u[0]?u.every((e=>r.dequal(e,u[0]))):u.every((e=>null==e))})),parseChildren:V},se=[{name:"values",description:"Array of values to check for inequality",aliases:[],required:!0,type:"array",default:["These items","don't match"]},{name:"caseInsensitive",description:"If the values are strings, ignore the case (default: false)",aliases:[],required:!1,type:"boolean",default:!1},{name:"nullEqualsUndefined",description:"Whether a null value should be considered equal to an undefined value (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],ne=I(se),oe={description:"Test if any values are different",aliases:["!=","!","ne","notEqual"],parameters:se},le={propertyAliases:ne,operatorData:oe,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var a,i,s;const[n,o,l]=yield F([e.values,e.caseInsensitive,e.nullEqualsUndefined],t);t.typeChecker(U(oe.parameters,{values:n,caseInsensitive:o,nullEqualsUndefined:l}));const u=(void 0!==o?o:null!==(i=null===(a=t.options)||void 0===a?void 0:a.caseInsensitive)&&void 0!==i&&i)&&n.every((e=>"string"==typeof e))?n.map((e=>e.toLowerCase())):n;return!(void 0!==l?l:void 0!==(null===(s=t.options)||void 0===s?void 0:s.nullEqualsUndefined)&&t.options.nullEqualsUndefined)||null!==u[0]&&void 0!==u[0]?u.some((e=>!r.dequal(e,u[0]))):u.some((e=>null===e&&void 0===e))})),parseChildren:V},ue=[{name:"values",description:"Array of values to check to add together",aliases:[],required:!0,type:"array",default:[1,2,3]},{name:"type",description:"Data type to coerce input values to before addition",aliases:[],required:!1,type:{literal:["string","array","number","boolean","bool"]},default:"string"}],de=I(ue),ce={description:"Add, concatenate or merge multiple values",aliases:["+","plus","add","concat","join","merge"],parameters:ue},pe={propertyAliases:de,operatorData:ce,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield F(e.values,t);return t.typeChecker(U(ce.parameters,{values:r,type:e.type})),0===r.length?r:"string"===(null==e?void 0:e.type)?r.reduce(((e,t)=>e.concat(t)),""):"array"===(null==e?void 0:e.type)?r.reduce(((e,t)=>e.concat(t)),[]):r.every((e=>"string"==typeof e||Array.isArray(e)))?r.reduce(((e,t)=>e.concat(t))):r.every((e=>b(e)))?r.reduce(((e,t)=>Object.assign(Object.assign({},e),t)),{}):r.reduce(((e,t)=>e+t))})),parseChildren:V},he=[{name:"values",description:"Array of values - 2nd element will be subtracted from the first",aliases:[],required:!1,type:"array",default:[10,5]},{name:"from",description:"Numerical value that will be subtracted from",aliases:["subtractFrom"],required:!1,type:"number",default:100},{name:"subtract",description:"Numerical value to subtract",aliases:[],required:!1,type:"number",default:50}],ve=I(he),ye={description:"Subtract one numerical value from another",aliases:["-","subtract","minus","takeaway"],parameters:he},me={propertyAliases:ve,operatorData:ye,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a,i]=yield F([e.values,e.from,e.subtract],t);t.typeChecker(U(ye.parameters,{values:r,from:a,subtract:i}));const s=null!=r?r:[a,i].filter((e=>void 0!==e));if(s.length<2)throw new Error("- Not enough values provided");if(s.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");return s[0]-s[1]})),parseChildren:V},fe=[{name:"values",description:"Array of values whose product will be calculated",aliases:[],required:!0,type:"array",default:[5,5]}],ge=I(fe),be={description:"Multiply several numerical values together",aliases:["*","x","multiply","times"],parameters:fe},Te={propertyAliases:ge,operatorData:be,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield F(e.values,t);if(t.typeChecker(U(be.parameters,{values:r})),0===r.length)return 0;if(r.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");return r.reduce(((e,t)=>e*t))})),parseChildren:V},Oe=[{name:"values",description:"Array of values - 1st element will be divided by the first",aliases:[],required:!1,type:"array",default:[100,10]},{name:"dividend",description:"The number that will be divided",aliases:["divide"],required:!1,type:"number",default:99},{name:"divisor",description:"The number that dividend will be divided by",aliases:["by","divideBy"],required:!1,type:"number",default:3},{name:"output",description:"Whether to output a quotient, remainder or decimal",aliases:[],required:!1,type:{literal:["quotient","remainder"]},default:"quotient"}],Ce=I(Oe),qe={description:"Divide one numerical value by another",aliases:["/","divide","÷"],parameters:Oe},je={propertyAliases:Ce,operatorData:qe,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a,i,s]=yield F([e.values,e.dividend,e.divisor,e.output],t);t.typeChecker(U(qe.parameters,{values:r,dividend:a,divisor:i,output:s}));const n=null!=r?r:[a,i].filter((e=>void 0!==e));if(n.length<2)throw new Error("- Not enough values provided");if(n.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");if(0===n[1])throw new Error("Division by zero!");switch(s){case"quotient":return Math.floor(n[0]/n[1]);case"remainder":return n[0]%n[1];default:return n[0]/n[1]}})),parseChildren:V},Se=[{name:"values",description:"Array of values - 1st element will be compared to the second",aliases:[],required:!0,type:"array",default:[10,9]},{name:"strict",description:"Whether value must be strictly greater than (i.e. not equal) (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],Ee=I(Se),Ae={description:"Test if a value is greater than (or equal to) another value",aliases:[">","greaterThan","higher","larger"],parameters:Se},we={propertyAliases:Ee,operatorData:Ae,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a=!0]=yield F([e.values,e.strict],t);if(t.typeChecker(U(Ae.parameters,{values:r,strict:a})),r.length<2)throw new Error("- Not enough values provided");const[i,s]=r;return i===s&&!a||i>s})),parseChildren:V},Ne=[{name:"values",description:"Array of values - 1st element will be compared to the second",aliases:[],required:!0,type:"array",default:[9,10]},{name:"strict",description:"Whether value must be strictly smaller than (i.e. not equal) (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],xe=I(Ne),Pe={description:"Test if a value is smaller than (or equal to) another value",aliases:["<","lessThan","lower","smaller"],parameters:Ne},Le={propertyAliases:xe,operatorData:Pe,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a=!0]=yield F([e.values,e.strict],t);if(t.typeChecker(U(Pe.parameters,{values:r,strict:a})),r.length<2)throw new Error("- Not enough values provided");const[i,s]=r;return i===s&&!a||i<s})),parseChildren:V},Ie=[{name:"condition",description:"The expression to check for truthiness",aliases:[],required:!0,type:"any",default:!0},{name:"valueIfTrue",description:"Value to return if condition is true",aliases:["ifTrue"],required:!0,type:"any",default:"The condition is true"},{name:"valueIfFalse",description:"Value to return if condition is false",aliases:["ifFalse","ifNot"],required:!0,type:"any",default:"The condition is false"}],Ue=I(Ie),Re={description:"Return a value based on a condition",aliases:["?","conditional","ifThen"],parameters:Ie},ke={propertyAliases:Ue,operatorData:Re,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){t.typeChecker(U(Re.parameters,{condition:e.condition,valueIfTrue:e.valueIfTrue,valueIfFalse:e.valueIfFalse}));return(yield M(e.condition,t))?yield M(e.valueIfTrue,t):yield M(e.valueIfFalse,t)})),parseChildren:e=>{const[t,r,a]=e.children;return Object.assign(Object.assign({},e),{condition:t,valueIfTrue:r,valueIfFalse:a})}},De=[{name:"testString",description:"The string to test",aliases:["string","value"],required:!0,type:"string",default:"test-this"},{name:"pattern",description:"The regular expression pattern",aliases:["regex","regexp","regExp","re"],required:!0,type:"string",default:"^[a-z]{4}-[a-z]{4}$"}],Qe=I(De),_e={description:"Compare a string against a regex pattern",aliases:["regex","patternMatch","regexp","matchPattern"],parameters:De},$e={propertyAliases:Qe,operatorData:_e,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a]=yield F([e.testString,e.pattern],t);t.typeChecker(U(_e.parameters,{testString:r,pattern:a}));try{return new RegExp(a).test(r)}catch(e){throw new Error("Regex error:"+f(e))}})),parseChildren:e=>{const[t,r]=e.children;return Object.assign(Object.assign({},e),{testString:t,pattern:r})}},He=[{name:"property",description:'The path to the required property (e.g. "user.firstName")',aliases:["path","propertyName"],required:!0,type:"string",default:"path.to[0].my.data"},{name:"additionalData",description:"Additional data objects to be considered",aliases:["additional","objects","data","additionalObjects"],required:!1,type:"object",default:{}}],Me=I(He),Fe={description:"Extract values from data objects",aliases:["dataProperties","data","getData","objectProperties","objProps","getProperty","getObjProp"],parameters:He},Be={propertyAliases:Me,operatorData:Fe,evaluate:(e,r)=>i(void 0,void 0,void 0,(function*(){var a,i;const[s,n={}]=yield F([e.property,e.additionalData],r);r.typeChecker(U(Fe.parameters,{property:s,additionalData:n}));const o=Object.assign(Object.assign({},null!==(i=null===(a=r.options)||void 0===a?void 0:a.data)&&void 0!==i?i:{}),n);return t(o,s)})),parseChildren:e=>{const[t,r]=e.children,a=Object.assign(Object.assign({},e),{property:t});return void 0!==r&&(a.fallback=r),a}},Ge=[{name:"string",description:"A parameterised (%1, %2) string where the parameters are to be replaced",aliases:[],required:!0,type:"string",default:"Hello, %1"},{name:"substitutions",description:"An array of substitution values for the parameterised string",aliases:["replacements","values"],required:!1,type:["array","object"],default:["friend"]},{name:"trimWhiteSpace",description:"Whether or not to trim white space from either end of the substituted strings (default: true)",aliases:["trim","trimWhitespace"],required:!1,type:"boolean",default:!0},{name:"substitutionCharacter",description:'Which character to search for in original string for replacement -- can be "%" or "$" (default: "%")',aliases:["subCharacter","subChar"],required:!1,type:"string",default:"$"},{name:"numberMapping",description:"Rules for mapping number values to text strings, such as pluralisation.",aliases:["numMap","numberMap","pluralisation","pluralization","plurals"],required:!1,type:"object",default:{}}],ze=I(Ge),We={description:"Replace values in a string using simple parameter substitution",aliases:["stringSubstitution","substitute","stringSub","replace"],parameters:Ge},Je={propertyAliases:ze,operatorData:We,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a={},i=!0,s="%",n={}]=yield F([e.string,e.substitutions,e.trimWhiteSpace,e.substitutionCharacter,e.numberMapping],t);if(t.typeChecker(U(We.parameters,{string:r,substitutions:a,trimWhiteSpace:i,substitutionCharacter:s,numberMapping:n})),Array.isArray(a)){const e="$"===s?"$":"%",t=new RegExp(`(?<!\\\\)(${"%"===e?"%":"\\$"}[\\d]+)`,"g"),n=(r.match(t)||[]).sort(((e,t)=>Number(e.slice(1))-Number(t.slice(1)))),o=new Set(n),l=R(Array.from(o),a.map((e=>i?String(e).trim():e)));return r.split(t).map((e=>e in l?l[e]:e)).join("").replace(`\\${e}`,e)}return r.split(/(?<!\\)({{(?:[A-Za-z0-9_.]|\[[0-9]+\])+}})/g).map((e=>{if(!/(?<!\\){{(.+)}}/.exec(e))return e.replace("\\{{","{{");const r=Ve(e,a,n,t.options.data);return i?String(r).trim():r})).join("")})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{string:t,substitutions:r})}},Ve=(e,r,a,i={})=>{const s=e.replace(/{{(.+)}}/,"$1"),n=t(r,s,t(i,s,""));if("number"!=typeof n)return n;if(!(s in a))return n;const o=a[s];if(n in o)return o[n].replace("{}",String(n));const l=Object.keys(a[s]),u=l.find((e=>e.startsWith(">")));if(u){if(n>Number(u.slice(1)))return null==o?void 0:o[u]}const d=l.find((e=>e.startsWith("<")));if(d){if(n<Number(d.slice(1)))return null==o?void 0:o[d]}return o.other?o.other.replace("{}",String(n)):n},Ye=[{name:"values",description:"An array to count",aliases:[],required:!0,type:"array",default:[1,2,3,4,5]}],Xe=I(Ye),Ke={description:"Count elements in an array",aliases:["count","length"],parameters:Ye},Ze={propertyAliases:Xe,operatorData:Ke,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield F(e.values,t);return t.typeChecker(U(Ke.parameters,{values:r})),r.length})),parseChildren:e=>{const[t]=e.children;return Object.assign(Object.assign({},e),{values:t})}},et=[{name:"value",description:"The string to be split",aliases:["string"],required:!0,type:"string",default:"Alpha, Bravo, Charlie"},{name:"delimiter",description:"The value to split the string on (default is white space)",aliases:["separator"],required:!1,type:"string",default:","},{name:"trimWhiteSpace",description:"Whether to trim white space from around the resulting elements (default: true)",aliases:["trim","trimWhitespace"],required:!1,type:"boolean",default:!0},{name:"excludeTrailing",description:"If the input string ends in a delimiter, there will be an additional blank element if this value is false (default: true)",aliases:["removeTrailing","excludeTrailingDelimiter"],required:!1,type:"boolean",default:!0}],tt=I(et),rt={description:"Split a string into an array",aliases:["split","arraySplit"],parameters:et},at=" ",it={propertyAliases:tt,operatorData:rt,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,i;const[s,n,o,l]=yield F([e.value,null!==(r=e.delimiter)&&void 0!==r?r:at,null===(a=e.trimWhiteSpace)||void 0===a||a,null===(i=e.excludeTrailing)||void 0===i||i],t);t.typeChecker(U(rt.parameters,{value:s,delimiter:n,trimWhiteSpace:o,excludeTrailing:l}));let u=s.split(n);return o&&(u=u.map((e=>e.trim()))),l&&""===u[u.length-1]&&u.pop(),u})),parseChildren:e=>{const[t,r=at]=e.children;return Object.assign(Object.assign({},e),{value:t,delimiter:r})}},st=[{name:"query",description:"SQL query string, with parameterised replacements (e.g. $1, $2, etc)",aliases:["text"],required:!0,type:"string"},{name:"values",description:"An array/object of values to replace the SQL string parameters, as per SQL connection specifications ",aliases:["replacements"],required:!1,type:["array","object"]},{name:"single",description:"Specify if returning a single record",aliases:["singleRecord"],required:!1,type:"boolean"},{name:"flatten",description:"Specify whether to flatten resulting record objects to arrays of values",aliases:["flat","array"],required:!1,type:"boolean"},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean"}],nt=I(st),ot={description:"Query an SQL database",aliases:["sql","pgSql","postgres","pg","sqLite","sqlite","mySql"],parameters:st},lt={propertyAliases:nt,operatorData:ot,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,s;const n=null===(r=t.options)||void 0===r?void 0:r.sqlConnection;if(!n)throw new Error("No SQL database connection provided");const[o,l,u,d,c,p]=yield F([e.query,e.values||[],e.single,e.flatten,e.useCache,e.type],t);t.typeChecker(U(ot.parameters,{query:o,single:u,flatten:d,values:l,useCache:c}));const h=null===(s=null!==(a=e.useCache)&&void 0!==a?a:t.options.useCache)||void 0===s||s;{const e=t.cache.useCache(h,((e,t,r,a,s)=>i(void 0,void 0,void 0,(function*(){const i=(yield n.query({query:e,values:t}))||[];["array","string","number"].includes(null!=s?s:"")&&(a=!0);const o=a?i.map((e=>{const t=Object.values(e);return t.length<=1?t[0]:t})):i;return r?o[0]:o}))),o,l,u,d,p);return e}})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{query:t,values:r})}},ut=[{name:"query",description:"GraphQL query string",aliases:[],required:!0,type:"string",default:'query getCountries {\n countries(filter: {continent: {eq: "OC"}}) {\n name\n }\n }'},{name:"url",description:"Endpoint for the GraphQL request (if not already provided in options)",aliases:["endpoint"],required:!1,type:["string","null"],default:"https://countries.trevorblades.com/"},{name:"headers",description:"HTTP Headers (if not already provided in options)",aliases:[],required:!1,type:"object",default:{}},{name:"variables",description:"Values for the variables used in query (key-value pairs)",aliases:[],required:!1,type:"object",default:{}},{name:"returnNode",description:"Property path to extract from the query response",aliases:["outputNode","returnProperty"],required:!1,type:"string",default:"data.countries[1].name"},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],dt=I(ut),ct={description:"GraphQL request",aliases:["graphQl","graphql","gql"],parameters:ut},pt={propertyAliases:dt,operatorData:ct,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,s,n,o,l,u;const d=null!==(r=t.graphQLClient)&&void 0!==r?r:t.httpClient;if(!d)throw new Error("No HTTP client provided for GraphQL connection");const[c,p,h,v,y,m]=yield F([e.query,e.url,e.variables,e.returnNode,e.headers,e.useCache],t),{url:f,headers:g}=p instanceof Object?p:{url:p,headers:null};t.typeChecker([...U(ct.parameters,{url:f,query:c,variables:h,returnNode:v,headers:y,useCache:m}),{name:"headers",value:g,expectedType:["object","null"]}]);const b=f&&"graphqlendpoint"!==f.toLowerCase()?f:"",T=null!==(n=null!==(s=null===(a=t.options.graphQLConnection)||void 0===a?void 0:a.endpoint)&&void 0!==s?s:t.options.baseEndpoint)&&void 0!==n?n:"",O=_(b)?b:$(T,b),C={query:c,variables:h},q=null===(o=null!=m?m:t.options.useCache)||void 0===o||o,j=yield t.cache.useCache(q,((e,t,r,a)=>i(void 0,void 0,void 0,(function*(){const i=yield H(d,{url:e,method:"post",data:t,headers:r});return Q(null==i?void 0:i.data,a)}))),O,C,Object.assign(Object.assign(Object.assign(Object.assign({},null===(l=t.options.graphQLConnection)||void 0===l?void 0:l.headers),null===(u=t.options)||void 0===u?void 0:u.headers),g),y),v);return j})),parseChildren:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a="",i,...s]=yield F(e.children,t),n=Array.isArray(i)?i:[i],o=s.slice(0,n.length),l=R(n,o),u=Object.assign(Object.assign({},e),{query:r,url:a,variables:l});return s.length>n.length&&(u.returnNode=s.pop()),u}))},ht=[{name:"url",description:"Endpoint URL",aliases:["endpoint"],required:!0,type:"string",default:"https://restcountries.com/v3.1/name/zealand"},{name:"returnProperty",description:"Property from request result",aliases:["outputProperty"],required:!1,type:"string",default:"result.path"},{name:"headers",description:"HTTP Headers",aliases:[],required:!1,type:"object",default:{}},{name:"parameters",description:"Query parameters (key-value)",aliases:["queryParams","queryParameters","urlQueries"],required:!1,type:"object",default:{}},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],vt=I(ht),yt={description:"HTTP GET Request",aliases:["get","api"],parameters:ht},mt=(e,t)=>i(void 0,void 0,void 0,(function*(){const[r="",a,...i]=yield F(e.children,t),s=Array.isArray(a)?a:[a],n=i.slice(0,s.length),o=R(s,n),l=Object.assign(Object.assign({},e),{url:r,parameters:o});return i.length>s.length&&(l.returnProperty=i.pop()),l})),ft=mt,gt={propertyAliases:vt,operatorData:yt,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,s;const n=t.httpClient;if(!n)throw new Error("No HTTP client provided");const[o,l,u,d,c]=yield F([e.url,e.parameters,e.returnProperty,e.headers,e.useCache],t),{url:p,headers:h}=o instanceof Object?o:{url:o,headers:null};t.typeChecker([...U(yt.parameters,{url:p,returnProperty:u,headers:d,parameters:l,useCache:c}),{name:"headers",value:h,expectedType:["object","null"]}]);const v=null!==(r=t.options.baseEndpoint)&&void 0!==r?r:"",y=Object.assign(Object.assign(Object.assign({},null===(a=t.options)||void 0===a?void 0:a.headers),h),d),m=null===(s=null!=c?c:t.options.useCache)||void 0===s||s,f=yield t.cache.useCache(m,((e,t,r,a)=>i(void 0,void 0,void 0,(function*(){const i=yield H(n,{url:e,params:t,headers:r});return Q(i,a)}))),_(p)?p:$(v,p),l,y,u);return f})),parseChildren:mt},bt=[{name:"url",description:"Endpoint URL",aliases:["endpoint"],required:!0,type:"string",default:"https://jsonplaceholder.typicode.com/posts"},{name:"returnProperty",description:"Property path from request result",aliases:["outputProperty"],required:!1,type:"string",default:"result.path"},{name:"headers",description:"HTTP Headers",aliases:[],required:!1,type:"object",default:{}},{name:"parameters",description:"JSON Body parameters (key-value)",aliases:["bodyJson","data"],required:!1,type:"object",default:{}},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],Tt=I(bt),Ot={description:"HTTP POST Request",aliases:["post"],parameters:bt},Ct={propertyAliases:Tt,operatorData:Ot,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,s;const n=t.httpClient;if(!n)throw new Error("No HTTP client provided");const[o,l,u,d,c]=yield F([e.url,e.parameters,e.returnProperty,e.headers,e.useCache],t),{url:p,headers:h}=o instanceof Object?o:{url:o,headers:null};t.typeChecker([...U(Ot.parameters,{url:p,headers:d,data:l,returnProperty:u,useCache:c}),{name:"headers",value:h,expectedType:["object","null"]}]);const v=null!==(r=t.options.baseEndpoint)&&void 0!==r?r:"",y=Object.assign(Object.assign(Object.assign({},null===(a=t.options)||void 0===a?void 0:a.headers),h),d),m=null!==(s=null!=c?c:t.options.useCache)&&void 0!==s&&s,f=yield t.cache.useCache(m,((e,t,r,a)=>i(void 0,void 0,void 0,(function*(){const i=yield H(n,{url:e,data:t,headers:r,method:"post"});return Q(i,a)}))),_(p)?p:$(v,p),l,y,u);return f})),parseChildren:ft},qt=[{name:"properties",description:'An array of objects, each with a "key" property and a "value" property',aliases:["values","keyValPairs","keyValuePairs"],required:!0,type:"array",default:["firstKey","firstValue","secondKey","secondValue"]}],jt=I(qt),St={description:"Construct an object using objects defining keys and values",aliases:["buildObject","build","object"],parameters:qt},Et={propertyAliases:jt,operatorData:St,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){t.typeChecker(U(St.parameters,{properties:e.properties}));const r=e.properties.filter((e=>e instanceof Object&&"key"in e&&"value"in e)).map((({key:e,value:r})=>{return a=[e,r],i(void 0,void 0,void 0,(function*(){const[e,r]=yield F(a,t);return t.typeChecker({name:"key",value:e,expectedType:["string","number","boolean"]}),[e,r]}));var a}));return Object.fromEntries(yield Promise.all(r))})),parseChildren:e=>{const t=e.children;if(t.length%2!=0)throw new Error("Even number of children required to make key/value pairs");const r=t.filter(((e,t)=>t%2==0)),a=t.filter(((e,t)=>t%2==1)),i=r.map(((e,t)=>({key:e,value:a[t]})));return Object.assign(Object.assign({},e),{properties:i})}},At=[{name:"matchExpression",description:"Expression to match against",aliases:["match"],required:!0,type:["string","number","boolean"],default:"matchMe"},{name:"branches",description:"Object whose keys are compared against the match expression. The value of the matching key is returned",aliases:["arms","cases"],required:!1,type:["object","array"],default:{matchMe:"YES",nonMatch:"NO"}},{name:"[...branches]",description:"Branch properties can optionally be placed at the operator root",aliases:[],required:!1,type:["object","array"]}],wt={propertyAliases:I(At),operatorData:{description:"Return different values depending on a matching expression",aliases:["match","switch"],parameters:At},evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r;const a=yield M(e.matchExpression,t);t.typeChecker({name:"matchExpression",value:a,expectedType:["string","number","boolean"]});const i=Array.isArray(e.branches)?k(e.branches):null!==(r=e.branches)&&void 0!==r?r:{},n=s(i)?yield M(i,t):i;if(!b(n))throw new Error("Branches don't evaluate to an object");if(a in n)return yield M(n[a],t);if("fallback"in n)return yield M(n.fallback,t);if(a in e)return yield M(e[a],t);throw new Error(`No match found for ${a}`)})),parseChildren:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,...a]=e.children,i=k(yield F(a,t));return Object.assign(Object.assign({},e),{matchExpression:r,branches:i})}))},Nt=[{name:"functionPath",description:"Path (in options.functions) to the required function",aliases:["functionsPath","functionName","funcName","path","name"],required:!0,type:"string",default:null},{name:"args",description:"Arguments for the function",aliases:["arguments","variables"],required:!1,type:"array",default:[]},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!1}],xt=I(Nt),Pt={description:"Call a custom function (defined in options)",aliases:["customFunctions","customFunction","objectFunctions","function","functions","runFunction"],parameters:Nt},Lt={propertyAliases:xt,operatorData:Pt,evaluate:(e,r)=>i(void 0,void 0,void 0,(function*(){var a,s,n;const[o,l=[],u]=yield F([e.functionPath,e.args,e.useCache],r);r.typeChecker(U(Pt.parameters,{functionPath:o,args:l}));const{data:d,functions:c}=r.options,p=null!==(s=null!==(a=t(c,o,null))&&void 0!==a?a:t(d,o,null))&&void 0!==s?s:t(r.options,o,null);if(!p||"function"!=typeof p)throw new Error(`- No function found: "${o}"`);const h=null!==(n=null!=u?u:r.options.useCache)&&void 0!==n&&n;return yield r.cache.useCache(h,((e,...t)=>i(void 0,void 0,void 0,(function*(){return yield p(...t)}))),o,...l)})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{functionPath:t,args:r})}},It=[{name:"value",description:"Value to pass through",aliases:["_","data"],required:!0,type:"any",default:null}],Ut=I(It),Rt={description:"Pass through a value unchanged (or change its type)",aliases:["_","passThru","passthru","pass","ignore","coerce","convert"],parameters:It},kt={propertyAliases:Ut,operatorData:Rt,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){return t.typeChecker(U(Rt.parameters,{value:e.value})),yield M(e.value,t)})),parseChildren:e=>{const[...t]=e.children,r=1===(null==t?void 0:t.length)?t[0]:t;return Object.assign(Object.assign({},e),{value:r})}};var Dt=Object.freeze({__proto__:null,AND:Y,BUILD_OBJECT:Et,CONDITIONAL:ke,COUNT:Ze,CUSTOM_FUNCTIONS:Lt,DIVIDE:je,EQUAL:ie,GET:gt,GRAPHQL:pt,GREATER_THAN:we,LESS_THAN:Le,MATCH:wt,MULTIPLY:Te,NOT_EQUAL:le,OBJECT_PROPERTIES:Be,OR:ee,PASSTHRU:kt,PLUS:pe,POST:Ct,REGEX:$e,SPLIT:it,SQL:lt,STRING_SUBSTITUTION:Je,SUBTRACT:me});class Qt{constructor(e){var t,r;this.useCache=(e,t,...r)=>i(this,void 0,void 0,(function*(){if(!e)return yield t(...r);const a=_t(r),i=a in this.store,s=Date.now(),n=i&&s-this.store[a].timestamp>1e3*this.maxTime;if(i)return this.queue=this.queue.filter((e=>e!==a)),this.queue.unshift(a),this.store[a].timestamp=s,n&&(this.store[a].result=yield t(...r)),this.store[a].result;const o=yield t(...r);return this.store[a]={result:o,timestamp:s},this.queue.unshift(a),this.resizeCache(),o})),this.getMax=()=>this.maxSize,this.setMax=e=>{this.maxSize=e,this.resizeCache()},this.getMaxTime=()=>this.maxTime,this.setMaxTime=e=>{this.maxTime=e},this.getCache=()=>this.store,this.setCache=e=>this.store=e,this.resizeCache=()=>{if(this.queue.length>this.maxSize){this.queue.slice(this.maxSize).forEach((e=>delete this.store[e])),this.queue=this.queue.slice(0,this.maxSize)}},this.store={},this.queue=[],this.maxSize=null!==(t=null==e?void 0:e.maxSize)&&void 0!==t?t:50,this.maxTime=null!==(r=null==e?void 0:e.maxTime)&&void 0!==r?r:1800}}const _t=e=>e.map((e=>"object"==typeof e?JSON.stringify(e):e)).join("_"),$t=e=>e?"name"in e&&"fetch"===e.name?Mt(e):"Axios"in e&&"Axios"===e.Axios.name?Ht(e):e:"undefined"!=typeof window&&"document"in window&&"fetch"in window?Mt(window.fetch):void 0,Ht=e=>({get:t=>i(void 0,void 0,void 0,(function*(){return(yield e(Object.assign(Object.assign({},t),{method:"get"}))).data})),post:t=>i(void 0,void 0,void 0,(function*(){return(yield e(Object.assign(Object.assign({},t),{method:"post"}))).data})),throwError:t=>{var r;if(e.isAxiosError(t)){if(!(null==t?void 0:t.response))throw new Error("Network Error");console.log(null===(r=t.response)||void 0===r?void 0:r.data)}throw t}}),Mt=e=>({get:t=>i(void 0,void 0,void 0,(function*(){const{url:r,headers:i,params:s={}}=t,n=Object.keys(s).length>0?`?${a.stringify(s)}`:"",o=yield e(r+n,{headers:i,method:"GET"}),l=yield o.json();if(!o.ok)throw console.log(l),new Error(`Request failed with status code ${o.status}`);return l})),post:t=>i(void 0,void 0,void 0,(function*(){const{url:r,headers:a,params:i,data:s}=t,n=new URLSearchParams(i),o=n.size>0?`?${n.toString()}`:"",l=yield e(r+o,{headers:a,body:JSON.stringify(s),method:"POST"}),u=yield l.json();if(!l.ok)throw console.log(u),new Error(`Request failed with status code ${l.status}`);return u})),throwError:e=>{throw new Error(`${f(e)}`)}});class Ft{constructor(e={}){var t,r,a;this.typeChecker=(...e)=>{const t=1===e.length&&Array.isArray(e[0])?e[0]:e,r=N(...t);if(!0!==r)throw new Error(r)},this.getCache=()=>this.cache.getCache(),this.setCache=e=>this.cache.setCache(e),this.getVersion=()=>"2.15.2",this.options=Bt(e),this.operators=u(Dt,null!==(r=null===(t=this.options)||void 0===t?void 0:t.excludeOperators)&&void 0!==r?r:[],T),this.operatorAliases=T,this.cache=new Qt({maxSize:e.maxCacheSize,maxTime:e.maxCacheTime}),this.graphQLClient=$t(null===(a=e.graphQLConnection)||void 0===a?void 0:a.httpClient),this.httpClient=$t(e.httpClient)}evaluate(e,t={}){var r;return i(this,void 0,void 0,(function*(){const a=y(this.options,Bt(t));return t.httpClient&&(this.httpClient=$t(t.httpClient)),(null===(r=t.graphQLConnection)||void 0===r?void 0:r.httpClient)&&(this.graphQLClient=$t(t.graphQLConnection.httpClient)),a.maxCacheSize&&a.maxCacheSize!==this.cache.getMax()&&this.cache.setMax(a.maxCacheSize),a.maxCacheTime&&a.maxCacheTime!==this.cache.getMaxTime()&&this.cache.setMaxTime(a.maxCacheTime),yield M(e,{options:a,operators:t.excludeOperators?u(Dt,t.excludeOperators,T):this.operators,operatorAliases:this.operatorAliases,typeChecker:a.skipRuntimeTypeCheck?()=>{}:this.typeChecker,resolvedAliasNodes:{},cache:this.cache,graphQLClient:this.graphQLClient,httpClient:this.httpClient})}))}getOptions(){return this.options}updateOptions(e){this.options=y(this.options,Bt(e)),this.options.excludeOperators&&(this.operators=u(Dt,this.options.excludeOperators,T))}getOperators(){const e=this.options.excludeOperators?u(Dt,this.options.excludeOperators,T):this.operators,t=Object.entries(e).map((([e,t])=>Object.assign({name:e},t.operatorData))),r=[...new Set(Object.values(T))];return t.sort(((e,t)=>r.indexOf(e.name)-r.indexOf(t.name)))}getFragments(){var e;return Object.entries(null!==(e=this.options.fragments)&&void 0!==e?e:{}).map((([e,t])=>Object.assign({name:e},null==t?void 0:t.metadata)))}getCustomFunctions(){var e;return Object.entries(null!==(e=this.options.functions)&&void 0!==e?e:{}).map((([e,t])=>({name:e,numRequiredArgs:t.length})))}}const Bt=e=>"objects"in e?Object.assign(Object.assign({},e),{data:e.objects}):e;exports.AxiosClient=Ht,exports.FetchClient=Mt,exports.FigTreeEvaluator=Ft,exports.SQLNodePostgres=e=>({query:({query:t,values:r=[]})=>i(void 0,void 0,void 0,(function*(){const a={text:t,values:null!=r?r:[]},i=yield e.query(a);if(null==i?void 0:i.error)throw new Error(i.error);return i.rows}))}),exports.SQLite=e=>({query:({query:t,values:r=[]})=>i(void 0,void 0,void 0,(function*(){try{return yield e.all(t,r)}catch(e){throw`SQLite error: ${null==e?void 0:e.message}`}}))}),exports.evaluateExpression=(e,t)=>new Ft(t).evaluate(e),exports.isAliasString=h,exports.isFragmentNode=n,exports.isObject=b,exports.isOperatorNode=s,exports.preProcessShorthand=q,exports.standardiseOperatorName=o,exports.truncateString=d;
@@ -1 +1 @@
1
- import{camelCase as e}from"change-case";import t from"object-property-extractor";import{dequal as r}from"dequal/lite";function a(e,t,r,a){return new(r||(r=Promise))((function(i,s){function n(e){try{l(a.next(e))}catch(e){s(e)}}function o(e){try{l(a.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(n,o)}l((a=a.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const i=e=>e instanceof Object&&"operator"in e,s=e=>e instanceof Object&&"fragment"in e,n=t=>{const r=e(t);return r||t},o=(e,t)=>t[n(e)],l=(e,t,r)=>{const a=Object.assign({},e);return t.forEach((e=>{r[n(e)]||console.warn(`Invalid operator exclusion: ${e}`),delete a[r[n(e)]]})),a},u=(e,t=200)=>e.length<t?e:`${e.slice(0,t-2).trim()}...`,d=(e,t,r=!1)=>{if(void 0!==e)return e;if(r)return u(t);throw new Error(u(t))},c=(e,t)=>{const r=Object.entries(e).map((([e,r])=>[t(e),r]));return Object.fromEntries(r)},p=e=>/^\$.+/.test(e),h=(e,{resolvedAliasNodes:t})=>{var r;return"string"==typeof e&&p(e)&&null!==(r=null==t?void 0:t[e])&&void 0!==r?r:e},v=(e,t)=>{const r=Object.assign(Object.assign({},e),t);return(e.data||t.data)&&(r.data=Object.assign(Object.assign({},e.data),t.data)),(e.functions||t.functions)&&(r.functions=Object.assign(Object.assign({},e.functions),t.functions)),(e.fragments||t.fragments)&&(r.fragments=Object.assign(Object.assign({},e.fragments),t.fragments)),(e.headers||t.headers)&&(r.headers=Object.assign(Object.assign({},e.headers),t.headers)),r},y={number:e=>f(e),string:e=>String(e),array:e=>Array.isArray(e)?e:[e],boolean:e=>Boolean(e),bool:e=>Boolean(e)},m=e=>e.message,f=e=>{if("string"!=typeof e)return Number.isNaN(Number(e))?e:Number(e);const t=new RegExp(/-?\d*\.?\d+/gm),r=e.match(t);return r?Number(r[0]):0},g=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),b={and:"AND","&":"AND","&&":"AND",or:"OR","|":"OR","||":"OR","=":"EQUAL",eq:"EQUAL",equal:"EQUAL",equals:"EQUAL","!=":"NOT_EQUAL","!":"NOT_EQUAL",ne:"NOT_EQUAL",notEqual:"NOT_EQUAL","+":"PLUS",plus:"PLUS",add:"PLUS",concat:"PLUS",join:"PLUS",merge:"PLUS","-":"SUBTRACT",subtract:"SUBTRACT",minus:"SUBTRACT",takeaway:"SUBTRACT","*":"MULTIPLY",x:"MULTIPLY",multiply:"MULTIPLY",times:"MULTIPLY","/":"DIVIDE",divide:"DIVIDE","÷":"DIVIDE",">":"GREATER_THAN",greaterThan:"GREATER_THAN",higher:"GREATER_THAN",larger:"GREATER_THAN","<":"LESS_THAN",lessThan:"LESS_THAN",lower:"LESS_THAN",smaller:"LESS_THAN","?":"CONDITIONAL",conditional:"CONDITIONAL",ifThen:"CONDITIONAL",regex:"REGEX",patternMatch:"REGEX",regexp:"REGEX",matchPattern:"REGEX",dataProperties:"OBJECT_PROPERTIES",data:"OBJECT_PROPERTIES",getData:"OBJECT_PROPERTIES",objectProperties:"OBJECT_PROPERTIES",objProps:"OBJECT_PROPERTIES",getProperty:"OBJECT_PROPERTIES",getObjProp:"OBJECT_PROPERTIES",stringSubstitution:"STRING_SUBSTITUTION",substitute:"STRING_SUBSTITUTION",stringSub:"STRING_SUBSTITUTION",replace:"STRING_SUBSTITUTION",split:"SPLIT",arraySplit:"SPLIT",count:"COUNT",length:"COUNT",get:"GET",api:"GET",post:"POST",sql:"SQL",pgSql:"SQL",postgres:"SQL",pg:"SQL",sqLite:"SQL",sqlite:"SQL",mySql:"SQL",graphQl:"GRAPHQL",graphql:"GRAPHQL",gql:"GRAPHQL",buildObject:"BUILD_OBJECT",build:"BUILD_OBJECT",object:"BUILD_OBJECT",match:"MATCH",switch:"MATCH",customFunctions:"CUSTOM_FUNCTIONS",customFunction:"CUSTOM_FUNCTIONS",objectFunctions:"CUSTOM_FUNCTIONS",function:"CUSTOM_FUNCTIONS",functions:"CUSTOM_FUNCTIONS",runFunction:"CUSTOM_FUNCTIONS",_:"PASSTHRU",passThru:"PASSTHRU",passthru:"PASSTHRU",pass:"PASSTHRU",ignore:"PASSTHRU",coerce:"PASSTHRU",convert:"PASSTHRU"},T=b,O=/(\$[^()]+)\((.*)\)/,C=(e,t={},r=!0)=>r?"string"==typeof e?q(e,t):g(e)?j(e,t):e:e,q=(e,t)=>{const r=O.exec(e);if(!r)return e;const a=r[1].trim(),i=r[2].split(",").map((e=>C(e.trim(),t)));return S(a,i,t)},j=(e,t)=>{if(i(e)||s(e))return e;const r=Object.entries(e),a=r.filter((([e])=>p(e))),n=r.filter((([e])=>!p(e))),o=a.reduce(((e,[r,a])=>e=Object.assign(Object.assign({},e),S(r,a,t))),{});return Object.assign(Object.assign({},o),Object.fromEntries(n))},S=(e,t,r)=>{const a=e.slice(1),i=o(a,T);return i?Array.isArray(t)?{operator:i,children:t}:g(t)&&!Object.keys(t).some((e=>p(e)))?Object.assign({operator:i},t):{operator:i,children:[t]}:a in r?{fragment:a,parameters:Object.assign({},t)}:{[e]:t}},E=e=>g(e)&&"literal"in e,A=({value:e,name:t,expectedType:r})=>{if(E(r)){const{literal:a}=r;return!!a.includes(e)||P(t,e,`Literal(${a.map((e=>void 0===e?"undefined":`"${e}"`)).join(", ")})`)}if(Array.isArray(r))return!!r.some((r=>!0===A({value:e,name:t,expectedType:r})))||P(t,e,r.join("|"));return!!(0,N[r])(e)||P(t,e,r)},w=(...e)=>{const t=[];return e.forEach((e=>{const r=A(e);!0!==r&&t.push(r)})),!(t.length>0)||t.join("\n")},N={any:e=>void 0!==e,string:e=>"string"==typeof e,number:e=>"number"==typeof e,boolean:e=>"boolean"==typeof e,array:e=>Array.isArray(e),null:e=>null===e,object:e=>g(e),undefined:e=>void 0===e},P=(e,t,r)=>void 0===t&&e?`- Missing required property "${e}" (type: ${r})`:void 0!==e?`- Property "${e}" (value: ${x(t)}) is not of type: ${r}`:`- ${x(t)} is not of type: ${r}`,x=e=>{const t=void 0===e||Number.isNaN(e)?String(e):JSON.stringify(e);return u(t,50)},L=e=>{const t={};return e.forEach((e=>{e.aliases.forEach((r=>t[r]=e.name))})),t},I=(e,t)=>e.map((({name:e,required:r,type:a})=>{if(E(a)){const i=[...a.literal];return r||i.push(void 0),{name:e,value:t[e],expectedType:{literal:i}}}const i=Array.isArray(a)?a:[a];r||i.push("undefined");const s=1===i.length?i[0]:i;return{name:e,value:t[e],expectedType:s}})),U=(e,t)=>{const r=e.map(((e,r)=>[e,t[r]]));return Object.fromEntries(r)},R=e=>{if(e.length%2!=0)throw new Error("Even number of children required to make key/value pairs");const t=e.filter(((e,t)=>t%2==0)),r=w(...t.map((e=>({value:e,expectedType:["string","number","boolean"]}))));if(!0!==r)throw new Error(r);const a=e.filter(((e,t)=>t%2==1)),i={};return t.forEach(((e,t)=>{i[e]=a[t]})),i},k=e=>g(e)&&1===Object.keys(e).length?Object.values(e)[0]:e,D=(e,r,a=void 0)=>{const i=r?t(e,r,a):e;return Array.isArray(i)?i.map((e=>k(e))):r?null===i?null:k(i):i},_=e=>/^https?:\/\/.+/.test(e),Q=(...e)=>e.reduce(((e,t,r)=>{const a="/"===t[0]?1:0,i="/"===t.slice(-1)?-1:void 0,s=t.slice(a,i);return""===s?e:e+(0===r?"":"/")+s}),""),$=(e,t)=>a(void 0,void 0,void 0,(function*(){const{url:r,params:a={},data:i={},headers:s={},method:n="get"}=t;try{return yield e[n]({url:r,headers:Object.assign({"Content-Type":"application/json",Accept:"application/json"},s),params:a,data:i})}catch(t){e.throwError(t)}})),H=(e,t)=>a(void 0,void 0,void 0,(function*(){var r,a,n,l;const{options:u,operators:p,operatorAliases:v}=t;let f=(null==u?void 0:u.allowJSONStringInput)?(e=>{if("string"!=typeof e)return e;try{const t=JSON.parse(e);return i(t)?t:e}catch(t){return e}})(e):e;f=C(f,null===(r=t.options)||void 0===r?void 0:r.fragments,!u.noShorthand),Array.isArray(f)&&(f=yield M(f,t));const b=i(f),T=s(f);if(u.evaluateFullObject&&!b&&!T)return h(yield F(f,t),t);if(!b&&!T)return u.supportDeprecatedValueNodes&&g(f)&&"value"in f?f.value:h(f,t);const{fallback:O}=f,q=null!==(a=null==u?void 0:u.returnErrorAsString)&&void 0!==a&&a;if(T){const[e,r]=yield M([f.fragment,f.parameters],t),a=C(null===(n=null==u?void 0:u.fragments)||void 0===n?void 0:n[e],u.fragments,!u.noShorthand);if(void 0===a)return d(yield H(O,t),`Fragment not defined: ${e}`,q);if(!i(a))return h(a,t);f=Object.assign(Object.assign(Object.assign({},f),a),r),delete f.fragment}try{const e=o(f.operator,v);if(!e)return d(yield H(O,t),`Invalid operator: ${f.operator}`,q);if(!t.operators[e])return d(yield H(O,t),`Excluded operator: ${f.operator}`,q);const{propertyAliases:r,evaluate:a,parseChildren:i}=p[e];f=((e,t)=>c(t,(t=>t in e?e[t]:t)))(r,f);const s=yield B(f,t);T||Object.entries(s).forEach((([e,r])=>t.resolvedAliasNodes[e]=r));const n=T?Object.assign(Object.assign({},t),{resolvedAliasNodes:Object.assign(Object.assign({},t.resolvedAliasNodes),s)}):t;if("children"in f){if(Array.isArray(f.children)||(f.children=yield H(f.children,n)),!Array.isArray(f.children))return d(yield H(O,t),`Operator: ${e}\n- Property "children" is not of type: array`,q);f=yield i(f,n),delete f.children}let u;try{u=yield a(f,n)}catch(r){return d(yield H(f.fallback,t),`Operator: ${e}\n${m(r)}`,q)}const h=null!==(l=null==f?void 0:f.outputType)&&void 0!==l?l:null==f?void 0:f.type;if(!h)return u;const g=yield H(h,t);return g in y?y[g](u):d(yield H(O,t),`Operator: ${e}\n- Invalid output type: ${g}`,q)}catch(e){return d(yield H(O,t),m(e),q)}})),M=(e,t)=>a(void 0,void 0,void 0,(function*(){return Array.isArray(e)?yield Promise.all(e.map((e=>H(e,t)))):yield H(e,t)})),B=(e,t)=>a(void 0,void 0,void 0,(function*(){const r=Object.keys(e).filter(p);if(0===r.length)return{};const a=[];return r.forEach((r=>a.push(H(e[r],t)))),U(r,yield Promise.all(a))})),F=(e,t)=>a(void 0,void 0,void 0,(function*(){if(!g(e))return e;const r=[],a=[];Object.entries(e).forEach((([r,i])=>{p(r)&&(a.push(r,H(i,t)),delete e[r])}));const i=yield Promise.all(a);t.resolvedAliasNodes=Object.assign(Object.assign({},t.resolvedAliasNodes),R(i)),Object.entries(e).forEach((([e,a])=>{r.push(e,H(a,t))}));const s=yield Promise.all(r);return h(R(s),t)})),G=[{name:"values",description:"Returns true if all values are true",aliases:[],required:!0,type:"array",default:[!0,!0]}],z=L(G),W={description:"Logical AND",aliases:["and","&","&&"],parameters:G},J=e=>{const t=e.children;return Object.assign(Object.assign({},e),{values:t})},V={propertyAliases:z,operatorData:W,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);return t.typeChecker(I(W.parameters,{values:r})),r.reduce(((e,t)=>e&&!!t),!0)})),parseChildren:J},Y=[{name:"values",description:"Returns true if any values are true",aliases:[],required:!0,type:"array",default:[!0,!1]}],X=L(Y),K={description:"Logical OR",aliases:["or","|","||"],parameters:Y},Z={propertyAliases:X,operatorData:K,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);return t.typeChecker(I(K.parameters,{values:r})),r.reduce(((e,t)=>e||!!t),!1)})),parseChildren:J},ee=[{name:"values",description:"Array of values to check for equality",aliases:[],required:!0,type:"array",default:["These are equal","These are equal"]},{name:"caseInsensitive",description:"If the values are strings, ignore the case (default: false)",aliases:[],required:!1,type:"boolean",default:!1},{name:"nullEqualsUndefined",description:"Whether a null value should be considered equal to an undefined value (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],te=L(ee),re={description:"Test multiple values are equal",aliases:["=","eq","equal","equals"],parameters:ee},ae={propertyAliases:te,operatorData:re,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var a,i,s;const[n,o,l]=yield M([e.values,e.caseInsensitive,e.nullEqualsUndefined],t);t.typeChecker(I(re.parameters,{values:n,caseInsensitive:o,nullEqualsUndefined:l}));const u=(void 0!==o?o:null!==(i=null===(a=t.options)||void 0===a?void 0:a.caseInsensitive)&&void 0!==i&&i)&&n.every((e=>"string"==typeof e))?n.map((e=>e.toLowerCase())):n;return!(void 0!==l?l:void 0!==(null===(s=t.options)||void 0===s?void 0:s.nullEqualsUndefined)&&t.options.nullEqualsUndefined)||null!==u[0]&&void 0!==u[0]?u.every((e=>r(e,u[0]))):u.every((e=>null==e))})),parseChildren:J},ie=[{name:"values",description:"Array of values to check for inequality",aliases:[],required:!0,type:"array",default:["These items","don't match"]},{name:"caseInsensitive",description:"If the values are strings, ignore the case (default: false)",aliases:[],required:!1,type:"boolean",default:!1},{name:"nullEqualsUndefined",description:"Whether a null value should be considered equal to an undefined value (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],se=L(ie),ne={description:"Test if any values are different",aliases:["!=","!","ne","notEqual"],parameters:ie},oe={propertyAliases:se,operatorData:ne,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var a,i,s;const[n,o,l]=yield M([e.values,e.caseInsensitive,e.nullEqualsUndefined],t);t.typeChecker(I(ne.parameters,{values:n,caseInsensitive:o,nullEqualsUndefined:l}));const u=(void 0!==o?o:null!==(i=null===(a=t.options)||void 0===a?void 0:a.caseInsensitive)&&void 0!==i&&i)&&n.every((e=>"string"==typeof e))?n.map((e=>e.toLowerCase())):n;return!(void 0!==l?l:void 0!==(null===(s=t.options)||void 0===s?void 0:s.nullEqualsUndefined)&&t.options.nullEqualsUndefined)||null!==u[0]&&void 0!==u[0]?u.some((e=>!r(e,u[0]))):u.some((e=>null===e&&void 0===e))})),parseChildren:J},le=[{name:"values",description:"Array of values to check to add together",aliases:[],required:!0,type:"array",default:[1,2,3]},{name:"type",description:"Data type to coerce input values to before addition",aliases:[],required:!1,type:{literal:["string","array","number","boolean","bool"]},default:"string"}],ue=L(le),de={description:"Add, concatenate or merge multiple values",aliases:["+","plus","add","concat","join","merge"],parameters:le},ce={propertyAliases:ue,operatorData:de,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);return t.typeChecker(I(de.parameters,{values:r,type:e.type})),0===r.length?r:"string"===(null==e?void 0:e.type)?r.reduce(((e,t)=>e.concat(t)),""):"array"===(null==e?void 0:e.type)?r.reduce(((e,t)=>e.concat(t)),[]):r.every((e=>"string"==typeof e||Array.isArray(e)))?r.reduce(((e,t)=>e.concat(t))):r.every((e=>g(e)))?r.reduce(((e,t)=>Object.assign(Object.assign({},e),t)),{}):r.reduce(((e,t)=>e+t))})),parseChildren:J},pe=[{name:"values",description:"Array of values - 2nd element will be subtracted from the first",aliases:[],required:!1,type:"array",default:[10,5]},{name:"from",description:"Numerical value that will be subtracted from",aliases:["subtractFrom"],required:!1,type:"number",default:100},{name:"subtract",description:"Numerical value to subtract",aliases:[],required:!1,type:"number",default:50}],he=L(pe),ve={description:"Subtract one numerical value from another",aliases:["-","subtract","minus","takeaway"],parameters:pe},ye={propertyAliases:he,operatorData:ve,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a,i]=yield M([e.values,e.from,e.subtract],t);t.typeChecker(I(ve.parameters,{values:r,from:a,subtract:i}));const s=null!=r?r:[a,i].filter((e=>void 0!==e));if(s.length<2)throw new Error("- Not enough values provided");if(s.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");return s[0]-s[1]})),parseChildren:J},me=[{name:"values",description:"Array of values whose product will be calculated",aliases:[],required:!0,type:"array",default:[5,5]}],fe=L(me),ge={description:"Multiply several numerical values together",aliases:["*","x","multiply","times"],parameters:me},be={propertyAliases:fe,operatorData:ge,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);if(t.typeChecker(I(ge.parameters,{values:r})),0===r.length)return 0;if(r.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");return r.reduce(((e,t)=>e*t))})),parseChildren:J},Te=[{name:"values",description:"Array of values - 1st element will be divided by the first",aliases:[],required:!1,type:"array",default:[100,10]},{name:"dividend",description:"The number that will be divided",aliases:["divide"],required:!1,type:"number",default:99},{name:"divisor",description:"The number that dividend will be divided by",aliases:["by","divideBy"],required:!1,type:"number",default:3},{name:"output",description:"Whether to output a quotient, remainder or decimal",aliases:[],required:!1,type:{literal:["quotient","remainder"]},default:"quotient"}],Oe=L(Te),Ce={description:"Divide one numerical value by another",aliases:["/","divide","÷"],parameters:Te},qe={propertyAliases:Oe,operatorData:Ce,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a,i,s]=yield M([e.values,e.dividend,e.divisor,e.output],t);t.typeChecker(I(Ce.parameters,{values:r,dividend:a,divisor:i,output:s}));const n=null!=r?r:[a,i].filter((e=>void 0!==e));if(n.length<2)throw new Error("- Not enough values provided");if(n.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");if(0===n[1])throw new Error("Division by zero!");switch(s){case"quotient":return Math.floor(n[0]/n[1]);case"remainder":return n[0]%n[1];default:return n[0]/n[1]}})),parseChildren:J},je=[{name:"values",description:"Array of values - 1st element will be compared to the second",aliases:[],required:!0,type:"array",default:[10,9]},{name:"strict",description:"Whether value must be strictly greater than (i.e. not equal) (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],Se=L(je),Ee={description:"Test if a value is greater than (or equal to) another value",aliases:[">","greaterThan","higher","larger"],parameters:je},Ae={propertyAliases:Se,operatorData:Ee,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a=!0]=yield M([e.values,e.strict],t);if(t.typeChecker(I(Ee.parameters,{values:r,strict:a})),r.length<2)throw new Error("- Not enough values provided");const[i,s]=r;return i===s&&!a||i>s})),parseChildren:J},we=[{name:"values",description:"Array of values - 1st element will be compared to the second",aliases:[],required:!0,type:"array",default:[9,10]},{name:"strict",description:"Whether value must be strictly smaller than (i.e. not equal) (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],Ne=L(we),Pe={description:"Test if a value is smaller than (or equal to) another value",aliases:["<","lessThan","lower","smaller"],parameters:we},xe={propertyAliases:Ne,operatorData:Pe,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a=!0]=yield M([e.values,e.strict],t);if(t.typeChecker(I(Pe.parameters,{values:r,strict:a})),r.length<2)throw new Error("- Not enough values provided");const[i,s]=r;return i===s&&!a||i<s})),parseChildren:J},Le=[{name:"condition",description:"The expression to check for truthiness",aliases:[],required:!0,type:"any",default:!0},{name:"valueIfTrue",description:"Value to return if condition is true",aliases:["ifTrue"],required:!0,type:"any",default:"The condition is true"},{name:"valueIfFalse",description:"Value to return if condition is false",aliases:["ifFalse","ifNot"],required:!0,type:"any",default:"The condition is false"}],Ie=L(Le),Ue={description:"Return a value based on a condition",aliases:["?","conditional","ifThen"],parameters:Le},Re={propertyAliases:Ie,operatorData:Ue,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){t.typeChecker(I(Ue.parameters,{condition:e.condition,valueIfTrue:e.valueIfTrue,valueIfFalse:e.valueIfFalse}));return(yield H(e.condition,t))?yield H(e.valueIfTrue,t):yield H(e.valueIfFalse,t)})),parseChildren:e=>{const[t,r,a]=e.children;return Object.assign(Object.assign({},e),{condition:t,valueIfTrue:r,valueIfFalse:a})}},ke=[{name:"testString",description:"The string to test",aliases:["string","value"],required:!0,type:"string",default:"test-this"},{name:"pattern",description:"The regular expression pattern",aliases:["regex","regexp","regExp","re"],required:!0,type:"string",default:"^[a-z]{4}-[a-z]{4}$"}],De=L(ke),_e={description:"Compare a string against a regex pattern",aliases:["regex","patternMatch","regexp","matchPattern"],parameters:ke},Qe={propertyAliases:De,operatorData:_e,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a]=yield M([e.testString,e.pattern],t);t.typeChecker(I(_e.parameters,{testString:r,pattern:a}));try{return new RegExp(a).test(r)}catch(e){throw new Error("Regex error:"+m(e))}})),parseChildren:e=>{const[t,r]=e.children;return Object.assign(Object.assign({},e),{testString:t,pattern:r})}},$e=[{name:"property",description:'The path to the required property (e.g. "user.firstName")',aliases:["path","propertyName"],required:!0,type:"string",default:"path.to[0].my.data"},{name:"additionalData",description:"Additional data objects to be considered",aliases:["additional","objects","data","additionalObjects"],required:!1,type:"object",default:{}}],He=L($e),Me={description:"Extract values from data objects",aliases:["dataProperties","data","getData","objectProperties","objProps","getProperty","getObjProp"],parameters:$e},Be={propertyAliases:He,operatorData:Me,evaluate:(e,r)=>a(void 0,void 0,void 0,(function*(){var a,i;const[s,n={}]=yield M([e.property,e.additionalData],r);r.typeChecker(I(Me.parameters,{property:s,additionalData:n}));const o=Object.assign(Object.assign({},null!==(i=null===(a=r.options)||void 0===a?void 0:a.data)&&void 0!==i?i:{}),n);return t(o,s)})),parseChildren:e=>{const[t,r]=e.children,a=Object.assign(Object.assign({},e),{property:t});return void 0!==r&&(a.fallback=r),a}},Fe=[{name:"string",description:"A parameterised (%1, %2) string where the parameters are to be replaced",aliases:[],required:!0,type:"string",default:"Hello, %1"},{name:"substitutions",description:"An array of substitution values for the parameterised string",aliases:["replacements","values"],required:!1,type:["array","object"],default:["friend"]},{name:"trimWhiteSpace",description:"Whether or not to trim white space from either end of the substituted strings (default: true)",aliases:["trim","trimWhitespace"],required:!1,type:"boolean",default:!0},{name:"substitutionCharacter",description:'Which character to search for in original string for replacement -- can be "%" or "$" (default: "%")',aliases:["subCharacter","subChar"],required:!1,type:"string",default:"$"},{name:"numberMapping",description:"Rules for mapping number values to text strings, such as pluralisation.",aliases:["numMap","numberMap","pluralisation","pluralization","plurals"],required:!1,type:"object",default:{}}],Ge=L(Fe),ze={description:"Replace values in a string using simple parameter substitution",aliases:["stringSubstitution","substitute","stringSub","replace"],parameters:Fe},We={propertyAliases:Ge,operatorData:ze,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a={},i=!0,s="%",n={}]=yield M([e.string,e.substitutions,e.trimWhiteSpace,e.substitutionCharacter,e.numberMapping],t);if(t.typeChecker(I(ze.parameters,{string:r,substitutions:a,trimWhiteSpace:i,substitutionCharacter:s,numberMapping:n})),Array.isArray(a)){const e="$"===s?"$":"%",t=new RegExp(`(?<!\\\\)(${"%"===e?"%":"\\$"}[\\d]+)`,"g"),n=(r.match(t)||[]).sort(((e,t)=>Number(e.slice(1))-Number(t.slice(1)))),o=new Set(n),l=U(Array.from(o),a.map((e=>i?String(e).trim():e)));return r.split(t).map((e=>e in l?l[e]:e)).join("").replace(`\\${e}`,e)}return r.split(/(?<!\\)({{(?:[A-Za-z0-9_.]|\[[0-9]+\])+}})/g).map((e=>{if(!/(?<!\\){{(.+)}}/.exec(e))return e.replace("\\{{","{{");const r=Je(e,a,n,t.options.data);return i?String(r).trim():r})).join("")})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{string:t,substitutions:r})}},Je=(e,r,a,i={})=>{const s=e.replace(/{{(.+)}}/,"$1"),n=t(r,s,t(i,s,""));if("number"!=typeof n)return n;if(!(s in a))return n;const o=a[s];if(n in o)return o[n].replace("{}",String(n));const l=Object.keys(a[s]),u=l.find((e=>e.startsWith(">")));if(u){if(n>Number(u.slice(1)))return null==o?void 0:o[u]}const d=l.find((e=>e.startsWith("<")));if(d){if(n<Number(d.slice(1)))return null==o?void 0:o[d]}return o.other?o.other.replace("{}",String(n)):n},Ve=[{name:"values",description:"An array to count",aliases:[],required:!0,type:"array",default:[1,2,3,4,5]}],Ye=L(Ve),Xe={description:"Count elements in an array",aliases:["count","length"],parameters:Ve},Ke={propertyAliases:Ye,operatorData:Xe,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){const r=yield M(e.values,t);return t.typeChecker(I(Xe.parameters,{values:r})),r.length})),parseChildren:e=>{const[t]=e.children;return Object.assign(Object.assign({},e),{values:t})}},Ze=[{name:"value",description:"The string to be split",aliases:["string"],required:!0,type:"string",default:"Alpha, Bravo, Charlie"},{name:"delimiter",description:"The value to split the string on (default is white space)",aliases:["separator"],required:!1,type:"string",default:","},{name:"trimWhiteSpace",description:"Whether to trim white space from around the resulting elements (default: true)",aliases:["trim","trimWhitespace"],required:!1,type:"boolean",default:!0},{name:"excludeTrailing",description:"If the input string ends in a delimiter, there will be an additional blank element if this value is false (default: true)",aliases:["removeTrailing","excludeTrailingDelimiter"],required:!1,type:"boolean",default:!0}],et=L(Ze),tt={description:"Split a string into an array",aliases:["split","arraySplit"],parameters:Ze},rt=" ",at={propertyAliases:et,operatorData:tt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,a,i;const[s,n,o,l]=yield M([e.value,null!==(r=e.delimiter)&&void 0!==r?r:rt,null===(a=e.trimWhiteSpace)||void 0===a||a,null===(i=e.excludeTrailing)||void 0===i||i],t);t.typeChecker(I(tt.parameters,{value:s,delimiter:n,trimWhiteSpace:o,excludeTrailing:l}));let u=s.split(n);return o&&(u=u.map((e=>e.trim()))),l&&""===u[u.length-1]&&u.pop(),u})),parseChildren:e=>{const[t,r=rt]=e.children;return Object.assign(Object.assign({},e),{value:t,delimiter:r})}},it=[{name:"query",description:"SQL query string, with parameterised replacements (e.g. $1, $2, etc)",aliases:["text"],required:!0,type:"string"},{name:"values",description:"An array/object of values to replace the SQL string parameters, as per SQL connection specifications ",aliases:["replacements"],required:!1,type:["array","object"]},{name:"single",description:"Specify if returning a single record",aliases:["singleRecord"],required:!1,type:"boolean"},{name:"flatten",description:"Specify whether to flatten resulting record objects to arrays of values",aliases:["flat","array"],required:!1,type:"boolean"},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean"}],st=L(it),nt={description:"Query an SQL database",aliases:["sql","pgSql","postgres","pg","sqLite","sqlite","mySql"],parameters:it},ot={propertyAliases:st,operatorData:nt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,i,s;const n=null===(r=t.options)||void 0===r?void 0:r.sqlConnection;if(!n)throw new Error("No SQL database connection provided");const[o,l,u,d,c,p]=yield M([e.query,e.values||[],e.single,e.flatten,e.useCache,e.type],t);t.typeChecker(I(nt.parameters,{query:o,single:u,flatten:d,values:l,useCache:c}));const h=null===(s=null!==(i=e.useCache)&&void 0!==i?i:t.options.useCache)||void 0===s||s;{const e=t.cache.useCache(h,((e,t,r,i,s)=>a(void 0,void 0,void 0,(function*(){const a=(yield n.query({query:e,values:t}))||[];["array","string","number"].includes(null!=s?s:"")&&(i=!0);const o=i?a.map((e=>{const t=Object.values(e);return t.length<=1?t[0]:t})):a;return r?o[0]:o}))),o,l,u,d,p);return e}})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{query:t,values:r})}},lt=[{name:"query",description:"GraphQL query string",aliases:[],required:!0,type:"string",default:'query getCountries {\n countries(filter: {continent: {eq: "OC"}}) {\n name\n }\n }'},{name:"url",description:"Endpoint for the GraphQL request (if not already provided in options)",aliases:["endpoint"],required:!1,type:["string","null"],default:"https://countries.trevorblades.com/"},{name:"headers",description:"HTTP Headers (if not already provided in options)",aliases:[],required:!1,type:"object",default:{}},{name:"variables",description:"Values for the variables used in query (key-value pairs)",aliases:[],required:!1,type:"object",default:{}},{name:"returnNode",description:"Property path to extract from the query response",aliases:["outputNode","returnProperty"],required:!1,type:"string",default:"data.countries[1].name"},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],ut=L(lt),dt={description:"GraphQL request",aliases:["graphQl","graphql","gql"],parameters:lt},ct={propertyAliases:ut,operatorData:dt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,i,s,n,o,l,u;const d=null!==(r=t.graphQLClient)&&void 0!==r?r:t.httpClient;if(!d)throw new Error("No HTTP client provided for GraphQL connection");const[c,p,h,v,y,m]=yield M([e.query,e.url,e.variables,e.returnNode,e.headers,e.useCache],t),{url:f,headers:g}=p instanceof Object?p:{url:p,headers:null};t.typeChecker([...I(dt.parameters,{url:f,query:c,variables:h,returnNode:v,headers:y,useCache:m}),{name:"headers",value:g,expectedType:["object","null"]}]);const b=f&&"graphqlendpoint"!==f.toLowerCase()?f:"",T=null!==(n=null!==(s=null===(i=t.options.graphQLConnection)||void 0===i?void 0:i.endpoint)&&void 0!==s?s:t.options.baseEndpoint)&&void 0!==n?n:"",O=_(b)?b:Q(T,b),C={query:c,variables:h},q=null===(o=null!=m?m:t.options.useCache)||void 0===o||o,j=yield t.cache.useCache(q,((e,t,r,i)=>a(void 0,void 0,void 0,(function*(){const a=yield $(d,{url:e,method:"post",data:t,headers:r});return D(null==a?void 0:a.data,i)}))),O,C,Object.assign(Object.assign(Object.assign(Object.assign({},null===(l=t.options.graphQLConnection)||void 0===l?void 0:l.headers),null===(u=t.options)||void 0===u?void 0:u.headers),g),y),v);return j})),parseChildren:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,a="",i,...s]=yield M(e.children,t),n=Array.isArray(i)?i:[i],o=s.slice(0,n.length),l=U(n,o),u=Object.assign(Object.assign({},e),{query:r,url:a,variables:l});return s.length>n.length&&(u.returnNode=s.pop()),u}))},pt=[{name:"url",description:"Endpoint URL",aliases:["endpoint"],required:!0,type:"string",default:"https://restcountries.com/v3.1/name/zealand"},{name:"returnProperty",description:"Property from request result",aliases:["outputProperty"],required:!1,type:"string",default:"result.path"},{name:"headers",description:"HTTP Headers",aliases:[],required:!1,type:"object",default:{}},{name:"parameters",description:"Query parameters (key-value)",aliases:["queryParams","queryParameters","urlQueries"],required:!1,type:"object",default:{}},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],ht=L(pt),vt={description:"HTTP GET Request",aliases:["get","api"],parameters:pt},yt=(e,t)=>a(void 0,void 0,void 0,(function*(){const[r="",a,...i]=yield M(e.children,t),s=Array.isArray(a)?a:[a],n=i.slice(0,s.length),o=U(s,n),l=Object.assign(Object.assign({},e),{url:r,parameters:o});return i.length>s.length&&(l.returnProperty=i.pop()),l})),mt=yt,ft={propertyAliases:ht,operatorData:vt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,i,s;const n=t.httpClient;if(!n)throw new Error("No HTTP client provided");const[o,l,u,d,c]=yield M([e.url,e.parameters,e.returnProperty,e.headers,e.useCache],t),{url:p,headers:h}=o instanceof Object?o:{url:o,headers:null};t.typeChecker([...I(vt.parameters,{url:p,returnProperty:u,headers:d,parameters:l,useCache:c}),{name:"headers",value:h,expectedType:["object","null"]}]);const v=null!==(r=t.options.baseEndpoint)&&void 0!==r?r:"",y=Object.assign(Object.assign(Object.assign({},null===(i=t.options)||void 0===i?void 0:i.headers),h),d),m=null===(s=null!=c?c:t.options.useCache)||void 0===s||s,f=yield t.cache.useCache(m,((e,t,r,i)=>a(void 0,void 0,void 0,(function*(){const a=yield $(n,{url:e,params:t,headers:r});return D(a,i)}))),_(p)?p:Q(v,p),l,y,u);return f})),parseChildren:yt},gt=[{name:"url",description:"Endpoint URL",aliases:["endpoint"],required:!0,type:"string",default:"https://jsonplaceholder.typicode.com/posts"},{name:"returnProperty",description:"Property path from request result",aliases:["outputProperty"],required:!1,type:"string",default:"result.path"},{name:"headers",description:"HTTP Headers",aliases:[],required:!1,type:"object",default:{}},{name:"parameters",description:"JSON Body parameters (key-value)",aliases:["bodyJson","data"],required:!1,type:"object",default:{}},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],bt=L(gt),Tt={description:"HTTP POST Request",aliases:["post"],parameters:gt},Ot={propertyAliases:bt,operatorData:Tt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r,i,s;const n=t.httpClient;if(!n)throw new Error("No HTTP client provided");const[o,l,u,d,c]=yield M([e.url,e.parameters,e.returnProperty,e.headers,e.useCache],t),{url:p,headers:h}=o instanceof Object?o:{url:o,headers:null};t.typeChecker([...I(Tt.parameters,{url:p,headers:d,data:l,returnProperty:u,useCache:c}),{name:"headers",value:h,expectedType:["object","null"]}]);const v=null!==(r=t.options.baseEndpoint)&&void 0!==r?r:"",y=Object.assign(Object.assign(Object.assign({},null===(i=t.options)||void 0===i?void 0:i.headers),h),d),m=null!==(s=null!=c?c:t.options.useCache)&&void 0!==s&&s,f=yield t.cache.useCache(m,((e,t,r,i)=>a(void 0,void 0,void 0,(function*(){const a=yield $(n,{url:e,data:t,headers:r,method:"post"});return D(a,i)}))),_(p)?p:Q(v,p),l,y,u);return f})),parseChildren:mt},Ct=[{name:"properties",description:'An array of objects, each with a "key" property and a "value" property',aliases:["values","keyValPairs","keyValuePairs"],required:!0,type:"array",default:["firstKey","firstValue","secondKey","secondValue"]}],qt=L(Ct),jt={description:"Construct an object using objects defining keys and values",aliases:["buildObject","build","object"],parameters:Ct},St={propertyAliases:qt,operatorData:jt,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){t.typeChecker(I(jt.parameters,{properties:e.properties}));const r=e.properties.filter((e=>e instanceof Object&&"key"in e&&"value"in e)).map((({key:e,value:r})=>{return i=[e,r],a(void 0,void 0,void 0,(function*(){const[e,r]=yield M(i,t);return t.typeChecker({name:"key",value:e,expectedType:["string","number","boolean"]}),[e,r]}));var i}));return Object.fromEntries(yield Promise.all(r))})),parseChildren:e=>{const t=e.children;if(t.length%2!=0)throw new Error("Even number of children required to make key/value pairs");const r=t.filter(((e,t)=>t%2==0)),a=t.filter(((e,t)=>t%2==1)),i=r.map(((e,t)=>({key:e,value:a[t]})));return Object.assign(Object.assign({},e),{properties:i})}},Et=[{name:"matchExpression",description:"Expression to match against",aliases:["match"],required:!0,type:["string","number","boolean"],default:"matchMe"},{name:"branches",description:"Object whose keys are compared against the match expression. The value of the matching key is returned",aliases:["arms","cases"],required:!1,type:["object","array"],default:{matchMe:"YES",nonMatch:"NO"}},{name:"[...branches]",description:"Branch properties can optionally be placed at the operator root",aliases:[],required:!1,type:["object","array"]}],At={propertyAliases:L(Et),operatorData:{description:"Return different values depending on a matching expression",aliases:["match","switch"],parameters:Et},evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){var r;const a=yield H(e.matchExpression,t);t.typeChecker({name:"matchExpression",value:a,expectedType:["string","number","boolean"]});const s=Array.isArray(e.branches)?R(e.branches):null!==(r=e.branches)&&void 0!==r?r:{},n=i(s)?yield H(s,t):s;if(!g(n))throw new Error("Branches don't evaluate to an object");if(a in n)return yield H(n[a],t);if("fallback"in n)return yield H(n.fallback,t);if(a in e)return yield H(e[a],t);throw new Error(`No match found for ${a}`)})),parseChildren:(e,t)=>a(void 0,void 0,void 0,(function*(){const[r,...a]=e.children,i=R(yield M(a,t));return Object.assign(Object.assign({},e),{matchExpression:r,branches:i})}))},wt=[{name:"functionPath",description:"Path (in options.functions) to the required function",aliases:["functionsPath","functionName","funcName","path","name"],required:!0,type:"string",default:null},{name:"args",description:"Arguments for the function",aliases:["arguments","variables"],required:!1,type:"array",default:[]},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!1}],Nt=L(wt),Pt={description:"Call a custom function (defined in options)",aliases:["customFunctions","customFunction","objectFunctions","function","functions","runFunction"],parameters:wt},xt={propertyAliases:Nt,operatorData:Pt,evaluate:(e,r)=>a(void 0,void 0,void 0,(function*(){var i,s,n;const[o,l=[],u]=yield M([e.functionPath,e.args,e.useCache],r);r.typeChecker(I(Pt.parameters,{functionPath:o,args:l}));const{data:d,functions:c}=r.options,p=null!==(s=null!==(i=t(c,o,null))&&void 0!==i?i:t(d,o,null))&&void 0!==s?s:t(r.options,o,null);if(!p||"function"!=typeof p)throw new Error(`- No function found: "${o}"`);const h=null!==(n=null!=u?u:r.options.useCache)&&void 0!==n&&n;return yield r.cache.useCache(h,((e,...t)=>a(void 0,void 0,void 0,(function*(){return yield p(...t)}))),o,...l)})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{functionPath:t,args:r})}},Lt=[{name:"value",description:"Value to pass through",aliases:["_","data"],required:!0,type:"any",default:null}],It=L(Lt),Ut={description:"Pass through a value unchanged (or change its type)",aliases:["_","passThru","passthru","pass","ignore","coerce","convert"],parameters:Lt},Rt={propertyAliases:It,operatorData:Ut,evaluate:(e,t)=>a(void 0,void 0,void 0,(function*(){return t.typeChecker(I(Ut.parameters,{value:e.value})),yield H(e.value,t)})),parseChildren:e=>{const[...t]=e.children,r=1===(null==t?void 0:t.length)?t[0]:t;return Object.assign(Object.assign({},e),{value:r})}};var kt=Object.freeze({__proto__:null,AND:V,BUILD_OBJECT:St,CONDITIONAL:Re,COUNT:Ke,CUSTOM_FUNCTIONS:xt,DIVIDE:qe,EQUAL:ae,GET:ft,GRAPHQL:ct,GREATER_THAN:Ae,LESS_THAN:xe,MATCH:At,MULTIPLY:be,NOT_EQUAL:oe,OBJECT_PROPERTIES:Be,OR:Z,PASSTHRU:Rt,PLUS:ce,POST:Ot,REGEX:Qe,SPLIT:at,SQL:ot,STRING_SUBSTITUTION:We,SUBTRACT:ye});class Dt{constructor(e){var t,r;this.useCache=(e,t,...r)=>a(this,void 0,void 0,(function*(){if(!e)return yield t(...r);const a=_t(r),i=a in this.store,s=Date.now(),n=i&&s-this.store[a].timestamp>1e3*this.maxTime;if(i)return this.queue=this.queue.filter((e=>e!==a)),this.queue.unshift(a),this.store[a].timestamp=s,n&&(this.store[a].result=yield t(...r)),this.store[a].result;const o=yield t(...r);return this.store[a]={result:o,timestamp:s},this.queue.unshift(a),this.resizeCache(),o})),this.getMax=()=>this.maxSize,this.setMax=e=>{this.maxSize=e,this.resizeCache()},this.getMaxTime=()=>this.maxTime,this.setMaxTime=e=>{this.maxTime=e},this.getCache=()=>this.store,this.setCache=e=>this.store=e,this.resizeCache=()=>{if(this.queue.length>this.maxSize){this.queue.slice(this.maxSize).forEach((e=>delete this.store[e])),this.queue=this.queue.slice(0,this.maxSize)}},this.store={},this.queue=[],this.maxSize=null!==(t=null==e?void 0:e.maxSize)&&void 0!==t?t:50,this.maxTime=null!==(r=null==e?void 0:e.maxTime)&&void 0!==r?r:1800}}const _t=e=>e.map((e=>"object"==typeof e?JSON.stringify(e):e)).join("_"),Qt=e=>e?"name"in e&&"fetch"===e.name?Ht(e):"Axios"in e&&"Axios"===e.Axios.name?$t(e):e:"undefined"!=typeof window&&"document"in window&&"fetch"in window?Ht(window.fetch):void 0,$t=e=>({get:t=>a(void 0,void 0,void 0,(function*(){return(yield e(Object.assign(Object.assign({},t),{method:"get"}))).data})),post:t=>a(void 0,void 0,void 0,(function*(){return(yield e(Object.assign(Object.assign({},t),{method:"post"}))).data})),throwError:t=>{var r;if(e.isAxiosError(t)){if(!(null==t?void 0:t.response))throw new Error("Network Error");console.log(null===(r=t.response)||void 0===r?void 0:r.data)}throw t}}),Ht=e=>({get:t=>a(void 0,void 0,void 0,(function*(){const{url:r,headers:a,params:i}=t,s=new URLSearchParams(i),n=s.size>0?`?${s.toString()}`:"",o=yield e(r+n,{headers:a,method:"GET"}),l=yield o.json();if(!o.ok)throw console.log(l),new Error(`Request failed with status code ${o.status}`);return l})),post:t=>a(void 0,void 0,void 0,(function*(){const{url:r,headers:a,params:i,data:s}=t,n=new URLSearchParams(i),o=n.size>0?`?${n.toString()}`:"",l=yield e(r+o,{headers:a,body:JSON.stringify(s),method:"POST"}),u=yield l.json();if(!l.ok)throw console.log(u),new Error(`Request failed with status code ${l.status}`);return u})),throwError:e=>{throw new Error(`${m(e)}`)}});class Mt{constructor(e={}){var t,r,a;this.typeChecker=(...e)=>{const t=1===e.length&&Array.isArray(e[0])?e[0]:e,r=w(...t);if(!0!==r)throw new Error(r)},this.getCache=()=>this.cache.getCache(),this.setCache=e=>this.cache.setCache(e),this.getVersion=()=>"2.15.0",this.options=Ft(e),this.operators=l(kt,null!==(r=null===(t=this.options)||void 0===t?void 0:t.excludeOperators)&&void 0!==r?r:[],b),this.operatorAliases=b,this.cache=new Dt({maxSize:e.maxCacheSize,maxTime:e.maxCacheTime}),this.graphQLClient=Qt(null===(a=e.graphQLConnection)||void 0===a?void 0:a.httpClient),this.httpClient=Qt(e.httpClient)}evaluate(e,t={}){var r;return a(this,void 0,void 0,(function*(){const a=v(this.options,Ft(t));return t.httpClient&&(this.httpClient=Qt(t.httpClient)),(null===(r=t.graphQLConnection)||void 0===r?void 0:r.httpClient)&&(this.graphQLClient=Qt(t.graphQLConnection.httpClient)),a.maxCacheSize&&a.maxCacheSize!==this.cache.getMax()&&this.cache.setMax(a.maxCacheSize),a.maxCacheTime&&a.maxCacheTime!==this.cache.getMaxTime()&&this.cache.setMaxTime(a.maxCacheTime),yield H(e,{options:a,operators:t.excludeOperators?l(kt,t.excludeOperators,b):this.operators,operatorAliases:this.operatorAliases,typeChecker:a.skipRuntimeTypeCheck?()=>{}:this.typeChecker,resolvedAliasNodes:{},cache:this.cache,graphQLClient:this.graphQLClient,httpClient:this.httpClient})}))}getOptions(){return this.options}updateOptions(e){this.options=v(this.options,Ft(e)),this.options.excludeOperators&&(this.operators=l(kt,this.options.excludeOperators,b))}getOperators(){const e=this.options.excludeOperators?l(kt,this.options.excludeOperators,b):this.operators,t=Object.entries(e).map((([e,t])=>Object.assign({name:e},t.operatorData))),r=[...new Set(Object.values(b))];return t.sort(((e,t)=>r.indexOf(e.name)-r.indexOf(t.name)))}getFragments(){var e;return Object.entries(null!==(e=this.options.fragments)&&void 0!==e?e:{}).map((([e,t])=>Object.assign({name:e},null==t?void 0:t.metadata)))}getCustomFunctions(){var e;return Object.entries(null!==(e=this.options.functions)&&void 0!==e?e:{}).map((([e,t])=>({name:e,numRequiredArgs:t.length})))}}const Bt=(e,t)=>new Mt(t).evaluate(e),Ft=e=>"objects"in e?Object.assign(Object.assign({},e),{data:e.objects}):e,Gt=e=>({query:({query:t,values:r=[]})=>a(void 0,void 0,void 0,(function*(){const a={text:t,values:null!=r?r:[]},i=yield e.query(a);if(null==i?void 0:i.error)throw new Error(i.error);return i.rows}))}),zt=e=>({query:({query:t,values:r=[]})=>a(void 0,void 0,void 0,(function*(){try{return yield e.all(t,r)}catch(e){throw`SQLite error: ${null==e?void 0:e.message}`}}))});export{$t as AxiosClient,Ht as FetchClient,Mt as FigTreeEvaluator,Gt as SQLNodePostgres,zt as SQLite,Bt as evaluateExpression,p as isAliasString,s as isFragmentNode,g as isObject,i as isOperatorNode,C as preProcessShorthand,n as standardiseOperatorName,u as truncateString};
1
+ import{camelCase as e}from"change-case";import t from"object-property-extractor";import{dequal as r}from"dequal/lite";import a from"querystring";function i(e,t,r,a){return new(r||(r=Promise))((function(i,s){function n(e){try{l(a.next(e))}catch(e){s(e)}}function o(e){try{l(a.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(n,o)}l((a=a.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const s=e=>e instanceof Object&&"operator"in e,n=e=>e instanceof Object&&"fragment"in e,o=t=>{const r=e(t);return r||t},l=(e,t)=>t[o(e)],u=(e,t,r)=>{const a=Object.assign({},e);return t.forEach((e=>{r[o(e)]||console.warn(`Invalid operator exclusion: ${e}`),delete a[r[o(e)]]})),a},d=(e,t=200)=>e.length<t?e:`${e.slice(0,t-2).trim()}...`,c=(e,t,r=!1)=>{if(void 0!==e)return e;if(r)return d(t);throw new Error(d(t))},p=(e,t)=>{const r=Object.entries(e).map((([e,r])=>[t(e),r]));return Object.fromEntries(r)},h=e=>/^\$.+/.test(e),v=(e,{resolvedAliasNodes:t})=>{var r;return"string"==typeof e&&h(e)&&null!==(r=null==t?void 0:t[e])&&void 0!==r?r:e},y=(e,t)=>{const r=Object.assign(Object.assign({},e),t);return(e.data||t.data)&&(r.data=Object.assign(Object.assign({},e.data),t.data)),(e.functions||t.functions)&&(r.functions=Object.assign(Object.assign({},e.functions),t.functions)),(e.fragments||t.fragments)&&(r.fragments=Object.assign(Object.assign({},e.fragments),t.fragments)),(e.headers||t.headers)&&(r.headers=Object.assign(Object.assign({},e.headers),t.headers)),r},m={number:e=>g(e),string:e=>String(e),array:e=>Array.isArray(e)?e:[e],boolean:e=>Boolean(e),bool:e=>Boolean(e)},f=e=>e.message,g=e=>{if("string"!=typeof e)return Number.isNaN(Number(e))?e:Number(e);const t=new RegExp(/-?\d*\.?\d+/gm),r=e.match(t);return r?Number(r[0]):0},b=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),T={and:"AND","&":"AND","&&":"AND",or:"OR","|":"OR","||":"OR","=":"EQUAL",eq:"EQUAL",equal:"EQUAL",equals:"EQUAL","!=":"NOT_EQUAL","!":"NOT_EQUAL",ne:"NOT_EQUAL",notEqual:"NOT_EQUAL","+":"PLUS",plus:"PLUS",add:"PLUS",concat:"PLUS",join:"PLUS",merge:"PLUS","-":"SUBTRACT",subtract:"SUBTRACT",minus:"SUBTRACT",takeaway:"SUBTRACT","*":"MULTIPLY",x:"MULTIPLY",multiply:"MULTIPLY",times:"MULTIPLY","/":"DIVIDE",divide:"DIVIDE","÷":"DIVIDE",">":"GREATER_THAN",greaterThan:"GREATER_THAN",higher:"GREATER_THAN",larger:"GREATER_THAN","<":"LESS_THAN",lessThan:"LESS_THAN",lower:"LESS_THAN",smaller:"LESS_THAN","?":"CONDITIONAL",conditional:"CONDITIONAL",ifThen:"CONDITIONAL",regex:"REGEX",patternMatch:"REGEX",regexp:"REGEX",matchPattern:"REGEX",dataProperties:"OBJECT_PROPERTIES",data:"OBJECT_PROPERTIES",getData:"OBJECT_PROPERTIES",objectProperties:"OBJECT_PROPERTIES",objProps:"OBJECT_PROPERTIES",getProperty:"OBJECT_PROPERTIES",getObjProp:"OBJECT_PROPERTIES",stringSubstitution:"STRING_SUBSTITUTION",substitute:"STRING_SUBSTITUTION",stringSub:"STRING_SUBSTITUTION",replace:"STRING_SUBSTITUTION",split:"SPLIT",arraySplit:"SPLIT",count:"COUNT",length:"COUNT",get:"GET",api:"GET",post:"POST",sql:"SQL",pgSql:"SQL",postgres:"SQL",pg:"SQL",sqLite:"SQL",sqlite:"SQL",mySql:"SQL",graphQl:"GRAPHQL",graphql:"GRAPHQL",gql:"GRAPHQL",buildObject:"BUILD_OBJECT",build:"BUILD_OBJECT",object:"BUILD_OBJECT",match:"MATCH",switch:"MATCH",customFunctions:"CUSTOM_FUNCTIONS",customFunction:"CUSTOM_FUNCTIONS",objectFunctions:"CUSTOM_FUNCTIONS",function:"CUSTOM_FUNCTIONS",functions:"CUSTOM_FUNCTIONS",runFunction:"CUSTOM_FUNCTIONS",_:"PASSTHRU",passThru:"PASSTHRU",passthru:"PASSTHRU",pass:"PASSTHRU",ignore:"PASSTHRU",coerce:"PASSTHRU",convert:"PASSTHRU"},O=T,C=/(\$[^()]+)\((.*)\)/,q=(e,t={},r=!0)=>r?"string"==typeof e?j(e,t):b(e)?S(e,t):e:e,j=(e,t)=>{const r=C.exec(e);if(!r)return e;const a=r[1].trim(),i=r[2].split(",").map((e=>q(e.trim(),t)));return E(a,i,t)},S=(e,t)=>{if(s(e)||n(e))return e;const r=Object.entries(e),a=r.filter((([e])=>h(e))),i=r.filter((([e])=>!h(e))),o=a.reduce(((e,[r,a])=>e=Object.assign(Object.assign({},e),E(r,a,t))),{});return Object.assign(Object.assign({},o),Object.fromEntries(i))},E=(e,t,r)=>{const a=e.slice(1),i=l(a,O);return i?Array.isArray(t)?{operator:i,children:t}:b(t)&&!Object.keys(t).some((e=>h(e)))?Object.assign({operator:i},t):{operator:i,children:[t]}:a in r?{fragment:a,parameters:Object.assign({},t)}:{[e]:t}},A=e=>b(e)&&"literal"in e,w=({value:e,name:t,expectedType:r})=>{if(A(r)){const{literal:a}=r;return!!a.includes(e)||x(t,e,`Literal(${a.map((e=>void 0===e?"undefined":`"${e}"`)).join(", ")})`)}if(Array.isArray(r))return!!r.some((r=>!0===w({value:e,name:t,expectedType:r})))||x(t,e,r.join("|"));return!!(0,P[r])(e)||x(t,e,r)},N=(...e)=>{const t=[];return e.forEach((e=>{const r=w(e);!0!==r&&t.push(r)})),!(t.length>0)||t.join("\n")},P={any:e=>void 0!==e,string:e=>"string"==typeof e,number:e=>"number"==typeof e,boolean:e=>"boolean"==typeof e,array:e=>Array.isArray(e),null:e=>null===e,object:e=>b(e),undefined:e=>void 0===e},x=(e,t,r)=>void 0===t&&e?`- Missing required property "${e}" (type: ${r})`:void 0!==e?`- Property "${e}" (value: ${L(t)}) is not of type: ${r}`:`- ${L(t)} is not of type: ${r}`,L=e=>{const t=void 0===e||Number.isNaN(e)?String(e):JSON.stringify(e);return d(t,50)},I=e=>{const t={};return e.forEach((e=>{e.aliases.forEach((r=>t[r]=e.name))})),t},U=(e,t)=>e.map((({name:e,required:r,type:a})=>{if(A(a)){const i=[...a.literal];return r||i.push(void 0),{name:e,value:t[e],expectedType:{literal:i}}}const i=Array.isArray(a)?a:[a];r||i.push("undefined");const s=1===i.length?i[0]:i;return{name:e,value:t[e],expectedType:s}})),R=(e,t)=>{const r=e.map(((e,r)=>[e,t[r]]));return Object.fromEntries(r)},k=e=>{if(e.length%2!=0)throw new Error("Even number of children required to make key/value pairs");const t=e.filter(((e,t)=>t%2==0)),r=N(...t.map((e=>({value:e,expectedType:["string","number","boolean"]}))));if(!0!==r)throw new Error(r);const a=e.filter(((e,t)=>t%2==1)),i={};return t.forEach(((e,t)=>{i[e]=a[t]})),i},D=e=>b(e)&&1===Object.keys(e).length?Object.values(e)[0]:e,_=(e,r,a=void 0)=>{const i=r?t(e,r,a):e;return Array.isArray(i)?i.map((e=>D(e))):r?null===i?null:D(i):i},Q=e=>/^https?:\/\/.+/.test(e),$=(...e)=>e.reduce(((e,t,r)=>{const a="/"===t[0]?1:0,i="/"===t.slice(-1)?-1:void 0,s=t.slice(a,i);return""===s?e:e+(0===r?"":"/")+s}),""),H=(e,t)=>i(void 0,void 0,void 0,(function*(){const{url:r,params:a={},data:i={},headers:s={},method:n="get"}=t;if(!r||""===r)throw new Error("Invalid url");try{return yield e[n]({url:r,headers:Object.assign({"Content-Type":"application/json",Accept:"application/json"},s),params:a,data:i})}catch(t){e.throwError(t)}})),M=(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,i,o;const{options:u,operators:d,operatorAliases:h}=t;let y=(null==u?void 0:u.allowJSONStringInput)?(e=>{if("string"!=typeof e)return e;try{const t=JSON.parse(e);return s(t)?t:e}catch(t){return e}})(e):e;y=q(y,null===(r=t.options)||void 0===r?void 0:r.fragments,!u.noShorthand),Array.isArray(y)&&(y=yield B(y,t));const g=s(y),T=n(y);if(u.evaluateFullObject&&!g&&!T)return v(yield G(y,t),t);if(!g&&!T)return u.supportDeprecatedValueNodes&&b(y)&&"value"in y?y.value:v(y,t);const{fallback:O}=y,C=null!==(a=null==u?void 0:u.returnErrorAsString)&&void 0!==a&&a;if(T){const[e,r]=yield B([y.fragment,y.parameters],t),a=q(null===(i=null==u?void 0:u.fragments)||void 0===i?void 0:i[e],u.fragments,!u.noShorthand);if(void 0===a)return c(yield M(O,t),`Fragment not defined: ${e}`,C);if(!s(a))return v(a,t);y=Object.assign(Object.assign(Object.assign({},y),a),r),delete y.fragment}try{const e=l(y.operator,h);if(!e)return c(yield M(O,t),`Invalid operator: ${y.operator}`,C);if(!t.operators[e])return c(yield M(O,t),`Excluded operator: ${y.operator}`,C);const{propertyAliases:r,evaluate:a,parseChildren:i}=d[e];y=((e,t)=>p(t,(t=>t in e?e[t]:t)))(r,y);const s=yield F(y,t);T||Object.entries(s).forEach((([e,r])=>t.resolvedAliasNodes[e]=r));const n=T?Object.assign(Object.assign({},t),{resolvedAliasNodes:Object.assign(Object.assign({},t.resolvedAliasNodes),s)}):t;if("children"in y){if(Array.isArray(y.children)||(y.children=yield M(y.children,n)),!Array.isArray(y.children))return c(yield M(O,t),`Operator: ${e}\n- Property "children" is not of type: array`,C);y=yield i(y,n),delete y.children}let u;try{u=yield a(y,n)}catch(r){return c(yield M(y.fallback,t),`Operator: ${e}\n${f(r)}`,C)}const v=null!==(o=null==y?void 0:y.outputType)&&void 0!==o?o:null==y?void 0:y.type;if(!v)return u;const g=yield M(v,t);return g in m?m[g](u):c(yield M(O,t),`Operator: ${e}\n- Invalid output type: ${g}`,C)}catch(e){return c(yield M(O,t),f(e),C)}})),B=(e,t)=>i(void 0,void 0,void 0,(function*(){return Array.isArray(e)?yield Promise.all(e.map((e=>M(e,t)))):yield M(e,t)})),F=(e,t)=>i(void 0,void 0,void 0,(function*(){const r=Object.keys(e).filter(h);if(0===r.length)return{};const a=[];return r.forEach((r=>a.push(M(e[r],t)))),R(r,yield Promise.all(a))})),G=(e,t)=>i(void 0,void 0,void 0,(function*(){if(!b(e))return e;const r=[],a=[];Object.entries(e).forEach((([r,i])=>{h(r)&&(a.push(r,M(i,t)),delete e[r])}));const i=yield Promise.all(a);t.resolvedAliasNodes=Object.assign(Object.assign({},t.resolvedAliasNodes),k(i)),Object.entries(e).forEach((([e,a])=>{r.push(e,M(a,t))}));const s=yield Promise.all(r);return v(k(s),t)})),z=[{name:"values",description:"Returns true if all values are true",aliases:[],required:!0,type:"array",default:[!0,!0]}],W=I(z),J={description:"Logical AND",aliases:["and","&","&&"],parameters:z},V=e=>{const t=e.children;return Object.assign(Object.assign({},e),{values:t})},Y={propertyAliases:W,operatorData:J,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield B(e.values,t);return t.typeChecker(U(J.parameters,{values:r})),r.reduce(((e,t)=>e&&!!t),!0)})),parseChildren:V},X=[{name:"values",description:"Returns true if any values are true",aliases:[],required:!0,type:"array",default:[!0,!1]}],K=I(X),Z={description:"Logical OR",aliases:["or","|","||"],parameters:X},ee={propertyAliases:K,operatorData:Z,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield B(e.values,t);return t.typeChecker(U(Z.parameters,{values:r})),r.reduce(((e,t)=>e||!!t),!1)})),parseChildren:V},te=[{name:"values",description:"Array of values to check for equality",aliases:[],required:!0,type:"array",default:["These are equal","These are equal"]},{name:"caseInsensitive",description:"If the values are strings, ignore the case (default: false)",aliases:[],required:!1,type:"boolean",default:!1},{name:"nullEqualsUndefined",description:"Whether a null value should be considered equal to an undefined value (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],re=I(te),ae={description:"Test multiple values are equal",aliases:["=","eq","equal","equals"],parameters:te},ie={propertyAliases:re,operatorData:ae,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var a,i,s;const[n,o,l]=yield B([e.values,e.caseInsensitive,e.nullEqualsUndefined],t);t.typeChecker(U(ae.parameters,{values:n,caseInsensitive:o,nullEqualsUndefined:l}));const u=(void 0!==o?o:null!==(i=null===(a=t.options)||void 0===a?void 0:a.caseInsensitive)&&void 0!==i&&i)&&n.every((e=>"string"==typeof e))?n.map((e=>e.toLowerCase())):n;return!(void 0!==l?l:void 0!==(null===(s=t.options)||void 0===s?void 0:s.nullEqualsUndefined)&&t.options.nullEqualsUndefined)||null!==u[0]&&void 0!==u[0]?u.every((e=>r(e,u[0]))):u.every((e=>null==e))})),parseChildren:V},se=[{name:"values",description:"Array of values to check for inequality",aliases:[],required:!0,type:"array",default:["These items","don't match"]},{name:"caseInsensitive",description:"If the values are strings, ignore the case (default: false)",aliases:[],required:!1,type:"boolean",default:!1},{name:"nullEqualsUndefined",description:"Whether a null value should be considered equal to an undefined value (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],ne=I(se),oe={description:"Test if any values are different",aliases:["!=","!","ne","notEqual"],parameters:se},le={propertyAliases:ne,operatorData:oe,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var a,i,s;const[n,o,l]=yield B([e.values,e.caseInsensitive,e.nullEqualsUndefined],t);t.typeChecker(U(oe.parameters,{values:n,caseInsensitive:o,nullEqualsUndefined:l}));const u=(void 0!==o?o:null!==(i=null===(a=t.options)||void 0===a?void 0:a.caseInsensitive)&&void 0!==i&&i)&&n.every((e=>"string"==typeof e))?n.map((e=>e.toLowerCase())):n;return!(void 0!==l?l:void 0!==(null===(s=t.options)||void 0===s?void 0:s.nullEqualsUndefined)&&t.options.nullEqualsUndefined)||null!==u[0]&&void 0!==u[0]?u.some((e=>!r(e,u[0]))):u.some((e=>null===e&&void 0===e))})),parseChildren:V},ue=[{name:"values",description:"Array of values to check to add together",aliases:[],required:!0,type:"array",default:[1,2,3]},{name:"type",description:"Data type to coerce input values to before addition",aliases:[],required:!1,type:{literal:["string","array","number","boolean","bool"]},default:"string"}],de=I(ue),ce={description:"Add, concatenate or merge multiple values",aliases:["+","plus","add","concat","join","merge"],parameters:ue},pe={propertyAliases:de,operatorData:ce,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield B(e.values,t);return t.typeChecker(U(ce.parameters,{values:r,type:e.type})),0===r.length?r:"string"===(null==e?void 0:e.type)?r.reduce(((e,t)=>e.concat(t)),""):"array"===(null==e?void 0:e.type)?r.reduce(((e,t)=>e.concat(t)),[]):r.every((e=>"string"==typeof e||Array.isArray(e)))?r.reduce(((e,t)=>e.concat(t))):r.every((e=>b(e)))?r.reduce(((e,t)=>Object.assign(Object.assign({},e),t)),{}):r.reduce(((e,t)=>e+t))})),parseChildren:V},he=[{name:"values",description:"Array of values - 2nd element will be subtracted from the first",aliases:[],required:!1,type:"array",default:[10,5]},{name:"from",description:"Numerical value that will be subtracted from",aliases:["subtractFrom"],required:!1,type:"number",default:100},{name:"subtract",description:"Numerical value to subtract",aliases:[],required:!1,type:"number",default:50}],ve=I(he),ye={description:"Subtract one numerical value from another",aliases:["-","subtract","minus","takeaway"],parameters:he},me={propertyAliases:ve,operatorData:ye,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a,i]=yield B([e.values,e.from,e.subtract],t);t.typeChecker(U(ye.parameters,{values:r,from:a,subtract:i}));const s=null!=r?r:[a,i].filter((e=>void 0!==e));if(s.length<2)throw new Error("- Not enough values provided");if(s.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");return s[0]-s[1]})),parseChildren:V},fe=[{name:"values",description:"Array of values whose product will be calculated",aliases:[],required:!0,type:"array",default:[5,5]}],ge=I(fe),be={description:"Multiply several numerical values together",aliases:["*","x","multiply","times"],parameters:fe},Te={propertyAliases:ge,operatorData:be,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield B(e.values,t);if(t.typeChecker(U(be.parameters,{values:r})),0===r.length)return 0;if(r.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");return r.reduce(((e,t)=>e*t))})),parseChildren:V},Oe=[{name:"values",description:"Array of values - 1st element will be divided by the first",aliases:[],required:!1,type:"array",default:[100,10]},{name:"dividend",description:"The number that will be divided",aliases:["divide"],required:!1,type:"number",default:99},{name:"divisor",description:"The number that dividend will be divided by",aliases:["by","divideBy"],required:!1,type:"number",default:3},{name:"output",description:"Whether to output a quotient, remainder or decimal",aliases:[],required:!1,type:{literal:["quotient","remainder"]},default:"quotient"}],Ce=I(Oe),qe={description:"Divide one numerical value by another",aliases:["/","divide","÷"],parameters:Oe},je={propertyAliases:Ce,operatorData:qe,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a,i,s]=yield B([e.values,e.dividend,e.divisor,e.output],t);t.typeChecker(U(qe.parameters,{values:r,dividend:a,divisor:i,output:s}));const n=null!=r?r:[a,i].filter((e=>void 0!==e));if(n.length<2)throw new Error("- Not enough values provided");if(n.some((e=>"number"!=typeof e)))throw new Error("- Not all values are numbers");if(0===n[1])throw new Error("Division by zero!");switch(s){case"quotient":return Math.floor(n[0]/n[1]);case"remainder":return n[0]%n[1];default:return n[0]/n[1]}})),parseChildren:V},Se=[{name:"values",description:"Array of values - 1st element will be compared to the second",aliases:[],required:!0,type:"array",default:[10,9]},{name:"strict",description:"Whether value must be strictly greater than (i.e. not equal) (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],Ee=I(Se),Ae={description:"Test if a value is greater than (or equal to) another value",aliases:[">","greaterThan","higher","larger"],parameters:Se},we={propertyAliases:Ee,operatorData:Ae,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a=!0]=yield B([e.values,e.strict],t);if(t.typeChecker(U(Ae.parameters,{values:r,strict:a})),r.length<2)throw new Error("- Not enough values provided");const[i,s]=r;return i===s&&!a||i>s})),parseChildren:V},Ne=[{name:"values",description:"Array of values - 1st element will be compared to the second",aliases:[],required:!0,type:"array",default:[9,10]},{name:"strict",description:"Whether value must be strictly smaller than (i.e. not equal) (default: false)",aliases:[],required:!1,type:"boolean",default:!1}],Pe=I(Ne),xe={description:"Test if a value is smaller than (or equal to) another value",aliases:["<","lessThan","lower","smaller"],parameters:Ne},Le={propertyAliases:Pe,operatorData:xe,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a=!0]=yield B([e.values,e.strict],t);if(t.typeChecker(U(xe.parameters,{values:r,strict:a})),r.length<2)throw new Error("- Not enough values provided");const[i,s]=r;return i===s&&!a||i<s})),parseChildren:V},Ie=[{name:"condition",description:"The expression to check for truthiness",aliases:[],required:!0,type:"any",default:!0},{name:"valueIfTrue",description:"Value to return if condition is true",aliases:["ifTrue"],required:!0,type:"any",default:"The condition is true"},{name:"valueIfFalse",description:"Value to return if condition is false",aliases:["ifFalse","ifNot"],required:!0,type:"any",default:"The condition is false"}],Ue=I(Ie),Re={description:"Return a value based on a condition",aliases:["?","conditional","ifThen"],parameters:Ie},ke={propertyAliases:Ue,operatorData:Re,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){t.typeChecker(U(Re.parameters,{condition:e.condition,valueIfTrue:e.valueIfTrue,valueIfFalse:e.valueIfFalse}));return(yield M(e.condition,t))?yield M(e.valueIfTrue,t):yield M(e.valueIfFalse,t)})),parseChildren:e=>{const[t,r,a]=e.children;return Object.assign(Object.assign({},e),{condition:t,valueIfTrue:r,valueIfFalse:a})}},De=[{name:"testString",description:"The string to test",aliases:["string","value"],required:!0,type:"string",default:"test-this"},{name:"pattern",description:"The regular expression pattern",aliases:["regex","regexp","regExp","re"],required:!0,type:"string",default:"^[a-z]{4}-[a-z]{4}$"}],_e=I(De),Qe={description:"Compare a string against a regex pattern",aliases:["regex","patternMatch","regexp","matchPattern"],parameters:De},$e={propertyAliases:_e,operatorData:Qe,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a]=yield B([e.testString,e.pattern],t);t.typeChecker(U(Qe.parameters,{testString:r,pattern:a}));try{return new RegExp(a).test(r)}catch(e){throw new Error("Regex error:"+f(e))}})),parseChildren:e=>{const[t,r]=e.children;return Object.assign(Object.assign({},e),{testString:t,pattern:r})}},He=[{name:"property",description:'The path to the required property (e.g. "user.firstName")',aliases:["path","propertyName"],required:!0,type:"string",default:"path.to[0].my.data"},{name:"additionalData",description:"Additional data objects to be considered",aliases:["additional","objects","data","additionalObjects"],required:!1,type:"object",default:{}}],Me=I(He),Be={description:"Extract values from data objects",aliases:["dataProperties","data","getData","objectProperties","objProps","getProperty","getObjProp"],parameters:He},Fe={propertyAliases:Me,operatorData:Be,evaluate:(e,r)=>i(void 0,void 0,void 0,(function*(){var a,i;const[s,n={}]=yield B([e.property,e.additionalData],r);r.typeChecker(U(Be.parameters,{property:s,additionalData:n}));const o=Object.assign(Object.assign({},null!==(i=null===(a=r.options)||void 0===a?void 0:a.data)&&void 0!==i?i:{}),n);return t(o,s)})),parseChildren:e=>{const[t,r]=e.children,a=Object.assign(Object.assign({},e),{property:t});return void 0!==r&&(a.fallback=r),a}},Ge=[{name:"string",description:"A parameterised (%1, %2) string where the parameters are to be replaced",aliases:[],required:!0,type:"string",default:"Hello, %1"},{name:"substitutions",description:"An array of substitution values for the parameterised string",aliases:["replacements","values"],required:!1,type:["array","object"],default:["friend"]},{name:"trimWhiteSpace",description:"Whether or not to trim white space from either end of the substituted strings (default: true)",aliases:["trim","trimWhitespace"],required:!1,type:"boolean",default:!0},{name:"substitutionCharacter",description:'Which character to search for in original string for replacement -- can be "%" or "$" (default: "%")',aliases:["subCharacter","subChar"],required:!1,type:"string",default:"$"},{name:"numberMapping",description:"Rules for mapping number values to text strings, such as pluralisation.",aliases:["numMap","numberMap","pluralisation","pluralization","plurals"],required:!1,type:"object",default:{}}],ze=I(Ge),We={description:"Replace values in a string using simple parameter substitution",aliases:["stringSubstitution","substitute","stringSub","replace"],parameters:Ge},Je={propertyAliases:ze,operatorData:We,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a={},i=!0,s="%",n={}]=yield B([e.string,e.substitutions,e.trimWhiteSpace,e.substitutionCharacter,e.numberMapping],t);if(t.typeChecker(U(We.parameters,{string:r,substitutions:a,trimWhiteSpace:i,substitutionCharacter:s,numberMapping:n})),Array.isArray(a)){const e="$"===s?"$":"%",t=new RegExp(`(?<!\\\\)(${"%"===e?"%":"\\$"}[\\d]+)`,"g"),n=(r.match(t)||[]).sort(((e,t)=>Number(e.slice(1))-Number(t.slice(1)))),o=new Set(n),l=R(Array.from(o),a.map((e=>i?String(e).trim():e)));return r.split(t).map((e=>e in l?l[e]:e)).join("").replace(`\\${e}`,e)}return r.split(/(?<!\\)({{(?:[A-Za-z0-9_.]|\[[0-9]+\])+}})/g).map((e=>{if(!/(?<!\\){{(.+)}}/.exec(e))return e.replace("\\{{","{{");const r=Ve(e,a,n,t.options.data);return i?String(r).trim():r})).join("")})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{string:t,substitutions:r})}},Ve=(e,r,a,i={})=>{const s=e.replace(/{{(.+)}}/,"$1"),n=t(r,s,t(i,s,""));if("number"!=typeof n)return n;if(!(s in a))return n;const o=a[s];if(n in o)return o[n].replace("{}",String(n));const l=Object.keys(a[s]),u=l.find((e=>e.startsWith(">")));if(u){if(n>Number(u.slice(1)))return null==o?void 0:o[u]}const d=l.find((e=>e.startsWith("<")));if(d){if(n<Number(d.slice(1)))return null==o?void 0:o[d]}return o.other?o.other.replace("{}",String(n)):n},Ye=[{name:"values",description:"An array to count",aliases:[],required:!0,type:"array",default:[1,2,3,4,5]}],Xe=I(Ye),Ke={description:"Count elements in an array",aliases:["count","length"],parameters:Ye},Ze={propertyAliases:Xe,operatorData:Ke,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){const r=yield B(e.values,t);return t.typeChecker(U(Ke.parameters,{values:r})),r.length})),parseChildren:e=>{const[t]=e.children;return Object.assign(Object.assign({},e),{values:t})}},et=[{name:"value",description:"The string to be split",aliases:["string"],required:!0,type:"string",default:"Alpha, Bravo, Charlie"},{name:"delimiter",description:"The value to split the string on (default is white space)",aliases:["separator"],required:!1,type:"string",default:","},{name:"trimWhiteSpace",description:"Whether to trim white space from around the resulting elements (default: true)",aliases:["trim","trimWhitespace"],required:!1,type:"boolean",default:!0},{name:"excludeTrailing",description:"If the input string ends in a delimiter, there will be an additional blank element if this value is false (default: true)",aliases:["removeTrailing","excludeTrailingDelimiter"],required:!1,type:"boolean",default:!0}],tt=I(et),rt={description:"Split a string into an array",aliases:["split","arraySplit"],parameters:et},at=" ",it={propertyAliases:tt,operatorData:rt,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,i;const[s,n,o,l]=yield B([e.value,null!==(r=e.delimiter)&&void 0!==r?r:at,null===(a=e.trimWhiteSpace)||void 0===a||a,null===(i=e.excludeTrailing)||void 0===i||i],t);t.typeChecker(U(rt.parameters,{value:s,delimiter:n,trimWhiteSpace:o,excludeTrailing:l}));let u=s.split(n);return o&&(u=u.map((e=>e.trim()))),l&&""===u[u.length-1]&&u.pop(),u})),parseChildren:e=>{const[t,r=at]=e.children;return Object.assign(Object.assign({},e),{value:t,delimiter:r})}},st=[{name:"query",description:"SQL query string, with parameterised replacements (e.g. $1, $2, etc)",aliases:["text"],required:!0,type:"string"},{name:"values",description:"An array/object of values to replace the SQL string parameters, as per SQL connection specifications ",aliases:["replacements"],required:!1,type:["array","object"]},{name:"single",description:"Specify if returning a single record",aliases:["singleRecord"],required:!1,type:"boolean"},{name:"flatten",description:"Specify whether to flatten resulting record objects to arrays of values",aliases:["flat","array"],required:!1,type:"boolean"},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean"}],nt=I(st),ot={description:"Query an SQL database",aliases:["sql","pgSql","postgres","pg","sqLite","sqlite","mySql"],parameters:st},lt={propertyAliases:nt,operatorData:ot,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,s;const n=null===(r=t.options)||void 0===r?void 0:r.sqlConnection;if(!n)throw new Error("No SQL database connection provided");const[o,l,u,d,c,p]=yield B([e.query,e.values||[],e.single,e.flatten,e.useCache,e.type],t);t.typeChecker(U(ot.parameters,{query:o,single:u,flatten:d,values:l,useCache:c}));const h=null===(s=null!==(a=e.useCache)&&void 0!==a?a:t.options.useCache)||void 0===s||s;{const e=t.cache.useCache(h,((e,t,r,a,s)=>i(void 0,void 0,void 0,(function*(){const i=(yield n.query({query:e,values:t}))||[];["array","string","number"].includes(null!=s?s:"")&&(a=!0);const o=a?i.map((e=>{const t=Object.values(e);return t.length<=1?t[0]:t})):i;return r?o[0]:o}))),o,l,u,d,p);return e}})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{query:t,values:r})}},ut=[{name:"query",description:"GraphQL query string",aliases:[],required:!0,type:"string",default:'query getCountries {\n countries(filter: {continent: {eq: "OC"}}) {\n name\n }\n }'},{name:"url",description:"Endpoint for the GraphQL request (if not already provided in options)",aliases:["endpoint"],required:!1,type:["string","null"],default:"https://countries.trevorblades.com/"},{name:"headers",description:"HTTP Headers (if not already provided in options)",aliases:[],required:!1,type:"object",default:{}},{name:"variables",description:"Values for the variables used in query (key-value pairs)",aliases:[],required:!1,type:"object",default:{}},{name:"returnNode",description:"Property path to extract from the query response",aliases:["outputNode","returnProperty"],required:!1,type:"string",default:"data.countries[1].name"},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],dt=I(ut),ct={description:"GraphQL request",aliases:["graphQl","graphql","gql"],parameters:ut},pt={propertyAliases:dt,operatorData:ct,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,s,n,o,l,u;const d=null!==(r=t.graphQLClient)&&void 0!==r?r:t.httpClient;if(!d)throw new Error("No HTTP client provided for GraphQL connection");const[c,p,h,v,y,m]=yield B([e.query,e.url,e.variables,e.returnNode,e.headers,e.useCache],t),{url:f,headers:g}=p instanceof Object?p:{url:p,headers:null};t.typeChecker([...U(ct.parameters,{url:f,query:c,variables:h,returnNode:v,headers:y,useCache:m}),{name:"headers",value:g,expectedType:["object","null"]}]);const b=f&&"graphqlendpoint"!==f.toLowerCase()?f:"",T=null!==(n=null!==(s=null===(a=t.options.graphQLConnection)||void 0===a?void 0:a.endpoint)&&void 0!==s?s:t.options.baseEndpoint)&&void 0!==n?n:"",O=Q(b)?b:$(T,b),C={query:c,variables:h},q=null===(o=null!=m?m:t.options.useCache)||void 0===o||o,j=yield t.cache.useCache(q,((e,t,r,a)=>i(void 0,void 0,void 0,(function*(){const i=yield H(d,{url:e,method:"post",data:t,headers:r});return _(null==i?void 0:i.data,a)}))),O,C,Object.assign(Object.assign(Object.assign(Object.assign({},null===(l=t.options.graphQLConnection)||void 0===l?void 0:l.headers),null===(u=t.options)||void 0===u?void 0:u.headers),g),y),v);return j})),parseChildren:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,a="",i,...s]=yield B(e.children,t),n=Array.isArray(i)?i:[i],o=s.slice(0,n.length),l=R(n,o),u=Object.assign(Object.assign({},e),{query:r,url:a,variables:l});return s.length>n.length&&(u.returnNode=s.pop()),u}))},ht=[{name:"url",description:"Endpoint URL",aliases:["endpoint"],required:!0,type:"string",default:"https://restcountries.com/v3.1/name/zealand"},{name:"returnProperty",description:"Property from request result",aliases:["outputProperty"],required:!1,type:"string",default:"result.path"},{name:"headers",description:"HTTP Headers",aliases:[],required:!1,type:"object",default:{}},{name:"parameters",description:"Query parameters (key-value)",aliases:["queryParams","queryParameters","urlQueries"],required:!1,type:"object",default:{}},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],vt=I(ht),yt={description:"HTTP GET Request",aliases:["get","api"],parameters:ht},mt=(e,t)=>i(void 0,void 0,void 0,(function*(){const[r="",a,...i]=yield B(e.children,t),s=Array.isArray(a)?a:[a],n=i.slice(0,s.length),o=R(s,n),l=Object.assign(Object.assign({},e),{url:r,parameters:o});return i.length>s.length&&(l.returnProperty=i.pop()),l})),ft=mt,gt={propertyAliases:vt,operatorData:yt,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,s;const n=t.httpClient;if(!n)throw new Error("No HTTP client provided");const[o,l,u,d,c]=yield B([e.url,e.parameters,e.returnProperty,e.headers,e.useCache],t),{url:p,headers:h}=o instanceof Object?o:{url:o,headers:null};t.typeChecker([...U(yt.parameters,{url:p,returnProperty:u,headers:d,parameters:l,useCache:c}),{name:"headers",value:h,expectedType:["object","null"]}]);const v=null!==(r=t.options.baseEndpoint)&&void 0!==r?r:"",y=Object.assign(Object.assign(Object.assign({},null===(a=t.options)||void 0===a?void 0:a.headers),h),d),m=null===(s=null!=c?c:t.options.useCache)||void 0===s||s,f=yield t.cache.useCache(m,((e,t,r,a)=>i(void 0,void 0,void 0,(function*(){const i=yield H(n,{url:e,params:t,headers:r});return _(i,a)}))),Q(p)?p:$(v,p),l,y,u);return f})),parseChildren:mt},bt=[{name:"url",description:"Endpoint URL",aliases:["endpoint"],required:!0,type:"string",default:"https://jsonplaceholder.typicode.com/posts"},{name:"returnProperty",description:"Property path from request result",aliases:["outputProperty"],required:!1,type:"string",default:"result.path"},{name:"headers",description:"HTTP Headers",aliases:[],required:!1,type:"object",default:{}},{name:"parameters",description:"JSON Body parameters (key-value)",aliases:["bodyJson","data"],required:!1,type:"object",default:{}},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!0}],Tt=I(bt),Ot={description:"HTTP POST Request",aliases:["post"],parameters:bt},Ct={propertyAliases:Tt,operatorData:Ot,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r,a,s;const n=t.httpClient;if(!n)throw new Error("No HTTP client provided");const[o,l,u,d,c]=yield B([e.url,e.parameters,e.returnProperty,e.headers,e.useCache],t),{url:p,headers:h}=o instanceof Object?o:{url:o,headers:null};t.typeChecker([...U(Ot.parameters,{url:p,headers:d,data:l,returnProperty:u,useCache:c}),{name:"headers",value:h,expectedType:["object","null"]}]);const v=null!==(r=t.options.baseEndpoint)&&void 0!==r?r:"",y=Object.assign(Object.assign(Object.assign({},null===(a=t.options)||void 0===a?void 0:a.headers),h),d),m=null!==(s=null!=c?c:t.options.useCache)&&void 0!==s&&s,f=yield t.cache.useCache(m,((e,t,r,a)=>i(void 0,void 0,void 0,(function*(){const i=yield H(n,{url:e,data:t,headers:r,method:"post"});return _(i,a)}))),Q(p)?p:$(v,p),l,y,u);return f})),parseChildren:ft},qt=[{name:"properties",description:'An array of objects, each with a "key" property and a "value" property',aliases:["values","keyValPairs","keyValuePairs"],required:!0,type:"array",default:["firstKey","firstValue","secondKey","secondValue"]}],jt=I(qt),St={description:"Construct an object using objects defining keys and values",aliases:["buildObject","build","object"],parameters:qt},Et={propertyAliases:jt,operatorData:St,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){t.typeChecker(U(St.parameters,{properties:e.properties}));const r=e.properties.filter((e=>e instanceof Object&&"key"in e&&"value"in e)).map((({key:e,value:r})=>{return a=[e,r],i(void 0,void 0,void 0,(function*(){const[e,r]=yield B(a,t);return t.typeChecker({name:"key",value:e,expectedType:["string","number","boolean"]}),[e,r]}));var a}));return Object.fromEntries(yield Promise.all(r))})),parseChildren:e=>{const t=e.children;if(t.length%2!=0)throw new Error("Even number of children required to make key/value pairs");const r=t.filter(((e,t)=>t%2==0)),a=t.filter(((e,t)=>t%2==1)),i=r.map(((e,t)=>({key:e,value:a[t]})));return Object.assign(Object.assign({},e),{properties:i})}},At=[{name:"matchExpression",description:"Expression to match against",aliases:["match"],required:!0,type:["string","number","boolean"],default:"matchMe"},{name:"branches",description:"Object whose keys are compared against the match expression. The value of the matching key is returned",aliases:["arms","cases"],required:!1,type:["object","array"],default:{matchMe:"YES",nonMatch:"NO"}},{name:"[...branches]",description:"Branch properties can optionally be placed at the operator root",aliases:[],required:!1,type:["object","array"]}],wt={propertyAliases:I(At),operatorData:{description:"Return different values depending on a matching expression",aliases:["match","switch"],parameters:At},evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){var r;const a=yield M(e.matchExpression,t);t.typeChecker({name:"matchExpression",value:a,expectedType:["string","number","boolean"]});const i=Array.isArray(e.branches)?k(e.branches):null!==(r=e.branches)&&void 0!==r?r:{},n=s(i)?yield M(i,t):i;if(!b(n))throw new Error("Branches don't evaluate to an object");if(a in n)return yield M(n[a],t);if("fallback"in n)return yield M(n.fallback,t);if(a in e)return yield M(e[a],t);throw new Error(`No match found for ${a}`)})),parseChildren:(e,t)=>i(void 0,void 0,void 0,(function*(){const[r,...a]=e.children,i=k(yield B(a,t));return Object.assign(Object.assign({},e),{matchExpression:r,branches:i})}))},Nt=[{name:"functionPath",description:"Path (in options.functions) to the required function",aliases:["functionsPath","functionName","funcName","path","name"],required:!0,type:"string",default:null},{name:"args",description:"Arguments for the function",aliases:["arguments","variables"],required:!1,type:"array",default:[]},{name:"useCache",description:"Whether or not the FigTree cache is used",aliases:[],required:!1,type:"boolean",default:!1}],Pt=I(Nt),xt={description:"Call a custom function (defined in options)",aliases:["customFunctions","customFunction","objectFunctions","function","functions","runFunction"],parameters:Nt},Lt={propertyAliases:Pt,operatorData:xt,evaluate:(e,r)=>i(void 0,void 0,void 0,(function*(){var a,s,n;const[o,l=[],u]=yield B([e.functionPath,e.args,e.useCache],r);r.typeChecker(U(xt.parameters,{functionPath:o,args:l}));const{data:d,functions:c}=r.options,p=null!==(s=null!==(a=t(c,o,null))&&void 0!==a?a:t(d,o,null))&&void 0!==s?s:t(r.options,o,null);if(!p||"function"!=typeof p)throw new Error(`- No function found: "${o}"`);const h=null!==(n=null!=u?u:r.options.useCache)&&void 0!==n&&n;return yield r.cache.useCache(h,((e,...t)=>i(void 0,void 0,void 0,(function*(){return yield p(...t)}))),o,...l)})),parseChildren:e=>{const[t,...r]=e.children;return Object.assign(Object.assign({},e),{functionPath:t,args:r})}},It=[{name:"value",description:"Value to pass through",aliases:["_","data"],required:!0,type:"any",default:null}],Ut=I(It),Rt={description:"Pass through a value unchanged (or change its type)",aliases:["_","passThru","passthru","pass","ignore","coerce","convert"],parameters:It},kt={propertyAliases:Ut,operatorData:Rt,evaluate:(e,t)=>i(void 0,void 0,void 0,(function*(){return t.typeChecker(U(Rt.parameters,{value:e.value})),yield M(e.value,t)})),parseChildren:e=>{const[...t]=e.children,r=1===(null==t?void 0:t.length)?t[0]:t;return Object.assign(Object.assign({},e),{value:r})}};var Dt=Object.freeze({__proto__:null,AND:Y,BUILD_OBJECT:Et,CONDITIONAL:ke,COUNT:Ze,CUSTOM_FUNCTIONS:Lt,DIVIDE:je,EQUAL:ie,GET:gt,GRAPHQL:pt,GREATER_THAN:we,LESS_THAN:Le,MATCH:wt,MULTIPLY:Te,NOT_EQUAL:le,OBJECT_PROPERTIES:Fe,OR:ee,PASSTHRU:kt,PLUS:pe,POST:Ct,REGEX:$e,SPLIT:it,SQL:lt,STRING_SUBSTITUTION:Je,SUBTRACT:me});class _t{constructor(e){var t,r;this.useCache=(e,t,...r)=>i(this,void 0,void 0,(function*(){if(!e)return yield t(...r);const a=Qt(r),i=a in this.store,s=Date.now(),n=i&&s-this.store[a].timestamp>1e3*this.maxTime;if(i)return this.queue=this.queue.filter((e=>e!==a)),this.queue.unshift(a),this.store[a].timestamp=s,n&&(this.store[a].result=yield t(...r)),this.store[a].result;const o=yield t(...r);return this.store[a]={result:o,timestamp:s},this.queue.unshift(a),this.resizeCache(),o})),this.getMax=()=>this.maxSize,this.setMax=e=>{this.maxSize=e,this.resizeCache()},this.getMaxTime=()=>this.maxTime,this.setMaxTime=e=>{this.maxTime=e},this.getCache=()=>this.store,this.setCache=e=>this.store=e,this.resizeCache=()=>{if(this.queue.length>this.maxSize){this.queue.slice(this.maxSize).forEach((e=>delete this.store[e])),this.queue=this.queue.slice(0,this.maxSize)}},this.store={},this.queue=[],this.maxSize=null!==(t=null==e?void 0:e.maxSize)&&void 0!==t?t:50,this.maxTime=null!==(r=null==e?void 0:e.maxTime)&&void 0!==r?r:1800}}const Qt=e=>e.map((e=>"object"==typeof e?JSON.stringify(e):e)).join("_"),$t=e=>e?"name"in e&&"fetch"===e.name?Mt(e):"Axios"in e&&"Axios"===e.Axios.name?Ht(e):e:"undefined"!=typeof window&&"document"in window&&"fetch"in window?Mt(window.fetch):void 0,Ht=e=>({get:t=>i(void 0,void 0,void 0,(function*(){return(yield e(Object.assign(Object.assign({},t),{method:"get"}))).data})),post:t=>i(void 0,void 0,void 0,(function*(){return(yield e(Object.assign(Object.assign({},t),{method:"post"}))).data})),throwError:t=>{var r;if(e.isAxiosError(t)){if(!(null==t?void 0:t.response))throw new Error("Network Error");console.log(null===(r=t.response)||void 0===r?void 0:r.data)}throw t}}),Mt=e=>({get:t=>i(void 0,void 0,void 0,(function*(){const{url:r,headers:i,params:s={}}=t,n=Object.keys(s).length>0?`?${a.stringify(s)}`:"",o=yield e(r+n,{headers:i,method:"GET"}),l=yield o.json();if(!o.ok)throw console.log(l),new Error(`Request failed with status code ${o.status}`);return l})),post:t=>i(void 0,void 0,void 0,(function*(){const{url:r,headers:a,params:i,data:s}=t,n=new URLSearchParams(i),o=n.size>0?`?${n.toString()}`:"",l=yield e(r+o,{headers:a,body:JSON.stringify(s),method:"POST"}),u=yield l.json();if(!l.ok)throw console.log(u),new Error(`Request failed with status code ${l.status}`);return u})),throwError:e=>{throw new Error(`${f(e)}`)}});class Bt{constructor(e={}){var t,r,a;this.typeChecker=(...e)=>{const t=1===e.length&&Array.isArray(e[0])?e[0]:e,r=N(...t);if(!0!==r)throw new Error(r)},this.getCache=()=>this.cache.getCache(),this.setCache=e=>this.cache.setCache(e),this.getVersion=()=>"2.15.2",this.options=Gt(e),this.operators=u(Dt,null!==(r=null===(t=this.options)||void 0===t?void 0:t.excludeOperators)&&void 0!==r?r:[],T),this.operatorAliases=T,this.cache=new _t({maxSize:e.maxCacheSize,maxTime:e.maxCacheTime}),this.graphQLClient=$t(null===(a=e.graphQLConnection)||void 0===a?void 0:a.httpClient),this.httpClient=$t(e.httpClient)}evaluate(e,t={}){var r;return i(this,void 0,void 0,(function*(){const a=y(this.options,Gt(t));return t.httpClient&&(this.httpClient=$t(t.httpClient)),(null===(r=t.graphQLConnection)||void 0===r?void 0:r.httpClient)&&(this.graphQLClient=$t(t.graphQLConnection.httpClient)),a.maxCacheSize&&a.maxCacheSize!==this.cache.getMax()&&this.cache.setMax(a.maxCacheSize),a.maxCacheTime&&a.maxCacheTime!==this.cache.getMaxTime()&&this.cache.setMaxTime(a.maxCacheTime),yield M(e,{options:a,operators:t.excludeOperators?u(Dt,t.excludeOperators,T):this.operators,operatorAliases:this.operatorAliases,typeChecker:a.skipRuntimeTypeCheck?()=>{}:this.typeChecker,resolvedAliasNodes:{},cache:this.cache,graphQLClient:this.graphQLClient,httpClient:this.httpClient})}))}getOptions(){return this.options}updateOptions(e){this.options=y(this.options,Gt(e)),this.options.excludeOperators&&(this.operators=u(Dt,this.options.excludeOperators,T))}getOperators(){const e=this.options.excludeOperators?u(Dt,this.options.excludeOperators,T):this.operators,t=Object.entries(e).map((([e,t])=>Object.assign({name:e},t.operatorData))),r=[...new Set(Object.values(T))];return t.sort(((e,t)=>r.indexOf(e.name)-r.indexOf(t.name)))}getFragments(){var e;return Object.entries(null!==(e=this.options.fragments)&&void 0!==e?e:{}).map((([e,t])=>Object.assign({name:e},null==t?void 0:t.metadata)))}getCustomFunctions(){var e;return Object.entries(null!==(e=this.options.functions)&&void 0!==e?e:{}).map((([e,t])=>({name:e,numRequiredArgs:t.length})))}}const Ft=(e,t)=>new Bt(t).evaluate(e),Gt=e=>"objects"in e?Object.assign(Object.assign({},e),{data:e.objects}):e,zt=e=>({query:({query:t,values:r=[]})=>i(void 0,void 0,void 0,(function*(){const a={text:t,values:null!=r?r:[]},i=yield e.query(a);if(null==i?void 0:i.error)throw new Error(i.error);return i.rows}))}),Wt=e=>({query:({query:t,values:r=[]})=>i(void 0,void 0,void 0,(function*(){try{return yield e.all(t,r)}catch(e){throw`SQLite error: ${null==e?void 0:e.message}`}}))});export{Ht as AxiosClient,Mt as FetchClient,Bt as FigTreeEvaluator,zt as SQLNodePostgres,Wt as SQLite,Ft as evaluateExpression,h as isAliasString,n as isFragmentNode,b as isObject,s as isOperatorNode,q as preProcessShorthand,o as standardiseOperatorName,d as truncateString};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fig-tree-evaluator",
3
- "version": "2.15.0",
3
+ "version": "2.15.2",
4
4
  "description": "Module to evaluate JSON-structured expression trees",
5
5
  "main": "build/index.cjs.js",
6
6
  "module": "build/index.esm.js",
@@ -24,9 +24,9 @@
24
24
  "axios": "^1.7.2",
25
25
  "dotenv": "^16.0.1",
26
26
  "eslint": "^8.53.0",
27
- "fig-tree-evaluator": "^2.14.1",
27
+ "fig-tree-evaluator": "^2.15.0",
28
28
  "jest": "^29.7.0",
29
- "node-fetch": "^2.7.0",
29
+ "node-fetch": "2.7.0",
30
30
  "pg": "^8.11.3",
31
31
  "prettier": "^3.0.3",
32
32
  "rimraf": "^5.0.5",