diff --git a/src/lib/metro/filters.ts b/src/lib/metro/filters.ts
index a2f569f..986eb66 100644
--- a/src/lib/metro/filters.ts
+++ b/src/lib/metro/filters.ts
@@ -1,13 +1,18 @@
-import { after, instead } from "@lib/api/patcher";
-
+import { instead } from "@lib/api/patcher";
export type MetroModules = { [id: string]: any; };
export type PropIntellisense
= Record
& Record;
export type PropsFinder = (...props: T[]) => PropIntellisense;
export type PropsFinderAll = (...props: T[]) => PropIntellisense[];
+interface MetroRequire {
+ (moduleId: string): any;
+ importDefault(moduleId: string): any;
+ importAll(moduleId: string): any;
+}
+
// Metro global vars
-declare var __r: (moduleId: string) => any;
+declare var __r: MetroRequire;
declare var modules: MetroModules;
// Function to blacklist a module, preventing it from being searched again
@@ -24,8 +29,25 @@ for (const id in window.modules) {
const moduleDefinition = window.modules[id];
if (moduleDefinition.factory) {
- after("factory", moduleDefinition, ({ 4: moduleObject }) => {
- if (moduleObject.exports) onModuleRequire(moduleObject.exports);
+ instead("factory", moduleDefinition, (args, orig) => {
+ const { 1: metroRequire, 4: moduleObject } = args;
+
+ args[2 /* metroImportDefault */] = (id: string) => {
+ const exp = metroRequire(id);
+ return exp && exp.__esModule ? exp.default : exp;
+ };
+
+ args[3 /* metroImportAll */] = (id: string) => {
+ const exp = metroRequire(id);
+ if (exp && exp.__esModule) return exp;
+
+ const importAll: Record = {};
+ if (exp) Object.assign(importAll, exp);
+ return importAll.default = exp, importAll;
+ };
+
+ orig(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+ if (moduleObject.exports) onModuleRequire(moduleObject.exports, id);
});
}
}
@@ -42,7 +64,7 @@ for (const id in window.modules) {
let patchedInspectSource = false;
-function onModuleRequire(exports: any) {
+function onModuleRequire(exports: any, id: string) {
// There are modules registering the same native component
if (exports?.default?.name === "requireNativeComponent") {
instead("default", exports, (args, orig) => {