CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-intlify--shared

Shared utility package for intlify project providing performance tools, string formatting, event emitters, and type checking utilities.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

event-system.mddocs/

Event System

Type-safe event emitter implementation with support for wildcard listeners and strongly-typed event payloads. Forked from the mitt library with TypeScript enhancements.

Capabilities

Event Emitter Creation

Create a new event emitter instance with type-safe event handling.

/**
 * Create a type-safe event emitter
 * @returns Event emitter instance with on/off/emit methods
 */
function createEmitter<Events extends Record<EventType, unknown>>(): Emittable<Events>;

Usage Example:

import { createEmitter, type Emittable } from "@intlify/shared";

// Define event types
interface MyEvents {
  userLogin: { userId: string; timestamp: number };
  userLogout: { userId: string };
  dataUpdate: { data: any[] };
}

// Create typed emitter
const emitter = createEmitter<MyEvents>();

// Type-safe event handling
emitter.on("userLogin", (payload) => {
  // payload is automatically typed as { userId: string; timestamp: number }
  console.log(`User ${payload?.userId} logged in at ${payload?.timestamp}`);
});

emitter.emit("userLogin", { userId: "123", timestamp: Date.now() });

Event Registration

Register event handlers for specific events or all events using wildcard.

/**
 * Register an event handler for specific event type
 * @param event - Event name or "*" for wildcard
 * @param handler - Event handler function
 */
on<Key extends keyof Events>(
  event: Key | '*',
  handler: EventHandler<Events[Key]> | WildcardEventHandler<Events>
): void;

Usage Examples:

import { createEmitter } from "@intlify/shared";

interface AppEvents {
  error: { message: string; code: number };
  success: { message: string };
}

const emitter = createEmitter<AppEvents>();

// Register specific event handler
emitter.on("error", (payload) => {
  console.error(`Error ${payload?.code}: ${payload?.message}`);
});

// Register wildcard handler for all events
emitter.on("*", (eventName, payload) => {
  console.log(`Event ${String(eventName)} fired:`, payload);
});

Event Deregistration

Remove event handlers for specific events or wildcard handlers.

/**
 * Remove an event handler for specific event type
 * @param event - Event name or "*" for wildcard
 * @param handler - Event handler function to remove
 */
off<Key extends keyof Events>(
  event: Key | '*',
  handler: EventHandler<Events[Key]> | WildcardEventHandler<Events>
): void;

Usage Example:

import { createEmitter } from "@intlify/shared";

const emitter = createEmitter<{ test: string }>();

const handler = (payload?: string) => {
  console.log("Received:", payload);
};

// Register handler
emitter.on("test", handler);

// Later, remove the same handler
emitter.off("test", handler);

Event Emission

Emit events to trigger all registered handlers.

/**
 * Emit an event to trigger all registered handlers
 * @param event - Event name to emit
 * @param payload - Optional event payload
 */
emit<Key extends keyof Events>(
  event: Key,
  payload?: Events[Key]
): void;

Usage Example:

import { createEmitter } from "@intlify/shared";

interface NotificationEvents {
  notification: { 
    title: string; 
    body: string; 
    type: "info" | "warning" | "error" 
  };
}

const emitter = createEmitter<NotificationEvents>();

emitter.on("notification", (payload) => {
  if (payload) {
    showNotification(payload.title, payload.body, payload.type);
  }
});

// Emit notification event
emitter.emit("notification", {
  title: "Update Available",
  body: "A new version is available for download",
  type: "info"
});

Core Types

Event Type Definition

/**
 * Valid event identifier types
 */
type EventType = string | symbol;

Event Handler Types

/**
 * Standard event handler function
 */
type EventHandler<T = unknown> = (payload?: T) => void;

/**
 * Wildcard event handler that receives event name and payload
 */
type WildcardEventHandler<T = Record<string, unknown>> = (
  event: keyof T,
  payload?: T[keyof T]
) => void;

Event Handler Collections

/**
 * Array of event handlers for a specific event
 */
type EventHandlerList<T = unknown> = Array<EventHandler<T>>;

/**
 * Array of wildcard event handlers
 */
type WildcardEventHandlerList<T = Record<string, unknown>> = Array<
  WildcardEventHandler<T>
>;

/**
 * Map storing all event handlers by event name
 */
type EventHandlerMap<Events extends Record<EventType, unknown>> = Map<
  keyof Events | '*',
  EventHandlerList<Events[keyof Events]> | WildcardEventHandlerList<Events>
>;

Emittable Interface

/**
 * Core event emitter interface with type safety
 */
interface Emittable<Events extends Record<EventType, unknown> = {}> {
  /**
   * Map of registered event handlers by event name
   */
  events: EventHandlerMap<Events>;

  /**
   * Register an event handler
   * @param event - Event name or "*" for wildcard
   * @param handler - Handler function
   */
  on<Key extends keyof Events>(
    event: Key | '*',
    handler: EventHandler<Events[Key]> | WildcardEventHandler<Events>
  ): void;

  /**
   * Remove an event handler
   * @param event - Event name or "*" for wildcard  
   * @param handler - Handler function to remove
   */
  off<Key extends keyof Events>(
    event: Key | '*',
    handler: EventHandler<Events[Key]> | WildcardEventHandler<Events>
  ): void;

  /**
   * Emit an event to all registered handlers
   * @param event - Event name to emit
   * @param payload - Event payload
   */
  emit<Key extends keyof Events>(
    event: Key,
    payload?: Events[Key]
  ): void;
}

Advanced Usage

Multiple Handlers

import { createEmitter } from "@intlify/shared";

interface LogEvents {
  log: { level: string; message: string; timestamp: number };
}

const logger = createEmitter<LogEvents>();

// Multiple handlers for same event
logger.on("log", (payload) => {
  console.log(`[${payload?.level}] ${payload?.message}`);
});

logger.on("log", (payload) => {
  if (payload?.level === "error") {
    sendToErrorReporting(payload);
  }
});

// Wildcard logger
logger.on("*", (eventName, payload) => {
  saveToDatabase(String(eventName), payload);
});

Handler Cleanup

import { createEmitter } from "@intlify/shared";

const emitter = createEmitter<{ cleanup: void }>();

// Store handler reference for later cleanup
const cleanupHandler = () => {
  console.log("Cleaning up resources");
};

emitter.on("cleanup", cleanupHandler);

// Later, remove handler to prevent memory leaks
emitter.off("cleanup", cleanupHandler);

docs

environment-performance.md

event-system.md

index.md

object-utilities.md

string-processing.md

type-checking.md

warning-system.md

tile.json