UNPKG

dcp-client

Version:

Core libraries for accessing DCP network

107 lines (91 loc) 3.75 kB
/** * This file extends BravoJS, creating a CommonJS Modules/2.0 * environment for WebWorkers and similar environments. * * Copyright (c) 2018-2022, Distributive, Ltd. All Rights Reserved. * Wes Garland, wes@kingsds.network */ /* global self, bravojs, addEventListener, postMessage */ // @ts-nocheck self.wrapScriptLoading({ scriptName: 'bravojs-env' }, function bravojsEvn$$fn(protectedStorage, _ring2PostMessage, wrapPostMessage) { const ring2PostMessage = self.postMessage; bravojs.ww = {} bravojs.ww.allDeps = [] bravojs.ww.provideCallbacks = {} //Listens for postMessage from the sandbox addEventListener('message', async function bravojsEnv$$sandboxPostMessageHandler(event) { let message = event let indirectEval = eval // eslint-disable-line switch (message.request) { case 'moduleGroup': /* Outside environment is sending us a module group */ module.declare = bravojs.ww.groupedModuleDeclare let packages = Object.keys(message.data) for (let i = 0; i < packages.length; i++) { let fileNames = Object.keys(message.data[packages[i]]) for (let j = 0; j < fileNames.length; j++) { bravojs.ww.moduleId = packages[i] + '/' + fileNames[j] indirectEval(message.data[packages[i]][fileNames[j]], fileNames[j]) } } delete module.declare if (bravojs.ww.provideCallbacks.hasOwnProperty(message.id)) { bravojs.ww.provideCallbacks[message.id].callback() delete bravojs.ww.provideCallbacks[message.id] } break case 'moduleGroupError': /* Outside environment is sending us a module group error report */ if (bravojs.ww.provideCallbacks.hasOwnProperty(message.id) && bravojs.ww.provideCallbacks[message.id].onerror) bravojs.ww.provideCallbacks[message.id].onerror(); else console.error('moduleGroupError ', message.stack); break; default: break; } }) /** A module.declare suitable for running when processing modules arriving as part * of a module group or other in-memory cache. */ bravojs.ww.groupedModuleDeclare = function bravojsEnv$$ww$groupedModuleDeclare(dependencies, moduleFactory) { var i var moduleBase = '' if (bravojs.debug && bravojs.debug.match(/\bmoduleCache\b/)) { console.log('Loaded ' + dependencies + ' from group') } if (typeof moduleFactory === 'undefined') { moduleFactory = dependencies dependencies = [] } bravojs.pendingModuleDeclarations[bravojs.ww.moduleId] = { moduleFactory: moduleFactory, dependencies: dependencies } for (i = 0; i < dependencies.length; i++) bravojs.ww.allDeps.push(bravojs.makeModuleId(moduleBase, dependencies[i])) } /** A module.provide suitable for a web worker, which requests modules via message passing. * * @param dependencies A dependency array * @param callback The callback to invoke once all dependencies have been * provided to the environment. Optional. * @param onerror The callback to invoke in the case there was an error providing * the module (e.g. 404). May be called more than once. */ bravojs.Module.prototype.provide = function bravojsEnv$$Module$provide(dependencies, callback, onerror) { var id = Date.now() + Math.random() dependencies = bravojs.normalizeDependencyArray(dependencies) bravojs.ww.provideCallbacks[id] = { callback: callback, onerror: onerror } ring2PostMessage({ request: 'dependency', data: dependencies, id, }); }; }); /* end of fn */