Skip to content

Commit 090c356

Browse files
committed
Merge branch 'v1-beta' of github.com:newcore-network/opencore into v1-beta
2 parents acd4d90 + 215e9eb commit 090c356

15 files changed

Lines changed: 142 additions & 4 deletions

File tree

src/runtime/adapter-runtime.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
export type OpenCoreRuntimeKind = 'node' | 'fivem' | 'redm' | 'ragemp'
2+
3+
export interface OpenCoreRuntimeSideHints {
4+
platform?: 'node' | 'neutral' | 'browser'
5+
target?: string
6+
format?: 'cjs' | 'esm' | 'iife'
7+
outFileName?: string
8+
outputRoot?: 'resource' | 'packages' | 'client_packages'
9+
}
10+
11+
export interface OpenCoreRuntimeManifestHints {
12+
kind?: 'fxmanifest' | 'none'
13+
}
14+
15+
export interface OpenCoreRuntimeHints {
16+
runtime: OpenCoreRuntimeKind
17+
server?: OpenCoreRuntimeSideHints
18+
client?: OpenCoreRuntimeSideHints
19+
manifest?: OpenCoreRuntimeManifestHints
20+
}
21+
22+
export function defineRuntimeHints(hints: OpenCoreRuntimeHints): OpenCoreRuntimeHints {
23+
return hints
24+
}

src/runtime/client/adapter/client-adapter.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import type { DependencyContainer } from 'tsyringe'
22
import { EventsAPI } from '../../../adapters/contracts/transport/events.api'
33
import { MessagingTransport } from '../../../adapters/contracts/transport/messaging.transport'
44
import { RpcAPI } from '../../../adapters/contracts/transport/rpc.api'
5+
import type { OpenCoreRuntimeHints } from '../../adapter-runtime'
56
import { IClientRuntimeBridge } from './runtime-bridge'
67

78
/**
89
* Public contract implemented by external client adapters.
910
*/
1011
export interface OpenCoreClientAdapter {
1112
readonly name: string
13+
readonly runtime?: OpenCoreRuntimeHints
1214
register(context: ClientAdapterContext): void | Promise<void>
1315
}
1416

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export * from './client-adapter'
2+
export * from '../../adapter-runtime'
23
export * from './local-player-bridge'
34
export * from './registry'
45
export * from './runtime-bridge'

