/** * @license * Copyright 2022 Google LLC * SPDX-License-Identifier: Apache-2.0 */ /** * @fileoverview Helper script for bootstrap.js * * This is loaded, via goog.bootstrap(), after the other top-level * Blockly modules. It simply calls goog.require() for each of them, * to force the debug module loader to finish loading them before any * non-module scripts (like msg/messages.js) that might have * undeclared dependencies on them. */ (function() { const info = window.bootstrapInfo; if (!info.compressed) { // Force debug module loader to finish loading all modules. for (const require of info.requires) { goog.require(require); // This is a kludge to work around an issue where attempting to // load Blockly.libraryBlocks (blocks/blocks.js) fails if the // Blockly global variable is not defined. // // This is apparently because the debug module loader fails to // load Blockly.libraryBlocks.lists (blocks/lists.js) and // .procedures (blocks/procedures.js) first, despite they both // being required from blocks.js, and that is apparently because // they both depend on Blockly.Xml which the debug loader seems // to think has not been loaded yet even though it has. if (require === 'Blockly') { window.Blockly = goog.module.get('Blockly'); } } } // Create global names for named and destructured imports. for (const varName in info.namedImports) { const id = info.namedImports[varName]; const value = info.compressed ? get(id) : goog.module.get(id); if (value) { window[varName] = value; } } for (const varName in info.destructuredImports) { const id = info.destructuredImports[varName]; const value = info.compressed ? get(id) : goog.module.get(id)[varName]; if (value) { window[varName] = value; } } return; // All done. Only helper functions after this point. /** * Get the object referred to by a doted-itentifier path * (e.g. foo.bar.baz). * @param {string} path The path referring to the object. * @return {string|null} The object, or null if not found. */ function get(path) { let obj = window; for (const part of path.split('.')) { obj = obj[part]; if (!obj) return null; } return obj; } })();