@xuda.io/runtime-bundle 1.0.1413 → 1.0.1415

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.
Files changed (46) hide show
  1. package/js/modules/xuda-actions-module.esm.js +10 -10
  2. package/js/modules/xuda-actions-module.esm.min.js +1 -1
  3. package/js/modules/xuda-api-library.min.mjs +1 -1
  4. package/js/modules/xuda-api-library.mjs +1 -1
  5. package/js/modules/xuda-datasource-db-adapter-module.min.mjs +1 -1
  6. package/js/modules/xuda-datasource-db-adapter-module.mjs +4 -4
  7. package/js/modules/xuda-db-adapter-module.min.mjs +1 -1
  8. package/js/modules/xuda-db-adapter-module.mjs +9 -9
  9. package/js/modules/xuda-debug-utils-module.min.mjs +1 -1
  10. package/js/modules/xuda-debug-utils-module.mjs +6 -6
  11. package/js/modules/xuda-event-ui-elements-module.esm.js +6 -6
  12. package/js/modules/xuda-event-ui-elements-module.esm.min.js +1 -1
  13. package/js/modules/xuda-get-cast-util-module.min.mjs +1 -1
  14. package/js/modules/xuda-get-cast-util-module.mjs +5 -10
  15. package/js/modules/xuda-get-support-module.esm.js +15 -12
  16. package/js/modules/xuda-get-support-module.esm.min.js +1 -1
  17. package/js/modules/xuda-input-musk-utils-module.min.mjs +1 -1
  18. package/js/modules/xuda-input-musk-utils-module.mjs +22 -35
  19. package/js/modules/xuda-live-preview-module.esm.js +36 -31
  20. package/js/modules/xuda-live-preview-module.esm.min.js +1 -1
  21. package/js/modules/xuda-peer-actions-module.esm.js +5 -5
  22. package/js/modules/xuda-peer-actions-module.esm.min.js +1 -1
  23. package/js/modules/xuda-progs-loader-module.min.mjs +1 -1
  24. package/js/modules/xuda-progs-loader-module.mjs +8 -7
  25. package/js/modules/xuda-project-loader-module.esm.js +17 -12
  26. package/js/modules/xuda-project-loader-module.esm.min.js +1 -1
  27. package/js/modules/xuda-studio-checker.min.mjs +1 -1
  28. package/js/modules/xuda-studio-checker.mjs +79 -80
  29. package/js/xuda-runtime-bundle.js +1604 -1186
  30. package/js/xuda-runtime-bundle.min.js +5 -5
  31. package/js/xuda-runtime-mini-bundle.js +22 -52
  32. package/js/xuda-runtime-mini-bundle.min.js +1 -1
  33. package/js/xuda-runtime-slim.js +1604 -1111
  34. package/js/xuda-runtime-slim.min.es.js +1605 -1187
  35. package/js/xuda-runtime-slim.min.js +4 -4
  36. package/js/xuda-runtime-vendor.js +1 -212
  37. package/js/xuda-runtime-vendor.min.js +2 -2
  38. package/js/xuda-server-bundle.min.mjs +2 -2
  39. package/js/xuda-server-bundle.mjs +746 -158
  40. package/js/xuda-worker-bundle.js +746 -158
  41. package/js/xuda-worker-bundle.min.js +2 -2
  42. package/js/xuda_common-bundle.js +237 -29
  43. package/js/xuda_common-bundle.min.js +1 -1
  44. package/js/xuda_worker.js +0 -6
  45. package/js/xuda_worker.min.js +1 -1
  46. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  const screen_save = async function (SESSION_ID, paramsP) {
2
2
  var str = '[screenid="' + paramsP.screenId + '"]';
3
- var elm = $('#' + paramsP.screenId).find(str);
3
+ var elm = document.getElementById(paramsP.screenId)?.querySelectorAll(str);
4
4
  var dsSession;
5
5
 
6
6
  if (!elm || !elm.length) {
@@ -15,7 +15,7 @@ const screen_save = async function (SESSION_ID, paramsP) {
15
15
  continue;
16
16
  }
17
17
 
18
- dsSession = $(val).data().xuData.dsSession;
18
+ dsSession = func.runtime.ui.get_data(val, 'xuData').dsSession;
19
19
  let _ds = SESSION_OBJ[SESSION_ID].DS_GLB[dsSession];
20
20
  if (!dsSession || !_ds) {
21
21
  continue;
@@ -59,20 +59,20 @@ export const action_execute = async function (SESSION_ID, actionP, params, isScr
59
59
  act_next: async function () {
60
60
  await locate_record(SESSION_ID, 'next', params.dsSession);
61
61
  if (_ds.tree_obj.renderType === 'form') {
62
- $('body').trigger('xu-bind-refresh.' + params.dsSession.toString());
62
+ func.runtime.platform.emit('xu-bind-refresh.' + params.dsSession.toString());
63
63
  }
64
64
  },
65
65
  act_prev: async function () {
66
66
  await locate_record(SESSION_ID, 'prev', params.dsSession);
67
- if (_ds.tree_obj.renderType === 'form') $('body').trigger('xu-bind-refresh.' + params.dsSession.toString());
67
+ if (_ds.tree_obj.renderType === 'form') func.runtime.platform.emit('xu-bind-refresh.' + params.dsSession.toString());
68
68
  },
69
69
  act_last: async function () {
70
70
  await locate_record(SESSION_ID, 'last', params.dsSession);
71
- if (_ds.tree_obj.renderType === 'form') $('body').trigger('xu-bind-refresh.' + params.dsSession.toString());
71
+ if (_ds.tree_obj.renderType === 'form') func.runtime.platform.emit('xu-bind-refresh.' + params.dsSession.toString());
72
72
  },
73
73
  act_first: async function () {
74
74
  await locate_record(SESSION_ID, 'first', params.dsSession);
75
- if (_ds.tree_obj.renderType === 'form') $('body').trigger('xu-bind-refresh.' + params.dsSession.toString());
75
+ if (_ds.tree_obj.renderType === 'form') func.runtime.platform.emit('xu-bind-refresh.' + params.dsSession.toString());
76
76
  },
77
77
  act_refresh: async function (sourceP) {
78
78
  let screen_params = params.screen_params;
@@ -81,7 +81,7 @@ export const action_execute = async function (SESSION_ID, actionP, params, isScr
81
81
  let _ds = SESSION_OBJ[SESSION_ID].DS_GLB[params.dsSession];
82
82
  _ds.screen_params = screen_params;
83
83
  func.runtime.ui.update_sys_obj_win_info(SESSION_ID, params.dsSession);
84
- $('body').trigger('xu-bind-refresh.' + params.dsSession.toString());
84
+ func.runtime.platform.emit('xu-bind-refresh.' + params.dsSession.toString());
85
85
 
86
86
  let prog_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
87
87
  let field_changed = [];
@@ -172,7 +172,7 @@ export const action_execute = async function (SESSION_ID, actionP, params, isScr
172
172
  act_reload: async function () {
173
173
  var _ds = SESSION_OBJ[SESSION_ID].DS_GLB[params.dsSession];
174
174
 
175
- let screen_params = _.cloneDeep(params.screen_params);
175
+ let screen_params = klona.klona(params.screen_params);
176
176
 
177
177
  switch (params.screen_params.screen_type) {
178
178
  case 'modal':
@@ -190,12 +190,12 @@ export const action_execute = async function (SESSION_ID, actionP, params, isScr
190
190
  break;
191
191
 
192
192
  case 'page':
193
- let nav = $(SESSION_OBJ[SESSION_ID].root_element).find('xu-nav')[0];
193
+ let nav = SESSION_OBJ[SESSION_ID].root_element.querySelector('xu-nav');
194
194
  nav.popTo();
195
195
  break;
196
196
 
197
197
  default:
198
- screen_params.$callingContainerP.empty();
198
+ func.runtime.ui.empty(screen_params.$callingContainerP);
199
199
  break;
200
200
  }
201
201
 
@@ -1 +1 @@
1
- const screen_save=async function(SESSION_ID,paramsP){var str='[screenid="'+paramsP.screenId+'"]';var elm=$("#"+paramsP.screenId).find(str);var dsSession;if(!elm||!elm.length){return func.db.save_data(SESSION_ID,paramsP.dsSession,0)}for await(const[key,val]of Object.entries(elm)){if(key==="length"){break}if(!val){continue}dsSession=$(val).data().xuData.dsSession;let _ds=SESSION_OBJ[SESSION_ID].DS_GLB[dsSession];if(!dsSession||!_ds){continue}if(_ds.tree_obj.renderType==="form"){if(_ds._dataSourceTableId){if(!_ds.abort_save)await func.db.save_data(SESSION_ID,dsSession,key);_ds.abort_save=false;continue}}}};export const action_execute=async function(SESSION_ID,actionP,params,isScreenActionP,event_sourceP,jobNoP,containerP){var _ds=SESSION_OBJ[SESSION_ID].DS_GLB[params.dsSession];if(!_ds){func.events.delete_job(SESSION_ID,jobNoP);return}var action=actionP;var formGrid_dsSession;var EVENTSUFFIX="_triggered";if(!isScreenActionP)formGrid_dsSession=params.dsSession;var do_event=async function(actionP){var delete_job=async function(jobsP){await func.events.check_jobs_idle(SESSION_ID,jobsP);func.events.delete_job(SESSION_ID,jobNoP)};const jobsP=await func.events.validate(SESSION_ID,actionP+EVENTSUFFIX,params.dsSession,null,"action");await delete_job(jobsP)};const fx={act_next:async function(){await locate_record(SESSION_ID,"next",params.dsSession);if(_ds.tree_obj.renderType==="form"){$("body").trigger("xu-bind-refresh."+params.dsSession.toString())}},act_prev:async function(){await locate_record(SESSION_ID,"prev",params.dsSession);if(_ds.tree_obj.renderType==="form")$("body").trigger("xu-bind-refresh."+params.dsSession.toString())},act_last:async function(){await locate_record(SESSION_ID,"last",params.dsSession);if(_ds.tree_obj.renderType==="form")$("body").trigger("xu-bind-refresh."+params.dsSession.toString())},act_first:async function(){await locate_record(SESSION_ID,"first",params.dsSession);if(_ds.tree_obj.renderType==="form")$("body").trigger("xu-bind-refresh."+params.dsSession.toString())},act_refresh:async function(sourceP){let screen_params=params.screen_params;await func.datasource.create(SESSION_ID,params.prog_id,params.dsSession,params.parentDataSourceNo,params.containerId,params.rowIdP);let _ds=SESSION_OBJ[SESSION_ID].DS_GLB[params.dsSession];_ds.screen_params=screen_params;func.runtime.ui.update_sys_obj_win_info(SESSION_ID,params.dsSession);$("body").trigger("xu-bind-refresh."+params.dsSession.toString());let prog_obj=await func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);let field_changed=[];for(let field of prog_obj?.progFields){field_changed.push(field?.data?.field_id||"")}func.runtime.ui.refresh_xu_attributes({SESSION_ID:SESSION_ID,fields_arr:field_changed})},act_save:async function(){await screen_save(SESSION_ID,params)},act_delete:async function(){_ds.data_feed.rows_deleted.push(_ds.currentRecordId);await screen_save(SESSION_ID,params)},act_reload:async function(){var _ds=SESSION_OBJ[SESSION_ID].DS_GLB[params.dsSession];let screen_params=_.cloneDeep(params.screen_params);switch(params.screen_params.screen_type){case"modal":debugger;break;case"popover":debugger;break;case"panel":func.runtime.ui.refresh_screen({SESSION_ID:SESSION_ID,fields_changed_arr:null,datasource_changed:params.dsSession});func.events.delete_job(SESSION_ID,jobNoP);break;case"page":let nav=$(SESSION_OBJ[SESSION_ID].root_element).find("xu-nav")[0];nav.popTo();break;default:screen_params.$callingContainerP.empty();break}let ret=await func.runtime.ui.init_screen({SESSION_ID:SESSION_ID,prog_id:params.screen_params.prog_id,sourceScreenP:params.screen_params.sourceScreenP,callingDataSource_objP:params.screen_params.callingDataSource_objP,$callingContainerP:params.screen_params.$callingContainerP,triggerIdP:params.screen_params.triggerIdP,rowIdP:params.screen_params.rowIdP,jobNoP:null,is_panelP:params.screen_params.is_panelP,parameters_obj_inP:params.screen_params.parameters_obj_inP,source_functionP:params.screen_params.source_functionP})},act_print:async function(){window.print()}};if(event_sourceP==="click"){await func.events.validate(SESSION_ID,action+"_clicked",params.dsSession,null,"toolbar");params.event_sourceP=event_sourceP;params.isScreenActionP=isScreenActionP;await func.events.add_to_queue(SESSION_ID,params.renderType,null,event_sourceP,"invoke_action",action,params.udfContainer,null,null,null,null,params.rootScreenIdP,null,null,null,null,null,"click",params,null,null,null)}else{await fx[action]();await do_event(action)}};const locate_record=async function(SESSION_ID,actionP,dsSessionP){var arr=[];var result;var _ds=SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];var current=_ds.currentRecordId;if(!current)return;var i=1;try{let arr=ds?.data_feed?.rows||[];var len=srr.length;const idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);if(actionP==="next"){if(idx+1<len){new_idx=idx+1;result=arr[new_idx]._ROWID}else{new_idx=idx;result=arr[new_idx]._ROWID}}if(actionP==="prev"){if(idx-1>0){new_idx=idx-1;result=arr[new_idx]._ROWID}else{new_idx=idx;result=arr[new_idx]._ROWID}}if(actionP==="first"){new_idx=1;result=arr[new_idx]._ROWID}if(actionP==="last"){new_idx=arr.length-1;result=arr[new_idx]._ROWID}var datasource_changes={[_ds.dsSession]:{[result]:"set"}};await func.datasource.update(SESSION_ID,datasource_changes)}catch(err){console.error(err)}};
1
+ const screen_save=async function(SESSION_ID,paramsP){var str='[screenid="'+paramsP.screenId+'"]';var elm=document.getElementById(paramsP.screenId)?.querySelectorAll(str);var dsSession;if(!elm||!elm.length){return func.db.save_data(SESSION_ID,paramsP.dsSession,0)}for await(const[key,val]of Object.entries(elm)){if(key==="length"){break}if(!val){continue}dsSession=func.runtime.ui.get_data(val,"xuData").dsSession;let _ds=SESSION_OBJ[SESSION_ID].DS_GLB[dsSession];if(!dsSession||!_ds){continue}if(_ds.tree_obj.renderType==="form"){if(_ds._dataSourceTableId){if(!_ds.abort_save)await func.db.save_data(SESSION_ID,dsSession,key);_ds.abort_save=false;continue}}}};export const action_execute=async function(SESSION_ID,actionP,params,isScreenActionP,event_sourceP,jobNoP,containerP){var _ds=SESSION_OBJ[SESSION_ID].DS_GLB[params.dsSession];if(!_ds){func.events.delete_job(SESSION_ID,jobNoP);return}var action=actionP;var formGrid_dsSession;var EVENTSUFFIX="_triggered";if(!isScreenActionP)formGrid_dsSession=params.dsSession;var do_event=async function(actionP){var delete_job=async function(jobsP){await func.events.check_jobs_idle(SESSION_ID,jobsP);func.events.delete_job(SESSION_ID,jobNoP)};const jobsP=await func.events.validate(SESSION_ID,actionP+EVENTSUFFIX,params.dsSession,null,"action");await delete_job(jobsP)};const fx={act_next:async function(){await locate_record(SESSION_ID,"next",params.dsSession);if(_ds.tree_obj.renderType==="form"){func.runtime.platform.emit("xu-bind-refresh."+params.dsSession.toString())}},act_prev:async function(){await locate_record(SESSION_ID,"prev",params.dsSession);if(_ds.tree_obj.renderType==="form")func.runtime.platform.emit("xu-bind-refresh."+params.dsSession.toString())},act_last:async function(){await locate_record(SESSION_ID,"last",params.dsSession);if(_ds.tree_obj.renderType==="form")func.runtime.platform.emit("xu-bind-refresh."+params.dsSession.toString())},act_first:async function(){await locate_record(SESSION_ID,"first",params.dsSession);if(_ds.tree_obj.renderType==="form")func.runtime.platform.emit("xu-bind-refresh."+params.dsSession.toString())},act_refresh:async function(sourceP){let screen_params=params.screen_params;await func.datasource.create(SESSION_ID,params.prog_id,params.dsSession,params.parentDataSourceNo,params.containerId,params.rowIdP);let _ds=SESSION_OBJ[SESSION_ID].DS_GLB[params.dsSession];_ds.screen_params=screen_params;func.runtime.ui.update_sys_obj_win_info(SESSION_ID,params.dsSession);func.runtime.platform.emit("xu-bind-refresh."+params.dsSession.toString());let prog_obj=await func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);let field_changed=[];for(let field of prog_obj?.progFields){field_changed.push(field?.data?.field_id||"")}func.runtime.ui.refresh_xu_attributes({SESSION_ID:SESSION_ID,fields_arr:field_changed})},act_save:async function(){await screen_save(SESSION_ID,params)},act_delete:async function(){_ds.data_feed.rows_deleted.push(_ds.currentRecordId);await screen_save(SESSION_ID,params)},act_reload:async function(){var _ds=SESSION_OBJ[SESSION_ID].DS_GLB[params.dsSession];let screen_params=klona.klona(params.screen_params);switch(params.screen_params.screen_type){case"modal":debugger;break;case"popover":debugger;break;case"panel":func.runtime.ui.refresh_screen({SESSION_ID:SESSION_ID,fields_changed_arr:null,datasource_changed:params.dsSession});func.events.delete_job(SESSION_ID,jobNoP);break;case"page":let nav=SESSION_OBJ[SESSION_ID].root_element.querySelector("xu-nav");nav.popTo();break;default:func.runtime.ui.empty(screen_params.$callingContainerP);break}let ret=await func.runtime.ui.init_screen({SESSION_ID:SESSION_ID,prog_id:params.screen_params.prog_id,sourceScreenP:params.screen_params.sourceScreenP,callingDataSource_objP:params.screen_params.callingDataSource_objP,$callingContainerP:params.screen_params.$callingContainerP,triggerIdP:params.screen_params.triggerIdP,rowIdP:params.screen_params.rowIdP,jobNoP:null,is_panelP:params.screen_params.is_panelP,parameters_obj_inP:params.screen_params.parameters_obj_inP,source_functionP:params.screen_params.source_functionP})},act_print:async function(){window.print()}};if(event_sourceP==="click"){await func.events.validate(SESSION_ID,action+"_clicked",params.dsSession,null,"toolbar");params.event_sourceP=event_sourceP;params.isScreenActionP=isScreenActionP;await func.events.add_to_queue(SESSION_ID,params.renderType,null,event_sourceP,"invoke_action",action,params.udfContainer,null,null,null,null,params.rootScreenIdP,null,null,null,null,null,"click",params,null,null,null)}else{await fx[action]();await do_event(action)}};const locate_record=async function(SESSION_ID,actionP,dsSessionP){var arr=[];var result;var _ds=SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];var current=_ds.currentRecordId;if(!current)return;var i=1;try{let arr=ds?.data_feed?.rows||[];var len=srr.length;const idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);if(actionP==="next"){if(idx+1<len){new_idx=idx+1;result=arr[new_idx]._ROWID}else{new_idx=idx;result=arr[new_idx]._ROWID}}if(actionP==="prev"){if(idx-1>0){new_idx=idx-1;result=arr[new_idx]._ROWID}else{new_idx=idx;result=arr[new_idx]._ROWID}}if(actionP==="first"){new_idx=1;result=arr[new_idx]._ROWID}if(actionP==="last"){new_idx=arr.length-1;result=arr[new_idx]._ROWID}var datasource_changes={[_ds.dsSession]:{[result]:"set"}};await func.datasource.update(SESSION_ID,datasource_changes)}catch(err){console.error(err)}};
@@ -1 +1 @@
1
- export class XudaModule{constructor(e){this.func=e.func;this.glb=e.glb;this.SESSION_OBJ=e.SESSION_OBJ;this.SESSION_ID=e.SESSION_ID;this.APP_OBJ=e.APP_OBJ;this.dsSession=e.dsSession;this.job_id=e.job_id;this._session=this.SESSION_OBJ[this.SESSION_ID];return this}async get_field_value(field_id){if(!field_id){console.error("xu.getFieldValue: field_id cannot be empty");return false}let ret_get_value=await this.func.datasource.get_value(this.SESSION_ID,field_id,this.dsSession);if(!ret_get_value.found){console.error(`xu.getFieldValue: ${field_id} field not found`);return false}return ret_get_value.ret.value}async set_field_value(field_id,value,avoid_refresh){if(!field_id){console.error("xu.setFieldValue: field_id cannot be empty");return false}if(typeof value==="undefined"){console.error(`xu.setFieldValue: ${field_id} - value cannot be undefined`);return false}let ret_get_value=await this.func.datasource.get_value(this.SESSION_ID,field_id,this.dsSession);if(!ret_get_value.found){console.error(`xu.setFieldValue: ${field_id} field not found`);return false}let _ds=this._session.DS_GLB[ret_get_value.dsSessionP];const datasource_changes={[_ds.dsSession]:{[ret_get_value.currentRecordId]:{[field_id]:value}}};return await this.func.datasource.update(this.SESSION_ID,datasource_changes,null,avoid_refresh)}async invoke_event(event_id){if(!event_id){console.error("xu.invokeEvent: event_id cannot be empty");return false}let ds;for await(const[key,val]of Object.entries(Object.assign([],this._session.DS_GLB).reverse())){let ds_val=val;let ds_key=ds_val.dsSession;const _view_obj=await this.func.utils.VIEWS_OBJ.get(this.SESSION_ID,ds_val.prog_id);if(_.isEmpty(_view_obj.progEvents))continue;if(ds)break;for await(const[key,val]of Object.entries(_view_obj.progEvents)){if(val?.data?.type==="user_defined"&&val.data.event_name===event_id){ds=ds_key;break}}}if(typeof ds==="undefined"){this.reject("xu.invokeEvent error",`${event_id} event_id not found`,this.job_id);return false}return this.func.events.validate(this.SESSION_ID,"user_defined",ds,event_id)}async read_drive(filename,cb){try{const response=await fetch(`https://${this._session.domain}/workspace-drive/`+filename+"&"+this._session.gtp_token);if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.readDrive error",e,this.job_id)}}async write_drive(stream,filename,make_public,cb){var data={app_id:this._session.app_id,gtp_token:this._session.gtp_token,app_token:this._session.app_token,req_from_api:"true",public:make_public?"true":""};const form=new FormData;for(const[key,val]of Object.entries(data)){form.append(key,val)}form.append("file",stream,filename);try{const response=await fetch(this.func.common.get_url(this.SESSION_ID,"rpi","runtime_upload_file"),{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(form)});if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.writeDrive error",e,this.job_id)}}resolve(cb,job_id){if(job_id){this.func.events.delete_job(this.SESSION_ID,job_id)}if(cb){cb()}}reject(msg,details,job_id){if(job_id){this.func.events.delete_job(this.SESSION_ID,job_id)}this.log("E",msg,details)}log(type,msg,details){this.func.utils.debug_report(this.SESSION_ID,msg,details,type)}alert(type,display,msg,details){this.func.utils.alerts.execute(this.SESSION_ID,type,display,details,msg)}async call_project_api(prog_id,params,cb){const _prog_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,prog_id);if(_prog_obj?.properties?.menuType!=="api"){return this.reject("xu.callApiProgram error",`${prog_id} is not an API program`,this.job_id)}if(this._session.engine_mode==="live_preview"||typeof IS_PROCESS_SERVER!=="undefined"){const ret=await this.func.datasource.prepare(this.SESSION_ID,prog_id,null,0,null,null,null,null,null,null,"api",null,null,null,params);try{const _ds=this._session.DS_GLB[ret.dsSessionP];if(typeof _ds.api_rendered_output==="undefined"||typeof _ds.tree_obj.apiOutput==="undefined"||!_ds.tree_obj.apiOutput){throw new Error("undefined api_rendered_output/apiOutput")}if(_ds.tree_obj.apiOutput==="json"){try{return JSON5.parse(_ds.api_rendered_output)}catch(err){console.error(err);return{}}}return _ds.api_rendered_output}catch(e){this.reject("xu.call_project_api error",e.message||e,this.job_id)}}if(["miniapp"].includes(this._session.engine_mode)){try{const response=await fetch(`https://${this._session.domain}/api`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({...params,...{prog_id:prog_id}})});if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.get_table_data error",e,this.job_id)}}try{const response=await fetch(`https://${this._session.domain}/execute_api_program`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({...params,...{prog_id:prog_id}})});if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.get_table_data error",e,this.job_id)}}async call_system_api(api_method,payload={},cb){try{let body={...{app_id:this._session.app_id,app_id_query:this._session.app_id,app_token:this._session.app_token},...payload};const response=await fetch(`https://${this._session.domain}/cpi/${api_method}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(body)});const json=await response.json();if(cb){return cb(json)}return json}catch(e){console.error(e);this.reject("xu.call_system_api error",e,this.job_id)}}async call_external_api(method,url,payload={},cb){try{let json={...{app_id:this._session.app_id,app_id_query:this._session.app_id,app_token:this._session.app_token},...payload};const response=await fetch(`https://${url}`,{method:method,headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(json)});if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.call_external_api error",e,this.job_id)}}async call_javascript(prog_id,params={},evaluate=false){try{const module=await this.func.common.get_module(this.SESSION_ID,"xuda-event-javascript-module.mjs");const result=await module.call_javascript(this.SESSION_ID,this.job_id,{prog:prog_id,parameters:params},this.dsSession,evaluate);return result}catch(e){console.error(e);this.reject("xu.call_javascript error",e,this.job_id)}}async dbs_create(table_id,data,cb){const _table_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,table_id);if(_table_obj?.properties?.menuType!=="table"){return this.reject("xu.dbsCreate error",`${table_id} is not a table`,this.job_id)}try{const ret=await this.func.common.db(this.SESSION_ID,"dbs_create",{table_id:table_id,table_data:data});if(cb){return cb(ret)}return ret}catch(e){console.error(e);this.reject("xu.dbs_create error",e,this.job_id)}}async dbs_read(table_id,selector={},fields=[],sort,limit=999,skip,cb){const _table_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,table_id);if(_table_obj?.properties?.menuType!=="table"){return this.reject("xu.dbsRead error",`${table_id} is not a table`,this.job_id)}let data={fields:fields,table_id:table_id,dataSourceFilterModelType:"query",filterModelMongo:selector,limit:limit,skip:skip,sort:sort};try{const ret=await this.func.common.db(this.SESSION_ID,"dbs_read",data);if(cb){return cb(ret)}return ret}catch(e){console.error(e);this.reject("xu.dbs_read error",e,this.job_id)}}async dbs_update(table_id,row_id,data,cb){const _table_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,table_id);if(_table_obj?.properties?.menuType!=="table"){return this.reject("xu.dbsUpdate error",`${table_id} is not a table`,this.job_id)}if(!row_id){return this.reject("xu.dbsDelete error",`row_id is a mandatory field`,this.job_id)}try{const ret=await this.func.common.db(this.SESSION_ID,"dbs_update",{table_id:table_id,row_id:row_id,table_data:data});if(cb){return cb(ret)}return ret}catch(e){console.error(e);this.reject("xu.dbs_update error",e,this.job_id)}}async dbs_delete(table_id,row_id,cb){const _table_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,table_id);if(_table_obj?.properties?.menuType!=="table"){return this.reject("xu.dbsDelete error",`${table_id} is not a table`,this.job_id)}if(!row_id){return this.reject("xu.dbsDelete error",`row_id is a mandatory field`,this.job_id)}try{const ret=await this.func.common.db(this.SESSION_ID,"dbs_delete",{table_id:table_id,ids:[row_id]});if(cb){return cb(ret)}return ret}catch(e){console.error(e);this.reject("xu.dbs_delete error",e,this.job_id)}}}
1
+ export class XudaModule{constructor(e){this.func=e.func;this.glb=e.glb;this.SESSION_OBJ=e.SESSION_OBJ;this.SESSION_ID=e.SESSION_ID;this.APP_OBJ=e.APP_OBJ;this.dsSession=e.dsSession;this.job_id=e.job_id;this._session=this.SESSION_OBJ[this.SESSION_ID];return this}async get_field_value(field_id){if(!field_id){console.error("xu.getFieldValue: field_id cannot be empty");return false}let ret_get_value=await this.func.datasource.get_value(this.SESSION_ID,field_id,this.dsSession);if(!ret_get_value.found){console.error(`xu.getFieldValue: ${field_id} field not found`);return false}return ret_get_value.ret.value}async set_field_value(field_id,value,avoid_refresh){if(!field_id){console.error("xu.setFieldValue: field_id cannot be empty");return false}if(typeof value==="undefined"){console.error(`xu.setFieldValue: ${field_id} - value cannot be undefined`);return false}let ret_get_value=await this.func.datasource.get_value(this.SESSION_ID,field_id,this.dsSession);if(!ret_get_value.found){console.error(`xu.setFieldValue: ${field_id} field not found`);return false}let _ds=this._session.DS_GLB[ret_get_value.dsSessionP];const datasource_changes={[_ds.dsSession]:{[ret_get_value.currentRecordId]:{[field_id]:value}}};return await this.func.datasource.update(this.SESSION_ID,datasource_changes,null,avoid_refresh)}async invoke_event(event_id){if(!event_id){console.error("xu.invokeEvent: event_id cannot be empty");return false}let ds;for await(const[key,val]of Object.entries(Object.assign([],this._session.DS_GLB).reverse())){let ds_val=val;let ds_key=ds_val.dsSession;const _view_obj=await this.func.utils.VIEWS_OBJ.get(this.SESSION_ID,ds_val.prog_id);if(xu_isEmpty(_view_obj.progEvents))continue;if(ds)break;for await(const[key,val]of Object.entries(_view_obj.progEvents)){if(val?.data?.type==="user_defined"&&val.data.event_name===event_id){ds=ds_key;break}}}if(typeof ds==="undefined"){this.reject("xu.invokeEvent error",`${event_id} event_id not found`,this.job_id);return false}return this.func.events.validate(this.SESSION_ID,"user_defined",ds,event_id)}async read_drive(filename,cb){try{const response=await fetch(`https://${this._session.domain}/workspace-drive/`+filename+"&"+this._session.gtp_token);if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.readDrive error",e,this.job_id)}}async write_drive(stream,filename,make_public,cb){var data={app_id:this._session.app_id,gtp_token:this._session.gtp_token,app_token:this._session.app_token,req_from_api:"true",public:make_public?"true":""};const form=new FormData;for(const[key,val]of Object.entries(data)){form.append(key,val)}form.append("file",stream,filename);try{const response=await fetch(this.func.common.get_url(this.SESSION_ID,"rpi","runtime_upload_file"),{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(form)});if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.writeDrive error",e,this.job_id)}}resolve(cb,job_id){if(job_id){this.func.events.delete_job(this.SESSION_ID,job_id)}if(cb){cb()}}reject(msg,details,job_id){if(job_id){this.func.events.delete_job(this.SESSION_ID,job_id)}this.log("E",msg,details)}log(type,msg,details){this.func.utils.debug_report(this.SESSION_ID,msg,details,type)}alert(type,display,msg,details){this.func.utils.alerts.execute(this.SESSION_ID,type,display,details,msg)}async call_project_api(prog_id,params,cb){const _prog_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,prog_id);if(_prog_obj?.properties?.menuType!=="api"){return this.reject("xu.callApiProgram error",`${prog_id} is not an API program`,this.job_id)}if(this._session.engine_mode==="live_preview"||typeof IS_PROCESS_SERVER!=="undefined"){const ret=await this.func.datasource.prepare(this.SESSION_ID,prog_id,null,0,null,null,null,null,null,null,"api",null,null,null,params);try{const _ds=this._session.DS_GLB[ret.dsSessionP];if(typeof _ds.api_rendered_output==="undefined"||typeof _ds.tree_obj.apiOutput==="undefined"||!_ds.tree_obj.apiOutput){throw new Error("undefined api_rendered_output/apiOutput")}if(_ds.tree_obj.apiOutput==="json"){try{return JSON5.parse(_ds.api_rendered_output)}catch(err){console.error(err);return{}}}return _ds.api_rendered_output}catch(e){this.reject("xu.call_project_api error",e.message||e,this.job_id)}}if(["miniapp"].includes(this._session.engine_mode)){try{const response=await fetch(`https://${this._session.domain}/api`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({...params,...{prog_id:prog_id}})});if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.get_table_data error",e,this.job_id)}}try{const response=await fetch(`https://${this._session.domain}/execute_api_program`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({...params,...{prog_id:prog_id}})});if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.get_table_data error",e,this.job_id)}}async call_system_api(api_method,payload={},cb){try{let body={...{app_id:this._session.app_id,app_id_query:this._session.app_id,app_token:this._session.app_token},...payload};const response=await fetch(`https://${this._session.domain}/cpi/${api_method}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(body)});const json=await response.json();if(cb){return cb(json)}return json}catch(e){console.error(e);this.reject("xu.call_system_api error",e,this.job_id)}}async call_external_api(method,url,payload={},cb){try{let json={...{app_id:this._session.app_id,app_id_query:this._session.app_id,app_token:this._session.app_token},...payload};const response=await fetch(`https://${url}`,{method:method,headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(json)});if(cb){return cb(await response.json())}return await response.json()}catch(e){console.error(e);this.reject("xu.call_external_api error",e,this.job_id)}}async call_javascript(prog_id,params={},evaluate=false){try{const module=await this.func.common.get_module(this.SESSION_ID,"xuda-event-javascript-module.mjs");const result=await module.call_javascript(this.SESSION_ID,this.job_id,{prog:prog_id,parameters:params},this.dsSession,evaluate);return result}catch(e){console.error(e);this.reject("xu.call_javascript error",e,this.job_id)}}async dbs_create(table_id,data,cb){const _table_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,table_id);if(_table_obj?.properties?.menuType!=="table"){return this.reject("xu.dbsCreate error",`${table_id} is not a table`,this.job_id)}try{const ret=await this.func.common.db(this.SESSION_ID,"dbs_create",{table_id:table_id,table_data:data});if(cb){return cb(ret)}return ret}catch(e){console.error(e);this.reject("xu.dbs_create error",e,this.job_id)}}async dbs_read(table_id,selector={},fields=[],sort,limit=999,skip,cb){const _table_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,table_id);if(_table_obj?.properties?.menuType!=="table"){return this.reject("xu.dbsRead error",`${table_id} is not a table`,this.job_id)}let data={fields:fields,table_id:table_id,dataSourceFilterModelType:"query",filterModelMongo:selector,limit:limit,skip:skip,sort:sort};try{const ret=await this.func.common.db(this.SESSION_ID,"dbs_read",data);if(cb){return cb(ret)}return ret}catch(e){console.error(e);this.reject("xu.dbs_read error",e,this.job_id)}}async dbs_update(table_id,row_id,data,cb){const _table_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,table_id);if(_table_obj?.properties?.menuType!=="table"){return this.reject("xu.dbsUpdate error",`${table_id} is not a table`,this.job_id)}if(!row_id){return this.reject("xu.dbsDelete error",`row_id is a mandatory field`,this.job_id)}try{const ret=await this.func.common.db(this.SESSION_ID,"dbs_update",{table_id:table_id,row_id:row_id,table_data:data});if(cb){return cb(ret)}return ret}catch(e){console.error(e);this.reject("xu.dbs_update error",e,this.job_id)}}async dbs_delete(table_id,row_id,cb){const _table_obj=await this.func.utils.DOCS_OBJ.get(this.SESSION_ID,table_id);if(_table_obj?.properties?.menuType!=="table"){return this.reject("xu.dbsDelete error",`${table_id} is not a table`,this.job_id)}if(!row_id){return this.reject("xu.dbsDelete error",`row_id is a mandatory field`,this.job_id)}try{const ret=await this.func.common.db(this.SESSION_ID,"dbs_delete",{table_id:table_id,ids:[row_id]});if(cb){return cb(ret)}return ret}catch(e){console.error(e);this.reject("xu.dbs_delete error",e,this.job_id)}}}
@@ -67,7 +67,7 @@ export class XudaModule {
67
67
  let ds_val = val;
68
68
  let ds_key = ds_val.dsSession;
69
69
  const _view_obj = await this.func.utils.VIEWS_OBJ.get(this.SESSION_ID, ds_val.prog_id);
70
- if (_.isEmpty(_view_obj.progEvents)) continue;
70
+ if (xu_isEmpty(_view_obj.progEvents)) continue;
71
71
  if (ds) break;
72
72
 
73
73
  for await (const [key, val] of Object.entries(_view_obj.progEvents)) {
@@ -1 +1 @@
1
- const _this={};export const init_module=e=>{_this.func=e.func;_this.glb=e.glb;_this.SESSION_OBJ=e.SESSION_OBJ;_this.APP_OBJ=e.APP_OBJ;_this.IS_DOCKER=e.IS_DOCKER;_this.IS_API_SERVER=e.IS_API_SERVER;_this.IS_PROCESS_SERVER=e.IS_PROCESS_SERVER};export const build_filter=async function(SESSION_ID,dataSourceSession,v,_ds){let file_ret2=await _this.func.utils.FILES_OBJ.get(SESSION_ID,_ds._dataSourceTableId);if(!file_ret2){_this.func.utils.debug_report(SESSION_ID,"datasource build query","Table reference not exist","E");return}let view_ret=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.args.prog_id);v.dataSourceIndexId=view_ret.progDataSource.dataSourceIndexId;v.dataSourceIndexIdExp=view_ret.progDataSource.dataSourceIndexIdExp;if(v.dataSourceIndexIdExp){let ret_dataSourceIndexIdExp=await _this.func.expression.get(SESSION_ID,v.dataSourceIndexIdExp,dataSourceSession,"index",_ds.args.rowIdP);if(ret_dataSourceIndexIdExp.result){v.dataSourceIndexId=ret_dataSourceIndexIdExp.result}if(!v.dataSourceIndexId){_this.func.utils.debug_report(SESSION_ID,"BUILD FILTER QUERY","Index expression return empty result","W")}v.dataSourceIndexesObj=view_ret.progDataSource.dataSourceIndexesObj;const index_obj=_this.func.common.find_item_by_key_root(file_ret2.tableIndexes,"id",v.dataSourceIndexId);if(!index_obj){return _this.func.utils.debug_report(SESSION_ID,"BUILD FILTER QUERY","Index not found in table: "+_ds._dataSourceTableId,"W")}if(!v.dataSourceIndexesObj?.[v.dataSourceIndexId]){_this.func.utils.debug_report(SESSION_ID,"BUILD FILTER QUERY","Index not found","W")}}var filter_from={};var filter_to={};let ret=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.args.prog_id);var sortOrder=ret.progDataSource.dataSourceSort;var sortOrderTypeExp=ret.progDataSource.dataSourceSortExp;if(_ds.sortOrder){sortOrder=_ds.sortOrder}if(_ds.sortOrderTypeExp){sortOrderTypeExp=_ds.sortOrderTypeExp}v.sortOrder=sortOrder;v.sortOrderTypeExp=sortOrderTypeExp;if(sortOrderTypeExp){var sort_orderExp=await _this.func.expression.get(SESSION_ID,v.sortOrderTypeExp,dataSourceSession,"sortorder",_ds.args.rowIdP);if(sort_orderExp.result){v.sortOrder=sort_orderExp.result;sortOrder=v.sortOrder}}let file_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,_ds._dataSourceTableId);if(v.dataSourceIndexId){_ds.filter_from={};_ds.filter_to={};_ds.locate_from={};_ds.locate_to={};var locate_exist;var locate_error;v.segFrom=[];v.segTo=[];if(v.viewIndex){for await(const[keySegment,valSegment]of Object.entries(v.viewIndex[v.dataSourceIndexId])){var fieldId=keySegment;if(!_this.func.common.find_item_by_key(file_ret.tableFields,"field_id",fieldId)){_this.func.utils.debug_report(SESSION_ID,"datasource build query",`Wrong index fields for ${fieldId} at field range ${v.viewSourceDesc}`,"E",null,_ds);break}var fieldProp=_this.func.common.find_item_by_key(file_ret.tableFields,"field_id",fieldId);var fieldType=fieldProp.props.fieldType;var fieldValFrom=valSegment.from;var fieldValTo=valSegment.to;const get_val=async function(valP,actionP,typeP){var ret={};ret.result=valP;ret.fields={};ret.fields[fieldId]=valP;if(!ret.result){ret.result=0;if(fieldType!=="number"){ret.result="";ret.fields[fieldId]=ret.result}}else{if(fieldType==="number"){if(!valP.includes("@")){if(typeof valP==="boolean"){ret.result=valP?1:0}else{ret.result=Number(valP)}ret.fields[fieldId]=ret.result}}else{if(!valP.includes("@")){ret.result=valP;ret.fields[fieldId]=ret.result}}ret=await _this.func.expression.get(SESSION_ID,ret.result,dataSourceSession,"query",_ds.args.rowIdP)}_this.func.utils.debug.log(SESSION_ID,_ds.args.prog_id+"_"+valSegment.id,{module:v.viewModule,action:actionP,prop:typeP,details:ret.result,result:ret.result,error:ret.error,warning:ret.warning,source:v.viewSourceDesc,fields:ret.fields,type:"query",prog_id:_ds.args.prog_id,dsSession:dataSourceSession});return ret};var value_from=await get_val(fieldValFrom,"range","from");var value_to=await get_val(fieldValTo,"range","to");v.segFrom.push(value_from.result);v.segTo.push(value_to.result);var add_filters_to_datasource=function(objP,typeP){for(let[key,val]of Object.entries(objP.fields)){if(!val)val=null;_ds[typeP][key]=val}};add_filters_to_datasource(value_from,"filter_from");add_filters_to_datasource(value_to,"filter_to");filter_from[fieldId]=value_from.result;filter_to[fieldId]=value_to.result;if(_ds.tree_obj.menuType==="component"){v.segLocateFrom[keySegment]=v.segFrom[keySegment];v.segLocateTo[keySegment]=v.segTo[keySegment];v.fieldLocateValFrom=valSegment.locate_from;v.fieldLocateValTo=valSegment.locate_to;if(valSegment.locate_from||valSegment.locate_to)locate_exist=true;var value_from_locate=await get_val(v.fieldLocateValFrom,"locate","from");var value_to_locate=await get_val(v.fieldLocateValTo,"locate","to");v.segLocateFrom[keySegment]=value_from_locate.result;v.segLocateTo[keySegment]=value_to_locate.result;add_filters_to_datasource(value_from_locate,"locate_from");add_filters_to_datasource(value_to_locate,"locate_to")}}}const query_string_helper=function(fileIdP,indexIdP,segFromP,segToP,sortOrderP,filter_from,filter_to){var query={};var from=[fileIdP,indexIdP,segFromP];var to=[fileIdP,indexIdP,segToP];query.desc=sortOrderP==="des";query.view="db_index";query.table_id=fileIdP;query.indexId=indexIdP;if(sortOrderP==="des"){query.startkey=to;query.endkey=from}else{query.startkey=from;query.endkey=to}query.filter_from=filter_from;query.filter_to=filter_to;query.sortOrder=sortOrderP;return query};{v.couchView=query_string_helper(_ds._dataSourceTableId,v.dataSourceIndexId,v.segFrom,v.segTo,sortOrder,filter_from,filter_to)}if(_ds.tree_obj.menuType==="component"&&locate_exist&&!locate_error){v.locateQuery=query_string_helper(_ds._dataSourceTableId,v.dataSourceIndexId,v.segLocateFrom,v.segLocateTo,sortOrder,_ds.locate_from,_ds.locate_to)}}else{v.couchView={view:"db_index_all",table_id:_ds._dataSourceTableId}}};export const process_view_dataset=async function(SESSION_ID,dataSourceSession,_ds){const tree_obj=await _this.func.utils.TREE_OBJ.get(SESSION_ID,_ds.prog_id);var rows_count=_ds?.v.raw_data?.rows?.length||0;var args=_ds.args;const finish_dataset=async function(){_ds.rows_found=rows_count;if(tree_obj.menuType==="get_data"&&rows_count&&await _this.func.datasource.get_view_events_count(SESSION_ID,dataSourceSession,"after_record")>0){await _this.func.datasource.execute_view_events(SESSION_ID,dataSourceSession,"after_record")}return _this.func.datasource.callback(SESSION_ID,dataSourceSession,args.dataSourceNoP,args.rowIdP,args.jobNoP,null,_ds.nodeId)};const iterate_rows=async function(){for await(const[key,raw_data_row]of Object.entries(_ds.v.raw_data.rows)){_ds.currentRecordId=raw_data_row.id;await _this.func.datasource.render_fields_dataset(SESSION_ID,dataSourceSession,raw_data_row);break}return await finish_dataset()};if(rows_count){return await iterate_rows()}_ds.currentRecordId="dataset";_ds.set_mode="C";await _this.func.datasource.render_fields_dataset(SESSION_ID,dataSourceSession);await _this.func.events.validate(SESSION_ID,"record_not_found",dataSourceSession);_ds.record_not_found=true;return await finish_dataset()};export const set_dataset_key_data=function(SESSION_ID,dataSourceSession,valP){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];var v=_ds.v;v.udfData=valP.value.udfData;var keyData={_id:valP.value._id,_rev:valP.value._rev,table_id:_ds._dataSourceTableId};_ds.key=keyData};export const get_locate_from_db=async function(SESSION_ID,dataSourceSession){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];var v=_ds.v;if(!v.locateQuery){return}const json=await _this.func.db.get_query(SESSION_ID,_ds._dataSourceTableId,v.locateQuery,dataSourceSession,v.viewSourceDesc,"locate record");var rows=json.rows.length;if(!rows){return await _this.func.events.validate(SESSION_ID,"locate_not_found",dataSourceSession)}_ds.locatedRecordId=json.rows[0].id;return};export const find_fieldId_in_index=function(SESSION_ID,dataSourceSession,fieldId){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];var v=_ds.v;var ret;_.forEach(v.viewIndex,function(val,key){if(val.data[0]===fieldId){ret=key;return false}});return ret};export const dataset_save_before_exit=async function(SESSION_ID,dataSourceSession,reEnterP){var exit_event_count=0;if(!reEnterP){exit_event_count=await _this.func.datasource.get_view_events_count(SESSION_ID,dataSourceSession,"on_exit")}var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];var v=_ds.v;if(exit_event_count){await _this.func.datasource.execute_view_events(SESSION_ID,dataSourceSession,"on_exit");if(v?.screenInfo?.properties?.menuType==="set_data"&&_.size(v.jsonP.rows)){return await _this.func.db.save_data(SESSION_ID,dataSourceSession)}}return};
1
+ const _this={};export const init_module=e=>{_this.func=e.func;_this.glb=e.glb;_this.SESSION_OBJ=e.SESSION_OBJ;_this.APP_OBJ=e.APP_OBJ;_this.IS_DOCKER=e.IS_DOCKER;_this.IS_API_SERVER=e.IS_API_SERVER;_this.IS_PROCESS_SERVER=e.IS_PROCESS_SERVER};export const build_filter=async function(SESSION_ID,dataSourceSession,v,_ds){let file_ret2=await _this.func.utils.FILES_OBJ.get(SESSION_ID,_ds._dataSourceTableId);if(!file_ret2){_this.func.utils.debug_report(SESSION_ID,"datasource build query","Table reference not exist","E");return}let view_ret=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.args.prog_id);v.dataSourceIndexId=view_ret.progDataSource.dataSourceIndexId;v.dataSourceIndexIdExp=view_ret.progDataSource.dataSourceIndexIdExp;if(v.dataSourceIndexIdExp){let ret_dataSourceIndexIdExp=await _this.func.expression.get(SESSION_ID,v.dataSourceIndexIdExp,dataSourceSession,"index",_ds.args.rowIdP);if(ret_dataSourceIndexIdExp.result){v.dataSourceIndexId=ret_dataSourceIndexIdExp.result}if(!v.dataSourceIndexId){_this.func.utils.debug_report(SESSION_ID,"BUILD FILTER QUERY","Index expression return empty result","W")}v.dataSourceIndexesObj=view_ret.progDataSource.dataSourceIndexesObj;const index_obj=_this.func.common.find_item_by_key_root(file_ret2.tableIndexes,"id",v.dataSourceIndexId);if(!index_obj){return _this.func.utils.debug_report(SESSION_ID,"BUILD FILTER QUERY","Index not found in table: "+_ds._dataSourceTableId,"W")}if(!v.dataSourceIndexesObj?.[v.dataSourceIndexId]){_this.func.utils.debug_report(SESSION_ID,"BUILD FILTER QUERY","Index not found","W")}}var filter_from={};var filter_to={};let ret=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.args.prog_id);var sortOrder=ret.progDataSource.dataSourceSort;var sortOrderTypeExp=ret.progDataSource.dataSourceSortExp;if(_ds.sortOrder){sortOrder=_ds.sortOrder}if(_ds.sortOrderTypeExp){sortOrderTypeExp=_ds.sortOrderTypeExp}v.sortOrder=sortOrder;v.sortOrderTypeExp=sortOrderTypeExp;if(sortOrderTypeExp){var sort_orderExp=await _this.func.expression.get(SESSION_ID,v.sortOrderTypeExp,dataSourceSession,"sortorder",_ds.args.rowIdP);if(sort_orderExp.result){v.sortOrder=sort_orderExp.result;sortOrder=v.sortOrder}}let file_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,_ds._dataSourceTableId);if(v.dataSourceIndexId){_ds.filter_from={};_ds.filter_to={};_ds.locate_from={};_ds.locate_to={};var locate_exist;var locate_error;v.segFrom=[];v.segTo=[];if(v.viewIndex){for await(const[keySegment,valSegment]of Object.entries(v.viewIndex[v.dataSourceIndexId])){var fieldId=keySegment;if(!_this.func.common.find_item_by_key(file_ret.tableFields,"field_id",fieldId)){_this.func.utils.debug_report(SESSION_ID,"datasource build query",`Wrong index fields for ${fieldId} at field range ${v.viewSourceDesc}`,"E",null,_ds);break}var fieldProp=_this.func.common.find_item_by_key(file_ret.tableFields,"field_id",fieldId);var fieldType=fieldProp.props.fieldType;var fieldValFrom=valSegment.from;var fieldValTo=valSegment.to;const get_val=async function(valP,actionP,typeP){var ret={};ret.result=valP;ret.fields={};ret.fields[fieldId]=valP;if(!ret.result){ret.result=0;if(fieldType!=="number"){ret.result="";ret.fields[fieldId]=ret.result}}else{if(fieldType==="number"){if(!valP.includes("@")){if(typeof valP==="boolean"){ret.result=valP?1:0}else{ret.result=Number(valP)}ret.fields[fieldId]=ret.result}}else{if(!valP.includes("@")){ret.result=valP;ret.fields[fieldId]=ret.result}}ret=await _this.func.expression.get(SESSION_ID,ret.result,dataSourceSession,"query",_ds.args.rowIdP)}_this.func.utils.debug.log(SESSION_ID,_ds.args.prog_id+"_"+valSegment.id,{module:v.viewModule,action:actionP,prop:typeP,details:ret.result,result:ret.result,error:ret.error,warning:ret.warning,source:v.viewSourceDesc,fields:ret.fields,type:"query",prog_id:_ds.args.prog_id,dsSession:dataSourceSession});return ret};var value_from=await get_val(fieldValFrom,"range","from");var value_to=await get_val(fieldValTo,"range","to");v.segFrom.push(value_from.result);v.segTo.push(value_to.result);var add_filters_to_datasource=function(objP,typeP){for(let[key,val]of Object.entries(objP.fields)){if(!val)val=null;_ds[typeP][key]=val}};add_filters_to_datasource(value_from,"filter_from");add_filters_to_datasource(value_to,"filter_to");filter_from[fieldId]=value_from.result;filter_to[fieldId]=value_to.result;if(_ds.tree_obj.menuType==="component"){v.segLocateFrom[keySegment]=v.segFrom[keySegment];v.segLocateTo[keySegment]=v.segTo[keySegment];v.fieldLocateValFrom=valSegment.locate_from;v.fieldLocateValTo=valSegment.locate_to;if(valSegment.locate_from||valSegment.locate_to)locate_exist=true;var value_from_locate=await get_val(v.fieldLocateValFrom,"locate","from");var value_to_locate=await get_val(v.fieldLocateValTo,"locate","to");v.segLocateFrom[keySegment]=value_from_locate.result;v.segLocateTo[keySegment]=value_to_locate.result;add_filters_to_datasource(value_from_locate,"locate_from");add_filters_to_datasource(value_to_locate,"locate_to")}}}const query_string_helper=function(fileIdP,indexIdP,segFromP,segToP,sortOrderP,filter_from,filter_to){var query={};var from=[fileIdP,indexIdP,segFromP];var to=[fileIdP,indexIdP,segToP];query.desc=sortOrderP==="des";query.view="db_index";query.table_id=fileIdP;query.indexId=indexIdP;if(sortOrderP==="des"){query.startkey=to;query.endkey=from}else{query.startkey=from;query.endkey=to}query.filter_from=filter_from;query.filter_to=filter_to;query.sortOrder=sortOrderP;return query};{v.couchView=query_string_helper(_ds._dataSourceTableId,v.dataSourceIndexId,v.segFrom,v.segTo,sortOrder,filter_from,filter_to)}if(_ds.tree_obj.menuType==="component"&&locate_exist&&!locate_error){v.locateQuery=query_string_helper(_ds._dataSourceTableId,v.dataSourceIndexId,v.segLocateFrom,v.segLocateTo,sortOrder,_ds.locate_from,_ds.locate_to)}}else{v.couchView={view:"db_index_all",table_id:_ds._dataSourceTableId}}};export const process_view_dataset=async function(SESSION_ID,dataSourceSession,_ds){const tree_obj=await _this.func.utils.TREE_OBJ.get(SESSION_ID,_ds.prog_id);var rows_count=_ds?.v.raw_data?.rows?.length||0;var args=_ds.args;const finish_dataset=async function(){_ds.rows_found=rows_count;if(tree_obj.menuType==="get_data"&&rows_count&&await _this.func.datasource.get_view_events_count(SESSION_ID,dataSourceSession,"after_record")>0){await _this.func.datasource.execute_view_events(SESSION_ID,dataSourceSession,"after_record")}return _this.func.datasource.callback(SESSION_ID,dataSourceSession,args.dataSourceNoP,args.rowIdP,args.jobNoP,null,_ds.nodeId)};const iterate_rows=async function(){for await(const[key,raw_data_row]of Object.entries(_ds.v.raw_data.rows)){_ds.currentRecordId=raw_data_row.id;await _this.func.datasource.render_fields_dataset(SESSION_ID,dataSourceSession,raw_data_row);break}return await finish_dataset()};if(rows_count){return await iterate_rows()}_ds.currentRecordId="dataset";_ds.set_mode="C";await _this.func.datasource.render_fields_dataset(SESSION_ID,dataSourceSession);await _this.func.events.validate(SESSION_ID,"record_not_found",dataSourceSession);_ds.record_not_found=true;return await finish_dataset()};export const set_dataset_key_data=function(SESSION_ID,dataSourceSession,valP){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];var v=_ds.v;v.udfData=valP.value.udfData;var keyData={_id:valP.value._id,_rev:valP.value._rev,table_id:_ds._dataSourceTableId};_ds.key=keyData};export const get_locate_from_db=async function(SESSION_ID,dataSourceSession){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];var v=_ds.v;if(!v.locateQuery){return}const json=await _this.func.db.get_query(SESSION_ID,_ds._dataSourceTableId,v.locateQuery,dataSourceSession,v.viewSourceDesc,"locate record");var rows=json.rows.length;if(!rows){return await _this.func.events.validate(SESSION_ID,"locate_not_found",dataSourceSession)}_ds.locatedRecordId=json.rows[0].id;return};export const find_fieldId_in_index=function(SESSION_ID,dataSourceSession,fieldId){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];var v=_ds.v;var ret;for(const[key,val]of Object.entries(v.viewIndex)){if(val.data[0]===fieldId){ret=key;break}}return ret};export const dataset_save_before_exit=async function(SESSION_ID,dataSourceSession,reEnterP){var exit_event_count=0;if(!reEnterP){exit_event_count=await _this.func.datasource.get_view_events_count(SESSION_ID,dataSourceSession,"on_exit")}var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dataSourceSession];var v=_ds.v;if(exit_event_count){await _this.func.datasource.execute_view_events(SESSION_ID,dataSourceSession,"on_exit");if(v?.screenInfo?.properties?.menuType==="set_data"&&v.jsonP.rows.length){return await _this.func.db.save_data(SESSION_ID,dataSourceSession)}}return};
@@ -293,12 +293,12 @@ export const find_fieldId_in_index = function (SESSION_ID, dataSourceSession, fi
293
293
  var v = _ds.v;
294
294
  var ret;
295
295
 
296
- _.forEach(v.viewIndex, function (val, key) {
296
+ for (const [key, val] of Object.entries(v.viewIndex)) {
297
297
  if (val.data[0] === fieldId) {
298
298
  ret = key;
299
- return false;
299
+ break;
300
300
  }
301
- });
301
+ }
302
302
  return ret;
303
303
  };
