UNPKG

@xuda.io/runtime-bundle

Version:

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

118 lines (100 loc) 3.47 kB
'use strict'; var show_log = false; var ws_worker_id = null; var worker_name = this.name; var build = worker_name.split(':')[1].split(' ')[2]; var domain = worker_name.split(':')[1].split(' ')[3]; if (build === 'undefined') { build = ''; } const get_url = function (domain, method, path) { return `https://${domain}/${method}${ path ? '/' + path : '' // return `https://${subdomain ? subdomain + "." : ""}${domain}${path ? "/" + path : "" }`; }; const runtime_path = get_url(domain, 'dist', 'runtime/'); const get_resource_filename = function (build, filename) { if (build) { return filename.replace(/(\.\w+)$/, `.${build}$1`); } return filename; }; if (worker_name.includes('Debug:')) { importScripts(get_resource_filename(build, runtime_path + 'js/xuda-worker-bundle.js')); importScripts(runtime_path + 'node_modules/lodash/lodash.js'); importScripts(runtime_path + 'node_modules/json5/dist/index.js'); } else { if (worker_name.includes('Dev:')) { let files = ['xuda_common.js', 'xuda_GLB.js', 'xuda_datasource.js', 'xuda_utils.js', 'xuda_events.js', 'xuda_expression.js']; files.forEach((file) => { importScripts(file); }); importScripts('../vendor/lodash.min.js'); importScripts('../vendor/json5.min.js'); } else { importScripts(get_resource_filename(build, runtime_path + 'js/xuda-worker-bundle.min.js')); importScripts(runtime_path + 'node_modules/lodash/lodash.js'); importScripts(runtime_path + 'node_modules/json5/dist/index.js'); } } if (!worker_name.includes('Slim ')) { importScripts(runtime_path + 'node_modules/pouchdb/dist/pouchdb.min.js'); importScripts(runtime_path + 'node_modules/pouchdb/dist/pouchdb.find.min.js'); } // importScripts(runtime_path + "node_modules/lodash/lodash.js"); glb.IS_WORKER = true; SESSION_ID = 1000; console.log('==========================================='); console.log(' Worker started...' + new Date().getTime()); console.log('==========================================='); const worker_post_message = function (data) { if (!data.process_pid) { delete data.process_pid; } if (!data.service) { delete data.service; } try { postMessage(data); } catch (error) { debugger; } }; self.addEventListener( 'message', async function (e) { ws_worker_id = e.data.worker_id; if (!ws_worker_id) debugger; const _data = JSON.parse(e.data.data); if (e.data.service === 'init') { worker_garbage_collector(_data.session_id); } const ret = await eval(func.utils.ws_worker.functions[e.data.service])(_data, e.data.promise_queue_id); if (!e.data.service || e.data.service === 'init' || e.data.service === 'datasource_create') { return; } worker_post_message({ fx_to_execute: 'worker_response', worker_id: ws_worker_id, session_id: SESSION_ID, promise_queue_id: e.data.promise_queue_id, service: e.data.service, params: ret, }); }, false, ); worker_post_message({ worker_id: ws_worker_id, service: 'worker_ready', }); const worker_garbage_collector = function (SESSION_ID) { setInterval(() => { for (const [dsP, _ds] of Object.entries(SESSION_OBJ[SESSION_ID].DS_GLB)) { if (_ds.is_worker && _ds.stat === 'idle' && Date.now() - _ds.stat_ts > 60000 && _ds.tree_obj.menuType !== 'component' && _ds.tree_obj.menuType !== 'globals') { func.datasource.del(SESSION_ID, dsP); } } }, 10000); };