soiz1's picture
Upload 811 files
30c32c8 verified
raw
history blame
1.77 kB
class extensionsPatch {
/**
* constructor
* @param {Runtime} runtime runtime
*/
constructor (runtime) {
this.runtime = runtime;
this.extensions = {};
this.loaded = [];
}
/**
* replaces a core extension with a external extension for the loader
* @param {String} id extension id
* @param {String} url new extension url
* @param {Object} extensions sb3 loader extension object
*/
basicPatch (id, url, extensions) {
extensions.extensionURLs.set(id, url);
}
/**
* runs the patch for an extension
* @param {String} id the extension to patch
* @param {Object} extensions the extensions object
* @param {Blocks} blocks all of the blocks
*/
runExtensionPatch (id, extensions, object) {
const patch = this.extensions[id];
if (typeof patch === 'object') {
if (!this.loaded.includes(id)) {
// patch to fix added urls not loading
this.runtime.extensionManager.loadExtensionURL(patch.url);
this.loaded.push(id);
}
this.basicPatch(patch.id, patch.url, extensions);
return;
}
patch(extensions, object, this.runtime);
}
/**
* registers extension patches to the patcher
* @param {Object} list a list of patches to register
*/
registerExtensions (list) {
this.extensions = Object.assign(this.extensions, list);
}
/**
* gets if a patch exists for an extension
* @param {String} id the extension id to check
* @returns {Boolean} if the given extension exists
*/
patchExists (id) {
return !!this.extensions[id];
}
}
module.exports = extensionsPatch;