304
304
 
@@ -323,7 +323,7 @@ export const dataset_save_before_exit = async function (SESSION_ID, dataSourceSe
323
323
  if (exit_event_count) {
324
324
  await _this.func.datasource.execute_view_events(SESSION_ID, dataSourceSession, 'on_exit');
325
325
 
326
- if (v?.screenInfo?.properties?.menuType === 'set_data' && _.size(v.jsonP.rows)) {
326
+ if (v?.screenInfo?.properties?.menuType === 'set_data' && v.jsonP.rows.length) {
327
327
  return await _this.func.db.save_data(SESSION_ID, dataSourceSession);
328
328
  }
329
329
  }
@@ -1 +1 @@
1
- const _this={};export const init_module=async e=>{_this.func=e.func;_this.glb=e.glb;_this.SESSION_OBJ=e.SESSION_OBJ;_this.APP_OBJ=e.APP_OBJ;_this.IS_DOCKER=e.IS_DOCKER;_this.IS_API_SERVER=e.IS_API_SERVER;_this.IS_PROCESS_SERVER=e.IS_PROCESS_SERVER;if(!_this.xuda_dbs_plugin&&typeof _this.IS_DOCKER==="undefined"&&typeof _this.IS_PROCESS_SERVER==="undefined"&&typeof _this.IS_API_SERVER==="undefined"){await init_xuda_dbs_plugin(e.SESSION_ID)}_this.db_replication_store;_this.db_changes_store;_this.db_replication_from_stat=3;_this.db_replication_to_stat=3};export let _db={};_db.save_data=async function(SESSION_ID,dsSessionP,keyP){var db_driver=await this.get_db_driver(SESSION_ID,dsSessionP);if(db_driver==="pouchdb"&&_this.glb.IS_WORKER){var callback_id=_this.func.utils.set_callback_queue(SESSION_ID,callbackP);var obj=_this.func.utils.clean_returned_datasource(SESSION_ID,dsSessionP);return _this.func.utils.post_back_to_client(SESSION_ID,"execute_local_sava_data",_this.SESSION_OBJ[SESSION_ID].worker_id,{ds_obj:obj,dsSessionP:dsSessionP,keyP:keyP,callback_id:callback_id})}_db.save_indicator(SESSION_ID,true);var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];let _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var dataSourceTableId=_view_obj?.progDataSource?.dataSourceTableId;if(!dataSourceTableId){_db.save_indicator(SESSION_ID,false);_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0105");return}var db_driver=await _db.get_db_driver(SESSION_ID,dsSessionP);let table_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,dataSourceTableId);if(!table_ret.tableIndexes||_.isEmpty(table_ret.tableIndexes)){_db.save_indicator(SESSION_ID,false);_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0104");return}if(!_ds.data_feed.rows){return console.error("data_feed rows is empty")}const clean_virtual_fields=async function(table_id,data){let table_obj=await func.utils.VIEWS_OBJ.get(SESSION_ID,table_id);var data_obj={};for(const[key,val]of Object.entries(data)){const _tableFieldsObj=func.common.find_item_by_key(table_obj.tableFields,"field_id",key);if(_tableFieldsObj){data_obj[key]=val}}return data_obj};let save_ret;if(_view_obj.properties.menuType==="component"){if(_view_obj?.properties?.rwMode!=="U"){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0126")}let data={prog_id:_ds.prog_id};if(_ds.data_feed.rows_added?.length){if(!_view_obj?.properties?.allowCreate){_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0120")}_.forEach(_ds.data_feed.rows_added,function(val,key){data[key]=val});delete _ds.data_feed.rows_added["newRecord"];save_ret=await _this.func.common.db(SESSION_ID,"dbs_create",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data.id,table_id:dataSourceTableId});return save_ret}if(_ds.data_feed.rows_deleted?.length){data.table_id=_ds._dataSourceTableId;data.ids=[];for await(const[key,val]of Object.entries(_ds.data_feed.rows_deleted)){data.ids.push(val);try{const row_idx=func.common.find_ROWID_idx(_ds,val);delete _ds.data_feed.rows[row_idx]}catch(error){}}_ds.data_feed.rows_deleted=[];save_ret=await _this.func.common.db(SESSION_ID,"dbs_delete",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId});return save_ret}if(_ds.data_feed.rows_changed?.length){for await(const[key,row_id]of Object.entries(_ds.data_feed.rows_changed)){if(row_id==="datasource_main")continue;let data={prog_id:_ds.prog_id};try{const row_idx=func.common.find_ROWID_idx(_ds,row_id);data.table_data=await clean_virtual_fields(_ds._dataSourceTableId,_ds.data_feed.rows[row_idx])}catch(err){console.error(err)}data.table_id=_ds._dataSourceTableId;data.row_id=row_id;save_ret=await _this.func.common.db(SESSION_ID,"dbs_update",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId})}return save_ret}return}if(_view_obj.properties.menuType!=="set_data"){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0126")}var mode=_ds.set_mode;if(!mode||mode==="U"){let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;data.row_id=_ds.currentRecordId;data.table_data={};try{const row_idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);data.table_data=await clean_virtual_fields(_ds._dataSourceTableId,_ds.data_feed.rows[row_idx])}catch(err){console.error(err)}save_ret=await _this.func.common.db(SESSION_ID,"dbs_update",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId})}if(mode==="D"){let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;data.ids=[_ds.currentRecordId];save_ret=await _this.func.common.db(SESSION_ID,"dbs_delete",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId});return save_ret}if(mode==="C"){if(_view_obj.properties.crudMode!=="C"&&_view_obj.properties.crudMode==="U"&&!_view_obj.properties.allowCreate){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0120")}let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;try{const row_idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);data.table_data=_ds.data_feed.rows[row_idx];save_ret=await _this.func.common.db(SESSION_ID,"dbs_create",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data.id,table_id:dataSourceTableId});return save_ret}catch(err){console.error(err)}}};_db.get_db_driver=async function(SESSION_ID,dsSessionP){var db_driver;if(dsSessionP){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];let _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var dataSourceTableId=_view_obj?.progDataSource?.dataSourceTableId;if(!dataSourceTableId){_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0105");return}let file_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,dataSourceTableId);db_driver=file_ret.properties.db_driver||"xuda"}if(_this.SESSION_OBJ[SESSION_ID].engine_mode==="live_preview"&&!db_driver&&_this.SESSION_OBJ[SESSION_ID].app_id==="temp"){db_driver="pouchdb"}return db_driver};_db.get_query=async function(SESSION_ID,table_id,queryP,dsSessionP,viewSourceDescP,sourceP,reduceP,skipP,limitP,countP,idsP,sortModel,sort_dir,filterModel={filterModelNative:filterModelNative,filterModelMongo:filterModelMongo,filterModelSql:filterModelSql,filterModelUserMongo:filterModelUserMongo,filterModelUserSql:filterModelUserSql},dataSourceFilterModelType="index",total_fields_info){const get_fields=async function(_ds){var fields=[];const _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);if(_view_obj.progFields){for(let val of _view_obj.progFields){if(val.data.type==="table"){fields.push(val.data.field_id)}}}return fields};const run_local=async function(){if(!_this.SESSION_OBJ[SESSION_ID])return;if(!_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP])return;var ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];var v=ds.v;var query_string;if(queryP.indexId){if(countP&&queryP.desc){query_string=`startkey=${JSON.stringify(queryP.endkey)}&endkey=${JSON.stringify(queryP.startkey)}`}else{query_string=`startkey=${JSON.stringify(queryP.startkey)}&endkey=${JSON.stringify(queryP.endkey)}&desc=${queryP.desc}`}}else{query_string="key="+queryP.table_id}var db_driver=await _db.get_db_driver(SESSION_ID,dsSessionP);var fields_arr=await get_fields(ds);const response={success:async function(json){if(dsSessionP&&!_this.SESSION_OBJ[SESSION_ID]?.DS_GLB?.[dsSessionP]){return}if(json.code<0){response.error(json.data);return}var data=json.data;if(dsSessionP)_this.func.utils.debug.log(SESSION_ID,ds._dataSourceTableId,{module:ds.viewModule,action:"read",prop:sourceP,details:query_string,result:data.rows?data.rows.length:0,error:null,source:viewSourceDescP,json:data,fields:_.assignIn(ds.locate_from,ds.locate_to),type:"file",dsSession:dsSessionP});return data},error:async function(err){if(dsSessionP&&!ds)return;if(dsSessionP){var err_msg=err&&err.data?err.data:err;_this.func.utils.debug.log(SESSION_ID,_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP]._dataSourceTableId,{module:ds.viewModule,action:"read",prop:sourceP,details:query_string,result:null,error:err_msg,source:viewSourceDescP,json:null,fields:_.assignIn(ds.locate_from,ds.locate_to),type:"file",dsSession:dsSessionP})}_this.func.utils.debug_report(SESSION_ID,"datasource couchDB query "+sourceP,err_msg,"E");return{rows:[],error:true}}};var data={desc:queryP.desc,indexId:queryP.indexId,key:queryP.table_id,reduce:reduceP,viewSourceDesc:viewSourceDescP,limit:limitP,skip:skipP,count:countP,ids:idsP,table_id:queryP.table_id,prog_id:ds.prog_id};data.filter_from=JSON.stringify(queryP.filter_from);data.filter_to=JSON.stringify(queryP.filter_to);data.sortOrder=queryP.sortOrder;data.table_id=queryP.table_id;data.startkey=JSON.stringify(queryP.startkey);data.endkey=JSON.stringify(queryP.endkey);if(countP&&queryP.desc){data.sortOrder="asc";data.startkey=JSON.stringify(queryP.endkey);data.endkey=JSON.stringify(queryP.startkey)}data.dataSourceFilterModelType=dataSourceFilterModelType;if(sortModel){data.sortModel=JSON.stringify(sortModel);data.sort_dir=sort_dir}if(!_.isEmpty(filterModel?.filterModelNative)){data.filterModelNative=JSON.stringify(filterModel.filterModelNative)}if(!_.isEmpty(filterModel?.filterModelMongo)){data.filterModelMongo=JSON.stringify(filterModel.filterModelMongo)}if(filterModel?.filterModelSql){data.filterModelSql=JSON.stringify(filterModel.filterModelSql)}if(!_.isEmpty(filterModel?.filterModelUserMongo)){data.filterModelUserMongo=JSON.stringify(filterModel.filterModelUserMongo)}if(filterModel?.filterModelUserSql){data.filterModelUserSql=JSON.stringify(filterModel.filterModelUserSql)}if(total_fields_info){data.total_fields_info=JSON.stringify(total_fields_info)}if(!reduceP&&!countP){data.fields=fields_arr}try{const json=await _this.func.common.db(SESSION_ID,"dbs_read",data,{node:true},dsSessionP);return await response.success(json)}catch(e){return await response.error(e?.message||e?.data||e)}};var db_driver=await this.get_db_driver(SESSION_ID,dsSessionP);if(db_driver==="pouchdb"&&_this.glb.IS_WORKER&&!_this.SESSION_OBJ[SESSION_ID].engine_mode==="live_preview"){var callback_id=_this.func.utils.set_callback_queue(SESSION_ID,callbackP);var obj=_this.func.utils.clean_returned_datasource(SESSION_ID,dsSessionP);return _this.func.utils.post_back_to_client(SESSION_ID,"execute_local_db_query",_this.SESSION_OBJ[SESSION_ID].worker_id,{ds_obj:obj,dsSessionP:dsSessionP,table_id:table_id,queryP:queryP,dsSessionP:dsSessionP,viewSourceDescP:viewSourceDescP,sourceP:sourceP,reduceP:reduceP,skipP:skipP,limitP:limitP,countP:countP,idsP:idsP,callback_id:callback_id})}return await run_local()};_db.utils={};_db.save_indicator=function(SESSION_ID,stateP){if(!_this.glb.IS_WORKER){_this.func.UI.utils.save(SESSION_ID,stateP)}};const init_xuda_dbs_plugin=async function(SESSION_ID){var _session=_this.SESSION_OBJ[SESSION_ID];const plugin_name="@xuda.io/xuda-dbs-plugin-xuda";const get_path=function(plugin_name,resource){var path=`https://${_session.domain}/plugins/${plugin_name}${resource?"/"+resource:""}?app_id=${_session.app_id}`;return path};try{_this.xuda_dbs_plugin=await import(get_path(plugin_name,"studio.mjs"));const db=await func.utils.connect_pouchdb(SESSION_ID);await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"create_design",{db:db})}catch(err){return console.error(err.message)}};_db.call_pouch_xuda_dbs_plugin=async function(SESSION_ID,method,params){return new Promise(async(resolve,reject)=>{try{if(params.e){params.table_obj=await func.utils.DOCS_OBJ.get(SESSION_ID,params.e.table_id)}await _this.xuda_dbs_plugin[method](params,resolve,reject)}catch(err){reject()}})};_db.pouch={};_db.pouch.dbs_read=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"read",{db:db,e:e})};_db.pouch.dbs_create=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"create",{db:db,e:e})};_db.pouch.dbs_delete=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"del",{db:db,e:e})};_db.pouch.dbs_update=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"update",{db:db,e:e})};_db.pouch.init_db_replication=async function(SESSION_ID){const db=await func.utils.connect_pouchdb(SESSION_ID);var _session=_this.SESSION_OBJ[SESSION_ID];if(_session.url_params.avoid_local||_session.engine_mode==="miniapp"||_session.engine_mode!=="live_preview"&&!_session.opt.enable_offline){return}const changes=db.changes({live:true,include_docs:true}).on("change",function(change){if(!change.doc.udfData)return;func.runtime.ui.refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:change.id,table_id:change.doc.udfData.udffileid})}).on("complete",function(info){console.log("complete",info)}).on("error",function(err){console.error(err)});set_replication_stat(SESSION_ID,null,3);const db_name=APP_OBJ[_session.app_id].app_db_name;const rep=db.replicate.to(`https://${_session.domain}/db/${db_name}`,{selector:{docType:"database"},live:true,retry:true,fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}}).on("change",function(info){}).on("paused",function(err){if(err){return set_replication_stat(SESSION_ID,null,2)}set_replication_stat(SESSION_ID,null,3)}).on("active",function(){}).on("denied",function(err){set_replication_stat(SESSION_ID,null,2)}).on("complete",function(info){}).on("error",function(err){set_replication_stat(SESSION_ID,null,2);IS_ONLINE=false});_db.pouch.set_db_replication_from_server(SESSION_ID);$("body").on("set_db_replication_from_server",()=>{_db.pouch.set_db_replication_from_server(SESSION_ID)})};_db.pouch.set_db_replication_from_server=async function(SESSION_ID){if(!IS_ONLINE)return;const db=await func.utils.connect_pouchdb(SESSION_ID);const rep_docs=await _db.pouch.get_replications(SESSION_ID);const _session=_this.SESSION_OBJ[SESSION_ID];const db_name=APP_OBJ[_session.app_id].app_db_name;const remote_db_url=`https://${_session.domain}/db/${db_name}`;const remote_db=new PouchDB(remote_db_url,{fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}});if(_this.db_changes_store){_this.db_changes_store.cancel()}const write_stat=async function(rep_id,stat,reason){try{let doc=await db.get(rep_id);doc.stat=stat;doc.stat_reason=reason;try{db.put(doc)}catch(err){}}catch(err){}};const download_documents=async function(rep_doc){await write_stat(rep_doc._id,2);const remote_db=new PouchDB(remote_db_url,{fetch:function(url,opts){opts.headers.set("xu-prog_id",rep_doc.prog_id);if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}});const ret=await remote_db.find({selector:rep_doc.selector,fields:["_id"],limit:9999999999});if(ret?.code<0){return func.utils.debug_report(SESSION_ID,"download_documents",ret.data,"E")}try{var doc_ids=[];for await(let doc of ret.docs){doc_ids.push(doc._id)}db.replicate.from(remote_db_url,{doc_ids:doc_ids,retry:true,style:"main_only",fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}}).on("paused",async function(err){if(err){return}const read_ret=await _db.pouch.dbs_read(SESSION_ID,rep_doc.e);await write_stat(rep_doc._id,3)})}catch(err){await write_stat(rep_doc._id,2,err.message);console.error("replication from error",err)}};let filter_tables=[];for(let doc of rep_docs){if(!filter_tables.includes(doc.table_id))filter_tables.push(doc.table_id);if(doc.stat<3)await download_documents(doc)}try{_this.db_changes_store=remote_db.changes({since:"now",live:true,timeout:3e5,style:"main_only",include_docs:false}).on("change",async function(change){if(change.id.substr(0,4)!=="dbs-")return;if(_this.db_replication_from_stat!==3){set_replication_stat(SESSION_ID,3)}try{const existing_doc=await db.get(change.id);db.replicate.from(remote_db_url,{doc_ids:[change.id],retry:true,style:"main_only",fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}})}catch(err){try{const table_id=change.id.split("_")[0].substr(4);for(let doc of rep_docs){if(doc.table_id===table_id){download_documents(doc)}}}catch(err){console.warn(err)}}}).on("complete",function(info){}).on("error",function(err){console.error(err);set_replication_stat(SESSION_ID,2);_this.db_changes_store.cancel()})}catch(err){console.error(err)}return};_db.pouch.remove_db_replication_from_server=async function(SESSION_ID,rep_id){const db=await func.utils.connect_pouchdb(SESSION_ID);try{const doc=await db.get(rep_id);db.remove(doc)}catch(error){}};_db.pouch.get_replications=async function(SESSION_ID=Object.keys(SESSION_OBJ)[0]){const db=await func.utils.connect_pouchdb(SESSION_ID);let ret=await db.find({selector:{docType:"rep_request"}});return ret.docs};_db.pouch.get_replication_stat=async function(SESSION_ID){const _session=_this.SESSION_OBJ[SESSION_ID];return _session?.DS_GLB?.[0]?.data_system?.SYS_GLOBAL_BOL_REPLICATION_STAT};const set_replication_stat=async function(SESSION_ID,from_stat,to_stat){var _session=_this.SESSION_OBJ[SESSION_ID];if(!_session?.DS_GLB?.[0]){return setTimeout(function(){set_replication_stat(SESSION_ID,from_stat,to_stat)},1e3)}if(from_stat)_this.db_replication_from_stat=from_stat;if(to_stat)_this.db_replication_to_stat=to_stat;var data={};if(_this.db_replication_from_stat===3&&_this.db_replication_to_stat===3){data.SYS_GLOBAL_BOL_REPLICATION_STAT=1;console.info("Replication On")}else{data.SYS_GLOBAL_BOL_REPLICATION_STAT=0;console.info("Replication Off")}var datasource_changes={[0]:{["data_system"]:data}};await func.datasource.update(SESSION_ID,datasource_changes)};const refresh_document_changes_for_realtime_update=function(SESSION_ID,doc_change){var _session=_this.SESSION_OBJ[SESSION_ID];if(glb.IS_WORKER){return func.utils.post_back_to_client(SESSION_ID,"refresh_document_changes_for_realtime_update",_session.worker_id,{doc_change:doc_change})}func.runtime.ui.refresh_document_changes_for_realtime_update(SESSION_ID,doc_change)};
1
+ const _this={};export const init_module=async e=>{_this.func=e.func;_this.glb=e.glb;_this.SESSION_OBJ=e.SESSION_OBJ;_this.APP_OBJ=e.APP_OBJ;_this.IS_DOCKER=e.IS_DOCKER;_this.IS_API_SERVER=e.IS_API_SERVER;_this.IS_PROCESS_SERVER=e.IS_PROCESS_SERVER;if(!_this.xuda_dbs_plugin&&typeof _this.IS_DOCKER==="undefined"&&typeof _this.IS_PROCESS_SERVER==="undefined"&&typeof _this.IS_API_SERVER==="undefined"){await init_xuda_dbs_plugin(e.SESSION_ID)}_this.db_replication_store;_this.db_changes_store;_this.db_replication_from_stat=3;_this.db_replication_to_stat=3};export let _db={};_db.save_data=async function(SESSION_ID,dsSessionP,keyP){var db_driver=await this.get_db_driver(SESSION_ID,dsSessionP);if(db_driver==="pouchdb"&&_this.glb.IS_WORKER){var callback_id=_this.func.utils.set_callback_queue(SESSION_ID,callbackP);var obj=_this.func.utils.clean_returned_datasource(SESSION_ID,dsSessionP);return _this.func.utils.post_back_to_client(SESSION_ID,"execute_local_sava_data",_this.SESSION_OBJ[SESSION_ID].worker_id,{ds_obj:obj,dsSessionP:dsSessionP,keyP:keyP,callback_id:callback_id})}_db.save_indicator(SESSION_ID,true);var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];let _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var dataSourceTableId=_view_obj?.progDataSource?.dataSourceTableId;if(!dataSourceTableId){_db.save_indicator(SESSION_ID,false);_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0105");return}var db_driver=await _db.get_db_driver(SESSION_ID,dsSessionP);let table_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,dataSourceTableId);if(!table_ret.tableIndexes||xu_isEmpty(table_ret.tableIndexes)){_db.save_indicator(SESSION_ID,false);_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0104");return}if(!_ds.data_feed.rows){return console.error("data_feed rows is empty")}const clean_virtual_fields=async function(table_id,data){let table_obj=await func.utils.VIEWS_OBJ.get(SESSION_ID,table_id);var data_obj={};for(const[key,val]of Object.entries(data)){const _tableFieldsObj=func.common.find_item_by_key(table_obj.tableFields,"field_id",key);if(_tableFieldsObj){data_obj[key]=val}}return data_obj};let save_ret;if(_view_obj.properties.menuType==="component"){if(_view_obj?.properties?.rwMode!=="U"){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0126")}let data={prog_id:_ds.prog_id};if(_ds.data_feed.rows_added?.length){if(!_view_obj?.properties?.allowCreate){_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0120")}for(const[key,val]of Object.entries(_ds.data_feed.rows_added)){data[key]=val}delete _ds.data_feed.rows_added["newRecord"];save_ret=await _this.func.common.db(SESSION_ID,"dbs_create",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data.id,table_id:dataSourceTableId});return save_ret}if(_ds.data_feed.rows_deleted?.length){data.table_id=_ds._dataSourceTableId;data.ids=[];for await(const[key,val]of Object.entries(_ds.data_feed.rows_deleted)){data.ids.push(val);try{const row_idx=func.common.find_ROWID_idx(_ds,val);delete _ds.data_feed.rows[row_idx]}catch(error){}}_ds.data_feed.rows_deleted=[];save_ret=await _this.func.common.db(SESSION_ID,"dbs_delete",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId});return save_ret}if(_ds.data_feed.rows_changed?.length){for await(const[key,row_id]of Object.entries(_ds.data_feed.rows_changed)){if(row_id==="datasource_main")continue;let data={prog_id:_ds.prog_id};try{const row_idx=func.common.find_ROWID_idx(_ds,row_id);data.table_data=await clean_virtual_fields(_ds._dataSourceTableId,_ds.data_feed.rows[row_idx])}catch(err){console.error(err)}data.table_id=_ds._dataSourceTableId;data.row_id=row_id;save_ret=await _this.func.common.db(SESSION_ID,"dbs_update",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId})}return save_ret}return}if(_view_obj.properties.menuType!=="set_data"){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0126")}var mode=_ds.set_mode;if(!mode||mode==="U"){let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;data.row_id=_ds.currentRecordId;data.table_data={};try{const row_idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);data.table_data=await clean_virtual_fields(_ds._dataSourceTableId,_ds.data_feed.rows[row_idx])}catch(err){console.error(err)}save_ret=await _this.func.common.db(SESSION_ID,"dbs_update",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId})}if(mode==="D"){let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;data.ids=[_ds.currentRecordId];save_ret=await _this.func.common.db(SESSION_ID,"dbs_delete",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data?.id?.[0],table_id:dataSourceTableId});return save_ret}if(mode==="C"){if(_view_obj.properties.crudMode!=="C"&&_view_obj.properties.crudMode==="U"&&!_view_obj.properties.allowCreate){return _this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0120")}let data={prog_id:_ds.prog_id};data.table_id=_ds._dataSourceTableId;try{const row_idx=func.common.find_ROWID_idx(_ds,_ds.currentRecordId);data.table_data=_ds.data_feed.rows[row_idx];save_ret=await _this.func.common.db(SESSION_ID,"dbs_create",data,{},dsSessionP);refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:save_ret.data.id,table_id:dataSourceTableId});return save_ret}catch(err){console.error(err)}}};_db.get_db_driver=async function(SESSION_ID,dsSessionP){var db_driver;if(dsSessionP){var _ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];let _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var dataSourceTableId=_view_obj?.progDataSource?.dataSourceTableId;if(!dataSourceTableId){_this.func.utils.alerts.invoke(SESSION_ID,"system_msg","SYS_MSG_0105");return}let file_ret=await _this.func.utils.FILES_OBJ.get(SESSION_ID,dataSourceTableId);db_driver=file_ret.properties.db_driver||"xuda"}if(_this.SESSION_OBJ[SESSION_ID].engine_mode==="live_preview"&&!db_driver&&_this.SESSION_OBJ[SESSION_ID].app_id==="temp"){db_driver="pouchdb"}return db_driver};_db.get_query=async function(SESSION_ID,table_id,queryP,dsSessionP,viewSourceDescP,sourceP,reduceP,skipP,limitP,countP,idsP,sortModel,sort_dir,filterModel={filterModelNative:filterModelNative,filterModelMongo:filterModelMongo,filterModelSql:filterModelSql,filterModelUserMongo:filterModelUserMongo,filterModelUserSql:filterModelUserSql},dataSourceFilterModelType="index",total_fields_info){const get_fields=async function(_ds){var fields=[];const _view_obj=await _this.func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);if(_view_obj.progFields){for(let val of _view_obj.progFields){if(val.data.type==="table"){fields.push(val.data.field_id)}}}return fields};const run_local=async function(){if(!_this.SESSION_OBJ[SESSION_ID])return;if(!_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP])return;var ds=_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];var v=ds.v;var query_string;if(queryP.indexId){if(countP&&queryP.desc){query_string=`startkey=${JSON.stringify(queryP.endkey)}&endkey=${JSON.stringify(queryP.startkey)}`}else{query_string=`startkey=${JSON.stringify(queryP.startkey)}&endkey=${JSON.stringify(queryP.endkey)}&desc=${queryP.desc}`}}else{query_string="key="+queryP.table_id}var db_driver=await _db.get_db_driver(SESSION_ID,dsSessionP);var fields_arr=await get_fields(ds);const response={success:async function(json){if(dsSessionP&&!_this.SESSION_OBJ[SESSION_ID]?.DS_GLB?.[dsSessionP]){return}if(json.code<0){response.error(json.data);return}var data=json.data;if(dsSessionP)_this.func.utils.debug.log(SESSION_ID,ds._dataSourceTableId,{module:ds.viewModule,action:"read",prop:sourceP,details:query_string,result:data.rows?data.rows.length:0,error:null,source:viewSourceDescP,json:data,fields:Object.assign({},ds.locate_from,ds.locate_to),type:"file",dsSession:dsSessionP});return data},error:async function(err){if(dsSessionP&&!ds)return;if(dsSessionP){var err_msg=err&&err.data?err.data:err;_this.func.utils.debug.log(SESSION_ID,_this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP]._dataSourceTableId,{module:ds.viewModule,action:"read",prop:sourceP,details:query_string,result:null,error:err_msg,source:viewSourceDescP,json:null,fields:Object.assign({},ds.locate_from,ds.locate_to),type:"file",dsSession:dsSessionP})}_this.func.utils.debug_report(SESSION_ID,"datasource couchDB query "+sourceP,err_msg,"E");return{rows:[],error:true}}};var data={desc:queryP.desc,indexId:queryP.indexId,key:queryP.table_id,reduce:reduceP,viewSourceDesc:viewSourceDescP,limit:limitP,skip:skipP,count:countP,ids:idsP,table_id:queryP.table_id,prog_id:ds.prog_id};data.filter_from=JSON.stringify(queryP.filter_from);data.filter_to=JSON.stringify(queryP.filter_to);data.sortOrder=queryP.sortOrder;data.table_id=queryP.table_id;data.startkey=JSON.stringify(queryP.startkey);data.endkey=JSON.stringify(queryP.endkey);if(countP&&queryP.desc){data.sortOrder="asc";data.startkey=JSON.stringify(queryP.endkey);data.endkey=JSON.stringify(queryP.startkey)}data.dataSourceFilterModelType=dataSourceFilterModelType;if(sortModel){data.sortModel=JSON.stringify(sortModel);data.sort_dir=sort_dir}if(!xu_isEmpty(filterModel?.filterModelNative)){data.filterModelNative=JSON.stringify(filterModel.filterModelNative)}if(!xu_isEmpty(filterModel?.filterModelMongo)){data.filterModelMongo=JSON.stringify(filterModel.filterModelMongo)}if(filterModel?.filterModelSql){data.filterModelSql=JSON.stringify(filterModel.filterModelSql)}if(!xu_isEmpty(filterModel?.filterModelUserMongo)){data.filterModelUserMongo=JSON.stringify(filterModel.filterModelUserMongo)}if(filterModel?.filterModelUserSql){data.filterModelUserSql=JSON.stringify(filterModel.filterModelUserSql)}if(total_fields_info){data.total_fields_info=JSON.stringify(total_fields_info)}if(!reduceP&&!countP){data.fields=fields_arr}try{const json=await _this.func.common.db(SESSION_ID,"dbs_read",data,{node:true},dsSessionP);return await response.success(json)}catch(e){return await response.error(e?.message||e?.data||e)}};var db_driver=await this.get_db_driver(SESSION_ID,dsSessionP);if(db_driver==="pouchdb"&&_this.glb.IS_WORKER&&!_this.SESSION_OBJ[SESSION_ID].engine_mode==="live_preview"){var callback_id=_this.func.utils.set_callback_queue(SESSION_ID,callbackP);var obj=_this.func.utils.clean_returned_datasource(SESSION_ID,dsSessionP);return _this.func.utils.post_back_to_client(SESSION_ID,"execute_local_db_query",_this.SESSION_OBJ[SESSION_ID].worker_id,{ds_obj:obj,dsSessionP:dsSessionP,table_id:table_id,queryP:queryP,dsSessionP:dsSessionP,viewSourceDescP:viewSourceDescP,sourceP:sourceP,reduceP:reduceP,skipP:skipP,limitP:limitP,countP:countP,idsP:idsP,callback_id:callback_id})}return await run_local()};_db.utils={};_db.save_indicator=function(SESSION_ID,stateP){if(!_this.glb.IS_WORKER){_this.func.UI.utils.save(SESSION_ID,stateP)}};const init_xuda_dbs_plugin=async function(SESSION_ID){var _session=_this.SESSION_OBJ[SESSION_ID];const plugin_name="@xuda.io/xuda-dbs-plugin-xuda";const get_path=function(plugin_name,resource){var path=`https://${_session.domain}/plugins/${plugin_name}${resource?"/"+resource:""}?app_id=${_session.app_id}`;return path};try{_this.xuda_dbs_plugin=await import(get_path(plugin_name,"studio.mjs"));const db=await func.utils.connect_pouchdb(SESSION_ID);await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"create_design",{db:db})}catch(err){return console.error(err.message)}};_db.call_pouch_xuda_dbs_plugin=async function(SESSION_ID,method,params){return new Promise(async(resolve,reject)=>{try{if(params.e){params.table_obj=await func.utils.DOCS_OBJ.get(SESSION_ID,params.e.table_id)}await _this.xuda_dbs_plugin[method](params,resolve,reject)}catch(err){reject()}})};_db.pouch={};_db.pouch.dbs_read=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"read",{db:db,e:e})};_db.pouch.dbs_create=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"create",{db:db,e:e})};_db.pouch.dbs_delete=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"del",{db:db,e:e})};_db.pouch.dbs_update=async function(SESSION_ID,e){const db=await func.utils.connect_pouchdb(SESSION_ID);return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID,"update",{db:db,e:e})};_db.pouch.init_db_replication=async function(SESSION_ID){const db=await func.utils.connect_pouchdb(SESSION_ID);var _session=_this.SESSION_OBJ[SESSION_ID];if(_session.url_params.avoid_local||_session.engine_mode==="miniapp"||_session.engine_mode!=="live_preview"&&!_session.opt.enable_offline){return}const changes=db.changes({live:true,include_docs:true}).on("change",function(change){if(!change.doc.udfData)return;func.runtime.ui.refresh_document_changes_for_realtime_update(SESSION_ID,{row_id:change.id,table_id:change.doc.udfData.udffileid})}).on("complete",function(info){console.log("complete",info)}).on("error",function(err){console.error(err)});set_replication_stat(SESSION_ID,null,3);const db_name=APP_OBJ[_session.app_id].app_db_name;const rep=db.replicate.to(`https://${_session.domain}/db/${db_name}`,{selector:{docType:"database"},live:true,retry:true,fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}}).on("change",function(info){}).on("paused",function(err){if(err){return set_replication_stat(SESSION_ID,null,2)}set_replication_stat(SESSION_ID,null,3)}).on("active",function(){}).on("denied",function(err){set_replication_stat(SESSION_ID,null,2)}).on("complete",function(info){}).on("error",function(err){set_replication_stat(SESSION_ID,null,2);IS_ONLINE=false});_db.pouch.set_db_replication_from_server(SESSION_ID);func.runtime.platform.on("set_db_replication_from_server",()=>{_db.pouch.set_db_replication_from_server(SESSION_ID)})};_db.pouch.set_db_replication_from_server=async function(SESSION_ID){if(!IS_ONLINE)return;const db=await func.utils.connect_pouchdb(SESSION_ID);const rep_docs=await _db.pouch.get_replications(SESSION_ID);const _session=_this.SESSION_OBJ[SESSION_ID];const db_name=APP_OBJ[_session.app_id].app_db_name;const remote_db_url=`https://${_session.domain}/db/${db_name}`;const remote_db=new PouchDB(remote_db_url,{fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}});if(_this.db_changes_store){_this.db_changes_store.cancel()}const write_stat=async function(rep_id,stat,reason){try{let doc=await db.get(rep_id);doc.stat=stat;doc.stat_reason=reason;try{db.put(doc)}catch(err){}}catch(err){}};const download_documents=async function(rep_doc){await write_stat(rep_doc._id,2);const remote_db=new PouchDB(remote_db_url,{fetch:function(url,opts){opts.headers.set("xu-prog_id",rep_doc.prog_id);if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}});const ret=await remote_db.find({selector:rep_doc.selector,fields:["_id"],limit:9999999999});if(ret?.code<0){return func.utils.debug_report(SESSION_ID,"download_documents",ret.data,"E")}try{var doc_ids=[];for await(let doc of ret.docs){doc_ids.push(doc._id)}db.replicate.from(remote_db_url,{doc_ids:doc_ids,retry:true,style:"main_only",fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}}).on("paused",async function(err){if(err){return}const read_ret=await _db.pouch.dbs_read(SESSION_ID,rep_doc.e);await write_stat(rep_doc._id,3)})}catch(err){await write_stat(rep_doc._id,2,err.message);console.error("replication from error",err)}};let filter_tables=[];for(let doc of rep_docs){if(!filter_tables.includes(doc.table_id))filter_tables.push(doc.table_id);if(doc.stat<3)await download_documents(doc)}try{_this.db_changes_store=remote_db.changes({since:"now",live:true,timeout:3e5,style:"main_only",include_docs:false}).on("change",async function(change){if(change.id.substr(0,4)!=="dbs-")return;if(_this.db_replication_from_stat!==3){set_replication_stat(SESSION_ID,3)}try{const existing_doc=await db.get(change.id);db.replicate.from(remote_db_url,{doc_ids:[change.id],retry:true,style:"main_only",fetch:function(url,opts){if(_session.gtp_token){opts.headers.set("xu-gtp-token",_session.gtp_token)}if(_session.app_token)opts.headers.set("xu-app-token",_session.app_token);{opts.headers.set("xu-db",db_name)}return PouchDB.fetch(url,opts)}})}catch(err){try{const table_id=change.id.split("_")[0].substr(4);for(let doc of rep_docs){if(doc.table_id===table_id){download_documents(doc)}}}catch(err){console.warn(err)}}}).on("complete",function(info){}).on("error",function(err){console.error(err);set_replication_stat(SESSION_ID,2);_this.db_changes_store.cancel()})}catch(err){console.error(err)}return};_db.pouch.remove_db_replication_from_server=async function(SESSION_ID,rep_id){const db=await func.utils.connect_pouchdb(SESSION_ID);try{const doc=await db.get(rep_id);db.remove(doc)}catch(error){}};_db.pouch.get_replications=async function(SESSION_ID=Object.keys(SESSION_OBJ)[0]){const db=await func.utils.connect_pouchdb(SESSION_ID);let ret=await db.find({selector:{docType:"rep_request"}});return ret.docs};_db.pouch.get_replication_stat=async function(SESSION_ID){const _session=_this.SESSION_OBJ[SESSION_ID];return _session?.DS_GLB?.[0]?.data_system?.SYS_GLOBAL_BOL_REPLICATION_STAT};const set_replication_stat=async function(SESSION_ID,from_stat,to_stat){var _session=_this.SESSION_OBJ[SESSION_ID];if(!_session?.DS_GLB?.[0]){return setTimeout(function(){set_replication_stat(SESSION_ID,from_stat,to_stat)},1e3)}if(from_stat)_this.db_replication_from_stat=from_stat;if(to_stat)_this.db_replication_to_stat=to_stat;var data={};if(_this.db_replication_from_stat===3&&_this.db_replication_to_stat===3){data.SYS_GLOBAL_BOL_REPLICATION_STAT=1;console.info("Replication On")}else{data.SYS_GLOBAL_BOL_REPLICATION_STAT=0;console.info("Replication Off")}var datasource_changes={[0]:{["data_system"]:data}};await func.datasource.update(SESSION_ID,datasource_changes)};const refresh_document_changes_for_realtime_update=function(SESSION_ID,doc_change){var _session=_this.SESSION_OBJ[SESSION_ID];if(glb.IS_WORKER){return func.utils.post_back_to_client(SESSION_ID,"refresh_document_changes_for_realtime_update",_session.worker_id,{doc_change:doc_change})}func.runtime.ui.refresh_document_changes_for_realtime_update(SESSION_ID,doc_change)};
@@ -52,7 +52,7 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
52
52
 
