dcp-client
Version:
Core libraries for accessing DCP network
107 lines (91 loc) • 3.75 kB
JavaScript
/**
* 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 */