src/runtime/client/client-bootstrap.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
type ClientInitOptions,
1212
type ClientMode,
1313
getClientRuntimeContext,
14+
resolveClientAdapter,
1415
setClientRuntimeContext,
1516
} from './client-runtime'
1617
import { getClientControllerRegistry } from './decorators'
@@ -136,11 +137,12 @@ async function tryImportAutoLoad() {
136137
*/
137138
export async function initClientCore(options: ClientInitOptions = {}) {
138139
const mode: ClientMode = options.mode ?? 'CORE'
140+
const activeAdapter = resolveClientAdapter(options)
139141

140142
// Check if already initialized
141143
const existingContext = getClientRuntimeContext()
142144
if (existingContext?.isInitialized) {
143-
assertClientAdapterCompatibility(options.adapter)
145+
assertClientAdapterCompatibility(activeAdapter)
144146

145147
// Register system processors for the active bundle if needed.
146148
registerSystemClient()
@@ -162,7 +164,7 @@ export async function initClientCore(options: ClientInitOptions = {}) {
162164
)
163165
}
164166

165-
await installClientAdapter(options.adapter)
167+
await installClientAdapter(activeAdapter)
166168
loggers.bootstrap.debug('Client adapter registered', {
167169
adapter: getActiveClientAdapterName() ?? 'unknown',
168170
})

src/runtime/client/client-runtime.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { OpenCoreClientPlugin } from './library/plugin'
2+
import { getInjectedClientAdapter } from '../project-adapter'
23

34
/**
45
* Client Runtime Configuration
@@ -84,3 +85,7 @@ export function isClientInitialized(): boolean {
8485
export function __resetClientRuntimeContextForTests(): void {
8586
runtimeContext = null
8687
}
88+
89+
export function resolveClientAdapter(options: ClientInitOptions = {}) {
90+
return options.adapter ?? getInjectedClientAdapter()
91+
}

src/runtime/client/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export * from './api'
2+
export * from '../adapter-runtime'
23
export { Client, createClientRuntime } from './client-api-runtime'
34
export type { ClientApi } from './client-api-runtime'
45
export type {

src/runtime/project-adapter.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import type { OpenCoreClientAdapter } from './client/adapter'
2+
import type { OpenCoreServerAdapter } from './server/adapter'
3+
4+
declare global {
5+
var __OPENCORE_PROJECT_SERVER_ADAPTER__: OpenCoreServerAdapter | undefined
6+
var __OPENCORE_PROJECT_CLIENT_ADAPTER__: OpenCoreClientAdapter | undefined
7+
}
8+
9+
export function getInjectedServerAdapter(): OpenCoreServerAdapter | undefined {
10+
return globalThis.__OPENCORE_PROJECT_SERVER_ADAPTER__
11+
}
12+
13+
export function getInjectedClientAdapter(): OpenCoreClientAdapter | undefined {
14+
return globalThis.__OPENCORE_PROJECT_CLIENT_ADAPTER__
15+
}
16+
17+
export function __resetInjectedProjectAdaptersForTests(): void {
18+
delete globalThis.__OPENCORE_PROJECT_SERVER_ADAPTER__
19+
delete globalThis.__OPENCORE_PROJECT_CLIENT_ADAPTER__
20+
}

src/runtime/server/adapter/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export * from './node-server-adapter'
2+
export * from '../../adapter-runtime'
23
export * from './player-adapter'
34
export * from './registry'
45
export * from './serialization'

src/runtime/server/adapter/server-adapter.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import type { DependencyContainer } from 'tsyringe'
22
import { EventsAPI } from '../../../adapters/contracts/transport/events.api'
33
import { MessagingTransport } from '../../../adapters/contracts/transport/messaging.transport'
44
import { RpcAPI } from '../../../adapters/contracts/transport/rpc.api'
5+
import type { OpenCoreRuntimeHints } from '../../adapter-runtime'
56
import { ServerPlayerAdapter } from './player-adapter'
67

78
/**
89
* Public contract implemented by external server adapters.
910
*/
1011
export interface OpenCoreServerAdapter {
1112
readonly name: string
13+
readonly runtime?: OpenCoreRuntimeHints
1214
register(context: ServerAdapterContext): void | Promise<void>
1315
}
1416

src/runtime/server/bootstrap.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { GLOBAL_CONTAINER, MetadataScanner } from '../../kernel/di/index'
55
import { getLogLevel, LogLevelLabels, loggers } from '../../kernel/logger'
66
import { createNodeServerAdapter } from './adapter/node-server-adapter'
77
import { installServerAdapter } from './adapter/registry'
8+
import { getInjectedServerAdapter } from '../project-adapter'
89
import { PrincipalProviderContract } from './contracts/index'
910
import { BinaryServiceMetadata, getServerBinaryServiceRegistry } from './decorators/binaryService'
1011
import { getServerControllerRegistry } from './decorators/controller'
@@ -111,12 +112,14 @@ export async function initServer(
111112
scope: getFrameworkModeScope(ctx.mode),
112113
})
113114

115+
const activeAdapter = options.adapter ?? getInjectedServerAdapter() ?? createNodeServerAdapter()
116+
114117
// Register platform-specific capabilities through the selected server adapter.
115-
await installServerAdapter(options.adapter ?? createNodeServerAdapter())
118+
await installServerAdapter(activeAdapter)
116119

117120
const platformContext = GLOBAL_CONTAINER.resolve(IPlatformContext as any) as IPlatformContext
118121
loggers.bootstrap.debug('Loading server Adapter ', {
119-
adapter: options.adapter?.name ?? 'node',
122+
adapter: activeAdapter.name,
120123
game: platformContext.gameProfile,
121124
})
122125

0 commit comments

Comments
 (0)