UNPKG

@xuda.io/runtime-bundle

Version:

The Xuda Runtime Bundle refers to a collection of scripts and libraries packaged together to provide the necessary runtime environment for executing plugins or components in the Xuda platform.

1 lines • 100 kB
var app_obj,progs_obj,_,progs_str,hide_not_in_use_check,is_server,deployments,UglifyJS,JSON5,_conf,warn_plugin_check,z;const PROTECTED_VARS=["_NULL","_THIS","_FOR_KEY","_FOR_VAL","_ROWNO","_ROWID","_ROWDOC","_KEY","_VAL"];const ALL_MENU_TYPE=["globals","component","batch","get_data","set_data","alert","javascript","api","table","folder"];const program_ref_triggers_arr=["call_page","call_modal","call_popover","get_data","set_data","batch","call_native_javascript","call_evaluate_javascript","call_alert","alter_ui_element","create_ui_element","update","raise_event"];export const init=function(app_obj_in,progs_obj_in={},_in,_hide_not_in_use_check,is_server_in,deployments_in=[],UglifyJS_in,JSON5_in,_conf_in,_warn_plugin_check,_z){app_obj=app_obj_in;progs_obj=progs_obj_in;progs_str=JSON.stringify(progs_obj);hide_not_in_use_check=_hide_not_in_use_check;_=_in;is_server=is_server_in;deployments=deployments_in;UglifyJS=UglifyJS_in;JSON5=JSON5_in;_conf=_conf_in;warn_plugin_check=_warn_plugin_check;z=_z};export const check=function(doc){var ret=[];var dependency_progs=[];const addValidationError=(code,data,type="E",category="document",ref=null,id=null,not_in_use=false)=>{const error={code:code,data:data,type:type,category:category};if(ref)error.ref=ref;if(id)error.id=id;if(not_in_use)error.not_in_use=not_in_use;ret.push(error)};if(_.isEmpty(doc)){addValidationError("CHK_MSG_OBJ_GEN_110","doc in empty");return{check_errors:ret,check_warnings:[],doc:doc,dependency_progs:[]}}let critical_error=false;ret=check_structure(doc);if(!critical_error){doc.studio_meta.not_in_use=false;if(doc.properties.menuType!=="folder"){if(doc.properties.menuType!=="table"){if(is_server){for(let val of deployments){if(val.deploy_data?.prog_id===doc._id){if(!doc.studio_meta.used_by_deployment_ids){doc.studio_meta.used_by_deployment_ids=[]}doc.studio_meta.used_by_deployment_ids.push(val._id)}}}if(!doc.studio_meta.used_by_deployment_id){const check_programs_are_active=function(arr){if(!arr.length)return false;var count=0;for(let val of arr){if(progs_obj?.[val.prog_id]?.studio_meta?.not_in_use){count++;break}}return count!==arr.length};if(!hide_not_in_use_check){const ret_prog_in_use=find_trigger_property_value_in_progs(doc,program_ref_triggers_arr,"prog",doc._id);if(!ret_prog_in_use||!check_programs_are_active(ret_prog_in_use)){const ret_panel_prog_in_use=find_panel_prog_in_progs(doc,doc._id);if(!ret_panel_prog_in_use||!check_programs_are_active(ret_panel_prog_in_use)){const ret_fieldValue_in_use=find_prog_in_fieldset_fieldValue_progs(doc,doc._id);if(!ret_fieldValue_in_use||!check_programs_are_active(ret_fieldValue_in_use)){doc.studio_meta.not_in_use=true}}}}}ret=[...ret,...check_prog_events(doc)];dependency_progs=find_trigger_property_value_in_progs(doc,program_ref_triggers_arr,"prog",null,true)||[];dependency_progs=[...dependency_progs,...find_panel_prog_in_progs(doc,null,true)||[]]}else{if(!hide_not_in_use_check){if(!find_table_in_progs(doc,doc._id)){doc.studio_meta.not_in_use=true}}}}switch(doc.properties.menuType){case"globals":ret=[...ret,...check_globals(doc)];break;case"table":ret=[...ret,...check_table(doc)];break;case"component":ret=[...ret,...check_component(doc)];break;case"javascript":ret=[...ret,...check_javascript(doc)];break;case"get_data":ret=[...ret,...check_get_data(doc)];break;case"set_data":ret=[...ret,...check_set_data(doc)];break;case"batch":ret=[...ret,...check_batch(doc)];break;case"api":ret=[...ret,...check_api(doc)];break;case"alert":ret=[...ret,...check_alert(doc)];break;case"route":ret=[...ret,...check_route(doc)];break;case"folder":break;default:addValidationError("CHK_MSG_GEN_050",`invalid ${doc.properties.menuType} properties.menuType`,"E","prog",doc._id,doc._id);break}}var final_ret={check_errors:[],check_warnings:[],doc:doc,dependency_progs:dependency_progs};for(let[key,val]of Object.entries(ret)){if(val.type==="E"){final_ret.check_errors.push(val)}if(val.type==="W"){final_ret.check_warnings.push(val)}}return final_ret};export const check_structure=function(doc){var ret=[];const addValidationError=(code,data)=>{ret.push({code:code,data:data,type:"E",category:"document",structure_error:true})};if(!app_obj||!_.isObject(app_obj)||_.isEmpty(app_obj)){addValidationError("CHK_MSG_OBJ_GEN_002","invalid app_obj");critical_error=true;return ret}if(!doc||!_.isObject(doc)||_.isEmpty(doc)){addValidationError("CHK_MSG_OBJ_GEN_004","doc is not a object");critical_error=true;return ret}try{JSON5.parse(JSON.stringify(doc))}catch(err){addValidationError("CHK_MSG_OBJ_GEN_005","error parsing JSON doc");critical_error=true;return ret}if(z){const schema=get_zod_schema(doc.properties.menuType);const result=schema.safeParse(doc);if(!result.success){result.error.errors.forEach(error=>{const msg=`${error.message}: ${error.path}(${error.expected})`;addValidationError("CHK_MSG_OBJ_GEN_000",msg)});critical_error=true;return ret}}if(!doc._id){addValidationError("CHK_MSG_OBJ_GEN_050","missing _id value")}if(doc?.studio_meta?.source==="studio ai"&&doc?.properties?.menuType&&doc._id&&doc._id.substr(0,7)!==new_node_id(doc.properties.menuType,doc.app_id).substr(0,7)){addValidationError("CHK_MSG_OBJ_GEN_051","invalid _id value (e.g: 5b1_tbl_a953848a71c5)")}if(!doc._rev){if(progs_obj?.[doc._id]){addValidationError("CHK_MSG_OBJ_GEN_052","duplicate doc _id")}}if(!doc.properties){addValidationError("CHK_MSG_OBJ_GEN_100","missing properties object")}else{if(!_.isObject(doc.properties)){addValidationError("CHK_MSG_OBJ_GEN_102","invalid properties object")}else{if(!doc.properties.menuType){addValidationError("CHK_MSG_OBJ_GEN_104","missing properties.menuType")}else if(!ALL_MENU_TYPE.includes(doc.properties.menuType)){addValidationError("CHK_MSG_OBJ_GEN_105",`invalid properties.menuType (valid values: ${ALL_MENU_TYPE.join(",")})`)}if(!doc.properties.menuName){addValidationError("CHK_MSG_OBJ_GEN_106","missing properties.menuName")}}}if(!doc.studio_meta){addValidationError("CHK_MSG_OBJ_GEN_112","missing studio_meta property")}else{if(!_.isObject(doc.studio_meta)){addValidationError("CHK_MSG_OBJ_GEN_112","invalid studio_meta object")}else{if(!doc.studio_meta.parentId){addValidationError("CHK_MSG_OBJ_GEN_114","missing studio_meta.parentId value")}else{let menuType=doc?.properties?.menuType==="globals"?"globals":doc?.properties?.menuType==="table"?"database":doc?.properties?.menuType==="route"?"routes":"programs";if(doc.studio_meta.parentId!==menuType&&!progs_obj[doc.studio_meta.parentId]){addValidationError("CHK_MSG_OBJ_GEN_116","invalid studio_meta.parentId value")}}}}const check_progFields=function(){if(!doc.progFields)return;var ids=[];if(!_.isArray(doc.progFields)){addValidationError("CHK_MSG_OBJ_GEN_402","invalid progFields Array property");return}const validTypes=["virtual","table","expression","datasource"];const validFieldTypes=["string","number","boolean","array","object"];for(let val of doc.progFields){if(!_.isObject(val)){addValidationError("CHK_MSG_OBJ_GEN_404",`Invalid progFields object `);continue}if(!val.id){addValidationError("CHK_MSG_OBJ_GEN_406","Missing progFields ID property")}const fieldId=val.id?`(${val.id})`:"";if(val.id){if(ids.includes(val.id)){addValidationError("CHK_MSG_OBJ_GEN_408",`Duplicate progFields ID (${val.id})`);continue}ids.push(val.id)}if(!_.isObject(val.data)){addValidationError("CHK_MSG_OBJ_GEN_410",`Invalid progFields data object ${fieldId}`)}else{if(!val.data.field_id){addValidationError("CHK_MSG_OBJ_GEN_412",`Missing progFields field_id property ${fieldId}`)}if(!val.data.type){addValidationError("CHK_MSG_OBJ_GEN_414",`Missing progFields type property ${fieldId}`)}else if(!validTypes.includes(val.data.type)){addValidationError("CHK_MSG_OBJ_GEN_415",`Invalid progFields type "${val.data.type}" ${fieldId}. Must be one of: ${validTypes.join(", ")}`)}}if(!_.isObject(val.props)){addValidationError("CHK_MSG_OBJ_GEN_416",`Invalid progFields props object ${fieldId}`)}else{if(!val.props.fieldType){addValidationError("CHK_MSG_OBJ_GEN_418",`Missing progFields fieldType property ${fieldId}`)}else if(!validFieldTypes.includes(val.props.fieldType)){addValidationError("CHK_MSG_OBJ_GEN_419",`Invalid progFields fieldType "${val.props.fieldType}" ${fieldId}. Must be one of: ${validFieldTypes.join(", ")}`)}if(!_.isObject(val.props.propExpressions)){addValidationError("CHK_MSG_OBJ_GEN_4120",`Invalid progFields propExpressions object ${fieldId}`)}else{const allowedProps=["fieldValue","fieldType"];const actualProps=Object.keys(val.props.propExpressions);const invalidProps=actualProps.filter(prop=>!allowedProps.includes(prop));if(invalidProps.length>0){addValidationError("CHK_MSG_OBJ_GEN_4121",`Invalid propExpressions properties: ${invalidProps.join(", ")} ${fieldId}. Only allowed: ${allowedProps.join(", ")}`)}}}check_workflow(val.workflow)}};const check_progEvents=function(){if(!doc.progEvents)return;var ids=[];if(!_.isArray(doc.progEvents)){addValidationError("CHK_MSG_OBJ_GEN_502","invalid progEvents Array property");return}for(let val of doc.progEvents){if(!_.isObject(val)){addValidationError("CHK_MSG_OBJ_GEN_504","invalid progEvents object property");continue}if(!val.id){addValidationError("CHK_MSG_OBJ_GEN_506","missing progEvents.id property");continue}if(ids.includes(val.id)){addValidationError("CHK_MSG_OBJ_GEN_508",`${val.id} id must be unique in progEvents property`);continue}ids.push(val.id);if(!_.isObject(val.data)){addValidationError("CHK_MSG_OBJ_GEN_510","invalid progEvents.data object property");continue}if(typeof val.data.condition==="undefined"){addValidationError("CHK_MSG_OBJ_GEN_512","undefined progEvents.data.condition string property")}if(typeof val.data.event_name==="undefined"){addValidationError("CHK_MSG_OBJ_GEN_514","undefined progEvents.data.event_name string property")}if(typeof val.data.properties==="undefined"){addValidationError("CHK_MSG_OBJ_GEN_516","undefined progEvents.data.properties string property")}if(typeof val.data.type==="undefined"){addValidationError("CHK_MSG_OBJ_GEN_518","undefined progEvents.data.type string property")}if(!_.isArray(val.data.parameters)){addValidationError("CHK_MSG_OBJ_GEN_522","invalid progEvents.data.parameters Array property")}if(!_.isObject(val.props)){addValidationError("CHK_MSG_OBJ_GEN_522","invalid progEvents.props Object property")}check_workflow(val.workflow)}};const check_workflow=function(workflow){if(!workflow)return;var ids=[];if(!_.isArray(workflow)){addValidationError("CHK_MSG_OBJ_GEN_850","invalid workflow Array property");return}for(let val of workflow){if(!_.isObject(val)){addValidationError("CHK_MSG_OBJ_GEN_852","invalid workflow item object property");continue}if(!val.id){addValidationError("CHK_MSG_OBJ_GEN_854","missing workflow.id property");continue}if(ids.includes(val.id)){addValidationError("CHK_MSG_OBJ_GEN_856",`${val.id} id must be unique in workflow property`);continue}ids.push(val.id);if(!_.isObject(val.data)){addValidationError("CHK_MSG_OBJ_GEN_858","invalid workflow.data Object property")}if(!_.isObject(val.props)){addValidationError("CHK_MSG_OBJ_GEN_860","invalid workflow.props item object property")}}};const check_progDataSource=function(){if(!doc.progDataSource)return;if(!_.isObject(doc.progDataSource)){addValidationError("CHK_MSG_OBJ_GEN_602","invalid progDataSource Object property");return}if(typeof doc.progDataSource.dataSourceType==="undefined"){addValidationError("CHK_MSG_OBJ_GEN_604","undefined progDataSource.dataSourceType string property")}};const check_progUi=function(){if(!doc.progUi)return;if(!_.isArray(doc.progUi)){addValidationError("CHK_MSG_OBJ_GEN_702","invalid progUi Array property");return}var ids=[];const run_tree=function(node){for(let item of node){if(!_.isObject(item)){addValidationError("CHK_MSG_OBJ_GEN_704","invalid progUi item Object property");continue}if(!item.id){addValidationError("CHK_MSG_OBJ_GEN_712","missing progUi id item property")}if(item?.id){if(item?.type==="comment"){addValidationError("CHK_MSG_OBJ_GEN_705",`Comment type is not supported in progUi (${item.id})`);continue}if(item?.type==="text"){addValidationError("CHK_MSG_OBJ_GEN_706",`Text type is not supported in progUi (${item.id}). Convert to "element" type and add a "text" property instead`);continue}if(item?.attributes&&!_.isObject(item.attributes)){addValidationError("CHK_MSG_OBJ_GEN_707",`Invalid progUi attributes object property (${item.id})`)}if(typeof item.type==="undefined"){addValidationError("CHK_MSG_OBJ_GEN_708",`Missing progUi type property (${item.id})`)}if(typeof item.tagName==="undefined"){addValidationError("CHK_MSG_OBJ_GEN_710",`Missing progUi tagName property (${item.id})`)}if(item.id!=="root"&&doc?.studio_meta?.source==="studio ai"&&!detectCryptoString(item.id.replace("node-","").replace("ui-","")).uuid){addValidationError("CHK_MSG_OBJ_GEN_713",`ProgUi item ID must be in UUID format (${item.id})`)}if(ids.includes(item.id)){addValidationError("CHK_MSG_OBJ_GEN_714",`Duplicate progUi item ID found (${item.id})`);continue}ids.push(item.id)}check_workflow(item.workflow);if(item.children){run_tree(item.children)}}};run_tree(doc.progUi)};if(doc.properties&&doc.properties.menuType){switch(doc.properties.menuType){case"table":if(!doc.tableFields){addValidationError("CHK_MSG_OBJ_GEN_200","missing tableFields property")}else{if(!_.isArray(doc.tableFields)){addValidationError("CHK_MSG_OBJ_GEN_202","invalid tableFields Array property")}else{var ids=[];for(let val of doc.tableFields){if(!_.isObject(val)){addValidationError("CHK_MSG_OBJ_GEN_204","invalid tableFields object property");continue}if(!val.id){addValidationError("CHK_MSG_OBJ_GEN_206","missing tableFields.id property");continue}if(ids.includes(val.id)){addValidationError("CHK_MSG_OBJ_GEN_208",`${val.id} id must be unique in tableFields property`);continue}ids.push(val.id);if(!_.isObject(val.data)){addValidationError("CHK_MSG_OBJ_GEN_210","invalid tableFields.data object property");continue}if(!val.data.field_id){addValidationError("CHK_MSG_OBJ_GEN_212","invalid tableFields.data.field_id property")}if(!_.isObject(val.props)){addValidationError("CHK_MSG_OBJ_GEN_214","invalid tableFields.props object property");continue}if(!val.props.fieldType){addValidationError("CHK_MSG_OBJ_GEN_216","invalid tableFields.props.fieldType property")}}}}if(!doc.tableIndexes){addValidationError("CHK_MSG_OBJ_GEN_302","missing tableIndexes property")}else if(!_.isArray(doc.tableIndexes)){addValidationError("CHK_MSG_OBJ_GEN_302","invalid tableIndexes Array property")}else{var index_ids=[];for(let val of doc.tableIndexes){if(!_.isObject(val)){addValidationError("CHK_MSG_OBJ_GEN_304","invalid tableIndexes object property");continue}if(!val.id){addValidationError("CHK_MSG_OBJ_GEN_306","missing tableIndexes.id property");continue}if(index_ids.includes(val.id)){addValidationError("CHK_MSG_OBJ_GEN_308",`${val.id} id must be unique in tableIndexes property`);continue}index_ids.push(val.id);if(!_.isObject(val.data)){addValidationError("CHK_MSG_OBJ_GEN_310","invalid tableIndexes.data object property");continue}if(!val.data.name){addValidationError("CHK_MSG_OBJ_GEN_312","invalid tableIndexes.data.name property")}if(!_.isArray(val.data.keys)){addValidationError("CHK_MSG_OBJ_GEN_312","invalid tableIndexes.data.keys Array property")}}}break;case"globals":check_progFields();check_progEvents();break;case"get_data":case"set_data":case"batch":case"api":check_progFields();check_progEvents();check_progDataSource();break;case"component":check_progFields();check_progEvents();check_progDataSource();check_progUi();if(doc.properties&&typeof doc.properties.uiFramework==="undefined"){addValidationError("CHK_MSG_OBJ_GEN_120","undefined properties.uiFramework string property")}if(doc.properties&&typeof doc.properties.renderType==="undefined"){addValidationError("CHK_MSG_OBJ_GEN_122","undefined properties.renderType string property")}break;case"alert":break;case"javascript":break;case"folder":break;default:break}}return ret};const check_table=function(doc){var ret=[];if(!doc.properties.databaseSocket){ret.push({code:"CHK_MSG_TBL_GEN_010",data:"database socket not defined",type:doc.studio_meta.not_in_use?"W":"E",category:`table`,ref:doc._id,id:doc._id})}else{if(!app_obj?.app_plugins_purchased?.[doc.properties.databaseSocket]){ret.push({code:"CHK_MSG_TBL_GEN_0020",data:`invalid ${doc.properties.databaseSocket} database socket`,type:doc.studio_meta.not_in_use||warn_plugin_check?"W":"E",category:`table`,ref:doc._id,id:doc._id})}else{if(!app_obj.app_plugins_purchased[doc.properties.databaseSocket].installed){ret.push({code:"CHK_MSG_TBL_GEN_030",data:`${doc.properties.databaseSocket} database socket not installed`,type:doc.studio_meta.not_in_use?"W":"E",category:`table`,ref:doc._id,id:doc._id})}}}if(doc.tableIndexes?.length&&!doc?.tableFields?.length){ret.push({code:"CHK_MSG_TBL_FLD_090",data:`table has no fields`,type:doc.studio_meta.not_in_use?"W":"E",category:`table`,ref:doc._id,id:doc._id})}var name_counts_obj={};for(let field of doc.tableFields){if(!field?.data?.field_id){ret.push({code:"CHK_MSG_TBL_FLD_100",data:`missing field_id`,type:doc.studio_meta.not_in_use?"W":"E",category:`table`,ref:field.id,id:`${doc._id}-${field.id}`})}else{if(!/^[A-Za-z]+[\w\-\:\.]*$/.test(field.data.field_id)){ret.push({code:"CHK_MSG_TBL_FLD_020",data:`invalid field_id`,type:doc.studio_meta.not_in_use?"W":"E",category:`table`,ref:field.id,id:`${doc._id}-${field.id}`})}if(!name_counts_obj[field.data.field_id]){name_counts_obj[field.data.field_id]=1}else{name_counts_obj[field.data.field_id]++}if(!hide_not_in_use_check){if(!find_field_in_progs(doc,field.data.field_id)){ret.push({code:"CHK_MSG_TBL_FLD_022",data:`table field "${field.data.field_id}" not in use`,type:"W",category:`table`,ref:doc._id,not_in_use:true,id:`${doc._id}-${field.id}`})}}}}for(let[key,val]of Object.entries(name_counts_obj)){if(val>1){ret.push({code:"CHK_MSG_TBL_FLD_200",data:`duplicate field id for ${key}`,type:doc.studio_meta.not_in_use?"W":"E",id:`${doc._id}-${key}`})}}if(!doc.tableIndexes?.length){if(doc.properties.databaseSocket!=="@xuda.io/xuda-dbs-plugin-xuda"){ret.push({code:"CHK_MSG_TBL_IDX_040",data:`at least one index has to be defined`,type:doc.studio_meta.not_in_use?"W":"E",id:`${doc._id}`})}}else{let found_unique;for(let index of doc.tableIndexes){if(index?.data?.unique){found_unique=true}if(!index?.data?.name){ret.push({code:"CHK_MSG_TBL_IDX_060",data:`tableIndexes.data.name cannot be empty in "${index.id}" index`,type:doc.studio_meta.not_in_use?"W":"E",id:`${doc._id}`})}if(!index?.data?.keys?.length){ret.push({code:"CHK_MSG_TBL_IDX_070",data:`tableIndexes.data.keys cannot be empty in "${index.id}" index`,type:doc.studio_meta.not_in_use?"W":"E",id:`${doc._id}-${index.id}`})}else{for(let key of index.data.keys){if(!doc.tableFields||!_.isArray(doc.tableFields)||!find_item_by_key(doc.tableFields,"field_id",key)){ret.push({code:"CHK_MSG_TBL_IDX_080",data:`invalid key ${key} in tableIndexes.data.keys for "${index.id}" index`,type:doc.studio_meta.not_in_use?"W":"E",id:`${doc._id}-${index.id}-${key}`})}}}}}if(!doc?.tableFields?.length){ret.push({code:"CHK_MSG_TBL_FLD_012",data:`table has no fields`,type:"W",id:`${doc._id}`})}for(let field of doc.tableFields){if(!["string","number","boolean","object","array","date"].includes(field?.props?.fieldType)){ret.push({code:"CHK_MSG_TBL_FLD_022",data:`invalid fieldType for field ${field?.data?.field_id}`,type:"E",id:`${doc._id}-${field.id}`})}}return ret};const check_globals=function(doc){var ret=[];ret=[...ret,...check_prog_fieldset(doc)];return ret};const check_component=function(doc){var ret=[];if(!doc.properties.uiFramework){ret.push({code:"CHK_MSG_PRG_COM_010",data:"component Ui Framework not defined",type:doc.studio_meta.not_in_use?"W":"E",category:`component`,ref:doc._id,id:`${doc._id}`})}else{if(!app_obj?.app_plugins_purchased?.[doc.properties.uiFramework]){ret.push({code:"CHK_MSG_PRG_COM_020",data:`invalid ${doc.properties.uiFramework} Ui Framework`,type:doc.studio_meta.not_in_use?"W":"E",category:`component`,ref:doc._id,id:`${doc._id}`})}else{if(!app_obj.app_plugins_purchased[doc.properties.uiFramework].installed){ret.push({code:"CHK_MSG_PRG_COM_030",data:`${doc.properties.uiFramework} Ui Framework not installed`,type:doc.studio_meta.not_in_use?"W":"E",category:`component`,ref:doc._id,id:`${doc._id}`})}}}ret=[...ret,...check_prog_fieldset(doc)];ret=[...ret,...check_prog_parameters(doc)];ret=[...ret,...check_prog_datasource(doc)];if(doc.progUi){var xu_tree_id_counts_obj={};const run_tree=function(node){for(let item of node){if(item.xu_tree_id){if(!xu_tree_id_counts_obj[item.xu_tree_id]){xu_tree_id_counts_obj[item.xu_tree_id]=1}else{xu_tree_id_counts_obj[item.xu_tree_id]++}}if(item.attributes){var name_counts_obj={};for(let[key,val]of Object.entries(item.attributes)){if(!key){ret.push({code:"CHK_MSG_PRG_GUI_010",data:`missing attribute in tree_id ${item.id}`,type:doc.studio_meta.not_in_use?"W":"E",category:`component_ui`,ref:item.id,id:`${doc._id}-${item.id}-${key}`})}else{if(key.substr(0,6)==="xu-exp"){ret=[...ret,...check_prog_expression(doc,val,item.id,"ui_attribute")]}else{if(!/^[A-Za-z]+[\w\-\:\.]*$/.test(key)){ret.push({code:"CHK_MSG_PRG_GUI_020",data:`invalid attribute "${key}" in tag "${item.tagName}" "${item.id}"`,type:doc.studio_meta.not_in_use?"W":"E",category:`component_ui`,ref:item.id,id:`${doc._id}-${item.id}-${key}`})}}if(key.substr(0,6)==="xu-on:"){if(!_.isEmpty(val)){for(let trigger_item of val){ret=[...ret,...check_prog_triggers(doc,trigger_item.workflow,"ui_trigger",item.id,item.attributes.tree_id)]}}}if(!name_counts_obj[key]){name_counts_obj[key]=1}else{name_counts_obj[key]++}}}for(let[key,val]of Object.entries(name_counts_obj)){if(val>1){ret.push({code:"CHK_MSG_PRG_GUI_200",data:`duplicate attribute id for ${key} in tree_id ${item.attribute.tree_id}`,type:doc.studio_meta.not_in_use?"W":"E",category:`component_ui`,ref:doc._id,id:`${doc._id}-${item.id}-${key}`})}}}if(item.children){run_tree(item.children)}}};run_tree(doc.progUi);for(let[key,val]of Object.entries(xu_tree_id_counts_obj)){if(val>1){ret.push({code:"CHK_MSG_PRG_GUI_250",data:`duplicate tree_id "${key}"`,type:"W",category:`component_ui`,ref:doc._id,id:`${doc._id}-${key}`})}}}return ret};const check_get_data=function(doc){var ret=[];ret=[...ret,...check_prog_fieldset(doc)];ret=[...ret,...check_prog_parameters(doc)];ret=[...ret,...check_prog_datasource(doc)];return ret};const check_batch=function(doc){var ret=[];ret=[...ret,...check_prog_fieldset(doc)];ret=[...ret,...check_prog_parameters(doc)];ret=[...ret,...check_prog_datasource(doc)];return ret};const check_api=function(doc){var ret=[];ret=[...ret,...check_prog_fieldset(doc)];ret=[...ret,...check_prog_parameters(doc)];ret=[...ret,...check_prog_datasource(doc)];return ret};const check_set_data=function(doc){var ret=[];ret=[...ret,...check_prog_fieldset(doc)];ret=[...ret,...check_prog_parameters(doc)];ret=[...ret,...check_prog_datasource(doc)];return ret};const check_alert=function(doc){var ret=[];if(_.isEmpty(doc.alertData)){ret.push({code:"CHK_MSG_PRG_ART_010",data:`no alert properties defined`,type:doc.studio_meta.not_in_use?"W":"E",category:`alert`,ref:doc._id,id:`${doc._id}`})}else{if(!doc.alertData.alertType){ret.push({code:"CHK_MSG_PRG_ART_020",data:`missing alert type property`,type:doc.studio_meta.not_in_use?"W":"E",category:`alert`,ref:doc._id,id:`${doc._id}`})}if(!doc.alertData.alertDisplay){ret.push({code:"CHK_MSG_PRG_ART_030",data:`missing alert display property`,type:doc.studio_meta.not_in_use?"W":"E",category:`alert`,ref:doc._id,id:`${doc._id}`})}if(!doc.alertData.alertTitle&&!doc.alertData.alertTitleFx&&!doc.alertData.alertBody&&!doc.alertData.alertBodyFx){ret.push({code:"CHK_MSG_PRG_ART_032",data:`missing alert title and body value`,type:"W",category:`alert`,ref:doc._id,id:`${doc._id}`})}}return ret};const check_route=function(doc){var ret=[];if(_.isEmpty(doc?.routeMenu?.menu)){ret.push({code:"CHK_MSG_RTE_MNU_010",data:`no route properties defined`,type:doc.studio_meta.not_in_use?"W":"E",category:`alert`,ref:doc._id,id:`${doc._id}`})}else{function checkMenuItems(menu){let flatMenu={};function recurse(items){for(let item of items){if(!item.prog_id){ret.push({code:"CHK_MSG_RTE_MNU_020",data:`no program to call has been defined`,type:doc.studio_meta.not_in_use?"W":"E",category:`alert`,ref:item.id,id:`${doc._id}`});continue}if(!progs_obj?.[item.prog_id]){ret.push({code:"CHK_MSG_RTE_MNU_030",data:`program ${item.prog_id} not exist`,type:doc.studio_meta.not_in_use?"W":"E",category:`alert`,ref:item.id,id:`${doc._id}`});continue}if(item.children&&item.children.length>0){recurse(item.children)}}}recurse(menu);return flatMenu}checkMenuItems(doc.routeMenu.menu)}return ret};const check_prog_fieldset=function(doc){var ret=[];if(!doc.progFields||_.isEmpty(doc.progFields)){if(doc.progDataSource.dataSourceTableId){ret.push({code:"CHK_MSG_PRG_FLD_012",data:`datasource table defined but fieldset is empty`,type:"W",category:"fieldset",id:`${doc._id}`})}}else{var name_counts_obj={};for(let field of doc.progFields){if(!field?.data?.field_id){ret.push({code:"CHK_MSG_PRG_FLD_010",data:`missing field_id`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`})}else{if(!/^[A-Za-z]+[\w\-\:\.]*$/.test(field.data.field_id)&&!PROTECTED_VARS.includes(field.data.field_id)){ret.push({code:"CHK_MSG_PRG_FLD_020",data:`invalid ${field.data.field_id} field_id`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`})}if(!name_counts_obj[field.data.field_id]){name_counts_obj[field.data.field_id]=1}else{name_counts_obj[field.data.field_id]++}if(!hide_not_in_use_check){if(!find_field_in_progs(doc,field.data.field_id)){var found_parameter_out_match;if(!_.isEmpty(doc.properties.progParams)){for(let parameter_item of doc.properties.progParams){if(parameter_item.data.dir==="out"&&parameter_item.data.parameter===field.data.field_id){found_parameter_out_match=true;break}}}if(!found_parameter_out_match){ret.push({code:"CHK_MSG_PRG_FLD_022",data:`field "${field.data.field_id}" not in use`,type:"W",category:"fieldset",ref:field.id,not_in_use:true,id:`${doc._id}-${field.id}`})}}}}if(!field?.data?.type){ret.push({code:"CHK_MSG_PRG_FLD_030",data:`missing field type`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`});return ret}else{switch(field.data.type){case"virtual":break;case"exp":if(!field?.props?.fieldValue||!field?.props?.propExpressions?.fieldValue){ret.push({code:"CHK_MSG_PRG_FLD_070",data:`invalid value or value expression for ${field.data.field_id} field type Exp`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`})}break;case"table":if(doc.properties.menuType==="globals"){ret.push({code:"CHK_MSG_PRG_FLD_040",data:`invalid field type for ${field.data.field_id} in globals`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`})}else{if(!doc.progDataSource||_.isEmpty(doc.progDataSource)||!doc.progDataSource.dataSourceType||doc.progDataSource.dataSourceType==="none"){ret.push({code:"CHK_MSG_PRG_FLD_300",data:`undefined datasource for ${field.data.field_id} field`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`});return ret}else{var ret_dsc=check_prog_datasource(doc);if(ret_dsc.length)return ret;var _datasource_table_arr=progs_obj?.[doc.progDataSource.dataSourceTableId]?.tableFields;if(!_datasource_table_arr){ret.push({code:"CHK_MSG_PRG_FLD_310",data:`no fields found in datasource table ${doc.progDataSource.dataSourceTableId} `,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`});return ret}if(!find_item_by_key(_datasource_table_arr,"field_id",field.data.field_id)){if(!doc.progDataSource.dataSourceReduce||field.data.field_id!=="REDUCE_VALUE"){ret.push({code:"CHK_MSG_PRG_FLD_320",data:`invalid field ${field.data.field_id} in datasource table`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`});return ret}}}}break;default:ret.push({code:"CHK_MSG_PRG_FLD_060",data:`invalid field type for ${field.data.field_id}`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`});return ret;break}}if(!field?.props?.fieldType&&!field?.props?.propExpressions?.fieldType){ret.push({code:"CHK_MSG_PRG_FLD_130",data:`missing field fieldType`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`});return ret}else if(field.props.fieldType){switch(field.props.fieldType){case"string":if(field?.props?.fieldValue&&typeof field.props.fieldValue!=="string"){ret.push({code:"CHK_MSG_PRG_FLD_200",data:`invalid value type ${field.props.fieldType} for ${field.data.field_id} field`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`})}break;case"number":case"boolean":if(field?.props?.fieldValue){if(_.isNaN(_.toNumber(field?.props?.fieldValue))){ret.push({code:"CHK_MSG_PRG_FLD_210",data:`invalid value type ${field.props.fieldType} for ${field.data.field_id} field`,type:"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`})}}break;case"object":case"array":if(field?.props?.fieldValue){try{JSON5.parse(field.props.fieldValue)}catch(err){ret.push({code:"CHK_MSG_PRG_FLD_220",data:`invalid value type "${field.props.fieldType}" for "${field.data.field_id}" field`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`})}}break;default:ret.push({code:"CHK_MSG_PRG_FLD_160",data:`invalid field fieldType for ${field.data.field_id}`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",ref:field.id,id:`${doc._id}-${field.id}`});return ret;break}}if(!_.isEmpty(field.workflow)){ret=[...ret,...check_prog_triggers(doc,field.workflow,"field",field.id,field.data.field_id)]}}for(let[key,val]of Object.entries(name_counts_obj)){if(val>1){ret.push({code:"CHK_MSG_PRG_FLD_200",data:`duplicate field id for ${key}`,type:doc.studio_meta.not_in_use?"W":"E",category:"fieldset",id:`${doc._id}-${key}`})}}}return ret};const check_prog_events=function(doc){var ret=[];if(!doc.progEvents||_.isEmpty(doc.progEvents))return ret;var name_counts_obj={};for(let event_item of doc.progEvents){switch(event_item?.data?.type){case"user_defined":if(!event_item.data.event_name){ret.push({code:"CHK_MSG_PRG_EVT_010",data:`missing event name for ${event_item.id}`,type:"W",category:"event",ref:event_item.id,id:`${doc._id}-${event_item.id}`});continue}else{if(!/^[A-Za-z]+[\w\-\:\.]*$/.test(event_item.data.event_name)){ret.push({code:"CHK_MSG_PRG_EVT_020",data:`invalid event name for event "${event_item.data.event_name||event_item.data.type}"`,type:doc.studio_meta.not_in_use?"W":"E",category:"event",ref:event_item.id,id:`${doc._id}-${event_item.id}`})}if(!hide_not_in_use_check){const ret_event_id_use=find_trigger_property_value_in_progs(doc,["raise_event"],"event",event_item.data.event_name);if(!ret_event_id_use?.length){ret.push({code:"CHK_MSG_PRG_EVT_112",data:`event "${event_item.data.event_name}" not in use`,type:"W",category:"event",ref:event_item.id,not_in_use:true,id:`${doc._id}-${event_item.id}`})}}}if(event_item.data.condition){ret=[...ret,...check_prog_expression(doc,event_item.data.condition,event_item.id,"condition")]}else{if(!name_counts_obj[event_item.id]){name_counts_obj[event_item.id]=1}else{name_counts_obj[event_item.id]++}}break;case"screen_ready":case"client_interval":if(doc.properties.menuType!=="component"){ret.push({code:"CHK_MSG_PRG_EVT_030",data:`event type "${event_item.data.type}" only allowed for "${doc.properties.menuType}" in event "${event_item.data.event_name||event_item.data.type}"`,type:doc.studio_meta.not_in_use?"W":"E",category:"event",ref:event_item.id,id:`${doc._id}-${event_item.id}`})}if(event_item.data.type==="client_interval"&&!event_item.data.properties){ret.push({code:"CHK_MSG_PRG_EVT_035",data:`empty interval property in event "${event_item.data.event_name||event_item.data.type}"`,type:doc.studio_meta.not_in_use?"W":"E",category:"event",ref:event_item.id,id:`${doc._id}-${event_item.id}`})}break;case"on_load":case"on_exit":case"before_record":case"after_record":case"record_not_found":case"locate_not_found":break;default:ret.push({code:"CHK_MSG_PRG_EVT_018",data:`invalid event type for ${event_item.id}`,type:doc.studio_meta.not_in_use?"W":"E",category:"event",ref:event_item.id,id:`${doc._id}-${event_item.id}`});break}if(!_.isEmpty(event_item.workflow)){ret=[...ret,...check_prog_triggers(doc,event_item.workflow,"event",event_item.id,event_item.data.event_name||event_item.data.type)]}else{ret.push({code:"CHK_MSG_PRG_EVT_022",data:`event "${event_item.data.event_name||event_item.data.type}" is empty`,type:"W",category:"event",ref:event_item.id,id:`${doc._id}-${event_item.id}`})}}for(let[key,val]of Object.entries(name_counts_obj)){if(val>1){ret.push({code:"CHK_MSG_PRG_EVT_102",data:`duplicate "${key}" event `,type:"W",category:"event",id:`${doc._id}-${event_item.id}-${key}`})}}return ret};const check_prog_triggers=function(doc,workflow,source_type,source_id,source_name){var ret=[];if(!workflow||_.isEmpty(workflow))return ret;const check_target_program_parameters=function(trigger_item){if(!trigger_item.data.name.prog)return;const target_program_parameters_arr=progs_obj?.[trigger_item.data.name.prog]?.properties?.progParams||[];if(trigger_item?.data?.name?.parameters&&!_.isEmpty(trigger_item.data.name.parameters)){for(let[key,val]of Object.entries(trigger_item.data.name.parameters)){const param_ret=find_item_by_key(target_program_parameters_arr,"parameter",key);if(_.isEmpty(param_ret)){ret.push({code:"CHK_MSG_PRG_TRG_370",data:`parameter "${key}" not found in the target program "${progs_obj?.[trigger_item.data.name.prog].properties.menuName}" parameter list in ${source_type} "${source_name}" trigger`,type:"W",category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}-${key}`});return}if(param_ret.data.dir!=="in"&&val.value){const ret_local_field=find_item_by_key(doc.progFields,"field_id",val.value);if(!ret_local_field){let ret_parent_field;const check_parent_program=function(prog_id){let parent_prog_id=progs_obj?.[prog_id]?.studio_meta?.parentId;if(parent_prog_id&&progs_obj?.[parent_prog_id]){ret_parent_field=find_item_by_key(progs_obj?.[parent_prog_id]?.progFields||[],"field_id",val.value);if(!ret_parent_field){return check_parent_program(parent_prog_id)}}};check_parent_program(doc._id);if(!ret_parent_field){const ret_global_field=find_item_by_key(progs_obj?.[`global_${app_obj._id}`]?.progFields||[],"field_id",val.value);if(!ret_global_field){ret.push({code:"CHK_MSG_PRG_TRG_372",data:`"${val.value}" parameter "Out" not found in the program Dataset in ${source_type} "${source_name}" trigger`,type:"W",category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}-${key}`})}}}}}}else{if(target_program_parameters_arr.length){ret.push({code:"CHK_MSG_PRG_TRG_374",data:`found parameters in "${progs_obj?.[trigger_item.data.name.prog].properties.menuName}" but empty parameter to exchange in ${source_type} "${source_name}" trigger`,type:"W",category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}}};for(let trigger_item of workflow){const get_prog_id=function(){let _prop=trigger_item.data?.name?.properties;let _prog_id=trigger_item.data.name.prog_id||_prop?.["xu-exp:prog"];return _prog_id};const err_type=doc.studio_meta.not_in_use?"W":trigger_item.data.enabled?"E":"W";switch(trigger_item?.data?.action){case"comment":break;case"update":if(!trigger_item?.data?.name?.value){ret.push({code:"CHK_MSG_PRG_TRG_020",data:`no value to update in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{const validate_update_function=function(exp){var viewFields=[];try{var json=JSON5.parse(exp.replace(/\n/gi,""));for(const[key,val]of Object.entries(json)){let id=key.substr(1,key.length-1);viewFields.push({val:val,id:id})}return viewFields}catch(e){if(!exp){return}if(exp.substr(exp.length-1,1)===";")exp=exp.substr(0,exp.length-1);var exp_arr=exp.split(/;\s*(?=(?:[^"]|"[^"]*")*$)/g);if(exp_arr?.length){for(let val of exp_arr){var pos=val.indexOf(":");var seg=[val.substring(0,pos),val.substring(pos+1)];if(seg&&seg.length===2){let id=seg[0].substr(1,seg[0].length);viewFields.push({id:id,val:seg[1]})}else{ret.push({code:"CHK_MSG_PRG_TRG_040",data:`invalid json; too many segments in${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}}}return viewFields}};const ret_update_fields_arr=validate_update_function(trigger_item.data.name.value);if(!ret_update_fields_arr.length){ret.push({code:"CHK_MSG_PRG_TRG_050",data:`no fields to update in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{for(let val of ret_update_fields_arr){const ret_fields=find_field_in_progs(doc,val.id);if(!ret_fields){ret.push({code:"CHK_MSG_PRG_TRG_060",data:`field "${val.id}" not found in the project programs for update in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}}}}break;case"raise_event":if(!trigger_item?.data?.name?.event&&!trigger_item?.data?.name?.properties["xu-exp:event"]){ret.push({code:"CHK_MSG_PRG_TRG_100",data:`invalid event name for "${trigger_item.data.action}" in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else if(trigger_item?.data?.name?.event){if(!/^[A-Za-z]+[\w\-\:\.]*$/.test(trigger_item.data.name.event)){ret.push({code:"CHK_MSG_PRG_TRG_110",data:`invalid event name ${trigger_item.data.name.event} in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{const ret_event_name=find_event_id_in_progs(doc,trigger_item.data.name.event);if(!ret_event_name.length){ret.push({code:"CHK_MSG_PRG_TRG_120",data:`call performed to non exist event name called from "${trigger_item.data.name.event}" in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(ret_event_name.length===1&&!_.isEmpty(trigger_item.data.name.parameters)){for(let[key,val]of Object.entries(trigger_item.data.name.parameters)){if(_.isEmpty(progs_obj?.[ret_event_name[0].prog_id].progFields)){if(!find_item_by_key(progs_obj?.[ret_event_name[0].prog_id].progFields,"field_id",key)){ret.push({code:"CHK_MSG_PRG_TRG_130",data:`parameter "${key}" not exist in the dataset of the target program called from event name "${trigger_item.data.name.event}" in ${source_type} "${source_name}" trigger`,type:"W",category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}-${key}`})}}}}}}}break;case"call_page":case"call_modal":case"call_popover":if(!trigger_item.data.name.prog){if(!trigger_item.data?.name?.properties?.["xu-exp:prog"]){ret.push({code:"CHK_MSG_PRG_TRG_310",data:`empty program to call in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}}else{if(!progs_obj?.[trigger_item.data.name.prog]){ret.push({code:"CHK_MSG_PRG_TRG_320",data:`invalid program to call in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(progs_obj?.[trigger_item.data.name.prog].properties.menuType!=="component"){ret.push({code:"CHK_MSG_PRG_TRG_334",data:`invalid program type "${trigger_item.data.action}" to call in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{check_target_program_parameters(trigger_item)}}}break;case"call_project_api":if(!trigger_item.data.name.prog){if(!trigger_item.data?.name?.properties?.["xu-exp:prog"]){ret.push({code:"CHK_MSG_PRG_TRG_310",data:`empty program to call in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}}else{if(!progs_obj?.[trigger_item.data.name.prog]){ret.push({code:"CHK_MSG_PRG_TRG_320",data:`invalid program to call in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(progs_obj?.[trigger_item.data.name.prog].properties.menuType!=="api"){ret.push({code:"CHK_MSG_PRG_TRG_334",data:`invalid program type "${trigger_item.data.action}" to call in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{check_target_program_parameters(trigger_item)}}}break;case"call_system_api":{const _api_method=trigger_item.data.name.api_method;if(!_api_method){ret.push({code:"CHK_MSG_PRG_TRG_380",data:`api_method not defined in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(typeof _conf!=="undefined"){if(!_conf.cpi_methods[_api_method]){ret.push({code:"CHK_MSG_PRG_TRG_382",data:`api method ${_api_method} unrecognized in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(_conf.cpi_methods[_api_method].private){return ret.push({code:"CHK_MSG_PRG_TRG_384",data:`api method ${_api_method} is private in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}if(_conf.cpi_methods[_api_method].fields){for(let[key,val]of Object.entries(_conf.cpi_methods[_api_method].fields)){if(val.mandatory&&!trigger_item.data.name?.payload?.[key]){ret.push({code:"CHK_MSG_PRG_TRG_386",data:`field ${key} for api method ${_api_method} is mandatory field in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}}}}}}break}case"call_external_api":{if(!trigger_item.data.name.method){ret.push({code:"CHK_MSG_PRG_TRG_388",data:`method not defined in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}if(!trigger_item.data.name.url){ret.push({code:"CHK_MSG_PRG_TRG_389",data:`url not defined in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}break}case"get_data":case"set_data":case"batch":case"call_native_javascript":case"call_evaluate_javascript":case"call_alert":if(!trigger_item.data.name.prog){if(!trigger_item.data?.name?.properties?.["xu-exp:prog"]){ret.push({code:"CHK_MSG_PRG_TRG_310",data:`empty program to call in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}}else{if(!progs_obj?.[trigger_item.data.name.prog]){ret.push({code:"CHK_MSG_PRG_TRG_320",data:`invalid program to call in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(progs_obj?.[trigger_item.data.name.prog].properties.menuType!==trigger_item.data.action){if(["call_native_javascript","call_evaluate_javascript"].includes(trigger_item.data.action)&&progs_obj?.[trigger_item.data.name.prog].properties.menuType==="javascript"){continue}if(["call_alert"].includes(trigger_item.data.action)&&progs_obj?.[trigger_item.data.name.prog].properties.menuType==="alert"){continue}ret.push({code:"CHK_MSG_PRG_TRG_330",data:`call set to "${trigger_item.data.action}" but found "${progs_obj?.[trigger_item.data.name.prog].properties.menuType}" instead in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{check_target_program_parameters(trigger_item)}}}break;case"execute_native_javascript":case"execute_evaluate_javascript":check_prog_expression(doc,trigger_item.data.name.value,trigger_item.id,"script");break;case"emit_event":if(!trigger_item?.data?.name?.value){ret.push({code:"CHK_MSG_PRG_TRG_800",data:`no event defined for "emit_event" in ${source_type} "${source_name}" trigger`,type:err_type,category:`alert`,ref:doc._id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(!/^[A-Za-z]+[\w\-\:\.]*$/.test(trigger_item.data.name.value)){ret.push({code:"CHK_MSG_PRG_TRG_810",data:`invalid event name ${trigger_item.data.name.value} in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}}break;case"alert":if(_.isEmpty(trigger_item.data.name)){ret.push({code:"CHK_MSG_PRG_TRG_610",data:`no alert properties defined`,type:err_type,category:`alert`,ref:doc._id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(!trigger_item.data.name.alertType){ret.push({code:"CHK_MSG_PRG_TRG_612",data:`missing alert type property`,type:err_type,category:`alert`,ref:doc._id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}if(!trigger_item.data.name.alertDisplay){ret.push({code:"CHK_MSG_PRG_TRG_614",data:`missing alert display property`,type:err_type,category:`alert`,ref:doc._id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}if(!trigger_item.data.name.alertTitle){ret.push({code:"CHK_MSG_PRG_TRG_616",data:`missing alert title property`,type:"W",category:`alert`,ref:doc._id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}if(!trigger_item.data.name.alertBody){ret.push({code:"CHK_MSG_PRG_TRG_618",data:`missing alert body property`,type:"W",category:`alert`,ref:doc._id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}}break;case"loader_on":case"loader_off":if(doc.properties.menuType!=="component"){ret.push({code:"CHK_MSG_PRG_TRG_400",data:`"${trigger_item.data.action}" can only be executed by component in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}break;case"invoke_action":if(doc.properties.menuType!=="component"){ret.push({code:"CHK_MSG_PRG_TRG_400",data:`"${trigger_item.data.action}" can only be executed by component in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}if(!["act_next","act_prev","act_first","act_last","act_reload","act_refresh","act_print","act_save","act_delete"].includes(trigger_item.data.name.value)){ret.push({code:"CHK_MSG_PRG_TRG_400",data:`invalid "${trigger_item.data.name.value}" for "${trigger_item.data.action}" in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}break;case"delay":if(!trigger_item?.data?.name?.value){ret.push({code:"CHK_MSG_PRG_TRG_520",data:`empty delay value in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}break;case"call_library":if(!trigger_item?.data?.name?.plugin_name){ret.push({code:"CHK_MSG_PRG_TRG_510",data:`empty library value in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(!trigger_item?.data?.name?.library_method){ret.push({code:"CHK_MSG_PRG_TRG_516",data:`empty library ${trigger_item.data.name.plugin_name} method in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}if(!app_obj?.app_plugins_purchased?.[trigger_item.data.name.plugin_name]){ret.push({code:"CHK_MSG_PRG_TRG_512",data:`invalid library call ${trigger_item.data.name.plugin_name} in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,ref:trigger_item.id,source_id:source_id,id:`${doc._id}-${source_id}-${trigger_item.id}`})}else{if(!app_obj.app_plugins_purchased[trigger_item.data.name.plugin_name].installed){ret.push({code:"CHK_MSG_PRG_TRG_514",data:` library "${trigger_item.data.name.plugin_name}" not installed in ${source_type} "${source_name}" trigger`,type:err_type,category:`${source_type}_trigger`,re