@@ -66,9 +66,19 @@ type ClearCacheState = {
6666
6767const clearCacheStates = new WeakMap < WebpackRequire , ClearCacheState > ( ) ;
6868
69- const hasOwn = ( obj : Record < string | number , unknown > , key : string | number ) =>
69+ const hasOwn = ( obj : object , key : string | number ) =>
7070 Object . prototype . hasOwnProperty . call ( obj , key ) ;
7171
72+ const getOwn = < T > (
73+ obj : Record < string | number , T > | undefined | null ,
74+ key : string | number ,
75+ ) : T | undefined => {
76+ if ( ! obj || ! hasOwn ( obj , key ) ) {
77+ return undefined ;
78+ }
79+ return obj [ key ] ;
80+ } ;
81+
7282const toList = < T > ( value : T [ ] | undefined | null ) : T [ ] =>
7383 Array . isArray ( value ) ? value : [ ] ;
7484
@@ -199,7 +209,7 @@ export const getRemoteKeysForChunk = (
199209 webpackRequire . remotesLoadingData ?. moduleIdToRemoteDataMapping ?? { } ;
200210
201211 for ( const remoteModuleId of toList ( chunkMapping [ chunkId ] ) ) {
202- const data = moduleIdToRemoteDataMapping [ remoteModuleId ] ;
212+ const data = getOwn ( moduleIdToRemoteDataMapping , remoteModuleId ) ;
203213 if ( data ) {
204214 pushUnique ( remoteKeys , [ data . remoteName ] ) ;
205215 }
@@ -379,7 +389,7 @@ const getClearTarget = (
379389 toList ( remotesLoadingData . remoteKeyToExternalModuleIds ?. [ remoteKey ] ) ,
380390 ) ;
381391 for ( const remoteModuleId of remoteModuleIds ) {
382- const data = moduleIdToRemoteDataMapping [ remoteModuleId ] ;
392+ const data = getOwn ( moduleIdToRemoteDataMapping , remoteModuleId ) ;
383393 if ( data ) {
384394 pushUnique ( externalModuleIds , [ data . externalModuleId ] ) ;
385395 }
@@ -421,19 +431,18 @@ const createClearSnapshot = (
421431 const idToExternalAndNameMapping =
422432 webpackRequire . federation . bundlerRuntimeOptions . remotes
423433 ?. idToExternalAndNameMapping ?? { } ;
434+ const moduleIdToRemoteDataMapping =
435+ webpackRequire . remotesLoadingData ?. moduleIdToRemoteDataMapping ;
424436 const remoteLoadingPromises = remoteModuleIds . map ( ( remoteModuleId ) => {
425- const data =
426- webpackRequire . remotesLoadingData ?. moduleIdToRemoteDataMapping ?. [
427- remoteModuleId
428- ] ;
437+ const data = getOwn ( moduleIdToRemoteDataMapping , remoteModuleId ) ;
429438 return {
430439 data,
431440 had : data ? Object . prototype . hasOwnProperty . call ( data , 'p' ) : false ,
432441 value : data ?. p ,
433442 } ;
434443 } ) ;
435444 const runtimeLoadingPromises = remoteModuleIds . map ( ( remoteModuleId ) => {
436- const data = idToExternalAndNameMapping [ remoteModuleId ] ;
445+ const data = getOwn ( idToExternalAndNameMapping , remoteModuleId ) ;
437446 return {
438447 data,
439448 had : data ? Object . prototype . hasOwnProperty . call ( data , 'p' ) : false ,
@@ -841,13 +850,19 @@ const cleanupStaleRemoteCache = (
841850 const idToExternalAndNameMapping =
842851 webpackRequire . federation . bundlerRuntimeOptions . remotes
843852 ?. idToExternalAndNameMapping ?? { } ;
853+ const moduleIdToRemoteDataMapping =
854+ webpackRequire . remotesLoadingData ?. moduleIdToRemoteDataMapping ;
844855 cleanupNodeChunkCache ( webpackRequire , target ) ;
845856 for ( const remoteModuleId of target . remoteModuleIds ) {
846- const data =
847- webpackRequire . remotesLoadingData ?. moduleIdToRemoteDataMapping ?. [
848- remoteModuleId
849- ] ;
850- const runtimeData = idToExternalAndNameMapping [ remoteModuleId ] ;
857+ if (
858+ remoteModuleId === '__proto__' ||
859+ remoteModuleId === 'constructor' ||
860+ remoteModuleId === 'prototype'
861+ ) {
862+ continue ;
863+ }
864+ const data = getOwn ( moduleIdToRemoteDataMapping , remoteModuleId ) ;
865+ const runtimeData = getOwn ( idToExternalAndNameMapping , remoteModuleId ) ;
851866 if ( data ) {
852867 delete data . p ;
853868 }
@@ -940,13 +955,13 @@ const clearRemoteTarget = (
940955 const idToExternalAndNameMapping =
941956 webpackRequire . federation . bundlerRuntimeOptions . remotes
942957 ?. idToExternalAndNameMapping ?? { } ;
958+ const moduleIdToRemoteDataMapping =
959+ webpackRequire . remotesLoadingData ?. moduleIdToRemoteDataMapping ;
943960 const pendingRemoteLoads : Promise < unknown > [ ] = [ ] ;
944961 for ( const remoteModuleId of target . remoteModuleIds ) {
945962 for ( const data of [
946- webpackRequire . remotesLoadingData ?. moduleIdToRemoteDataMapping ?. [
947- remoteModuleId
948- ] ,
949- idToExternalAndNameMapping [ remoteModuleId ] ,
963+ getOwn ( moduleIdToRemoteDataMapping , remoteModuleId ) ,
964+ getOwn ( idToExternalAndNameMapping , remoteModuleId ) ,
950965 ] ) {
951966 if ( data ?. p && typeof data . p === 'object' && 'then' in data . p ) {
952967 pendingRemoteLoads . push ( data . p . catch ( ( ) => { } ) ) ;
0 commit comments