@xuda.io/runtime-bundle 1.0.561 → 1.0.563

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.
@@ -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){let ids=[];for await(const[key,val]of Object.entries(_ds.data_feed.rows_deleted)){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!=="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.UI.screen.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)});_db.pouch.set_db_replication_from_server(SESSION_ID)};_db.pouch.set_db_replication_from_server=async function(SESSION_ID){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.UI.screen.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||_.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!=="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.UI.screen.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)});_db.pouch.set_db_replication_from_server(SESSION_ID)};_db.pouch.set_db_replication_from_server=async function(SESSION_ID){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.UI.screen.refresh_document_changes_for_realtime_update(SESSION_ID,doc_change)};
@@ -8,12 +8,7 @@ export const init_module = async (e) => {
8
8
  _this.IS_DOCKER = e.IS_DOCKER;
9
9
  _this.IS_API_SERVER = e.IS_API_SERVER;
10
10
  _this.IS_PROCESS_SERVER = e.IS_PROCESS_SERVER;
11
- if (
12
- !_this.xuda_dbs_plugin &&
13
- typeof _this.IS_DOCKER === "undefined" &&
14
- typeof _this.IS_PROCESS_SERVER === "undefined" &&
15
- typeof _this.IS_API_SERVER === "undefined"
16
- ) {
11
+ if (!_this.xuda_dbs_plugin && typeof _this.IS_DOCKER === 'undefined' && typeof _this.IS_PROCESS_SERVER === 'undefined' && typeof _this.IS_API_SERVER === 'undefined') {
17
12
  await init_xuda_dbs_plugin(e.SESSION_ID);
18
13
  }
19
14
  _this.db_replication_store;
@@ -28,26 +23,15 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
28
23
  // const app_id = _this.SESSION_OBJ[SESSION_ID].app_id;
29
24
 
30
25
  var db_driver = await this.get_db_driver(SESSION_ID, dsSessionP);
31
- if (db_driver === "pouchdb" && _this.glb.IS_WORKER) {
32
- var callback_id = _this.func.utils.set_callback_queue(
33
- SESSION_ID,
34
- callbackP
35
- );
36
- var obj = _this.func.utils.clean_returned_datasource(
37
- SESSION_ID,
38
- dsSessionP
39
- );
40
- return _this.func.utils.post_back_to_client(
41
- SESSION_ID,
42
- "execute_local_sava_data",
43
- _this.SESSION_OBJ[SESSION_ID].worker_id,
44
- {
45
- ds_obj: obj,
46
- dsSessionP: dsSessionP,
47
- keyP: keyP,
48
- callback_id: callback_id,
49
- }
50
- );
26
+ if (db_driver === 'pouchdb' && _this.glb.IS_WORKER) {
27
+ var callback_id = _this.func.utils.set_callback_queue(SESSION_ID, callbackP);
28
+ var obj = _this.func.utils.clean_returned_datasource(SESSION_ID, dsSessionP);
29
+ return _this.func.utils.post_back_to_client(SESSION_ID, 'execute_local_sava_data', _this.SESSION_OBJ[SESSION_ID].worker_id, {
30
+ ds_obj: obj,
31
+ dsSessionP: dsSessionP,
32
+ keyP: keyP,
33
+ callback_id: callback_id,
34
+ });
51
35
  }
52
36
 
53
37
  _db.save_indicator(SESSION_ID, true);
@@ -60,36 +44,29 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
60
44
 
61
45
  if (!dataSourceTableId) {
62
46
  _db.save_indicator(SESSION_ID, false);
63
- _this.func.utils.alerts.invoke(SESSION_ID, "system_msg", "SYS_MSG_0105"); //Table entry missing
47
+ _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0105'); //Table entry missing
64
48
  return;
65
49
  }
66
50
 
67
51
  var db_driver = await _db.get_db_driver(SESSION_ID, dsSessionP);
68
52
 
69
- let table_ret = await _this.func.utils.FILES_OBJ.get(
70
- SESSION_ID,
71
- dataSourceTableId
72
- );
53
+ let table_ret = await _this.func.utils.FILES_OBJ.get(SESSION_ID, dataSourceTableId);
73
54
 
74
55
  if (!table_ret.tableIndexes || _.isEmpty(table_ret.tableIndexes)) {
75
56
  _db.save_indicator(SESSION_ID, false);
76
- _this.func.utils.alerts.invoke(SESSION_ID, "system_msg", "SYS_MSG_0104"); //index missing
57
+ _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0104'); //index missing
77
58
  return;
78
59
  }
79
60
 
80
61
  if (!_ds.data_feed.rows) {
81
- return console.error("data_feed rows is empty");
62
+ return console.error('data_feed rows is empty');
82
63
  }
83
64
 
84
65
  const clean_virtual_fields = async function (table_id, data) {
85
66
  let table_obj = await func.utils.VIEWS_OBJ.get(SESSION_ID, table_id);
86
67
  var data_obj = {};
87
68
  for (const [key, val] of Object.entries(data)) {
88
- const _tableFieldsObj = func.common.find_item_by_key(
89
- table_obj.tableFields,
90
- "field_id",
91
- key
92
- );
69
+ const _tableFieldsObj = func.common.find_item_by_key(table_obj.tableFields, 'field_id', key);
93
70
  if (_tableFieldsObj) {
94
71
  data_obj[key] = val;
95
72
  }
@@ -98,13 +75,9 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
98
75
  };
99
76
  let save_ret;
100
77
  // component
101
- if (_view_obj.properties.menuType === "component") {
102
- if (_view_obj?.properties?.rwMode !== "U") {
103
- return _this.func.utils.alerts.invoke(
104
- SESSION_ID,
105
- "system_msg",
106
- "SYS_MSG_0126"
107
- ); //Program Read Only
78
+ if (_view_obj.properties.menuType === 'component') {
79
+ if (_view_obj?.properties?.rwMode !== 'U') {
80
+ return _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0126'); //Program Read Only
108
81
  }
109
82
 
110
83
  // check if rows exist
@@ -114,25 +87,15 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
114
87
  let data = { prog_id: _ds.prog_id };
115
88
  if (_ds.data_feed.rows_added?.length) {
116
89
  if (!_view_obj?.properties?.allowCreate) {
117
- _this.func.utils.alerts.invoke(
118
- SESSION_ID,
119
- "system_msg",
120
- "SYS_MSG_0120"
121
- ); //Create Mode Denied
90
+ _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0120'); //Create Mode Denied
122
91
  }
123
92
 
124
93
  _.forEach(_ds.data_feed.rows_added, function (val, key) {
125
94
  data[key] = val;
126
95
  });
127
96
 
128
- delete _ds.data_feed.rows_added["newRecord"];
129
- save_ret = await _this.func.common.db(
130
- SESSION_ID,
131
- "dbs_create",
132
- data,
133
- {},
134
- dsSessionP
135
- );
97
+ delete _ds.data_feed.rows_added['newRecord'];
98
+ save_ret = await _this.func.common.db(SESSION_ID, 'dbs_create', data, {}, dsSessionP);
136
99
  refresh_document_changes_for_realtime_update(SESSION_ID, {
137
100
  row_id: save_ret.data.id,
138
101
  table_id: dataSourceTableId,
@@ -143,26 +106,19 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
143
106
  // delete
144
107
  //===============
145
108
  if (_ds.data_feed.rows_deleted?.length) {
146
- let ids = [];
147
- for await (const [key, val] of Object.entries(
148
- _ds.data_feed.rows_deleted
149
- )) {
150
- ids.push(val);
109
+ data.table_id = _ds._dataSourceTableId;
110
+ data.ids = [];
111
+ for await (const [key, val] of Object.entries(_ds.data_feed.rows_deleted)) {
112
+ data.ids.push(val);
151
113
 
152
114
  try {
153
115
  const row_idx = func.common.find_ROWID_idx(_ds, val);
154
116
 
155
117
  delete _ds.data_feed.rows[row_idx];
156
- } catch (error) { }
118
+ } catch (error) {}
157
119
  }
158
120
  _ds.data_feed.rows_deleted = [];
159
- save_ret = await _this.func.common.db(
160
- SESSION_ID,
161
- "dbs_delete",
162
- data,
163
- {},
164
- dsSessionP
165
- );
121
+ save_ret = await _this.func.common.db(SESSION_ID, 'dbs_delete', data, {}, dsSessionP);
166
122
  refresh_document_changes_for_realtime_update(SESSION_ID, {
167
123
  row_id: save_ret.data?.id?.[0],
168
124
  table_id: dataSourceTableId,
@@ -173,56 +129,40 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
173
129
  // update
174
130
  //===============
175
131
  if (_ds.data_feed.rows_changed?.length) {
176
- for await (const [key, row_id] of Object.entries(
177
- _ds.data_feed.rows_changed
178
- )) {
179
- if (row_id === "datasource_main") continue;
132
+ for await (const [key, row_id] of Object.entries(_ds.data_feed.rows_changed)) {
133
+ if (row_id === 'datasource_main') continue;
180
134
 
181
135
  let data = { prog_id: _ds.prog_id };
182
136
 
183
137
  try {
184
138
  const row_idx = func.common.find_ROWID_idx(_ds, row_id);
185
139
 
186
- data.table_data = await clean_virtual_fields(
187
- _ds._dataSourceTableId,
188
- _ds.data_feed.rows[row_idx]
189
- );
140
+ data.table_data = await clean_virtual_fields(_ds._dataSourceTableId, _ds.data_feed.rows[row_idx]);
190
141
  } catch (err) {
191
142
  console.error(err);
192
143
  }
193
144
 
194
145
  data.table_id = _ds._dataSourceTableId;
195
146
  data.row_id = row_id;
196
- save_ret = await _this.func.common.db(
197
- SESSION_ID,
198
- "dbs_update",
199
- data,
200
- {},
201
- dsSessionP
202
- );
147
+ save_ret = await _this.func.common.db(SESSION_ID, 'dbs_update', data, {}, dsSessionP);
203
148
  refresh_document_changes_for_realtime_update(SESSION_ID, {
204
149
  row_id: save_ret.data?.id?.[0],
205
150
  table_id: dataSourceTableId,
206
151
  });
207
-
208
152
  }
209
153
  return save_ret;
210
154
  }
211
155
  return;
212
156
  }
213
157
  // alert Program Read Only
214
- if (_view_obj.properties.menuType !== "set_data") {
215
- return _this.func.utils.alerts.invoke(
216
- SESSION_ID,
217
- "system_msg",
218
- "SYS_MSG_0126"
219
- ); //Program Read Only
158
+ if (_view_obj.properties.menuType !== 'set_data') {
159
+ return _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0126'); //Program Read Only
220
160
  }
221
161
 
222
162
  // set_data
223
163
  var mode = _ds.set_mode; //screenInfo.crudMode;
224
164
 
225
- if (!mode || mode === "U") {
165
+ if (!mode || mode === 'U') {
226
166
  let data = { prog_id: _ds.prog_id };
227
167
  data.table_id = _ds._dataSourceTableId;
228
168
  data.row_id = _ds.currentRecordId;
@@ -231,55 +171,32 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
231
171
  try {
232
172
  const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
233
173
 
234
- data.table_data = await clean_virtual_fields(
235
- _ds._dataSourceTableId,
236
- _ds.data_feed.rows[row_idx]
237
- );
174
+ data.table_data = await clean_virtual_fields(_ds._dataSourceTableId, _ds.data_feed.rows[row_idx]);
238
175
  } catch (err) {
239
176
  console.error(err);
240
177
  }
241
178
 
242
- save_ret = await _this.func.common.db(
243
- SESSION_ID,
244
- "dbs_update",
245
- data,
246
- {},
247
- dsSessionP
248
- );
179
+ save_ret = await _this.func.common.db(SESSION_ID, 'dbs_update', data, {}, dsSessionP);
249
180
  refresh_document_changes_for_realtime_update(SESSION_ID, {
250
181
  row_id: save_ret.data?.id?.[0],
251
182
  table_id: dataSourceTableId,
252
183
  });
253
184
  }
254
- if (mode === "D") {
185
+ if (mode === 'D') {
255
186
  // _id = _ds.key._id;
256
187
  let data = { prog_id: _ds.prog_id };
257
188
  data.table_id = _ds._dataSourceTableId;
258
189
  data.ids = [_ds.currentRecordId];
259
- save_ret = await _this.func.common.db(
260
- SESSION_ID,
261
- "dbs_delete",
262
- data,
263
- {},
264
- dsSessionP
265
- );
190
+ save_ret = await _this.func.common.db(SESSION_ID, 'dbs_delete', data, {}, dsSessionP);
266
191
  refresh_document_changes_for_realtime_update(SESSION_ID, {
267
192
  row_id: save_ret.data?.id?.[0],
268
193
  table_id: dataSourceTableId,
269
194
  });
270
195
  return save_ret;
271
196
  }
272
- if (mode === "C") {
273
- if (
274
- _view_obj.properties.crudMode !== "C" &&
275
- _view_obj.properties.crudMode === "U" &&
276
- !_view_obj.properties.allowCreate
277
- ) {
278
- return _this.func.utils.alerts.invoke(
279
- SESSION_ID,
280
- "system_msg",
281
- "SYS_MSG_0120"
282
- ); //Create Mode Denied
197
+ if (mode === 'C') {
198
+ if (_view_obj.properties.crudMode !== 'C' && _view_obj.properties.crudMode === 'U' && !_view_obj.properties.allowCreate) {
199
+ return _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0120'); //Create Mode Denied
283
200
  }
284
201
 
285
202
  let data = { prog_id: _ds.prog_id };
@@ -289,13 +206,7 @@ _db.save_data = async function (SESSION_ID, dsSessionP, keyP) {
289
206
  const row_idx = func.common.find_ROWID_idx(_ds, _ds.currentRecordId);
290
207
 
291
208
  data.table_data = _ds.data_feed.rows[row_idx];
292
- save_ret = await _this.func.common.db(
293
- SESSION_ID,
294
- "dbs_create",
295
- data,
296
- {},
297
- dsSessionP
298
- );
209
+ save_ret = await _this.func.common.db(SESSION_ID, 'dbs_create', data, {}, dsSessionP);
299
210
  refresh_document_changes_for_realtime_update(SESSION_ID, {
300
211
  row_id: save_ret.data.id,
301
212
  table_id: dataSourceTableId,
@@ -312,29 +223,19 @@ _db.get_db_driver = async function (SESSION_ID, dsSessionP) {
312
223
 
313
224
  if (dsSessionP) {
314
225
  var _ds = _this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP];
315
- let _view_obj = await _this.func.utils.VIEWS_OBJ.get(
316
- SESSION_ID,
317
- _ds.prog_id
318
- );
226
+ let _view_obj = await _this.func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
319
227
  var dataSourceTableId = _view_obj?.progDataSource?.dataSourceTableId;
320
228
 
321
229
  if (!dataSourceTableId) {
322
- _this.func.utils.alerts.invoke(SESSION_ID, "system_msg", "SYS_MSG_0105"); //Table repository missing
230
+ _this.func.utils.alerts.invoke(SESSION_ID, 'system_msg', 'SYS_MSG_0105'); //Table repository missing
323
231
  return;
324
232
  }
325
- let file_ret = await _this.func.utils.FILES_OBJ.get(
326
- SESSION_ID,
327
- dataSourceTableId
328
- );
329
- db_driver = file_ret.properties.db_driver || "xuda";
233
+ let file_ret = await _this.func.utils.FILES_OBJ.get(SESSION_ID, dataSourceTableId);
234
+ db_driver = file_ret.properties.db_driver || 'xuda';
330
235
  }
331
236
 
332
- if (
333
- _this.SESSION_OBJ[SESSION_ID].engine_mode === "live_preview" &&
334
- !db_driver &&
335
- _this.SESSION_OBJ[SESSION_ID].app_id === "temp"
336
- ) {
337
- db_driver = "pouchdb";
237
+ if (_this.SESSION_OBJ[SESSION_ID].engine_mode === 'live_preview' && !db_driver && _this.SESSION_OBJ[SESSION_ID].app_id === 'temp') {
238
+ db_driver = 'pouchdb';
338
239
  }
339
240
 
340
241
  return db_driver;
@@ -360,18 +261,15 @@ _db.get_query = async function (
360
261
  filterModelUserMongo,
361
262
  filterModelUserSql,
362
263
  },
363
- dataSourceFilterModelType = "index",
364
- total_fields_info
264
+ dataSourceFilterModelType = 'index',
265
+ total_fields_info,
365
266
  ) {
366
267
  const get_fields = async function (_ds) {
367
268
  var fields = [];
368
- const _view_obj = await _this.func.utils.VIEWS_OBJ.get(
369
- SESSION_ID,
370
- _ds.prog_id
371
- );
269
+ const _view_obj = await _this.func.utils.VIEWS_OBJ.get(SESSION_ID, _ds.prog_id);
372
270
  if (_view_obj.progFields) {
373
271
  for (let val of _view_obj.progFields) {
374
- if (val.data.type === "table") {
272
+ if (val.data.type === 'table') {
375
273
  fields.push(val.data.field_id);
376
274
  }
377
275
  }
@@ -388,26 +286,19 @@ _db.get_query = async function (
388
286
  var query_string;
389
287
  if (queryP.indexId) {
390
288
  if (countP && queryP.desc) {
391
- query_string = `startkey=${JSON.stringify(
392
- queryP.endkey
393
- )}&endkey=${JSON.stringify(queryP.startkey)}`;
289
+ query_string = `startkey=${JSON.stringify(queryP.endkey)}&endkey=${JSON.stringify(queryP.startkey)}`;
394
290
  } else {
395
- query_string = `startkey=${JSON.stringify(
396
- queryP.startkey
397
- )}&endkey=${JSON.stringify(queryP.endkey)}&desc=${queryP.desc}`;
291
+ query_string = `startkey=${JSON.stringify(queryP.startkey)}&endkey=${JSON.stringify(queryP.endkey)}&desc=${queryP.desc}`;
398
292
  }
399
293
  } else {
400
- query_string = "key=" + queryP.table_id;
294
+ query_string = 'key=' + queryP.table_id;
401
295
  }
402
296
  var db_driver = await _db.get_db_driver(SESSION_ID, dsSessionP);
403
297
  var fields_arr = await get_fields(ds);
404
298
 
405
299
  const response = {
406
300
  success: async function (json) {
407
- if (
408
- dsSessionP &&
409
- !_this.SESSION_OBJ[SESSION_ID]?.DS_GLB?.[dsSessionP]
410
- ) {
301
+ if (dsSessionP && !_this.SESSION_OBJ[SESSION_ID]?.DS_GLB?.[dsSessionP]) {
411
302
  return;
412
303
  }
413
304
 
@@ -444,7 +335,7 @@ _db.get_query = async function (
444
335
  if (dsSessionP)
445
336
  _this.func.utils.debug.log(SESSION_ID, ds._dataSourceTableId, {
446
337
  module: ds.viewModule,
447
- action: "read",
338
+ action: 'read',
448
339
  prop: sourceP,
449
340
  details: query_string,
450
341
  result: data.rows ? data.rows.length : 0,
@@ -452,7 +343,7 @@ _db.get_query = async function (
452
343
  source: viewSourceDescP,
453
344
  json: data,
454
345
  fields: _.assignIn(ds.locate_from, ds.locate_to),
455
- type: "file",
346
+ type: 'file',
456
347
  dsSession: dsSessionP,
457
348
  });
458
349
 
@@ -462,30 +353,21 @@ _db.get_query = async function (
462
353
  if (dsSessionP && !ds) return;
463
354
  if (dsSessionP) {
464
355
  var err_msg = err && err.data ? err.data : err;
465
- _this.func.utils.debug.log(
466
- SESSION_ID,
467
- _this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP]._dataSourceTableId,
468
- {
469
- module: ds.viewModule,
470
- action: "read",
471
- prop: sourceP,
472
- details: query_string,
473
- result: null,
474
- error: err_msg,
475
- source: viewSourceDescP,
476
- json: null,
477
- fields: _.assignIn(ds.locate_from, ds.locate_to),
478
- type: "file",
479
- dsSession: dsSessionP,
480
- }
481
- );
356
+ _this.func.utils.debug.log(SESSION_ID, _this.SESSION_OBJ[SESSION_ID].DS_GLB[dsSessionP]._dataSourceTableId, {
357
+ module: ds.viewModule,
358
+ action: 'read',
359
+ prop: sourceP,
360
+ details: query_string,
361
+ result: null,
362
+ error: err_msg,
363
+ source: viewSourceDescP,
364
+ json: null,
365
+ fields: _.assignIn(ds.locate_from, ds.locate_to),
366
+ type: 'file',
367
+ dsSession: dsSessionP,
368
+ });
482
369
  }
483
- _this.func.utils.debug_report(
484
- SESSION_ID,
485
- "datasource couchDB query " + sourceP,
486
- err_msg,
487
- "E"
488
- );
370
+ _this.func.utils.debug_report(SESSION_ID, 'datasource couchDB query ' + sourceP, err_msg, 'E');
489
371
 
490
372
  return {
491
373
  rows: [],
@@ -517,7 +399,7 @@ _db.get_query = async function (
517
399
  data.endkey = JSON.stringify(queryP.endkey);
518
400
 
519
401
  if (countP && queryP.desc) {
520
- data.sortOrder = "asc";
402
+ data.sortOrder = 'asc';
521
403
  data.startkey = JSON.stringify(queryP.endkey);
522
404
  data.endkey = JSON.stringify(queryP.startkey);
523
405
  }
@@ -540,9 +422,7 @@ _db.get_query = async function (
540
422
  data.filterModelSql = JSON.stringify(filterModel.filterModelSql);
541
423
  }
542
424
  if (!_.isEmpty(filterModel?.filterModelUserMongo)) {
543
- data.filterModelUserMongo = JSON.stringify(
544
- filterModel.filterModelUserMongo
545
- );
425
+ data.filterModelUserMongo = JSON.stringify(filterModel.filterModelUserMongo);
546
426
  }
547
427
  if (filterModel?.filterModelUserSql) {
548
428
  data.filterModelUserSql = JSON.stringify(filterModel.filterModelUserSql);
@@ -558,13 +438,7 @@ _db.get_query = async function (
558
438
  }
559
439
 
560
440
  try {
561
- const json = await _this.func.common.db(
562
- SESSION_ID,
563
- "dbs_read",
564
- data,
565
- { node: true },
566
- dsSessionP
567
- );
441
+ const json = await _this.func.common.db(SESSION_ID, 'dbs_read', data, { node: true }, dsSessionP);
568
442
  return await response.success(json);
569
443
  } catch (e) {
570
444
  return await response.error(e?.message || e?.data || e);
@@ -572,39 +446,24 @@ _db.get_query = async function (
572
446
  };
573
447
 
574
448
  var db_driver = await this.get_db_driver(SESSION_ID, dsSessionP);
575
- if (
576
- db_driver === "pouchdb" &&
577
- _this.glb.IS_WORKER &&
578
- !_this.SESSION_OBJ[SESSION_ID].engine_mode === "live_preview"
579
- ) {
580
- var callback_id = _this.func.utils.set_callback_queue(
581
- SESSION_ID,
582
- callbackP
583
- );
584
- var obj = _this.func.utils.clean_returned_datasource(
585
- SESSION_ID,
586
- dsSessionP
587
- );
588
- return _this.func.utils.post_back_to_client(
589
- SESSION_ID,
590
- "execute_local_db_query",
591
- _this.SESSION_OBJ[SESSION_ID].worker_id,
592
- {
593
- ds_obj: obj,
594
- dsSessionP,
595
- table_id,
596
- queryP,
597
- dsSessionP,
598
- viewSourceDescP,
599
- sourceP,
600
- reduceP,
601
- skipP,
602
- limitP,
603
- countP,
604
- idsP,
605
- callback_id,
606
- }
607
- );
449
+ if (db_driver === 'pouchdb' && _this.glb.IS_WORKER && !_this.SESSION_OBJ[SESSION_ID].engine_mode === 'live_preview') {
450
+ var callback_id = _this.func.utils.set_callback_queue(SESSION_ID, callbackP);
451
+ var obj = _this.func.utils.clean_returned_datasource(SESSION_ID, dsSessionP);
452
+ return _this.func.utils.post_back_to_client(SESSION_ID, 'execute_local_db_query', _this.SESSION_OBJ[SESSION_ID].worker_id, {
453
+ ds_obj: obj,
454
+ dsSessionP,
455
+ table_id,
456
+ queryP,
457
+ dsSessionP,
458
+ viewSourceDescP,
459
+ sourceP,
460
+ reduceP,
461
+ skipP,
462
+ limitP,
463
+ countP,
464
+ idsP,
465
+ callback_id,
466
+ });
608
467
  }
609
468
  return await run_local();
610
469
  };
@@ -667,20 +526,19 @@ _db.save_indicator = function (SESSION_ID, stateP) {
667
526
  const init_xuda_dbs_plugin = async function (SESSION_ID) {
668
527
  var _session = _this.SESSION_OBJ[SESSION_ID];
669
528
 
670
- const plugin_name = "@xuda.io/xuda-dbs-plugin-xuda";
529
+ const plugin_name = '@xuda.io/xuda-dbs-plugin-xuda';
671
530
 
672
531
  const get_path = function (plugin_name, resource) {
673
- var path = `https://${_session.domain}/plugins/${plugin_name}${resource ? "/" + resource : ""
674
- }?app_id=${_session.app_id}`;
532
+ var path = `https://${_session.domain}/plugins/${plugin_name}${resource ? '/' + resource : ''}?app_id=${_session.app_id}`;
675
533
 
676
534
  return path;
677
535
  };
678
536
 
679
537
  try {
680
- _this.xuda_dbs_plugin = await import(get_path(plugin_name, "studio.mjs"));
538
+ _this.xuda_dbs_plugin = await import(get_path(plugin_name, 'studio.mjs'));
681
539
 
682
540
  const db = await func.utils.connect_pouchdb(SESSION_ID);
683
- await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, "create_design", { db });
541
+ await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'create_design', { db });
684
542
  } catch (err) {
685
543
  return console.error(err.message);
686
544
  }
@@ -691,10 +549,7 @@ _db.call_pouch_xuda_dbs_plugin = async function (SESSION_ID, method, params) {
691
549
  try {
692
550
  // var table_obj = {};
693
551
  if (params.e) {
694
- params.table_obj = await func.utils.DOCS_OBJ.get(
695
- SESSION_ID,
696
- params.e.table_id
697
- );
552
+ params.table_obj = await func.utils.DOCS_OBJ.get(SESSION_ID, params.e.table_id);
698
553
  }
699
554
 
700
555
  await _this.xuda_dbs_plugin[method](params, resolve, reject);
@@ -706,29 +561,26 @@ _db.call_pouch_xuda_dbs_plugin = async function (SESSION_ID, method, params) {
706
561
  _db.pouch = {};
707
562
  _db.pouch.dbs_read = async function (SESSION_ID, e) {
708
563
  const db = await func.utils.connect_pouchdb(SESSION_ID);
709
- return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, "read", { db, e });
564
+ return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'read', { db, e });
710
565
  };
711
566
  _db.pouch.dbs_create = async function (SESSION_ID, e) {
712
567
  const db = await func.utils.connect_pouchdb(SESSION_ID);
713
- return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, "create", { db, e });
568
+ return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'create', { db, e });
714
569
  };
715
570
  _db.pouch.dbs_delete = async function (SESSION_ID, e) {
716
571
  const db = await func.utils.connect_pouchdb(SESSION_ID);
717
- return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, "del", { db, e });
572
+ return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'del', { db, e });
718
573
  };
719
574
  _db.pouch.dbs_update = async function (SESSION_ID, e) {
720
575
  const db = await func.utils.connect_pouchdb(SESSION_ID);
721
- return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, "update", { db, e });
576
+ return await _db.call_pouch_xuda_dbs_plugin(SESSION_ID, 'update', { db, e });
722
577
  };
723
578
 
724
579
  _db.pouch.init_db_replication = async function (SESSION_ID) {
725
580
  const db = await func.utils.connect_pouchdb(SESSION_ID);
726
581
  var _session = _this.SESSION_OBJ[SESSION_ID];
727
582
 
728
- if (
729
- _session.url_params.avoid_local ||
730
- (_session.engine_mode !== "live_preview" && !_session.opt.enable_offline)
731
- ) {
583
+ if (_session.url_params.avoid_local || (_session.engine_mode !== 'live_preview' && !_session.opt.enable_offline)) {
732
584
  return;
733
585
  }
734
586
 
@@ -739,7 +591,7 @@ _db.pouch.init_db_replication = async function (SESSION_ID) {
739
591
  live: true,
740
592
  include_docs: true,
741
593
  })
742
- .on("change", function (change) {
594
+ .on('change', function (change) {
743
595
  // handle change
744
596
 
745
597
  if (!change.doc.udfData) return;
@@ -749,11 +601,11 @@ _db.pouch.init_db_replication = async function (SESSION_ID) {
749
601
  table_id: change.doc.udfData.udffileid,
750
602
  });
751
603
  })
752
- .on("complete", function (info) {
604
+ .on('complete', function (info) {
753
605
  // changes() was canceled
754
- console.log("complete", info);
606
+ console.log('complete', info);
755
607
  })
756
- .on("error", function (err) {
608
+ .on('error', function (err) {
757
609
  console.error(err);
758
610
  });
759
611
 
@@ -763,42 +615,41 @@ _db.pouch.init_db_replication = async function (SESSION_ID) {
763
615
  const db_name = APP_OBJ[_session.app_id].app_db_name;
764
616
  const rep = db.replicate
765
617
  .to(`https://${_session.domain}/db/${db_name}`, {
766
- selector: { docType: "database" },
618
+ selector: { docType: 'database' },
767
619
  live: true,
768
620
  retry: true,
769
621
  fetch: function (url, opts) {
770
622
  if (_session.gtp_token) {
771
- opts.headers.set("xu-gtp-token", _session.gtp_token);
623
+ opts.headers.set('xu-gtp-token', _session.gtp_token);
772
624
  }
773
- if (_session.app_token)
774
- opts.headers.set("xu-app-token", _session.app_token);
625
+ if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
775
626
  {
776
- opts.headers.set("xu-db", db_name);
627
+ opts.headers.set('xu-db', db_name);
777
628
  }
778
629
  return PouchDB.fetch(url, opts);
779
630
  },
780
631
  })
781
- .on("change", function (info) {
632
+ .on('change', function (info) {
782
633
  // handle change
783
634
  })
784
- .on("paused", function (err) {
635
+ .on('paused', function (err) {
785
636
  if (err) {
786
637
  return set_replication_stat(SESSION_ID, null, 2);
787
638
  }
788
639
  set_replication_stat(SESSION_ID, null, 3);
789
640
  // replication paused (e.g. replication up to date, user went offline)
790
641
  })
791
- .on("active", function () {
642
+ .on('active', function () {
792
643
  // replicate resumed (e.g. new changes replicating, user went back online)
793
644
  })
794
- .on("denied", function (err) {
645
+ .on('denied', function (err) {
795
646
  set_replication_stat(SESSION_ID, null, 2);
796
647
  // a document failed to replicate (e.g. due to permissions)
797
648
  })
798
- .on("complete", function (info) {
649
+ .on('complete', function (info) {
799
650
  // handle complete
800
651
  })
801
- .on("error", function (err) {
652
+ .on('error', function (err) {
802
653
  set_replication_stat(SESSION_ID, null, 2);
803
654
  // handle error
804
655
  });
@@ -814,12 +665,11 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
814
665
  const remote_db = new PouchDB(remote_db_url, {
815
666
  fetch: function (url, opts) {
816
667
  if (_session.gtp_token) {
817
- opts.headers.set("xu-gtp-token", _session.gtp_token);
668
+ opts.headers.set('xu-gtp-token', _session.gtp_token);
818
669
  }
819
- if (_session.app_token)
820
- opts.headers.set("xu-app-token", _session.app_token);
670
+ if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
821
671
  {
822
- opts.headers.set("xu-db", db_name);
672
+ opts.headers.set('xu-db', db_name);
823
673
  }
824
674
  return PouchDB.fetch(url, opts);
825
675
  },
@@ -837,23 +687,22 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
837
687
  doc.stat_reason = reason;
838
688
  try {
839
689
  db.put(doc);
840
- } catch (err) { }
841
- } catch (err) { }
690
+ } catch (err) {}
691
+ } catch (err) {}
842
692
  };
843
693
  const download_documents = async function (rep_doc) {
844
694
  await write_stat(rep_doc._id, 2);
845
695
 
846
696
  const remote_db = new PouchDB(remote_db_url, {
847
697
  fetch: function (url, opts) {
848
- opts.headers.set("xu-prog_id", rep_doc.prog_id);
698
+ opts.headers.set('xu-prog_id', rep_doc.prog_id);
849
699
 
850
700
  if (_session.gtp_token) {
851
- opts.headers.set("xu-gtp-token", _session.gtp_token);
701
+ opts.headers.set('xu-gtp-token', _session.gtp_token);
852
702
  }
853
- if (_session.app_token)
854
- opts.headers.set("xu-app-token", _session.app_token);
703
+ if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
855
704
  {
856
- opts.headers.set("xu-db", db_name);
705
+ opts.headers.set('xu-db', db_name);
857
706
  }
858
707
  return PouchDB.fetch(url, opts);
859
708
  },
@@ -861,18 +710,13 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
861
710
 
862
711
  const ret = await remote_db.find({
863
712
  selector: rep_doc.selector,
864
- fields: ["_id"],
713
+ fields: ['_id'],
865
714
  limit: 9999999999,
866
715
  // prog_id: rep_doc.prog_id,
867
716
  });
868
717
 
869
718
  if (ret?.code < 0) {
870
- return func.utils.debug_report(
871
- SESSION_ID,
872
- "download_documents",
873
- ret.data,
874
- "E"
875
- );
719
+ return func.utils.debug_report(SESSION_ID, 'download_documents', ret.data, 'E');
876
720
  }
877
721
 
878
722
  try {
@@ -884,20 +728,19 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
884
728
  .from(remote_db_url, {
885
729
  doc_ids,
886
730
  retry: true,
887
- style: "main_only",
731
+ style: 'main_only',
888
732
  fetch: function (url, opts) {
889
733
  if (_session.gtp_token) {
890
- opts.headers.set("xu-gtp-token", _session.gtp_token);
734
+ opts.headers.set('xu-gtp-token', _session.gtp_token);
891
735
  }
892
- if (_session.app_token)
893
- opts.headers.set("xu-app-token", _session.app_token);
736
+ if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
894
737
  {
895
- opts.headers.set("xu-db", db_name);
738
+ opts.headers.set('xu-db', db_name);
896
739
  }
897
740
  return PouchDB.fetch(url, opts);
898
741
  },
899
742
  })
900
- .on("paused", async function (err) {
743
+ .on('paused', async function (err) {
901
744
  // replication paused (e.g. replication up to date, user went offline)
902
745
 
903
746
  if (err) {
@@ -909,7 +752,7 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
909
752
  });
910
753
  } catch (err) {
911
754
  await write_stat(rep_doc._id, 2, err.message);
912
- console.error("replication from error", err);
755
+ console.error('replication from error', err);
913
756
  }
914
757
  // console.log(ret);
915
758
  };
@@ -923,15 +766,15 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
923
766
  try {
924
767
  _this.db_changes_store = remote_db
925
768
  .changes({
926
- since: "now",
769
+ since: 'now',
927
770
  live: true,
928
771
  timeout: 300000, // 5 min
929
- style: "main_only",
772
+ style: 'main_only',
930
773
  include_docs: false,
931
774
  // heartbeat: 10000
932
775
  })
933
- .on("change", async function (change) {
934
- if (change.id.substr(0, 4) !== "dbs-") return;
776
+ .on('change', async function (change) {
777
+ if (change.id.substr(0, 4) !== 'dbs-') return;
935
778
 
936
779
  if (_this.db_replication_from_stat !== 3) {
937
780
  set_replication_stat(SESSION_ID, 3);
@@ -943,15 +786,14 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
943
786
  db.replicate.from(remote_db_url, {
944
787
  doc_ids: [change.id],
945
788
  retry: true,
946
- style: "main_only",
789
+ style: 'main_only',
947
790
  fetch: function (url, opts) {
948
791
  if (_session.gtp_token) {
949
- opts.headers.set("xu-gtp-token", _session.gtp_token);
792
+ opts.headers.set('xu-gtp-token', _session.gtp_token);
950
793
  }
951
- if (_session.app_token)
952
- opts.headers.set("xu-app-token", _session.app_token);
794
+ if (_session.app_token) opts.headers.set('xu-app-token', _session.app_token);
953
795
  {
954
- opts.headers.set("xu-db", db_name);
796
+ opts.headers.set('xu-db', db_name);
955
797
  }
956
798
  return PouchDB.fetch(url, opts);
957
799
  },
@@ -959,7 +801,7 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
959
801
  } catch (err) {
960
802
  // new doc change
961
803
  try {
962
- const table_id = change.id.split("_")[0].substr(4);
804
+ const table_id = change.id.split('_')[0].substr(4);
963
805
 
964
806
  for (let doc of rep_docs) {
965
807
  if (doc.table_id === table_id) {
@@ -971,10 +813,10 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
971
813
  }
972
814
  }
973
815
  })
974
- .on("complete", function (info) {
816
+ .on('complete', function (info) {
975
817
  // changes() was canceled
976
818
  })
977
- .on("error", function (err) {
819
+ .on('error', function (err) {
978
820
  console.error(err);
979
821
  set_replication_stat(SESSION_ID, 2);
980
822
  _this.db_changes_store.cancel();
@@ -985,10 +827,7 @@ _db.pouch.set_db_replication_from_server = async function (SESSION_ID) {
985
827
 
986
828
  return;
987
829
  };
988
- _db.pouch.remove_db_replication_from_server = async function (
989
- SESSION_ID,
990
- rep_id
991
- ) {
830
+ _db.pouch.remove_db_replication_from_server = async function (SESSION_ID, rep_id) {
992
831
  const db = await func.utils.connect_pouchdb(SESSION_ID);
993
832
 
994
833
  try {
@@ -997,16 +836,14 @@ _db.pouch.remove_db_replication_from_server = async function (
997
836
  // _this.db_replication_store[rep_id].cancel();
998
837
  db.remove(doc);
999
838
  // delete _this.db_replication_store[rep_id];
1000
- } catch (error) { }
839
+ } catch (error) {}
1001
840
  };
1002
841
 
1003
- _db.pouch.get_replications = async function (
1004
- SESSION_ID = Object.keys(SESSION_OBJ)[0]
1005
- ) {
842
+ _db.pouch.get_replications = async function (SESSION_ID = Object.keys(SESSION_OBJ)[0]) {
1006
843
  const db = await func.utils.connect_pouchdb(SESSION_ID);
1007
844
  // source: "runtime"
1008
845
  let ret = await db.find({
1009
- selector: { docType: "rep_request" },
846
+ selector: { docType: 'rep_request' },
1010
847
  });
1011
848
 
1012
849
  return ret.docs;
@@ -1029,42 +866,28 @@ const set_replication_stat = async function (SESSION_ID, from_stat, to_stat) {
1029
866
  if (to_stat) _this.db_replication_to_stat = to_stat;
1030
867
 
1031
868
  var data = {};
1032
- if (
1033
- _this.db_replication_from_stat === 3 &&
1034
- _this.db_replication_to_stat === 3
1035
- ) {
869
+ if (_this.db_replication_from_stat === 3 && _this.db_replication_to_stat === 3) {
1036
870
  data.SYS_GLOBAL_BOL_REPLICATION_STAT = 1;
1037
- console.info("Replication On");
871
+ console.info('Replication On');
1038
872
  } else {
1039
873
  data.SYS_GLOBAL_BOL_REPLICATION_STAT = 0;
1040
- console.info("Replication Off");
874
+ console.info('Replication Off');
1041
875
  }
1042
876
 
1043
877
  var datasource_changes = {
1044
878
  [0]: {
1045
- ["data_system"]: data,
879
+ ['data_system']: data,
1046
880
  },
1047
881
  };
1048
882
  await func.datasource.update(SESSION_ID, datasource_changes);
1049
883
  };
1050
884
 
1051
- const refresh_document_changes_for_realtime_update = function (
1052
- SESSION_ID,
1053
- doc_change
1054
- ) {
885
+ const refresh_document_changes_for_realtime_update = function (SESSION_ID, doc_change) {
1055
886
  var _session = _this.SESSION_OBJ[SESSION_ID];
1056
887
 
1057
888
  if (glb.IS_WORKER) {
1058
- return func.utils.post_back_to_client(
1059
- SESSION_ID,
1060
- "refresh_document_changes_for_realtime_update",
1061
- _session.worker_id,
1062
- { doc_change }
1063
- );
889
+ return func.utils.post_back_to_client(SESSION_ID, 'refresh_document_changes_for_realtime_update', _session.worker_id, { doc_change });
1064
890
  }
1065
891
 
1066
- func.UI.screen.refresh_document_changes_for_realtime_update(
1067
- SESSION_ID,
1068
- doc_change
1069
- );
892
+ func.UI.screen.refresh_document_changes_for_realtime_update(SESSION_ID, doc_change);
1070
893
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xuda.io/runtime-bundle",
3
- "version": "1.0.561",
3
+ "version": "1.0.563",
4
4
  "description": "The Xuda Runtime Bundle refers to a collection of scripts and libraries packaged together to provide the necessary runtime environment for executing plugins or components in the Xuda platform. ",
5
5
  "scripts": {
6
6
  "pub": "npm version patch --force && npm publish --access public"