Skip to content

Commit ad6c86f

Browse files
committed
fix: address cache cleanup code scanning warnings
1 parent 7c05f47 commit ad6c86f

2 files changed

Lines changed: 42 additions & 22 deletions

File tree

packages/webpack-bundler-runtime/src/clearCache.ts

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,19 @@ type ClearCacheState = {
6666

6767
const 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+
7282
const 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(() => {}));

tools/scripts/probe-modern-ssr-remove-remote-gc.mjs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,16 @@ async function requestProbe() {
223223
}
224224

225225
function decodeHtml(value) {
226-
return value
227-
.replace(/&quot;/g, '"')
228-
.replace(/&amp;/g, '&')
229-
.replace(/&lt;/g, '<')
230-
.replace(/&gt;/g, '>');
226+
const entities = {
227+
'&quot;': '"',
228+
'&amp;': '&',
229+
'&lt;': '<',
230+
'&gt;': '>',
231+
};
232+
return value.replace(
233+
/&(quot|amp|lt|gt);/g,
234+
(entity) => entities[entity] || entity,
235+
);
231236
}
232237

233238
function findSnapshot(result, label) {

0 commit comments

Comments
 (0)