/**
 * Library-runtime emitter — V2 Phase 3, Round 1.
 *
 * Handles `topology: 'library'` factories: providers that are consumed
 * as in-process imports, with no deployment instance entry.
 *
 * For each `import:` entry the consumer declares, this emitter produces:
 *   clients/<provider-name>.ts   — typed client module
 *
 * The typed client module:
 *   - Exports a `<ProviderName>Client` TypeScript interface matching
 *     the selected operations from `import.select`.
 *   - Exports a `<providerName>Client` constant that implements the
 *     interface by delegating to the resolved provider:
 *       * source = 'local'  → relative import to the provider's module.
 *       * source = 'npm'    → `import { X } from '<package-specifier>'`.
 *       * source = 'registry-*' → TODO comment + runtime throw (Round 1).
 *
 * The consuming controller (SalesReportController.ts, emitted by the
 * per-action-emitter's mechanical scaffold) imports this client module
 * and receives the client via constructor injection.
 *
 * --- Select grammar ---
 *
 * `import.select` entries follow two forms (V2 D2 resolution):
 *   - Dotted: `Charge.create`  → typed function for the specific operation.
 *   - Bare:   `AuthService`    → re-export of the entity's interface.
 *
 * Both forms share the same file; the emitter deduplicates by head entity.
 *
 * --- Round 1 limitations ---
 *
 * - No actual operation signature lookup (operations are typed as
 *   `(...args: unknown[]) => Promise<unknown>` unless the spec is provided
 *   and the target operation can be located). Exact signatures land in
 *   Round 2 when the resolver wires in full cross-spec type lookup.
 * - Registry sources: the resolver fetches real content (the registry resolver
 *   is wired). For `registry-component` the fetched `.specly` is persisted next
 *   to the client (`clients/<from>.imported.specly`) so the consume-half is
 *   non-lossy.
 *
 * --- Round 2 (model libraries) ---
 *
 * For `registry-component` imports that select MODELS (value objects /
 * entities — bare names matching a model in the fetched spec), the emitter
 * now produces REAL TypeScript interfaces (`export interface Money { ... }`)
 * derived from the imported model's attributes, instead of a throwing client.
 * See `imported-model-types.ts`. These are types, not runtime values, so no
 * client constant is emitted and `imports` stays empty — the consumer imports
 * the interfaces directly. Operation imports (dotted `Service.op` selects) and
 * registry-factory sources still emit the Round-1 throwing client (their
 * real-signature wiring is the remaining V2 "Round 2" for service topologies).
 */
import type { RuntimeEmitter, RuntimeEmitterContext, RuntimeEmitterResult } from './dispatcher.js';
/**
 * Library-runtime emitter implementation.
 *
 * One call to `emit()` processes a single `import:` entry and produces
 * one client file under `clients/<provider-filename>.ts`.
 */
export declare class LibraryRuntimeEmitter implements RuntimeEmitter {
    readonly topology: "library";
    emit(ctx: RuntimeEmitterContext): Promise<RuntimeEmitterResult>;
}
//# sourceMappingURL=library.d.ts.map