@xuda.io/runtime-bundle 1.0.561 → 1.0.562

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