12345 |
- /*
- All material copyright ESRI, All Rights Reserved, unless otherwise specified.
- See https://js.arcgis.com/4.24/esri/copyright.txt for details.
- */
- const e={all:{min:"2",max:"2"},none:{min:"2",max:"2"},any:{min:"2",max:"2"},reduce:{min:"2",max:"3"},map:{min:"2",max:"2"},filter:{min:"2",max:"2"},fromcodepoint:{min:"1",max:"*"},fromcharcode:{min:"1",max:"*"},tocodepoint:{min:"1",max:"2"},tocharcode:{min:"1",max:"2"},concatenate:{min:"0",max:"*"},expects:{min:"1",max:"*"},getfeatureset:{min:"1",max:"2"},week:{min:"1",max:"2"},fromjson:{min:"1",max:"1"},length3d:{min:"1",max:"2"},tohex:{min:"1",max:"1"},hash:{min:"1",max:"1"},isoweek:{min:"1",max:"1"},isoweekday:{min:"1",max:"1"},isomonth:{min:"1",max:"1"},isoyear:{min:"1",max:"1"},resize:{min:"2",max:"3"},slice:{min:"0",max:"*"},splice:{min:"0",max:"*"},push:{min:"2",max:"2"},pop:{min:"1",max:"1"},includes:{min:"2",max:"2"},array:{min:"1",max:"2"},front:{min:"1",max:"1"},back:{min:"1",max:"1"},insert:{min:"3",max:"3"},erase:{min:"2",max:"2"},split:{min:"2",max:"4"},guid:{min:"0",max:"1"},today:{min:"0",max:"0"},angle:{min:"2",max:"3"},bearing:{min:"2",max:"3"},urlencode:{min:"1",max:"1"},now:{min:"0",max:"0"},timestamp:{min:"0",max:"0"},day:{min:"1",max:"1"},month:{min:"1",max:"1"},year:{min:"1",max:"1"},hour:{min:"1",max:"1"},second:{min:"1",max:"1"},millisecond:{min:"1",max:"1"},minute:{min:"1",max:"1"},weekday:{min:"1",max:"1"},toutc:{min:"1",max:"1"},tolocal:{min:"1",max:"1"},date:{min:"0",max:"7"},datediff:{min:"2",max:"3"},dateadd:{min:"2",max:"3"},trim:{min:"1",max:"1"},text:{min:"1",max:"2"},left:{min:"2",max:"2"},right:{min:"2",max:"2"},mid:{min:"2",max:"3"},upper:{min:"1",max:"1"},proper:{min:"1",max:"2"},lower:{min:"1",max:"1"},find:{min:"2",max:"3"},iif:{min:"3",max:"3"},decode:{min:"2",max:"*"},when:{min:"2",max:"*"},defaultvalue:{min:"2",max:"2"},isempty:{min:"1",max:"1"},domaincode:{min:"2",max:"4"},domainname:{min:"2",max:"4"},polygon:{min:"1",max:"1"},point:{min:"1",max:"1"},polyline:{min:"1",max:"1"},extent:{min:"1",max:"1"},multipoint:{min:"1",max:"1"},ringisclockwise:{min:"1",max:"1"},geometry:{min:"1",max:"1"},count:{min:"0",max:"*"},number:{min:"1",max:"2"},acos:{min:"1",max:"1"},asin:{min:"1",max:"1"},atan:{min:"1",max:"1"},atan2:{min:"2",max:"2"},ceil:{min:"1",max:"2"},floor:{min:"1",max:"2"},round:{min:"1",max:"2"},cos:{min:"1",max:"1"},exp:{min:"1",max:"1"},log:{min:"1",max:"1"},min:{min:"0",max:"*"},constrain:{min:"3",max:"3"},console:{min:"0",max:"*"},max:{min:"0",max:"*"},pow:{min:"2",max:"2"},random:{min:"0",max:"0"},sqrt:{min:"1",max:"1"},sin:{min:"1",max:"1"},tan:{min:"1",max:"1"},abs:{min:"1",max:"1"},isnan:{min:"1",max:"1"},stdev:{min:"0",max:"*"},average:{min:"0",max:"*"},mean:{min:"0",max:"*"},sum:{min:"0",max:"*"},variance:{min:"0",max:"*"},distinct:{min:"0",max:"*"},first:{min:"1",max:"1"},top:{min:"2",max:"2"},boolean:{min:"1",max:"1"},dictionary:{min:"0",max:"*"},typeof:{min:"1",max:"1"},reverse:{min:"1",max:"1"},replace:{min:"3",max:"4"},sort:{min:"1",max:"2"},feature:{min:"1",max:"*"},haskey:{min:"2",max:"2"},indexof:{min:"2",max:"2"},disjoint:{min:"2",max:"2"},intersects:{min:"2",max:"2"},touches:{min:"2",max:"2"},crosses:{min:"2",max:"2"},within:{min:"2",max:"2"},contains:{min:"2",max:"2"},overlaps:{min:"2",max:"2"},equals:{min:"2",max:"2"},relate:{min:"3",max:"3"},intersection:{min:"2",max:"2"},union:{min:"1",max:"2"},difference:{min:"2",max:"2"},symmetricdifference:{min:"2",max:"2"},clip:{min:"2",max:"2"},cut:{min:"2",max:"2"},area:{min:"1",max:"2"},areageodetic:{min:"1",max:"2"},length:{min:"1",max:"2"},lengthgeodetic:{min:"1",max:"2"},distancegeodetic:{min:"2",max:"3"},distance:{min:"2",max:"3"},densify:{min:"2",max:"3"},densifygeodetic:{min:"2",max:"3"},generalize:{min:"2",max:"4"},buffer:{min:"2",max:"3"},buffergeodetic:{min:"2",max:"3"},offset:{min:"2",max:"6"},rotate:{min:"2",max:"3"},issimple:{min:"1",max:"1"},simplify:{min:"1",max:"1"},centroid:{min:"1",max:"1"},isselfintersecting:{min:"1",max:"1"},multiparttosinglepart:{min:"1",max:"1"},setgeometry:{min:"2",max:"2"},portal:{min:"1",max:"1"},getuser:{min:"1",max:"2"},subtypes:{min:"1",max:"1"},subtypecode:{min:"1",max:"1"},subtypename:{min:"1",max:"1"},domain:{min:"2",max:"3"},convertdirection:{min:"3",max:"3"},schema:{min:"1",max:"1"}};for(const k in e)e[k].fmin=e[k].min,e[k].fmax=e[k].max;const t=["featureset","getuser","featuresetbyid","featuresetbyname","featuresetbyassociation","featuresetbyrelationshipname","featuresetbyurl","getfeatureset","attachments","featuresetbyportalitem"],n=["disjoint","intersects","touches","crosses","within","contains","overlaps","equals","relate","intersection","union","difference","symmetricdifference","clip","cut","area","areageodetic","length","length3d","lengthgeodetic","distance","distancegeodetic","densify","densifygeodetic","generalize","buffer","buffergeodetic","offset","rotate","issimple","simplify","multiparttosinglepart"];function a(e){return"string"==typeof e||e instanceof String}function r(t,n){const a=e[t.name.toLowerCase()];void 0===a?e[t.name.toLowerCase()]="sync"===n?{min:t.min,max:t.max}:{fmin:t.min,fmax:t.max}:"sync"===n?(a.min=t.min,a.max=t.max):(a.fmin=t.min,a.fmax=t.max)}function i(e,t){return"0"!==e.min&&t.length<Number(e.min)||"*"!==e.max&&t.length>Number(e.max)?-2:1}function s(e,t,n){if(null!==n.localScope&&void 0!==n.localScope[e.toLowerCase()]){const a=n.localScope[e.toLowerCase()];if("FormulaFunction"===a.type)return void 0===a.signature&&(a.signature={min:"0",max:"*"}),i(a.signature,t);if("any"===a.type)return void 0===a.signature&&(a.signature={min:"0",max:"*"}),i(a.signature,t)}if(void 0!==n.globalScope[e.toLowerCase()]){const a=n.globalScope[e.toLowerCase()];if("FormulaFunction"===a.type)return void 0===a.signature&&(a.signature={min:"0",max:"*"}),i(a.signature,t);if("any"===a.type)return void 0===a.signature&&(a.signature={min:"0",max:"*"}),i(a.signature,t)}return-1}function o(e,t){if(e)for(const n of e)l(n,t)}function l(e,t){if(e&&!1!==t(e))switch(e.type){case"ArrayExpression":o(e.elements,t);break;case"AssignmentExpression":case"BinaryExpression":case"LogicalExpression":l(e.left,t),l(e.right,t);break;case"BlockStatement":case"Program":o(e.body,t);break;case"BreakStatement":case"ContinueStatement":case"EmptyStatement":case"Identifier":case"Literal":break;case"CallExpression":l(e.callee,t),o(e.arguments,t);break;case"ExpressionStatement":l(e.expression,t);break;case"ForInStatement":l(e.left,t),l(e.right,t),l(e.body,t);break;case"ForStatement":l(e.init,t),l(e.test,t),l(e.update,t),l(e.body,t);break;case"FunctionDeclaration":l(e.id,t),o(e.params,t),l(e.body,t);break;case"IfStatement":l(e.test,t),l(e.consequent,t),l(e.alternate,t);break;case"MemberExpression":l(e.object,t),l(e.property,t);break;case"ObjectExpression":o(e.properties,t);break;case"Property":l(e.key,t),l(e.value,t);break;case"ReturnStatement":case"UnaryExpression":case"UpdateExpression":l(e.argument,t);break;case"VariableDeclaration":o(e.declarations,t);break;case"VariableDeclarator":l(e.id,t),l(e.init,t);break;case"TemplateLiteral":o(e.expressions,t),o(e.quasis,t)}}function m(e,t=!0){let n=b(e,"SYNTAX","UNREOGNISED");try{switch(e.type){case"VariableDeclarator":return"Identifier"!==e.id.type?b(e,"SYNTAX","VARIABLEMUSTHAVEIDENTIFIER"):null!==e.init?m(e.init,!1):"";case"VariableDeclaration":for(let a=0;a<e.declarations.length;a++)if(n=m(e.declarations[a],t),""!==n)return n;return"";case"ForInStatement":if(n=m(e.left,t),""!==n)return n;if("VariableDeclaration"===e.left.type){if(e.left.declarations.length>1)return b(e,"SYNTAX","ONLY1VAR");if(null!==e.left.declarations[0].init)return b(e,"SYNTAX","CANNOTDECLAREVAL")}else if("Identifier"!==e.left.type)return b(e,"SYNTAX","LEFTNOTVAR");return n=m(e.right,t),""!==n?n:(n=m(e.body,t),""!==n?n:"");case"ForStatement":return null!==e.test&&(n=m(e.test,t),""!==n)||(null!==e.init&&(n=m(e.init,t),""!==n)||null!==e.update&&(n=m(e.update,t),""!==n)||null!==e.body&&(n=m(e.body,t),""!==n))?n:"";case"ContinueStatement":case"EmptyStatement":case"BreakStatement":case"Literal":case"TemplateElement":return"";case"IfStatement":return n=m(e.test,t),""!==n||null!==e.consequent&&(n=m(e.consequent,!1),""!==n)||null!==e.alternate&&(n=m(e.alternate,!1),""!==n)?n:"";case"BlockStatement":{const a=[];for(let t=0;t<e.body.length;t++)"EmptyStatement"!==e.body[t].type&&a.push(e.body[t]);e.body=a;for(let r=0;r<e.body.length;r++)if(n=m(e.body[r],t),""!==n)return n;return""}case"FunctionDeclaration":return!1===t?b(e,"SYNTAX","GLOBALFUNCTIONSONLY"):"Identifier"!==e.id.type?b(e,"SYNTAX","FUNCTIONMUSTHAVEIDENTIFIER"):m(e.body,!1);case"ReturnStatement":return null!==e.argument?m(e.argument,t):"";case"UpdateExpression":return"Identifier"!==e.argument.type&&"MemberExpression"!==e.argument.type?b(e,"SYNTAX","ASSIGNMENTTOVARSONLY"):m(e.argument,t);case"AssignmentExpression":if("Identifier"!==e.left.type&&"MemberExpression"!==e.left.type)return b(e,"SYNTAX","ASSIGNMENTTOVARSONLY");if(n=m(e.left,t),""!==n)return n;switch(e.operator){case"=":case"/=":case"*=":case"%=":case"+=":case"-=":break;default:return b(e,"SYNTAX","OPERATORNOTRECOGNISED")}return m(e.right,!1);case"ExpressionStatement":return"AssignmentExpression"===e.expression.type||e.expression.type,m(e.expression,!1);case"Identifier":n="";break;case"MemberExpression":return n=m(e.object,t),""!==n?n:!0===e.computed?m(e.property,t):"";case"CallExpression":if("Identifier"!==e.callee.type)return b(e,"SYNTAX","ONLYNODESSUPPORTED");n="";for(let a=0;a<e.arguments.length;a++)if(n=m(e.arguments[a],t),""!==n)return n;return"";case"UnaryExpression":n=m(e.argument,t);break;case"BinaryExpression":if(n=m(e.left,t),""!==n)return n;if(n=m(e.right,t),""!==n)return n;switch(e.operator){case"|":case"&":case">>":case"<<":case">>>":case"^":case"==":case"!=":case"<":case"<=":case">":case">=":case"+":case"-":case"*":case"/":case"%":break;default:return b(e,"SYNTAX","OPERATORNOTRECOGNISED")}return"";case"LogicalExpression":if(n=m(e.left,t),""!==n)return n;if(n=m(e.right),""!==n)return n;switch(e.operator){case"&&":case"||":break;default:return b(e,"SYNTAX","OPERATORNOTRECOGNISED")}return"";case"ArrayExpression":n="";for(let a=0;a<e.elements.length;a++)if(n=m(e.elements[a],t),""!==n)return n;return n;case"TemplateLiteral":n="";for(let a=0;a<e.quasis.length;a++)if(n=m(e.quasis[a],t),""!==n)return n;for(let a=0;a<e.expressions.length;a++)if(n=m(e.expressions[a],t),""!==n)return n;return n;case"ObjectExpression":n="";for(let a=0;a<e.properties.length;a++){if(n="",null!==e.properties[a].key&&("Literal"!==e.properties[a].key.type&&"Identifier"!==e.properties[a].key.type&&(n=b(e,"SYNTAX","OBJECTPROPERTYMUSTBESTRING")),"Literal"===e.properties[a].key.type)){const t=e.properties[a].key,r="value"in t?t.value:null;"string"==typeof r||r instanceof String||(n=b(e,"SYNTAX","OBJECTPROPERTYMUSTBESTRING"))}if(""===n&&(n=m(e.properties[a],t)),""!==n)return n}return n;case"Property":return"Literal"!==e.key.type&&"Identifier"!==e.key.type?b(e,"SYNTAX","ONLYLITERAL"):("Identifier"!==e.key.type&&(n=m(e.key,t),""!==n)||(n=m(e.value,t)),n);default:return n}return n}catch(a){throw a}}function c(e,t){let n=b(e,"SYNTAX","UNREOGNISED"),a=null,r="";try{switch(e.type){case"VariableDeclarator":{const n=null===e.init?"":c(e.init,t);return""!==n?n:("Identifier"===e.id.type&&(null===t.localScope?t.globalScope[e.id.name.toLowerCase()]={type:"any"}:t.localScope[e.id.name.toLowerCase()]={type:"any"}),"")}case"FunctionDeclaration":return a=y(e.id.name.toLowerCase(),e),r=x(e,t),""!==r?r:null!==t.localScope?b(e,"SYNTAX","GLOBALFUNCTIONSONLY"):(a.isnative=!1,t.globalScope[e.id.name.toLowerCase()]={type:"FormulaFunction",signature:[a]},"");case"VariableDeclaration":n="";for(let a=0;a<e.declarations.length;a++)if(n=c(e.declarations[a],t),""!==n)return n;return n;case"IfStatement":return n=c(e.test,t),""!==n?n:"AssignmentExpression"===e.test.type||"UpdateExpression"===e.test.type?b(e.test,"SYNTAX","CANNOT_USE_ASSIGNMENT_IN_CONDITION"):null!==e.consequent&&(n=c(e.consequent,t),""!==n)||null!==e.alternate&&(n=c(e.alternate,t),""!==n)?n:"";case"EmptyStatement":case"BreakStatement":case"ContinueStatement":case"Literal":case"TemplateElement":return"";case"BlockStatement":for(let a=0;a<e.body.length;a++)if(n=c(e.body[a],t),""!==n)return n;return"";case"ReturnStatement":return null!==e.argument?c(e.argument,t):"";case"ForInStatement":if("VariableDeclaration"===e.left.type){if(e.left.declarations.length>1)return b(e,"SYNTAX","ONLY1VAR");if(null!==e.left.declarations[0].init)return b(e,"SYNTAX","CANNOTDECLAREVAL")}else if("Identifier"!==e.left.type)return b(e,"SYNTAX","LEFTNOTVAR");return n=c(e.left,t),""!==n?n:(n=c(e.right,t),""!==n?n:(n=c(e.body,t),""!==n?n:""));case"ForStatement":return null!==e.init&&(n=c(e.init,t),""!==n)||(null!==e.test&&(n=c(e.test,t),""!==n)||null!==e.body&&(n=c(e.body,t),""!==n)||null!==e.update&&(n=c(e.update,t),""!==n))?n:"";case"UpdateExpression":{if("Identifier"!==e.argument.type&&"MemberExpression"!==e.argument.type)return b(e,"SYNTAX","ASSIGNMENTTOVARSONLY");let n=!1;return"MemberExpression"===e.argument.type?c(e.argument,t):(null!==t.localScope&&void 0!==t.localScope[e.argument.name.toLowerCase()]&&(n=!0),void 0!==t.globalScope[e.argument.name.toLowerCase()]&&(n=!0),!1===n?"Identifier "+e.argument.name+" has not been declared.":"")}case"AssignmentExpression":{if("Identifier"!==e.left.type&&"MemberExpression"!==e.left.type)return b(e,"SYNTAX","ASSIGNMENTTOVARSONLY");let n=c(e.right,t);if(""!==n)return n;let a=!1;return"MemberExpression"===e.left.type?(n=c(e.left,t),""!==n?n:""):(null!==t.localScope&&void 0!==t.localScope[e.left.name.toLowerCase()]&&(a=!0),void 0!==t.globalScope[e.left.name.toLowerCase()]&&(a=!0),!1===a?"Identifier "+e.left.name+" has not been declared.":"")}case"ExpressionStatement":return"AssignmentExpression"===e.expression.type||e.expression.type,c(e.expression,t);case"Identifier":{const a=e.name.toLowerCase();if(null!==t.localScope&&void 0!==t.localScope[a])return"";n=void 0!==t.globalScope[a]?"":b(e,"SYNTAX","VARIABLENOTFOUND");break}case"MemberExpression":return n=c(e.object,t),""!==n?n:!0===e.computed?c(e.property,t):"";case"CallExpression":{if("Identifier"!==e.callee.type)return b(e,"SYNTAX","ONLYNODESSUPPORTED");n="";for(let r=0;r<e.arguments.length;r++)if(n=c(e.arguments[r],t),""!==n)return n;const a=s(e.callee.name,e.arguments,t);-1===a&&(n=b(e,"SYNTAX","NOTFOUND")),-2===a&&(n=b(e,"SYNTAX","WRONGSIGNATURE"));break}case"UnaryExpression":n=c(e.argument,t);break;case"BinaryExpression":return n=c(e.left,t),""!==n?n:(n=c(e.right,t),""!==n?n:"");case"LogicalExpression":return n=c(e.left,t),""!==n?n:"AssignmentExpression"===e.left.type||"UpdateExpression"===e.left.type?b(e.left,"SYNTAX","CANNOT_USE_ASSIGNMENT_IN_CONDITION"):(n=c(e.right,t),""!==n?n:"AssignmentExpression"===e.right.type||"UpdateExpression"===e.right.type?b(e.right,"SYNTAX","CANNOT_USE_ASSIGNMENT_IN_CONDITION"):"");case"ArrayExpression":n="";for(let a=0;a<e.elements.length;a++)if(n=c(e.elements[a],t),""!==n)return n;return n;case"TemplateLiteral":n="";for(let a=0;a<e.quasis.length;a++)if(n=c(e.quasis[a],t),""!==n)return n;for(let a=0;a<e.expressions.length;a++)if(n=c(e.expressions[a],t),""!==n)return n;return n;case"ObjectExpression":n="";for(let a=0;a<e.properties.length;a++){if(n="",null!==e.properties[a].key&&("Literal"!==e.properties[a].key.type&&"Identifier"!==e.properties[a].key.type&&(n=b(e,"SYNTAX","OBJECTPROPERTYMUSTBESTRING")),"Literal"===e.properties[a].key.type)){const t=e.properties[a].key,r="value"in t?t.value:null;"string"==typeof r||r instanceof String||(n=b(e,"SYNTAX","OBJECTPROPERTYMUSTBESTRING"))}if(""===n&&(n=c(e.properties[a],t)),""!==n)return n}return n;case"Property":return"Literal"!==e.key.type&&"Identifier"!==e.key.type?b(e,"SYNTAX","ONLYLITERAL"):("Identifier"!==e.key.type&&(n=c(e.key,t),""!==n)||(n=c(e.value,t)),n);default:return C(e),n}return n}catch(i){throw i}}function p(e,t){let n=!1;const a=t.toLowerCase();return l(e,(e=>!n&&("Identifier"===e.type&&e.name&&e.name.toLowerCase()===a&&(n=!0),!0))),n}function u(e,t){let n=!1;const a=t.toLowerCase();return l(e,(e=>!n&&("CallExpression"!==e.type||"Identifier"!==e.callee.type||!e.callee.name||e.callee.name.toLowerCase()!==a||(n=!0,!1)))),n}function f(e){const t=[];return l(e,(e=>"MemberExpression"!==e.type||"Identifier"!==e.object.type||(!1===e.computed&&e.object&&e.object.name&&e.property&&"Identifier"===e.property.type&&e.property.name?t.push(e.object.name.toLowerCase()+"."+e.property.name.toLowerCase()):e.object&&e.object.name&&e.property&&"Literal"===e.property.type&&"string"==typeof e.property.value&&t.push(e.object.name.toLowerCase()+"."+e.property.value.toString().toLowerCase()),!1))),t}function d(e){const t=[];return l(e,(e=>{if("CallExpression"===e.type){if("Identifier"===e.callee.type&&"expects"===e.callee.name.toLowerCase()){let n="";for(let r=0;r<(e.arguments||[]).length;r++)0===r?"Identifier"===e.arguments[r].type&&(n=e.arguments[r].name.toLowerCase()):n&&"Literal"===e.arguments[r].type&&a(e.arguments[r].value)&&t.push(n+"."+e.arguments[r].value.toLowerCase());return!1}if("Identifier"===e.callee.type&&["domainname","domaincode","domain","haskey"].includes(e.callee.name.toLowerCase())&&e.arguments.length>=2){let n="";return"Identifier"===e.arguments[0].type&&(n=e.arguments[0].name.toLowerCase()),n&&"Literal"===e.arguments[1].type&&a(e.arguments[1].value)&&t.push(n+"."+e.arguments[1].value.toLowerCase()),!1}}return"MemberExpression"!==e.type||"Identifier"!==e.object.type||(!1===e.computed&&e.object&&e.object.name&&e.property&&"Identifier"===e.property.type&&e.property.name?t.push(e.object.name.toLowerCase()+"."+e.property.name.toLowerCase()):e.object&&e.object.name&&e.property&&"Literal"===e.property.type&&"string"==typeof e.property.value&&t.push(e.object.name.toLowerCase()+"."+e.property.value.toString().toLowerCase()),!1)})),t}function y(e,t){const n=[];if(void 0!==t.params&&null!==t.params)for(let a=0;a<t.params.length;a++)n.push("any");return{name:e,return:"any",params:n}}function x(e,t){const n={globalScope:t.globalScope,localScope:{}};for(let a=0;a<e.params.length;a++){const t=e.params[a].name;n.localScope[t.toLowerCase()]={type:"any"}}return c(e.body,n)}function N(e,t,n,a){const r={};null==e&&(e={}),null==n&&(n={}),r.infinity={type:"any"},r.textformatting={type:"any"},r.pi={type:"any"};for(const i in t)"sync"===a&&void 0!==t[i].min?r[i]={type:"FormulaFunction",signature:{min:t[i].min,max:t[i].max}}:"sync"!==a&&void 0!==t[i].fmin&&(r[i]={type:"FormulaFunction",signature:{min:t[i].fmin,max:t[i].fmax}});for(let i=0;i<n.length;i++){const e=n[i];r[e.name]={type:"FormulaFunction",signature:e}}for(const i in e)r[i]=e[i],r[i].type="any";return r}function S(t,n,a="async",r=e){const i={globalScope:N(n.vars,r,n.customFunctions,a),localScope:null};return c(t.body[0].body,i)}function E(e){return"BlockStatement"!==e.body[0].body.type?"Invalid formula content.":m(e.body[0].body)}function b(e,t,n){let a="";switch(t){case"SYNTAX":default:a="Syntax Error: ";break;case"RUNTIME":a="Runtime Error: "}try{switch(e.type){case"IfStatement":switch(n){case"CANNOT_USE_ASSIGNMENT_IN_CONDITION":a+=" Assignments not be made in logical tests";break;case"CANNOT_USE_NONBOOLEAN_IN_CONDITION":a+=" Non Boolean used as Condition"}break;case"UpdateExpression":case"AssignmentExpression":switch(n){case"CANNOT_USE_ASSIGNMENT_IN_CONDITION":a+=" Assignments not be made in logical tests";break;case"ASSIGNMENTTOVARSONLY":a+=" Assignments can only be made to identifiers"}break;case"ExpressionStatement":a+=" Assignments can only be made to identifiers";break;case"FunctionDeclaration":switch(n){case"GLOBALFUNCTIONSONLY":a+=" Functions cannot be declared as variables";break;case"FUNCTIONMUSTHAVEIDENTIFIER":a+=" Function Definition must have an identifier"}break;case"VariableDeclaration":a+=" Only 1 variable can be declared at a time";break;case"VariableDeclarator":switch(n){case"FUNCTIONVARIABLEDECLARATOR":a+=" Functions cannot be declared as variables";break;case"VARIABLEMUSTHAVEIDENTIFIER":a+=" Variable Definition must have an identifier"}break;case"Identifier":a+=" Identifier Not Found. ",a+=e.name;break;case"ObjectExpression":if("OBJECTPROPERTYMUSTBESTRING"===n)a+=" Property name must be a string";break;case"ForStatement":if("CANNOT_USE_NONBOOLEAN_IN_CONDITION"===n)a+=" Non Boolean used as Condition";break;case"ForInStatement":switch(n){case"ONLY1VAR":a+=" Can only declare 1 var for use with IN";break;case"CANNOTDECLAREVAL":a+=" Can only declare value for use with IN";break;case"LEFTNOVAR":a+="Must provide a variable to iterate with.";break;case"VARIABLENOTDECLARED":a+="Variable must be declared before it is used..";break;case"CANNOTITERATETHISTYPE":a+="This type cannot be used in an IN loop"}break;case"MemberExpression":switch(n){case"PROPERTYNOTFOUND":a+="Cannot find member property. ",a+=!1===e.computed&&"Identifier"===e.property.type?e.property.name:"";break;case"OUTOFBOUNDS":a+="Out of Bounds. ",a+=!1===e.computed&&"Identifier"===e.property.type?e.property.name:"";break;case"NOTFOUND":a+="Cannot call member method on null. ",a+=!1===e.computed&&"Identifier"===e.property.type?e.property.name:"";break;case"INVALIDTYPE":a+="Cannot call member property on object of this type. ",a+=!1===e.computed&&"Identifier"===e.property.type?e.property.name:""}break;case"Property":if("ONLYLITERAL"===n)a+="Property names must be literals or identifiers";break;case"Literal":break;case"CallExpression":switch(n){case"WRONGSIGNATURE":a+="Function signature does not match: ",a+="Identifier"===e.callee.type?e.callee.name:"";break;case"ONLYNODESUPPORTED":a+="Functions must be declared.",a+="Identifier"===e.callee.type?e.callee.name:"";break;case"NOTAFUNCTION":a+="Not a Function: ",a+="Identifier"===e.callee.type?e.callee.name:"";break;case"NOTFOUND":a+="Function Not Found: "+("Identifier"===e.callee.type?e.callee.name:"")}break;case"UnaryExpression":switch(n){case"NOTSUPPORTEDUNARYOPERATOR":a+="Operator "+e.operator+" not allowed in this context. Only ! can be used with boolean, and - with a number";break;case"NOTSUPPORTEDTYPE":a+="Unary operator "+e.operator+" cannot be used with this argument."}case"BinaryExpression":if("OPERATORNOTRECOGNISED"===n)a+="Binary Operator not recognised "+e.operator;break;case"LogicalExpression":switch(n){case"ONLYBOOLEAN":a+="Operator "+e.operator+" cannot be used. Only || or && are allowed values";break;case"ONLYORORAND":a+="Logical Expression "+e.operator+" being applied to parameters that are not boolean."}break;case"ArrayExpression":if("FUNCTIONCONTEXTILLEGAL"===n)a+=" Cannot Put Function inside Array.";break;default:a+="Expression contains unrecognised code structures."}}catch(r){throw r}return a}function g(e,t,n){return{line:e.loc.start.line,character:e.loc.start.column,reason:b(e,t,n)}}function T(e,t,n,a){const r={globalScope:t.globalScope,localScope:{}};for(let i=0;i<e.params.length;i++){const t=e.params[i].name;r.localScope[t.toLowerCase()]={type:"any"}}O(e.body,r,n,a,!1)}function O(e,t,n,a,r=!0){if(null===e)throw new Error("Unnexpexted Expression Syntax");let i=null;try{switch(e.type){case"VariableDeclarator":return"Identifier"!==e.id.type?a.push(g(e,"SYNTAX","VARIABLEMUSTHAVEIDENTIFIER")):(null!==t.localScope?t.localScope[e.id.name.toLowerCase()]:t.globalScope[e.id.name.toLowerCase()],null===t.localScope?t.globalScope[e.id.name.toLowerCase()]={type:"any"}:t.localScope[e.id.name.toLowerCase()]={type:"any"}),void(null!==e.init&&O(e.init,t,n,a,r));case"FunctionDeclaration":return!1===r&&a.push(g(e,"SYNTAX","GLOBALFUNCTIONSONLY")),"Identifier"!==e.id.type&&a.push(g(e,"SYNTAX","FUNCTIONMUSTHAVEIDENTIFIER")),i=y("",e),T(e,t,n,a),null!==t.localScope&&a.push(g(e,"SYNTAX","GLOBALFUNCTIONSONLY")),i.isnative=!1,void("Identifier"===e.id.type&&(t.globalScope[e.id.name.toLowerCase()]={type:"FormulaFunction",signature:[i]}));case"VariableDeclaration":for(let i=0;i<e.declarations.length;i++)O(e.declarations[i],t,n,a,r);return;case"IfStatement":return null!==e.test&&(O(e.test,t,n,a,r),"AssignmentExpression"!==e.test.type&&"UpdateExpression"!==e.test.type||a.push(g(e.test,"SYNTAX","CANNOT_USE_ASSIGNMENT_IN_CONDITION"))),null!==e.consequent&&O(e.consequent,t,n,a,r),void(null!==e.alternate&&O(e.alternate,t,n,a,r));case"EmptyStatement":case"BreakStatement":case"ContinueStatement":case"Literal":case"TemplateElement":return;case"BlockStatement":if(null!==e.body)for(let i=0;i<e.body.length;i++)O(e.body[i],t,n,a,r);return;case"ReturnStatement":return void(null!==e.argument&&O(e.argument,t,n,a,r));case"ForInStatement":return"VariableDeclaration"===e.left.type?(e.left.declarations.length>1&&a.push(g(e,"SYNTAX","ONLY1VAR")),null!==e.left.declarations[0].init&&a.push(g(e,"SYNTAX","CANNOTDECLAREVAL"))):"Identifier"!==e.left.type&&a.push(g(e,"SYNTAX","LEFTNOTVAR")),O(e.left,t,n,a,r),O(e.right,t,n,a,r),void O(e.body,t,n,a,r);case"ForStatement":return null!==e.init&&O(e.init,t,n,a,r),null!==e.test&&O(e.test,t,n,a,r),null!==e.body&&O(e.body,t,n,a,r),void(null!==e.update&&O(e.update,t,n,a,r));case"UpdateExpression":if("Identifier"!==e.argument.type&&"MemberExpression"!==e.argument.type)a.push(g(e,"SYNTAX","ASSIGNMENTTOVARSONLY"));else{if("Identifier"===e.argument.type){let r=!1;!1===n&&(null!==t.localScope&&void 0!==t.localScope[e.argument.name.toLowerCase()]&&(r=!0),void 0!==t.globalScope[e.argument.name.toLowerCase()]&&(r=!0),!1===r&&a.push({line:null===e?0:e.loc.start.line,character:null===e?0:e.loc.start.column,reason:"Identifier "+e.argument.name+" has not been declared."}))}"MemberExpression"===e.argument.type&&O(e.argument,t,n,a,r)}return;case"AssignmentExpression":{switch("Identifier"!==e.left.type&&"MemberExpression"!==e.left.type&&a.push(g(e,"SYNTAX","ASSIGNMENTTOVARSONLY")),e.operator){case"=":case"/=":case"*=":case"%=":case"+=":case"-=":break;default:a.push(g(e,"SYNTAX","OPERATORNOTRECOGNISED"))}O(e.right,t,n,a,r);let i=!1;return"Identifier"===e.left.type&&(null!==t.localScope&&void 0!==t.localScope[e.left.name.toLowerCase()]&&(i=!0),void 0!==t.globalScope[e.left.name.toLowerCase()]&&(i=!0),!1===n&&!1===i&&a.push({line:null===e?0:e.loc.start.line,character:null===e?0:e.loc.start.column,reason:"Identifier "+e.left.name+" has not been declared."})),void("MemberExpression"===e.left.type&&O(e.left,t,n,a,r))}case"ExpressionStatement":return"AssignmentExpression"===e.expression.type||e.expression.type,void O(e.expression,t,n,a,r);case"Identifier":{const r=e.name.toLowerCase();if(null!==t.localScope&&void 0!==t.localScope[r])return;if(void 0!==t.globalScope[r])return;!1===n&&a.push(g(e,"SYNTAX","VARIABLENOTFOUND"));break}case"MemberExpression":return O(e.object,t,n,a,r),void(!0===e.computed&&O(e.property,t,n,a,r));case"CallExpression":"Identifier"!==e.callee.type&&a.push(g(e,"SYNTAX","ONLYNODESSUPPORTED"));for(let i=0;i<e.arguments.length;i++)O(e.arguments[i],t,n,a,r);if("Identifier"===e.callee.type){const r=s(e.callee.name,e.arguments,t);!1===n&&-1===r&&a.push(g(e,"SYNTAX","NOTFOUND")),-2===r&&a.push(g(e,"SYNTAX","WRONGSIGNATURE"))}return;case"UnaryExpression":return void O(e.argument,t,n,a,r);case"BinaryExpression":switch(O(e.left,t,n,a,r),O(e.right,t,n,a,r),e.operator){case"==":case"!=":case"<":case"<=":case">":case">=":case"+":case"-":case"*":case"/":case"%":case"&":case"|":case"^":case"<<":case">>":case">>>":break;default:a.push(g(e,"SYNTAX","OPERATORNOTRECOGNISED"))}return;case"LogicalExpression":switch(e.operator){case"&&":case"||":break;default:a.push(g(e,"SYNTAX","OPERATORNOTRECOGNISED"))}return O(e.left,t,n,a,r),"AssignmentExpression"!==e.left.type&&"UpdateExpression"!==e.left.type||a.push(g(e,"SYNTAX","CANNOT_USE_ASSIGNMENT_IN_CONDITION")),O(e.right,t,n,a,r),void("AssignmentExpression"!==e.right.type&&"UpdateExpression"!==e.right.type||a.push(g(e,"SYNTAX","CANNOT_USE_ASSIGNMENT_IN_CONDITION")));case"ArrayExpression":for(let i=0;i<e.elements.length;i++)O(e.elements[i],t,n,a,r);return;case"TemplateLiteral":for(let i=0;i<e.quasis.length;i++)O(e.quasis[i],t,n,a,r);for(let i=0;i<e.expressions.length;i++)O(e.expressions[i],t,n,a,r);return;case"ObjectExpression":for(let i=0;i<e.properties.length;i++)O(e.properties[i],t,n,a,r);return;case"Property":return"Literal"!==e.key.type&&"Identifier"!==e.key.type&&a.push(g(e,"SYNTAX","ONLYLITERAL")),"Literal"===e.key.type&&O(e.key,t,n,a,r),void O(e.value,t,n,a,r);default:a.push(g(e,"SYNTAX","UNRECOGNISED"))}return}catch(o){a.push({line:null===e?0:e.loc.start.line,character:null===e?0:e.loc.start.column,reason:"Unnexpected Syntax"})}}function A(t,n,a,r="async",i=e){const s=[];if("BlockStatement"!==t.body[0].body.type)return[{line:0,character:0,reason:"Invalid Body"}];null==n&&(n={vars:{},customFunctions:[]});const o={globalScope:N(n.vars,i,n.customFunctions,r),localScope:null};try{O(t.body[0].body,o,a,s)}catch(l){}return s}function I(e){const t=[];return l(e,(e=>("CallExpression"===e.type&&"Identifier"===e.callee.type&&t.push(e.callee.name.toLowerCase()),!0))),t}function h(e,a=[]){let r=null;if(void 0===e.usesFeatureSet){null===r&&(r=I(e)),e.usesFeatureSet=!1;for(let n=0;n<r.length;n++)t.includes(r[n])&&(e.usesFeatureSet=!0,e.isAsync=!0);if(!1===e.usesFeatureSet&&a&&a.length>0)for(const t of a)if(p(e,t)){e.usesFeatureSet=!0,e.isAsync=!0;break}}if(void 0===e.usesGeometry){e.usesGeometry=!1,null===r&&(r=I(e));for(let t=0;t<r.length;t++)n.includes(r[t])&&(e.usesGeometry=!0)}}function L(e){const n=I(e);for(let a=0;a<n.length;a++)if(t.includes(n[a]))return!0;return!1}function C(e){}export{r as addFunctionDeclaration,i as checkFunctionSignature,A as checkScript,N as constructGlobalScope,O as extractAllIssues,T as extractAllIssuesInFunction,y as extractFunctionDeclaration,d as findExpectedFieldLiterals,f as findFieldLiterals,s as findFunction,I as findFunctionCalls,h as findScriptDependencies,e as functionDecls,g as makeError,b as nodeErrorMessage,u as referencesFunction,p as referencesMember,L as scriptUsesFeatureSet,c as testValidityOfExpression,x as validateFunction,E as validateLanguage,m as validateLanguageNode,S as validateScript,l as walk};
|