Skip to main content

createNativeEvent()

function createNativeEvent\<THandler\>(
   eventName: string, 
   wrapHandler: (handler: THandler) => (...args: unknown[]) => void, 
options?: NativeEventOptions): NativeEventApi\<THandler\>;

Defined in: src/lib/events/helpers.ts:184

Creates a typed wrapper around a FiveM native event.

This factory creates listen-only events (no emit capability) with:

  • Custom handler transformation (e.g., extracting source as first argument)
  • Proper cleanup via disposable pattern
  • Type safety for handler arguments

Use this for wrapping FiveM's built-in events like playerJoining, playerDropped, onResourceStart, gameEventTriggered, etc.

Type Parameters

Type ParameterDescription
THandler extends (...args: never[]) => voidThe typed handler signature users will provide.

Parameters

ParameterTypeDescription
eventNamestringThe FiveM native event name.
wrapHandler(handler: THandler) => (...args: unknown[]) => voidTransforms the typed handler into a raw FiveM handler.
options?NativeEventOptionsOptional configuration including source for tracking.

Returns

NativeEventApi<THandler>

An event object with a typed .on() method.

Examples

// Server: Wrap playerJoining with automatic source extraction
const playerJoining = createNativeEvent<(playerId: number) => void>(
    "playerJoining",
    (handler) => () => {
        const playerId = getCurrentSource();
        if (playerId !== null) handler(playerId);
    },
    { source: "lib/server/events" }
);
 
// Usage
const disposable = playerJoining.on((playerId) => {
    console.log(`Player ${playerId} is joining`);
});
 
// Cleanup
disposable.dispose();
// Client: Wrap gameEventTriggered with typed arguments
const gameEvent = createNativeEvent<(name: string, args: unknown[]) => void>(
    "gameEventTriggered",
    (handler) => (name: unknown, args: unknown) => {
        if (typeof name === "string" && Array.isArray(args)) {
            handler(name, args);
        }
    },
    { source: "lib/client/events" }
);
 
// Usage
gameEvent.on((name, args) => {
    console.log(`Game event: ${name}`, args);
});