From 75837d48cc4281b5cb17af7b90d4d138c7d3604a Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Thu, 8 May 2025 18:40:53 +0700 Subject: [PATCH] feat(lib/assets): add `getAssetModuleId` --- lib/assets/src/_internal.ts | 3 ++- lib/assets/src/index.ts | 15 ++++++++++++--- lib/assets/src/patches.ts | 10 +++++----- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/assets/src/_internal.ts b/lib/assets/src/_internal.ts index 22d1cf1..dca8d61 100644 --- a/lib/assets/src/_internal.ts +++ b/lib/assets/src/_internal.ts @@ -1,5 +1,6 @@ +import type { Metro } from '@revenge-mod/modules/types' import type { Asset, AssetId } from '.' export const _assets = new Map]>() export const _overrides = new Map() -export const _ids = new WeakMap() +export const _metas = new WeakMap() diff --git a/lib/assets/src/index.ts b/lib/assets/src/index.ts index a12ae64..31e4a51 100644 --- a/lib/assets/src/index.ts +++ b/lib/assets/src/index.ts @@ -1,9 +1,9 @@ import { ReactNative } from '@revenge-mod/react' -import { _assets, _ids, _overrides } from './_internal' +import { _assets, _metas, _overrides } from './_internal' import { AssetRegistry } from './patches' -import type { ReactNative as RN } from '@revenge-mod/types' +import type { ReactNative as RN } from '@revenge-mod/react/types' export type Asset = ReactNativeAsset | RevengeAsset export type AssetId = number @@ -33,7 +33,16 @@ export function getAssetById(id: AssetId): Asset | undefined { * @param asset The asset to get the ID for. */ export function getAssetId(asset: Asset) { - return _ids.get(asset) + return _metas.get(asset)?.[0] +} + +/** + * Get the module ID that registered the asset. Returns `-1` if the asset is a custom asset. + * + * @param asset The asset to get the module ID for. + */ +export function getAssetModuleId(asset: Asset) { + return _metas.get(asset)?.[1] } /** diff --git a/lib/assets/src/patches.ts b/lib/assets/src/patches.ts index 0b88de7..3caedee 100644 --- a/lib/assets/src/patches.ts +++ b/lib/assets/src/patches.ts @@ -1,11 +1,11 @@ -import { _mUninited } from '@revenge-mod/modules/_/metro' +import { _mInitingId, _mUninited } from '@revenge-mod/modules/_/metro' import { waitForModules } from '@revenge-mod/modules/finders' import { byName, byProps } from '@revenge-mod/modules/finders/filters' import { getModuleDependencies } from '@revenge-mod/modules/metro' -import { _assets, _ids, _overrides } from './_internal' +import { _assets, _metas, _overrides } from './_internal' -import type { ReactNative } from '@revenge-mod/types' +import type { ReactNative } from '@revenge-mod/react/types' import type { Asset, ReactNativeAsset } from '.' export let AssetRegistry: ReactNative.AssetsRegistry @@ -27,7 +27,7 @@ const unsubForAssetRegistry = waitForModules(byProps('registerAsset'), (arId, ex reg[1][type] = asset const result = orig(asset) - _ids.set(asset, result) + _metas.set(asset, [result, _mInitingId]) return result } @@ -58,7 +58,7 @@ const unsubForResolveAssetSource = waitForModules( unsubForResolveAssetSource() // Custom assets - // Why do we need to do this? Because RN will attempt to resolve the asset via its path, which we don't provide via custom assets. + // Why do we need to do this? Because RN/Dicord (unsure which) will attempt to resolve the asset via its path, which we don't provide via custom assets. // This will result in a crash, because it tries to read the path and run checks on it, but the path is undefined. // @ts-expect-error resolveAssetSource.addCustomSourceTransformer(({ asset }) => {