53
53
  let table_ret = await _this.func.utils.FILES_OBJ.get(SESSION_ID, dataSourceTableId);
54
54
 
55
- if (!table_ret.tableIndexes || _.isEmpty(table_ret.tableIndexes)) {
55
+ if (!table_ret.tableIndexes || xu_isEmpty(table_ret.tableIndexes)) {
56
56
  _db.save_indicator(SESSION_ID, false);
57
57
  _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0104'); //index missing
58
58
  return;
@@ -90,9 +90,9 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
90
90
  _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0120'); //Create Mode Denied
91
91
  }
92
92
 
93
- _.forEach(_ds.data_feed.rows_added, function (val, key) {
93
+ for (const [key, val] of Object.entries(_ds.data_feed.rows_added)) {
94
94
  data[key] = val;
95
- });
95
+ }
96
96
 
97
97
  delete _ds.data_feed.rows_added['newRecord'];
98
98
  save_ret = await _this.func.common.db(SESSION_ID, 'dbs_create', data, {}, dsSessionP);
@@ -342,7 +342,7 @@ _db.get_query = async function (
342
342
  error: null,
343
343
  source: viewSourceDescP,
344
344
  json: data,
345
- fields: _.assignIn(ds.locate_from, ds.locate_to),
345
+ fields: Object.assign({}, ds.locate_from, ds.locate_to),
346
346
  type: 'file',
347
347
  dsSession: dsSessionP,
348
348
  });
