2.5 KiB
2.5 KiB
service-registry
(no submodules)
Purpose
TypeScript module augmentation declaring the sseService slot on the @suaveplan/api-plugin/service-registry ServiceRegistry interface. Importing this module for its side effects makes ctx.getService("sseService") return SseService | undefined with no cast at the call site — the package root barrel imports it automatically so every consumer of @suaveplan/api-plugin-sse gets the typed slot.
Features
- Side-effect-only augmentation — exports an empty
typeso the file participates in the module graph without contributing runtime code. - Mirrors the host's
appslot declaration so the plugin can run in isolation against a stand-alone Hono instance (TypeScript merges duplicate declarations safely). - Co-located with the plugin's types so a single import path establishes the augmentation.
- Excluded from coverage / docs gates because it carries no executable code.
Usage: Basic
// Importing the package barrel surfaces the augmentation automatically.
import "@suaveplan/api-plugin-sse";
// Now every ctx.getService("sseService") call is typed.
function handle(ctx: PluginContext) {
const sse = ctx.getService("sseService");
sse?.broadcast("c", { data: 1 });
}
Usage: Advanced
// Explicit augmentation import — useful when consuming a single subpath
// without pulling the whole barrel.
import "@suaveplan/api-plugin-sse/registry/service-registry";
import type { SseService } from "@suaveplan/api-plugin-sse/services/service";
declare const ctx: PluginContext;
const sse: SseService | undefined = ctx.getService("sseService");
API Reference
-
No exported values. The module augments:
declare module "@suaveplan/api-plugin/service-registry" { interface ServiceRegistry { sseService: SseService; app: Hono; } }
Implementation Notes
- This file does NOT export
typealiases or values — it exists solely for module-augmentation side effects. Theexport type {}at the end keeps TypeScript happy with isolated modules. - The
appre-declaration is intentional and harmless.@suaveplan/apideclares the same slot; TypeScript merges duplicate interface declarations and the two contribute identical types. - Excluded from coverage in
vitest.config.ts(src/registry/service-registry.ts) because there is no runtime to cover; type-level conformance is asserted in theapi-plugin-sse.spec-conformance.test.tssuite viaexpectTypeOf.