/**
 * Converts inference engine output to human-readable .specly format
 */
import { LogicalComponentSpec } from './types.js';
export declare class SpeclyConverter {
    /**
     * Convert a LogicalComponentSpec to .specly format string
     */
    static toSpecly(spec: LogicalComponentSpec, componentName?: string): string;
    /**
     * Normalize entity data to [name, spec] entries.
     * Handles both object format { Name: spec } and array format [{ name: 'Name', ... }]
     */
    private static toNamedEntries;
    /**
     * Normalize attributes to [name, shorthandString] entries.
     * Handles object { name: "String required" } and array [{ name, type, required, ... }]
     */
    private static toAttributeEntries;
    /**
     * Normalize relationships to [name, shorthandString] entries.
     * Handles object { name: "belongsTo Target" } and array [{ name, type, target, ... }]
     */
    private static toRelationshipEntries;
    private static convertModel;
    private static convertController;
    private static convertAction;
    private static convertService;
    /**
     * Service operations and controller custom actions are the SAME schema type
     * (`CustomActionProperties`: description / parameters / returns / requires /
     * ensures / publishes / steps / uses). They are serialized by ONE method so
     * they can never field-drift apart again — the omission that nulled
     * steps-only operations (the 6.97.x service-rehoming crash) came from this
     * function having been a hand-maintained subset of convertAction. The
     * serializer-field-completeness contract test pins the shared field set.
     */
    private static convertOperation;
    private static convertEvent;
    private static convertView;
    private static formatValue;
    private static formatComplexValue;
    /**
     * Convert commands section (AST: array of CommandSpec or object keyed by name)
     */
    private static convertCommands;
    private static convertCommand;
    private static convertCommandParam;
    /**
     * Generic section passthrough using yaml.dump-style recursive serialization
     * For sections like distributions, constraints, measures, promotions
     */
    private static convertGenericSection;
    /**
     * Recursively serialize an object to YAML-like string
     */
    private static serializeObject;
}
/**
 * The canonical schema-driven `.specly` SHORTHAND writer (proposal
 * 2026-05-26-CANONICAL-SPECLY-SERIALIZER.md, Phase 1). Every producer of
 * human-facing `.specly` — inference (`spv infer`), analyse (the skeleton
 * emitter), and the dev-GUI generator — converts its own input shape to the
 * loose component-spec accepted here and renders through THIS one function,
 * instead of each hand-rolling a parallel renderer (the drift that produced
 * #77 + #86). It is vocabulary-gated (only schema keys emit) + DP3-aligned
 * (`import`/`export` singular). NOT to be confused with the parser's
 * `astToExpandedYaml`, which is the input-path re-validation *expander*
 * (different format + purpose) and is intentionally left separate.
 *
 * Accepts both object-form (`{ Model: {...} }`) and array-form
 * (`[{ name, ... }]`) sections — see `toNamedEntries`/`toAttributeEntries`.
 */
export declare function serializeSpecToYaml(spec: any, componentName?: string): string;
//# sourceMappingURL=specly-converter.d.ts.map