@@ -362,7 +362,7 @@ _db.get_query = async function (
362
362
  error: err_msg,
363
363
  source: viewSourceDescP,
364
364
  json: null,
365
- fields: _.assignIn(ds.locate_from, ds.locate_to),
365
+ fields: Object.assign({}, ds.locate_from, ds.locate_to),
366
366
  type: 'file',
367
367
  dsSession: dsSessionP,
368
368
  });
@@ -411,17 +411,17 @@ _db.get_query = async function (
411
411
  data.sort_dir = sort_dir;
412
412
  }
413
413
 
414
- if (!_.isEmpty(filterModel?.filterModelNative)) {
414
+ if (!xu_isEmpty(filterModel?.filterModelNative)) {
415
415
  data.filterModelNative = JSON.stringify(filterModel.filterModelNative);
416
416
  }
417
- if (!_.isEmpty(filterModel?.filterModelMongo)) {
417
+ if (!xu_isEmpty(filterModel?.filterModelMongo)) {
418
418
  data.filterModelMongo = JSON.stringify(filterModel.filterModelMongo);
419
419
  }
420
420
 
421
421
  if (filterModel?.filterModelSql) {
422
422
  data.filterModelSql = JSON.stringify(filterModel.filterModelSql);
423
423
  }
424
- if (!_.isEmpty(filterModel?.filterModelUserMongo)) {
424
+ if (!xu_isEmpty(filterModel?.filterModelUserMongo)) {
425
425
  data.filterModelUserMongo = JSON.stringify(filterModel.filterModelUserMongo);
426
426
  }
427
427
  if (filterModel?.filterModelUserSql) {
@@ -656,7 +656,7 @@ _db.pouch.init_db_replication = async function (SESSION_ID) {
656
656
  });
657
657
 
658
658
  _db.pouch.set_db_replication_from_server(SESSION_ID);
659
- $('body').on('set_db_replication_from_server', () => {
659
+ func.runtime.platform.on('set_db_replication_from_server', () => {
660
660
  _db.pouch.set_db_replication_from_server(SESSION_ID);
661
661
  });
662
662
  };
@@ -1 +1 @@
1
- export const watch=function(SESSION_ID,key,type,info,result,condition,not_executed){if(!glb.DEBUG_MODE)return;var _session=SESSION_OBJ[SESSION_ID];if(!glb?.DEBUG_INFO_OBJ?.command?.watch?.[key])return;var obj=glb.DEBUG_INFO_OBJ.command.watch[key];if(!obj)return;if(obj.type===type){var result_str="";if(typeof result!=="object"){result_str=" -> "+result}var cond_label="";if(condition)cond_label="Condition:";else condition="";if(!not_executed){console.info("%c Watch: "+obj.name+result_str,"color: dark-gray; font-weight: bold;",info,typeof result==="object"?result:"",cond_label,condition)}else{console.info("%c Watch: "+obj.name+result_str,"color: gray; font-weight: normal;",info,typeof result==="object"?result:"",cond_label,condition,"- NOT EXECUTED !!")}const watch_obj={service:"watch_log",data:{name:obj.name,type:type,info:info,result:result,condition:condition,not_executed:not_executed},id:STUDIO_WEBSOCKET_CONNECTION_ID,uid:_session.USR_OBJ._id,source:"runtime",app_id:_session.app_id,gtp_token:_session.gtp_token,app_token:_session.app_token};if(typeof IS_DOCKER==="undefined"&&typeof IS_PROCESS_SERVER==="undefined"&&!glb.IS_WORKER){STUDIO_PEER_CONN_SEND_METHOD(watch_obj)}else{func.utils.post_back_to_client(SESSION_ID,"send_watch_to_studio_websocket",_session.worker_id,watch_obj)}}};export const log=function(SESSION_ID,node_idP,jsonP){if(typeof IS_PROCESS_SERVER!=="undefined")return;var _session=SESSION_OBJ[SESSION_ID];if(glb.DEBUG_MODE){if(jsonP.error||jsonP.warning){var desc=jsonP.action+(typeof jsonP.prop!=="undefined"?"Prop: "+jsonP.prop.toString():"")+(typeof jsonP.details!=="undefined"&&jsonP.details!==jsonP.prop.toString()?" Result: "+jsonP.details.toString():"");if(jsonP.error){if(!glb.IS_WORKER)func.utils.alerts.toast(SESSION_ID,typeof jsonP.error!=="boolean"?jsonP.error:"Error",desc,"error");if(typeof jsonP.error!=="boolean")desc=jsonP.error+": "+desc;console.info("%c Error: "+desc,"color: red; font-weight: bold;",jsonP)}if(jsonP.warning){if(!glb.IS_WORKER)func.utils.alerts.toast(SESSION_ID,typeof jsonP.warning!=="boolean"?jsonP.warning:"Warning",desc,"warning");if(typeof jsonP.warning!=="boolean")desc=jsonP.warning+": "+desc;console.info("%c Warring: "+desc,"color: orange; font-weight: bold;",jsonP)}}}if(jsonP.error||glb.TRACE_ON){var d=new Date;var ms=d.getMilliseconds();var t=_.padStart((d.getHours()+1).toString(),2)+":"+_.padStart((d.getMinutes()+1).toString(),2)+":"+_.padStart(d.getSeconds().toString(),2)+":"+_.padStart(ms.toString(),3);var json_new=_.assignIn({node_id:node_idP,time:t},jsonP);if(glb.DEBUG_MODE){write(SESSION_ID,json_new)}if(glb.TRACE_ON){let obj={source:"runtime",service:"trace",client_id_from:_session.SYS_GLOBAL_OBJ_CLIENT_INFO.fingerprint,client_id_to:glb.TRACE_CLIENT_ID,data:json_new}}}};export const write=function(SESSION_ID,logP){var _session=SESSION_OBJ[SESSION_ID];const obj={service:"debug_log",data:{data:logP},id:STUDIO_WEBSOCKET_CONNECTION_ID,session_id:SESSION_ID,uid:_session.USR_OBJ._id,source:"runtime",app_id:_session.app_id,gtp_token:_session.gtp_token,app_token:_session.app_token,ts:Date.now()};if(_session.engine_mode==="live_preview"){if(typeof IS_DOCKER==="undefined"&&typeof IS_PROCESS_SERVER==="undefined"&&!glb.IS_WORKER){if(STUDIO_PEER_CONN_SEND_METHOD)STUDIO_PEER_CONN_SEND_METHOD(obj)}else if(glb.IS_WORKER){func.utils.post_back_to_client(SESSION_ID,"write_debug_log",_session.worker_id,obj)}}else{console.log(logP)}};export const read_command=async function(data){glb.DEBUG_INFO_OBJ.command=data;if(!glb.DEBUG_INFO_OBJ.command)return;if(glb.DEBUG_INFO_OBJ.command.log==="stop"){const module=await func.common.get_module(SESSION_ID,"xuda-live-preview-module.esm.js");module.send_STUDIO_WEBSOCKET(SESSION_ID,"close");window.close();return}$.each(WEB_WORKER[SESSION_ID],function(key,val){if(RUNTIME_SERVER_WEBSOCKET&&RUNTIME_SERVER_WEBSOCKET_CONNECTED&&(!_session.opt.app_computing_mode||_session.opt.app_computing_mode==="server")){var obj1={service:"update_debug_info",data:glb.DEBUG_INFO_OBJ,id:key};WEB_WORKER[SESSION_ID][key].worker.emit("message",obj1)}else{WEB_WORKER[SESSION_ID][key].worker.postMessage({service:"update_debug_info",data:glb.DEBUG_INFO_OBJ,id:key})}})};
1
+ export const watch=function(SESSION_ID,key,type,info,result,condition,not_executed){if(!glb.DEBUG_MODE)return;var _session=SESSION_OBJ[SESSION_ID];if(!glb?.DEBUG_INFO_OBJ?.command?.watch?.[key])return;var obj=glb.DEBUG_INFO_OBJ.command.watch[key];if(!obj)return;if(obj.type===type){var result_str="";if(typeof result!=="object"){result_str=" -> "+result}var cond_label="";if(condition)cond_label="Condition:";else condition="";if(!not_executed){console.info("%c Watch: "+obj.name+result_str,"color: dark-gray; font-weight: bold;",info,typeof result==="object"?result:"",cond_label,condition)}else{console.info("%c Watch: "+obj.name+result_str,"color: gray; font-weight: normal;",info,typeof result==="object"?result:"",cond_label,condition,"- NOT EXECUTED !!")}const watch_obj={service:"watch_log",data:{name:obj.name,type:type,info:info,result:result,condition:condition,not_executed:not_executed},id:STUDIO_WEBSOCKET_CONNECTION_ID,uid:_session.USR_OBJ._id,source:"runtime",app_id:_session.app_id,gtp_token:_session.gtp_token,app_token:_session.app_token};if(typeof IS_DOCKER==="undefined"&&typeof IS_PROCESS_SERVER==="undefined"&&!glb.IS_WORKER){STUDIO_PEER_CONN_SEND_METHOD(watch_obj)}else{func.utils.post_back_to_client(SESSION_ID,"send_watch_to_studio_websocket",_session.worker_id,watch_obj)}}};export const log=function(SESSION_ID,node_idP,jsonP){if(typeof IS_PROCESS_SERVER!=="undefined")return;var _session=SESSION_OBJ[SESSION_ID];if(glb.DEBUG_MODE){if(jsonP.error||jsonP.warning){var desc=jsonP.action+(typeof jsonP.prop!=="undefined"?"Prop: "+jsonP.prop.toString():"")+(typeof jsonP.details!=="undefined"&&jsonP.details!==jsonP.prop.toString()?" Result: "+jsonP.details.toString():"");if(jsonP.error){if(!glb.IS_WORKER)func.utils.alerts.toast(SESSION_ID,typeof jsonP.error!=="boolean"?jsonP.error:"Error",desc,"error");if(typeof jsonP.error!=="boolean")desc=jsonP.error+": "+desc;console.info("%c Error: "+desc,"color: red; font-weight: bold;",jsonP)}if(jsonP.warning){if(!glb.IS_WORKER)func.utils.alerts.toast(SESSION_ID,typeof jsonP.warning!=="boolean"?jsonP.warning:"Warning",desc,"warning");if(typeof jsonP.warning!=="boolean")desc=jsonP.warning+": "+desc;console.info("%c Warring: "+desc,"color: orange; font-weight: bold;",jsonP)}}}if(jsonP.error||glb.TRACE_ON){var d=new Date;var ms=d.getMilliseconds();var t=String((d.getHours()+1).toString()).padStart(2)+":"+String((d.getMinutes()+1).toString()).padStart(2)+":"+String(d.getSeconds().toString()).padStart(2)+":"+String(ms.toString()).padStart(3);var json_new=Object.assign({node_id:node_idP,time:t},jsonP);if(glb.DEBUG_MODE){write(SESSION_ID,json_new)}if(glb.TRACE_ON){let obj={source:"runtime",service:"trace",client_id_from:_session.SYS_GLOBAL_OBJ_CLIENT_INFO.fingerprint,client_id_to:glb.TRACE_CLIENT_ID,data:json_new}}}};export const write=function(SESSION_ID,logP){var _session=SESSION_OBJ[SESSION_ID];const obj={service:"debug_log",data:{data:logP},id:STUDIO_WEBSOCKET_CONNECTION_ID,session_id:SESSION_ID,uid:_session.USR_OBJ._id,source:"runtime",app_id:_session.app_id,gtp_token:_session.gtp_token,app_token:_session.app_token,ts:Date.now()};if(_session.engine_mode==="live_preview"){if(typeof IS_DOCKER==="undefined"&&typeof IS_PROCESS_SERVER==="undefined"&&!glb.IS_WORKER){if(STUDIO_PEER_CONN_SEND_METHOD)STUDIO_PEER_CONN_SEND_METHOD(obj)}else if(glb.IS_WORKER){func.utils.post_back_to_client(SESSION_ID,"write_debug_log",_session.worker_id,obj)}}else{console.log(logP)}};export const read_command=async function(data){glb.DEBUG_INFO_OBJ.command=data;if(!glb.DEBUG_INFO_OBJ.command)return;if(glb.DEBUG_INFO_OBJ.command.log==="stop"){const module=await func.common.get_module(SESSION_ID,"xuda-live-preview-module.esm.js");module.send_STUDIO_WEBSOCKET(SESSION_ID,"close");window.close();return}Object.entries(WEB_WORKER[SESSION_ID]||{}).forEach(function([key,val]){if(RUNTIME_SERVER_WEBSOCKET&&RUNTIME_SERVER_WEBSOCKET_CONNECTED&&(!_session.opt.app_computing_mode||_session.opt.app_computing_mode==="server")){var obj1={service:"update_debug_info",data:glb.DEBUG_INFO_OBJ,id:key};WEB_WORKER[SESSION_ID][key].worker.emit("message",obj1)}else{WEB_WORKER[SESSION_ID][key].worker.postMessage({service:"update_debug_info",data:glb.DEBUG_INFO_OBJ,id:key})}})};
@@ -136,15 +136,15 @@ export const log = function (SESSION_ID, node_idP, jsonP) {
136
136
  var d = new Date(); //.valueOf();
137
137
  var ms = d.getMilliseconds();
138
138
  var t =
139
- _.padStart((d.getHours() + 1).toString(), 2) +
139
+ String((d.getHours() + 1).toString()).padStart(2) +
140
140
  ":" +
141
- _.padStart((d.getMinutes() + 1).toString(), 2) +
141
+ String((d.getMinutes() + 1).toString()).padStart(2) +
142
142
  ":" +
143
- _.padStart(d.getSeconds().toString(), 2) +
143
+ String(d.getSeconds().toString()).padStart(2) +
144
144
  ":" +
145
- _.padStart(ms.toString(), 3);
145
+ String(ms.toString()).padStart(3);
146
146
 
147
- var json_new = _.assignIn(
147
+ var json_new = Object.assign(
148
148
  {
149
149
  node_id: node_idP,
150
150
  time: t,
@@ -219,7 +219,7 @@ export const read_command = async function (data) {
219
219
  return;
220
220
  }
221
221
 
222
- $.each(WEB_WORKER[SESSION_ID], function (key, val) {
222
+ Object.entries(WEB_WORKER[SESSION_ID] || {}).forEach(function ([key, val]) {
223
223
  if (
224
224
  RUNTIME_SERVER_WEBSOCKET &&
225
225
  RUNTIME_SERVER_WEBSOCKET_CONNECTED &&
@@ -18,19 +18,19 @@ const get_ui_ids = function (SESSION_ID, event_prop) {
18
18
  if (event_prop.selector === '@_THIS') event_prop.selector = elementP;
19
19
  // var ui_ids = [];
20
20
  if (event_prop.selector_type == 'tree_id') {
21
- let $elm = func.UI.utils.find_in_element_data('xuData', $(SESSION_OBJ[SESSION_ID].root_element), 'ui_id', event_prop.selector);
21
+ let $elm = func.UI.utils.find_in_element_data('xuData', func.runtime.ui.as_jquery(SESSION_OBJ[SESSION_ID].root_element), 'ui_id', event_prop.selector);
22
22
  return [
23
23
  {
24
24
  ui_id: event_prop.selector,
25
- tagName: $elm?.data()?.xuData?.node.tagName, //$elm[0]?.tagName?.toLowerCase(),
25
+ tagName: func.runtime.ui.get_data($elm)?.xuData?.node.tagName,
26
26
  },
27
27
  ];
28
28
  }
29
29
 
30
- return _.map($(SESSION_OBJ[SESSION_ID].root_element).find(event_prop.selector), function (val, key) {
30
+ return Array.from(SESSION_OBJ[SESSION_ID].root_element.querySelectorAll(event_prop.selector)).map(function (val, key) {
31
31
  return {
32
- ui_id: $(val)?.data()?.xuData?.ui_id,
33
- tagName: $(val)?.data()?.xuData?.node.tagName, //$(val)[0]?.tagName?.toLowerCase(),
32
+ ui_id: func.runtime.ui.get_data(val, 'xuData')?.ui_id,
33
+ tagName: func.runtime.ui.get_data(val, 'xuData')?.node.tagName,
34
34
  };
35
35
  });
36
36
  };
@@ -95,7 +95,7 @@ const set_info_value = async function (SESSION_ID, value, source, event_prop, re
95
95
 
96
96
  const element_not_found = function (SESSION_ID, dsP, jobNoP, alter_attr, ui_id) {
97
97
  var _session = SESSION_OBJ[SESSION_ID];
98
- if (_.isEmpty(SCREEN_BLOCKER_OBJ)) {
98
+ if (xu_isEmpty(SCREEN_BLOCKER_OBJ)) {
99
99
  // still busy not require alert
100
100
  if (_session.DS_GLB[dsP]) {
101
101
  log_error(SESSION_ID, 'UI element not found', alter_attr + ' > ' + ui_id, null, _session.DS_GLB[dsP].prog_id);
@@ -1 +1 @@
1
- const log_error=function(SESSION_ID,action,descP,detailsP,warning,prog_id){func.utils.debug.log(SESSION_ID,log_nodeId,{module:"event",action:action,source:"",prop:descP,details:detailsP,result:null,error:!warning,warning:warning,fields:null,type:"event",prog_id:prog_id})};const get_ui_ids=function(SESSION_ID,event_prop){if(event_prop.selector==="@_THIS")event_prop.selector=elementP;if(event_prop.selector_type=="tree_id"){let $elm=func.UI.utils.find_in_element_data("xuData",$(SESSION_OBJ[SESSION_ID].root_element),"ui_id",event_prop.selector);return[{ui_id:event_prop.selector,tagName:$elm?.data()?.xuData?.node.tagName}]}return _.map($(SESSION_OBJ[SESSION_ID].root_element).find(event_prop.selector),function(val,key){return{ui_id:$(val)?.data()?.xuData?.ui_id,tagName:$(val)?.data()?.xuData?.node.tagName}})};const get_ui_id=async function(SESSION_ID,dsSession,event_prop,rowP){if(event_prop.selector==="@_THIS")event_prop.selector=elementP;return await func.expression.get(SESSION_ID,event_prop.selector,dsSession,"ui_id",rowP)};const set_info_value=async function(SESSION_ID,value,source,event_prop,resolve){var _session=SESSION_OBJ[SESSION_ID];if(!event_prop.field_return_value){log_error(SESSION_ID,source," Field cannot be empty");return}var fieldId=event_prop.field_return_value.substr(1);if(event_prop.field_return_value.substr(0,1)!=="@"){log_error(SESSION_ID,source,fieldId+" Field not valid");return}var fieldsChanged_arr=[];var rows_changed_arr=[];var returned_ds;const update_ds=async function(dsP,rowIdP){if(!dsP||!_session.DS_GLB[dsP])return;var _ds=_session.DS_GLB[dsP];try{const row_idx=func.common.find_ROWID_idx(_ds,rowIdP);if(_ds.data_feed?.rows?.[row_idx]?.[fieldId])_ds.data_feed.rows[row_idx][fieldId]=value}catch(err){console.error(err)}if(!fieldsChanged_arr.includes(fieldId))fieldsChanged_arr.push(fieldId);if(!rows_changed_arr.includes(rowIdP))rows_changed_arr.push(rowIdP);returned_ds=dsP;const _view_obj=await func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var field_row_id=func.common.find_item_by_key(_view_obj.progFields,"field_id",fieldId)?.id;func.utils.debug.watch(SESSION_ID,_ds.prog_id+"%"+field_row_id,"view_field","Source: "+source,value)};const ret=await func.datasource.get_value(SESSION_ID,fieldId,dsSession,_session.DS_GLB[dsSession].currentRecordId);await update_ds(ret.dsSessionP,ret.currentRecordId);if(returned_ds){var obj={sessionChanged:returned_ds,viewType_target:_session.DS_GLB[returned_ds].viewType,rows_changed:rows_changed_arr,fieldsChanged:fieldsChanged_arr};await func.datasource.update(SESSION_ID,obj);resolve()}};const element_not_found=function(SESSION_ID,dsP,jobNoP,alter_attr,ui_id){var _session=SESSION_OBJ[SESSION_ID];if(_.isEmpty(SCREEN_BLOCKER_OBJ)){if(_session.DS_GLB[dsP]){log_error(SESSION_ID,"UI element not found",alter_attr+" > "+ui_id,null,_session.DS_GLB[dsP].prog_id)}}if(jobNoP){func.events.delete_job(SESSION_ID,jobNoP)}};
1
+ const log_error=function(SESSION_ID,action,descP,detailsP,warning,prog_id){func.utils.debug.log(SESSION_ID,log_nodeId,{module:"event",action:action,source:"",prop:descP,details:detailsP,result:null,error:!warning,warning:warning,fields:null,type:"event",prog_id:prog_id})};const get_ui_ids=function(SESSION_ID,event_prop){if(event_prop.selector==="@_THIS")event_prop.selector=elementP;if(event_prop.selector_type=="tree_id"){let $elm=func.UI.utils.find_in_element_data("xuData",func.runtime.ui.as_jquery(SESSION_OBJ[SESSION_ID].root_element),"ui_id",event_prop.selector);return[{ui_id:event_prop.selector,tagName:func.runtime.ui.get_data($elm)?.xuData?.node.tagName}]}return Array.from(SESSION_OBJ[SESSION_ID].root_element.querySelectorAll(event_prop.selector)).map(function(val,key){return{ui_id:func.runtime.ui.get_data(val,"xuData")?.ui_id,tagName:func.runtime.ui.get_data(val,"xuData")?.node.tagName}})};const get_ui_id=async function(SESSION_ID,dsSession,event_prop,rowP){if(event_prop.selector==="@_THIS")event_prop.selector=elementP;return await func.expression.get(SESSION_ID,event_prop.selector,dsSession,"ui_id",rowP)};const set_info_value=async function(SESSION_ID,value,source,event_prop,resolve){var _session=SESSION_OBJ[SESSION_ID];if(!event_prop.field_return_value){log_error(SESSION_ID,source," Field cannot be empty");return}var fieldId=event_prop.field_return_value.substr(1);if(event_prop.field_return_value.substr(0,1)!=="@"){log_error(SESSION_ID,source,fieldId+" Field not valid");return}var fieldsChanged_arr=[];var rows_changed_arr=[];var returned_ds;const update_ds=async function(dsP,rowIdP){if(!dsP||!_session.DS_GLB[dsP])return;var _ds=_session.DS_GLB[dsP];try{const row_idx=func.common.find_ROWID_idx(_ds,rowIdP);if(_ds.data_feed?.rows?.[row_idx]?.[fieldId])_ds.data_feed.rows[row_idx][fieldId]=value}catch(err){console.error(err)}if(!fieldsChanged_arr.includes(fieldId))fieldsChanged_arr.push(fieldId);if(!rows_changed_arr.includes(rowIdP))rows_changed_arr.push(rowIdP);returned_ds=dsP;const _view_obj=await func.utils.VIEWS_OBJ.get(SESSION_ID,_ds.prog_id);var field_row_id=func.common.find_item_by_key(_view_obj.progFields,"field_id",fieldId)?.id;func.utils.debug.watch(SESSION_ID,_ds.prog_id+"%"+field_row_id,"view_field","Source: "+source,value)};const ret=await func.datasource.get_value(SESSION_ID,fieldId,dsSession,_session.DS_GLB[dsSession].currentRecordId);await update_ds(ret.dsSessionP,ret.currentRecordId);if(returned_ds){var obj={sessionChanged:returned_ds,viewType_target:_session.DS_GLB[returned_ds].viewType,rows_changed:rows_changed_arr,fieldsChanged:fieldsChanged_arr};await func.datasource.update(SESSION_ID,obj);resolve()}};const element_not_found=function(SESSION_ID,dsP,jobNoP,alter_attr,ui_id){var _session=SESSION_OBJ[SESSION_ID];if(xu_isEmpty(SCREEN_BLOCKER_OBJ)){if(_session.DS_GLB[dsP]){log_error(SESSION_ID,"UI element not found",alter_attr+" > "+ui_id,null,_session.DS_GLB[dsP].prog_id)}}if(jobNoP){func.events.delete_job(SESSION_ID,jobNoP)}};
@@ -1 +1 @@
1
- export const cast=function(typeP,valP,report_conversion_error_callback,report_conversion_warn_callback){if(typeof _==="undefined"){console.error("error: _ library not defined in cast");return valP}var ret=valP;const report_conversion_error=function(res){if(report_conversion_error_callback){report_conversion_error_callback(res,typeP,valP)}};const report_conversion_warn=function(res){if(report_conversion_warn_callback){report_conversion_warn_callback(res,typeP,valP)}};switch(typeP){case"boolean":case"bool":const true_bool_opt=["Y",1,true,"TRUE","ON","YES","1"];const false_bool_opt=["N",0,false,"FALSE","OFF","NO","0"];if(true_bool_opt.includes(_.toUpper(valP))){ret=true;break}if(false_bool_opt.includes(_.toUpper(valP))||!valP){ret=false}break;case"number":if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null){ret=0}else{if(typeof valP!=="number"){try{if(typeof valP==="boolean"){ret=valP?1:0}else{ret=_.toNumber(valP)}}catch(e){ret=0;report_conversion_error(0)}}}break;case"string":if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null){ret=""}else{if(typeof valP!=="string"){try{ret=_.toString(valP);report_conversion_warn()}catch(e){ret="";report_conversion_error("blanc")}}}break;case"object":if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null){ret={}}else{if(typeof valP!=="object"){try{if(valP){ret=JSON5.parse(valP)}else{ret={}}}catch(e){try{ret=JSON5.parse(valP)}catch(error){ret={};report_conversion_error("{}")}}}}break;case"array":if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null||valP===""){ret=[]}else{if(!Array.isArray(valP)){try{ret=_.toArray(eval(valP))}catch(e){ret=[];report_conversion_error("[]")}}}break;default:if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null){ret=""}else{if(typeof valP!=="string"){try{ret=valP.toString();report_conversion_warn()}catch(e){ret="";report_conversion_error("blanc")}}}break}return ret};
1
+ export const cast=function(typeP,valP,report_conversion_error_callback,report_conversion_warn_callback){var ret=valP;const report_conversion_error=function(res){if(report_conversion_error_callback){report_conversion_error_callback(res,typeP,valP)}};const report_conversion_warn=function(res){if(report_conversion_warn_callback){report_conversion_warn_callback(res,typeP,valP)}};switch(typeP){case"boolean":case"bool":const true_bool_opt=["Y",1,true,"TRUE","ON","YES","1"];const false_bool_opt=["N",0,false,"FALSE","OFF","NO","0"];if(true_bool_opt.includes(String(valP).toUpperCase())){ret=true;break}if(false_bool_opt.includes(String(valP).toUpperCase())||!valP){ret=false}break;case"number":if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null){ret=0}else{if(typeof valP!=="number"){try{if(typeof valP==="boolean"){ret=valP?1:0}else{ret=Number(valP)}}catch(e){ret=0;report_conversion_error(0)}}}break;case"string":if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null){ret=""}else{if(typeof valP!=="string"){try{ret=String(valP);report_conversion_warn()}catch(e){ret="";report_conversion_error("blanc")}}}break;case"object":if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null){ret={}}else{if(typeof valP!=="object"){try{if(valP){ret=JSON5.parse(valP)}else{ret={}}}catch(e){try{ret=JSON5.parse(valP)}catch(error){ret={};report_conversion_error("{}")}}}}break;case"array":if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null||valP===""){ret=[]}else{if(!Array.isArray(valP)){try{ret=Array.from(eval(valP))}catch(e){ret=[];report_conversion_error("[]")}}}break;default:if(typeof valP==="undefined"||typeof valP==="NaN"||valP===null){ret=""}else{if(typeof valP!=="string"){try{ret=valP.toString();report_conversion_warn()}catch(e){ret="";report_conversion_error("blanc")}}}break}return ret};
@@ -4,11 +4,6 @@ export const cast = function (
4
4
  report_conversion_error_callback,
5
5
  report_conversion_warn_callback
6
6
  ) {
7
- if (typeof _ === "undefined") {
8
- console.error("error: _ library not defined in cast");
9
- return valP;
10
- }
11
-
12
7
  var ret = valP;
13
8
 
14
9
  const report_conversion_error = function (res) {
@@ -26,12 +21,12 @@ export const cast = function (
26
21
  case "bool":
27
22
  const true_bool_opt = ["Y", 1, true, "TRUE", "ON", "YES", "1"];
28
23
  const false_bool_opt = ["N", 0, false, "FALSE", "OFF", "NO", "0"];
29
- if (true_bool_opt.includes(_.toUpper(valP))) {
24
+ if (true_bool_opt.includes(String(valP).toUpperCase())) {
30
25
  ret = true;
31
26
  break;
32
27
  }
33
28
 
34
- if (false_bool_opt.includes(_.toUpper(valP)) || !valP) {
29
+ if (false_bool_opt.includes(String(valP).toUpperCase()) || !valP) {
35
30
  ret = false;
36
31
  }
37
32
 
@@ -50,7 +45,7 @@ export const cast = function (
50
45
  if (typeof valP === "boolean") {
51
46
  ret = valP ? 1 : 0;
52
47
  } else {
53
- ret = _.toNumber(valP);
48
+ ret = Number(valP);
54
49
  }
55
50
  // normal behavior studio always store values as string
56
51
  // report_conversion_warn();
@@ -71,7 +66,7 @@ export const cast = function (
71
66
  } else {
72
67
  if (typeof valP !== "string") {
73
68
  try {
74
- ret = _.toString(valP);
69
+ ret = String(valP);
75
70
  report_conversion_warn();
76
71
  } catch (e) {
77
72
  ret = "";
@@ -117,7 +112,7 @@ export const cast = function (
117
112
  } else {
118
113
  if (!Array.isArray(valP)) {
119
114
  try {
120
- ret = _.toArray(eval(valP));
115
+ ret = Array.from(eval(valP));
121
116
  } catch (e) {
122
117
  ret = [];
123
118
  report_conversion_error("[]");