From b29e1bc2f69f20a699e6f2548b7b4d0626c44d18 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Wed, 16 Apr 2025 16:16:29 +0700 Subject: [PATCH] fix(lib/modules): fix subscriptions not having correct module ids --- lib/modules/src/metro/_internal.ts | 17 +++++++++++++++-- lib/modules/src/metro/patches.ts | 5 +++-- .../src/metro/subscriptions/_internal.ts | 10 ++++------ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/modules/src/metro/_internal.ts b/lib/modules/src/metro/_internal.ts index c02615d..fd08cb8 100644 --- a/lib/modules/src/metro/_internal.ts +++ b/lib/modules/src/metro/_internal.ts @@ -28,7 +28,7 @@ export function patchMetroDefine(metroDefine: Metro.DefineFn) { const prevIId = _mInitingId _mInitingId = id - _executeRequiredSubscription() + _executeRequiredSubscription(id) try { origFactory(global, req, importDefault, importAll, module, exports, deps) @@ -43,7 +43,7 @@ export function patchMetroDefine(metroDefine: Metro.DefineFn) { _mInitingId = prevIId _mUninited.delete(id) // Don't use exports here, as modules can set module.exports to a different object - _executeInitializedSubscription(module.exports) + _executeInitializedSubscription(id, module.exports) } }) satisfies Metro.FactoryFn, id, @@ -73,3 +73,16 @@ export function _blacklist(id: Metro.ModuleID) { // TODO(modules): caching } + +/// BLACKLIST RESTORATION + +if (globalThis.__REVENGE_CACHE_MODULE_BLACKLIST__) + for (const id of globalThis.__REVENGE_CACHE_MODULE_BLACKLIST__) _blacklist(id) + +// @ts-expect-error +// biome-ignore lint/performance/noDelete: no +delete globalThis.__REVENGE_CACHE_MODULE_BLACKLIST__ + +declare namespace globalThis { + const __REVENGE_CACHE_MODULE_BLACKLIST__: Metro.ModuleID[] | undefined +} diff --git a/lib/modules/src/metro/patches.ts b/lib/modules/src/metro/patches.ts index 484d382..2ea98a3 100644 --- a/lib/modules/src/metro/patches.ts +++ b/lib/modules/src/metro/patches.ts @@ -13,8 +13,9 @@ const unsubForImportTracker = waitForModules(byProps('fileFinishedImporting'), ( unsubForImportTracker() exports.fileFinishedImporting = (path: string) => { orig(path) - _mPaths.set(path, _mInitingId) - _executeImportedPathSubscription(path) + const id = _mInitingId + _mPaths.set(path, id) + _executeImportedPathSubscription(id, path) } } }) diff --git a/lib/modules/src/metro/subscriptions/_internal.ts b/lib/modules/src/metro/subscriptions/_internal.ts index 5a15279..9b140d4 100644 --- a/lib/modules/src/metro/subscriptions/_internal.ts +++ b/lib/modules/src/metro/subscriptions/_internal.ts @@ -9,8 +9,7 @@ export const _initAll = new Set() export const _initSpecific = new Map>() export const _importedPath = new Set() -export function _executeRequiredSubscription() { - const id = _mInitingId +export function _executeRequiredSubscription(id: Metro.ModuleID) { for (const cb of _reqAll) cb(id) if (_reqSpecific.has(id)) { for (const cb of _reqSpecific.get(id)!) cb(id) @@ -18,8 +17,7 @@ export function _executeRequiredSubscription() { } } -export function _executeInitializedSubscription(exports: Metro.ModuleExports) { - const id = _mInitingId +export function _executeInitializedSubscription(id: Metro.ModuleID, exports: Metro.ModuleExports) { for (const cb of _initAll) cb(id, exports) if (_initSpecific.has(id)) { for (const cb of _initSpecific.get(id)!) cb(id, exports) @@ -27,6 +25,6 @@ export function _executeInitializedSubscription(exports: Metro.ModuleExports) { } } -export function _executeImportedPathSubscription(path: string) { - for (const cb of _importedPath) cb(_mInitingId, path) +export function _executeImportedPathSubscription(id: Metro.ModuleID, path: string) { + for (const cb of _importedPath) cb(id, path) }