diff --git a/app/client/src/workers/Evaluation/handlers/jsLibrary.ts b/app/client/src/workers/Evaluation/handlers/jsLibrary.ts index bdf704f2bab4..ce81c2d7bf5d 100644 --- a/app/client/src/workers/Evaluation/handlers/jsLibrary.ts +++ b/app/client/src/workers/Evaluation/handlers/jsLibrary.ts @@ -128,39 +128,31 @@ export async function installLibrary( // Find keys add that were installed to the global scope. const keysAfterInstallation = Object.keys(self); - const differentiatingKeys = difference( + let differentiatingKeys = difference( keysAfterInstallation, envKeysBeforeInstallation, ); - if ( - differentiatingKeys.length > 0 && - differentiatingKeys.includes("default") - ) { - // Changing default export to library specific name - const uniqueName = generateUniqueAccessor( - url, - takenAccessors, - takenNamesMap, - ); + // Changing default export to library specific name, if default exported + const uniqueName = generateUniqueAccessor( + url, + takenAccessors, + takenNamesMap, + ); - // mapping default functionality to library name accessor - self[uniqueName] = self["default"]; - // deleting the reference of default key from the self object - delete self["default"]; - // mapping all the references of differentiating keys from the self object to the self[uniqueName] key object - differentiatingKeys.map((key) => { - if (key !== "default") { - self[uniqueName][key] = self[key]; - // deleting the references from the self object - delete self[key]; - } - }); - // pushing the uniqueName to the accessor array - accessors.push(uniqueName); - } else { - accessors.push(...differentiatingKeys); - } + movetheDefaultExportedLibraryToAccessorKey( + differentiatingKeys, + uniqueName, + ); + + // Following the same process which was happening earlier + const keysAfterDefaultOperation = Object.keys(self); + + differentiatingKeys = difference( + keysAfterDefaultOperation, + envKeysBeforeInstallation, + ); + accessors.push(...differentiatingKeys); /** * Check the list of installed library to see if their values have changed. @@ -308,7 +300,18 @@ export async function loadLibraries( try { self.importScripts(url); const keysAfter = Object.keys(self); - const defaultAccessors = difference(keysAfter, keysBefore); + let defaultAccessors = difference(keysAfter, keysBefore); + + // Changing default export to library accessors name which was saved when it was installed, if default export present + movetheDefaultExportedLibraryToAccessorKey( + defaultAccessors, + accessors[0], + ); + + // Following the same process which was happening earlier + const keysAfterDefaultOperation = Object.keys(self); + + defaultAccessors = difference(keysAfterDefaultOperation, keysBefore); /** * Installing 2 different version of lodash tries to add the same accessor on the self object. Let take version a & b for example. @@ -447,3 +450,24 @@ export function flattenModule(module: Record) { return libModule; } + +// This function will update the self keys only when the diffAccessors has default included in it. +function movetheDefaultExportedLibraryToAccessorKey( + diffAccessors: string[], + uniqAccessor: string, +) { + if (diffAccessors.length > 0 && diffAccessors.includes("default")) { + // mapping default functionality to library name accessor + self[uniqAccessor] = self["default"]; + // deleting the reference of default key from the self object + delete self["default"]; + // mapping all the references of differentiating keys from the self object to the self[uniqAccessor] key object + diffAccessors.map((key) => { + if (key !== "default") { + self[uniqAccessor][key] = self[key]; + // deleting the references from the self object + delete self[key]; + } + }); + } +}