fix(lib/discord/common)!: split to own submodules + don't restrict everything to init+

This commit is contained in:
PalmDevs 2026-07-31 13:15:01 +07:00
parent 217617a663
commit c49f3eb471
No known key found for this signature in database
GPG key ID: 6FAE8F8677ACA8BA
21 changed files with 147 additions and 102 deletions

View file

@ -9,9 +9,24 @@
"./common": {
"default": "./src/common/index.ts"
},
"./common/app-start-performance": {
"default": "./src/common/app-start-performance.ts"
},
"./common/constants": {
"default": "./src/common/constants.ts"
},
"./common/flux": {
"default": "./src/common/flux.ts"
},
"./common/import-tracker": {
"default": "./src/common/import-tracker.ts"
},
"./common/logger": {
"default": "./src/common/logger.ts"
},
"./common/tokens": {
"default": "./src/common/tokens.ts"
},
"./common/utils": {
"default": "./src/common/utils.ts"
},

View file

@ -10,8 +10,8 @@ import {
ReactNativeModuleId,
} from '@revenge-mod/react'
import { proxify } from '@revenge-mod/utils/proxy'
import { ImportTrackerModuleId } from './common'
import { DispatcherModuleId } from './common/flux'
import { ImportTrackerModuleId } from './common/import-tracker'
import type { DiscordModules } from './types'
const { relative, loose } = withDependencies

View file

@ -0,0 +1 @@
export { AppStartPerformance } from '../preinit'

View file

@ -0,0 +1,21 @@
import { lookupModule } from '@revenge-mod/modules/finders'
import {
withDependencies,
withProps,
} from '@revenge-mod/modules/finders/filters'
import type { DiscordModules } from '@revenge-mod/discord/types'
const { loose, relative } = withDependencies
export const [Constants, ConstantsModuleId] = lookupModule(
withProps<DiscordModules.Constants>('ME')
.and(
withDependencies(
loose([
null,
relative.withDependencies(loose([relative(2, true)]), 1),
]),
),
)
.keyAs('revenge.discord.common.Constants'),
)

View file

@ -0,0 +1 @@
export { ImportTrackerModuleId } from '../patches/import-tracker'

View file

@ -1,66 +0,0 @@
import { lookupModule } from '@revenge-mod/modules/finders'
import {
withDependencies,
withName,
withProps,
} from '@revenge-mod/modules/finders/filters'
import { proxify } from '@revenge-mod/utils/proxy'
import type { Metro } from '@revenge-mod/modules/types'
import type { DiscordModules } from '../types'
export { AppStartPerformance } from '../preinit'
export * as flux from './flux'
export * as utils from './utils'
const { loose, relative } = withDependencies
// ../discord_common/js/packages/logger/Logger.tsx
export const [Logger, LoggerModuleId] = lookupModule(
withName<typeof DiscordModules.Logger>('Logger'),
) as [typeof DiscordModules.Logger, Metro.ModuleID]
// ../discord_common/js/packages/tokens/native.tsx
export const [Tokens, TokensModuleId] = lookupModule(withProps('RawColor')) as [
any,
Metro.ModuleID,
]
/**
* If you need to use this ID, unproxify {@link Constants} first.
*
* ```js
* preinit() {
* unproxify(Constants)
* // Module ID will now be set!
* ConstantsModuleId // ...
* }
* ```
*/
export let ConstantsModuleId: Metro.ModuleID | undefined
export let Constants: DiscordModules.Constants = proxify(
() => {
const [module, id] = lookupModule(
withProps<DiscordModules.Constants>('ME')
.and(
withDependencies(
loose([
null,
relative.withDependencies(
loose([relative(2, true)]),
1,
),
]),
),
)
.keyAs('revenge.discord.common.Constants'),
)
if (module) {
ConstantsModuleId = id
return (Constants = module)
}
},
{ hint: {} },
)!
export { ImportTrackerModuleId } from '../patches/import-tracker'

View file

@ -0,0 +1,9 @@
import { lookupModule } from '@revenge-mod/modules/finders'
import { withName } from '@revenge-mod/modules/finders/filters'
import type { DiscordModules } from '@revenge-mod/discord/types'
import type { Metro } from '@revenge-mod/modules/types'
// ../discord_common/js/packages/logger/Logger.tsx
export const [Logger, LoggerModuleId] = lookupModule(
withName<typeof DiscordModules.Logger>('Logger'),
) as [typeof DiscordModules.Logger, Metro.ModuleID]

View file

@ -0,0 +1,9 @@
import { lookupModule } from '@revenge-mod/modules/finders'
import { withProps } from '@revenge-mod/modules/finders/filters'
import type { Metro } from '@revenge-mod/modules/types'
// ../discord_common/js/packages/tokens/native.tsx
export const [Tokens, TokensModuleId] = lookupModule(withProps('RawColor')) as [
any,
Metro.ModuleID,
]

