# All files / src/di tokens.ts

100% Statements 1/1
100% Branches 0/0
100% Functions 0/0
100% Lines 1/1

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51

    3x

     /**
     * Typed Dependency Injection tokens.
     *
     * Each token is a unique Symbol used to register and resolve a service
     * from the {@link DIContainer}.  Centralising them here avoids "magic"
     * inline Symbol literals and guarantees consistent identifiers across
     * the whole application.
     *
     * ISMS Policy: AC-003 (Least Privilege), SC-002 (Input Validation)
     *
     * @module di/tokens
     *
     * @example
     * ```typescript
     * import { TOKENS } from './tokens.js';
     * import { container } from './container.js';
     *
     * const metricsService = container.resolve<MetricsService>(TOKENS.MetricsService);
     * ```
     */

    /**
     * Centralised DI token registry.
     *
     * `as const` makes the registry object itself readonly and ensures each
     * property value is inferred as `symbol` (not widened to `object`).
     * For type-level uniqueness, each `Symbol(...)` is a distinct runtime value;
     * `DIToken` is the union of all token values for generic container utilities.
     *
     * @since 0.8.0
     */
    export const TOKENS = {
      EPClient: Symbol('EPClient'),

      MetricsService: Symbol('MetricsService'),

      AuditLogger: Symbol('AuditLogger'),

      RateLimiter: Symbol('RateLimiter'),

      HealthService: Symbol('HealthService'),
    } as const;

    /**
     * Union type of all registered DI token values.
     * Useful for writing type-safe generic container utilities.
     *
     * @since 0.8.0
     */
    export type DIToken = (typeof TOKENS)[keyof typeof TOKENS];