/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ 'use strict'; module.exports = function externalRuntime() { // When generating the source code for the Fizz runtime chunks we use global identifiers to refer // to different parts of the implementation. When generating the external runtime we need to // replace those with local identifiers instead. return { name: 'scripts/rollup/plugins/dynamic-imports', renderChunk(source) { // This replaces "window['$globalVar']" with "$globalVar". const variables = new Set(); source = source.replace( /window\[['"](\$[A-z0-9_]*)['"]\]/g, (_, variableName) => { variables.add(variableName); return variableName; } ); const startOfFn = 'use strict'; let index = source.indexOf(startOfFn); if (index === -1) { return source; } index += startOfFn.length + 2; // Insert the declarations in the beginning of the function closure // to scope them to inside the runtime. let declarations = 'let '; variables.forEach(variable => { if (declarations !== 'let ') { declarations += ', '; } declarations += variable; }); declarations += ';'; source = source.slice(0, index) + declarations + source.slice(index); return source; }, }; };