View file

@ -10,7 +10,7 @@ import {
ReactNativeModuleId,
} from '@revenge-mod/react'
import { proxify } from '@revenge-mod/utils/proxy'
import { ImportTrackerModuleId } from './common'
import { ImportTrackerModuleId } from './common/import-tracker'
import type { DiscordModules } from './types'
const { loose } = withDependencies

View file

@ -4,7 +4,7 @@ import {
withProps,
} from '@revenge-mod/modules/finders/filters'
import { proxify } from '@revenge-mod/utils/proxy'
import { ImportTrackerModuleId } from '../common'
import { ImportTrackerModuleId } from '../common/import-tracker'
import type { NavigationContainerRef } from '@react-navigation/core'
const { loose, relative } = withDependencies

View file

@ -1,4 +1,4 @@
import { ImportTrackerModuleId } from '@revenge-mod/discord/common'
import { ImportTrackerModuleId } from '@revenge-mod/discord/common/import-tracker'
import { lookupModule } from '@revenge-mod/modules/finders'
import {
withDependencies,

View file

@ -1,5 +1,8 @@
import defer * as DiscordActions from '@revenge-mod/discord/actions'
import defer * as DiscordCommon from '@revenge-mod/discord/common'
import defer * as DiscordCommonConstants from '@revenge-mod/discord/common/constants'
import defer * as DiscordCommonFlux from '@revenge-mod/discord/common/flux'
import defer * as DiscordCommonLogger from '@revenge-mod/discord/common/logger'
import defer * as DiscordCommonTokens from '@revenge-mod/discord/common/tokens'
import defer * as DiscordDesign from '@revenge-mod/discord/design'
import defer * as DiscordFlux from '@revenge-mod/discord/flux'
import defer * as DiscordModulesMainTabsV2 from '@revenge-mod/discord/modules/main_tabs_v2'
@ -10,23 +13,47 @@ import { defineLazyProperties } from '@revenge-mod/utils/object'
import { guardIndexInitialized } from '.'
export interface PreInitPluginApiDiscord {
actions: PreInitPluginApiDiscord.Actions
/** This API is not available in the `preInit` phase. */
common: unknown
design: PreInitPluginApiDiscord.Design
flux: PreInitPluginApiDiscord.Flux
modules: PreInitPluginApiDiscord.Modules
native: PreInitPluginApiDiscord.Native
utils: PreInitPluginApiDiscord.Utils
actions: PluginApiDiscord.Actions
common: PreInitPluginApiDiscordCommon
design: PluginApiDiscord.Design
flux: PluginApiDiscord.Flux
modules: PluginApiDiscord.Modules
native: PluginApiDiscord.Native
utils: PluginApiDiscord.Utils
}
export interface InitPluginApiDiscord extends PreInitPluginApiDiscord {
common: PreInitPluginApiDiscord.Common
common: InitPluginApiDiscordCommon
}
export namespace PreInitPluginApiDiscord {
interface PreInitPluginApiDiscordCommon {
appStartPerformance: typeof import('@revenge-mod/discord/common/app-start-performance')
importTracker: typeof import('@revenge-mod/discord/common/import-tracker')
utils: typeof import('@revenge-mod/discord/common/utils')
/** This API is available in and after the `init` phase. */
constants: unknown
/** This API is available in and after the `init` phase. */
flux: unknown
/** This API is available in and after the `init` phase. */
logger: unknown
/** This API is available in and after the `init` phase. */
tokens: unknown
}
interface InitPluginApiDiscordCommon extends PreInitPluginApiDiscordCommon {
constants: typeof import('@revenge-mod/discord/common/constants')
flux: typeof import('@revenge-mod/discord/common/flux')
logger: typeof import('@revenge-mod/discord/common/logger')
tokens: typeof import('@revenge-mod/discord/common/tokens')
}
export type PluginApiDiscord = PreInitPluginApiDiscord | InitPluginApiDiscord
export namespace PluginApiDiscord {
export type Actions = typeof import('@revenge-mod/discord/actions')
export type Common = typeof import('@revenge-mod/discord/common')
export type Common =
| PreInitPluginApiDiscordCommon
| InitPluginApiDiscordCommon
export type Design = typeof import('@revenge-mod/discord/design')
export type Flux = typeof import('@revenge-mod/discord/flux')
export type Native = typeof import('@revenge-mod/discord/native')
@ -40,23 +67,49 @@ export namespace PreInitPluginApiDiscord {
export interface Modules {
mainTabsV2: typeof import('@revenge-mod/discord/modules/main_tabs_v2')
settings: typeof import('@revenge-mod/discord/modules/settings') &
typeof import('@revenge-mod/discord/modules/settings/renderer')
settings: typeof import('@revenge-mod/discord/modules/settings') & {
renderer: typeof import('@revenge-mod/discord/modules/settings/renderer')
}
}
}
export const discord = defineLazyProperties(
{
modules: defineLazyProperties({} as PreInitPluginApiDiscord.Modules, {
common: defineLazyProperties(
{
appStartPerformance: require('@revenge-mod/discord/common/app-start-performance'),
importTracker: require('@revenge-mod/discord/common/import-tracker'),
utils: require('@revenge-mod/discord/common/utils'),
} as InitPluginApiDiscordCommon,
{
constants: () => {
guardIndexInitialized('Discord.common.constants')
return DiscordCommonConstants
},
flux: () => {
guardIndexInitialized('Discord.common.flux')
return DiscordCommonFlux
},
logger: () => {
guardIndexInitialized('Discord.common.logger')
return DiscordCommonLogger
},
tokens: () => {
guardIndexInitialized('Discord.common.tokens')
return DiscordCommonTokens
},
},
),
modules: defineLazyProperties({} as PluginApiDiscord.Modules, {
mainTabsV2: () => {
return DiscordModulesMainTabsV2
},
settings: () => ({
...require('@revenge-mod/discord/modules/settings'),
...require('@revenge-mod/discord/modules/settings/renderer'),
renderer: require('@revenge-mod/discord/modules/settings/renderer'),
}),
}),
utils: defineLazyProperties({} as PreInitPluginApiDiscord.Utils, {
utils: defineLazyProperties({} as PluginApiDiscord.Utils, {
finders: () => {
return DiscordUtilsFinders
},
@ -64,15 +117,11 @@ export const discord = defineLazyProperties(
subscriptions: DiscordUtilsMetroSubscriptions,
}),
}),
} as PreInitPluginApiDiscord,
} as PluginApiDiscord,
{
actions: () => {
return DiscordActions
},
common: () => {
guardIndexInitialized('Discord.common')
return DiscordCommon
},
flux: () => {
return DiscordFlux
},

View file

@ -43,7 +43,7 @@ defineLazyProperties(pUnscopedApi, {
export function guardIndexInitialized(name: string) {
if (!isModuleInitialized(0))
throw new Error(
`Cannot access ${name} API before index module (ID 0) is initialized`,
`Cannot access ${name} API before the init phase: Index module (ID 0) must be initialized first.`,
)
}

View file

@ -26,7 +26,7 @@ export interface UnscopedPreInitPluginApi<
react: PluginApiReact
assets: typeof import('@revenge-mod/assets')
externals: PluginApiExternals
/** This API is not available in the `preInit` phase. */
/** This API is available in and after the `init` phase. */
components: unknown
discord: PreInitPluginApiDiscord
}

View file

@ -1,5 +1,5 @@
import { getAssetByName } from '@revenge-mod/assets'
import { TokensModuleId } from '@revenge-mod/discord/common'
import { TokensModuleId } from '@revenge-mod/discord/common/tokens'
import { lookupModule } from '@revenge-mod/modules/finders'
import {
createFilterGenerator,

View file

@ -246,8 +246,12 @@ function getLibraries() {
]),
library(discord, [
'actions',
'common',
'common/app-start-performance',
'common/constants',
'common/flux',
'common/import-tracker',
'common/logger',
'common/tokens',
'common/utils',
'design',
'flux',

View file

@ -18,7 +18,9 @@ registerInternalPlugin(
decorate,
unscoped: {
discord: {
common: { Logger },
common: {
logger: { Logger },
},
},
},
}) {

View file

@ -1,5 +1,5 @@
import { styles } from '@revenge-mod/components/_'
import { Tokens } from '@revenge-mod/discord/common'
import { Tokens } from '@revenge-mod/discord/common/tokens'
import { Design } from '@revenge-mod/discord/design'
import { ClientInfoModule } from '@revenge-mod/discord/native'
import { Clipboard } from '@revenge-mod/externals/react-native-clipboard'

View file

@ -1,5 +1,5 @@
import { getAssetIdByName } from '@revenge-mod/assets'
import { Tokens } from '@revenge-mod/discord/common'
import { Tokens } from '@revenge-mod/discord/common/tokens'
import { Design } from '@revenge-mod/discord/design'
import { Image } from 'react-native'

View file

@ -1,5 +1,5 @@
import { getAssetIdByName } from '@revenge-mod/assets'
import { Tokens } from '@revenge-mod/discord/common'
import { Tokens } from '@revenge-mod/discord/common/tokens'
import { Design } from '@revenge-mod/discord/design'
import { Image } from 'react-native'

View file

@ -1,4 +1,4 @@
import { Tokens } from '@revenge-mod/discord/common'
import { Tokens } from '@revenge-mod/discord/common/tokens'
import { Design } from '@revenge-mod/discord/design'
import { StyleSheet } from 'react-native'