diff --git a/src/entry.ts b/src/entry.ts index fa9de16..f4adafd 100644 --- a/src/entry.ts +++ b/src/entry.ts @@ -66,6 +66,11 @@ if (typeof globalThis.__r !== "undefined") { _requireFunc = function patchedRequire(a: number) { // Initializing index.ts(x) if (a === 0) { + // https://github.com/facebook/metro/commit/1361405ffe6f1bdef54295addfef0f30523aaab2 + if (window.modules instanceof Map) { + window.modules = Object.fromEntries([...window.modules]); + } + onceIndexRequired(v); _requireFunc = v; } else return v(a); diff --git a/src/metro/internals/modules.ts b/src/metro/internals/modules.ts index 0b4cdf4..357b849 100644 --- a/src/metro/internals/modules.ts +++ b/src/metro/internals/modules.ts @@ -6,7 +6,9 @@ import { ModuleFlags, ModulesMapInternal } from "./enums"; const { before, instead } = require("spitroast"); export const metroModules: Metro.ModuleList = window.modules; -const metroRequire: Metro.Require = window.__r; +// Since modules registry is now a Map, the id is now strictly a number +// Making the codebase to adapt to this change would be more ideal, though +const metroRequire = (id: number | string) => window.__r(+id); // eslint-disable-next-line func-call-spacing const moduleSubscriptions = new Map void>>();