fix(lib/modules/metro/runtime): add flag once importedAll or importedDefault exports cached

This commit is contained in:
PalmDevs 2025-08-19 22:12:36 +07:00
parent dba76a9f81
commit d8d85cfab1
No known key found for this signature in database
GPG key ID: 6FAE8F8677ACA8BA
5 changed files with 14 additions and 5 deletions

View file

@ -1,7 +1,7 @@
import { getCurrentStack } from '@revenge-mod/utils/error' import { getCurrentStack } from '@revenge-mod/utils/error'
import { cacheFilterResultForId } from '../caches' import { cacheFilterResultForId } from '../caches'
import { metroRequire } from '../metro/custom'
import { mInitialized } from '../metro/patches' import { mInitialized } from '../metro/patches'
import { metroRequire } from '../metro/runtime'
import { isModuleExportBad } from '../metro/utils' import { isModuleExportBad } from '../metro/utils'
import { FilterFlag } from './filters' import { FilterFlag } from './filters'
import type { If } from '@revenge-mod/utils/types' import type { If } from '@revenge-mod/utils/types'

View file

@ -1,13 +1,13 @@
import { getCurrentStack } from '@revenge-mod/utils/error' import { getCurrentStack } from '@revenge-mod/utils/error'
import { proxify } from '@revenge-mod/utils/proxy' import { proxify } from '@revenge-mod/utils/proxy'
import { cacheFilterNotFound, getFilterMatches } from '../caches' import { cacheFilterNotFound, getFilterMatches } from '../caches'
import { metroRequire } from '../metro/custom'
import { import {
mImportedPaths, mImportedPaths,
mInitialized, mInitialized,
mList, mList,
mUninitialized, mUninitialized,
} from '../metro/patches' } from '../metro/patches'
import { metroRequire } from '../metro/runtime'
import { import {
getInitializedModuleExports, getInitializedModuleExports,
isModuleInitialized, isModuleInitialized,

View file

@ -4,7 +4,7 @@ import {
metroImportAll, metroImportAll,
metroImportDefault, metroImportDefault,
metroRequire, metroRequire,
} from './custom' } from './runtime'
import { onModuleInitialized } from './subscriptions' import { onModuleInitialized } from './subscriptions'
import { import {
executeImportedPathSubscriptions, executeImportedPathSubscriptions,

View file

@ -1,6 +1,8 @@
/** /**
* A more performant implementation of Metro's core functions. * A minimal implementation of Metro's runtime with little overhead.
* Making initialization faster and use less resources. * Making initialization faster and use less resources.
*
* Also avoids cloning exports, allowing for patches to be applied directly without checking for clones.
*/ */
import { mList } from './patches' import { mList } from './patches'
@ -58,6 +60,9 @@ export const metroImportDefault: Metro.RequireFn = moduleId => {
if (mod.flags & HasImportedDefault) return mod.importedDefault if (mod.flags & HasImportedDefault) return mod.importedDefault
const exports = metroRequire(moduleId) const exports = metroRequire(moduleId)
mod.flags |= HasImportedDefault
return (mod.importedDefault = exports?.__esModule return (mod.importedDefault = exports?.__esModule
? exports.default ? exports.default
: exports) : exports)
@ -68,7 +73,11 @@ export const metroImportAll: Metro.RequireFn = moduleId => {
if (mod.flags & HasImportedAll) return mod.importedAll if (mod.flags & HasImportedAll) return mod.importedAll
const exports = metroRequire(moduleId) const exports = metroRequire(moduleId)
// Our implementation doesn't match Metro's because we modify the exports directly instead of cloning
// But this is why ours is superior, it allows patching the exports without needing to do it more than a single time
if (!exports?.__esModule) exports.default = exports if (!exports?.__esModule) exports.default = exports
mod.flags |= HasImportedAll
return (mod.importedAll = exports) return (mod.importedAll = exports)
} }

View file

@ -1,6 +1,6 @@
import { isProxy } from '@revenge-mod/utils/proxy' import { isProxy } from '@revenge-mod/utils/proxy'
import { Initialized } from './custom'
import { mDeps, mList } from './patches' import { mDeps, mList } from './patches'
import { Initialized } from './runtime'
import type { Metro } from '../types' import type { Metro } from '../types'
/** /**