Skip to content
This repository has been archived by the owner on May 15, 2024. It is now read-only.

Commit

Permalink
fix(externals): emismatched externals caused one-app to fail to start
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew-Mallimo committed Oct 6, 2021
1 parent a2df840 commit 2d87ab0
Showing 1 changed file with 30 additions and 9 deletions.
39 changes: 30 additions & 9 deletions packages/holocron/src/updateModuleRegistry.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,22 +45,43 @@ export default async function updateModuleRegistry({
getModulesToUpdate(currentModuleMap.modules || {}, newModuleMap.modules)
);
const flatModulesToUpdate = modulesToUpdate.reduce((acc, batch) => [...acc, ...batch], []);

const problemModules = [];
let updatedModules = await modulesToUpdate.reduce(async (acc, moduleBatch) => {
const loadedModules = await acc;
const nextModules = await Promise.all(moduleBatch.map(
async (moduleName) => addHigherOrderComponent(
await loadModule(moduleName, newModuleMap.modules[moduleName], onModuleLoad)
)
const nextModules = await Promise.allSettled(moduleBatch.map(
async (moduleName) => {
try {
const loadedModule = await loadModule(
moduleName,
newModuleMap.modules[moduleName],
onModuleLoad
);
return addHigherOrderComponent(loadedModule);
} catch (e) {
problemModules.push(moduleName);
return Promise.reject(e);
}
}
));
return [...loadedModules, ...nextModules];
const successfullyLoadedModules = nextModules.filter(
({ status }) => status === 'fulfilled'
).map(({ value }) => value);
return [...loadedModules, ...successfullyLoadedModules];
}, []);
updatedModules = updatedModules.reduce((
acc, module, i) => ({ ...acc, [flatModulesToUpdate[i]]: module }), {});
const newModules = getModules().merge(updatedModules);
// Updated modules may have less modules than flatModulesToUpdate if any modules failed to load
const updatedFlatMap = flatModulesToUpdate.filter(
(mod) => Object.keys(updatedModules).some((updatedModule) => updatedModule === mod)
);
const finalNewModuleMap = { ...newModuleMap };
// Keep working version of modules if they are in the list of problem modules
problemModules.forEach((module) => {
finalNewModuleMap.modules[module] = currentModuleMap.modules[module];
});
resetModuleRegistry(newModules, finalNewModuleMap);

resetModuleRegistry(newModules, newModuleMap);

return flatModulesToUpdate.reduce((
return updatedFlatMap.reduce((
acc, moduleName) => ({ ...acc, [moduleName]: newModuleMap.modules[moduleName] }), {});
}

0 comments on commit 2d87ab0

Please # to comment.