diff --git a/src/serialization/sb3.js b/src/serialization/sb3.js index 46aa99f3..bbd53237 100644 --- a/src/serialization/sb3.js +++ b/src/serialization/sb3.js @@ -609,6 +609,23 @@ const serialize = function (runtime, targetId, {allowOptimization = true} = {}) // Assemble extension list obj.extensions = Array.from(extensions); + // Save list of URLs to load the current extensions + // Extension manager only exists when runtime is wrapped by VirtualMachine + if (runtime.extensionManager) { + // Not all the URLs that are loaded are necessarily used. + const extensionURLs = runtime.extensionManager.getExtensionURLs(); + const urlsToSave = []; + for (const extension of extensions) { + const url = extensionURLs[extension]; + if (typeof url === 'string') { + urlsToSave.push(url); + } + } + if (urlsToSave.length) { + obj.extensionURLs = urlsToSave; + } + } + // Assemble metadata const meta = Object.create(null); meta.semver = '3.0.0'; diff --git a/src/virtual-machine.js b/src/virtual-machine.js index a002772b..06f11704 100644 --- a/src/virtual-machine.js +++ b/src/virtual-machine.js @@ -197,6 +197,7 @@ class VirtualMachine extends EventEmitter { }); this.extensionManager = new ExtensionManager(this.runtime); + this.runtime.extensionManager = this.extensionManager; // Load core extensions for (const id of CORE_EXTENSIONS) {