import { JSONSchema7Definition } from "json-schema"; import { ILanguageConverter, IRNode } from "../types.js"; import { BaseConverterContext, BaseConverterOpts, GenerateTypeUtils, LanguageProfile } from "../converter/BaseConverter.js"; import { SwiftBaseConverter } from "./SwiftBaseConverter.js"; export interface SwiftConverterOpts extends BaseConverterOpts { serializer?: "codable" | "none"; accessLevel?: "public" | "internal"; /** * When true, nested object types are emitted as nested `struct` * declarations inside their parent's body, scoped to the parent's * namespace: * * public struct Body: Codable { * public let address: Address * public struct Address: Codable { public let street: String } * } * * rather than as top-level sibling declarations. Useful when emitting * multiple sibling schemas into one outer Swift `enum` namespace — * each parent's `Address` is name-scoped (`Body.Address` vs * `Response.Address`), eliminating cross-call collisions structurally. * * Default: `false` (extract to top-level siblings — the historical * behavior). Top-level enums and discriminated enums remain extracted * even when `inlineTypes` is `true`. */ inlineTypes?: boolean; } /** * The state-and-method surface that helper modules in `src/swift/` need to * operate on a SwiftConverter instance. SwiftConverter implements this; * helpers take it as their first argument. * * @internal */ export interface SwiftConverterContext extends BaseConverterContext { readonly isCodable: boolean; readonly accessLevel: "public" | "internal"; readonly inlineTypes: boolean; needsAnyCodable: boolean; readonly importsSet: Set; readonly docFormatNodes: WeakMap; readonly enumDecls: Map; readonly sealedEnumDecls: string[]; generateType(ir: IRNode, utils: GenerateTypeUtils): string; emitSwiftDiscriminatedEnum(ir: IRNode, utils: GenerateTypeUtils): string; } export declare class SwiftConverter extends SwiftBaseConverter implements ILanguageConverter, SwiftConverterContext { readonly code: string; readonly rootTypeName: string; readonly extractedTypeNames: string[]; readonly imports: string[]; readonly referencedNamedTypes: string[]; /** @internal Public for `BaseConverterContext`; treat as protected for subclasses. */ readonly languageProfile: LanguageProfile; /** @internal Mutated by SwiftConverter helper modules; not part of the public API. */ isCodable: boolean; /** @internal */ accessLevel: "public" | "internal"; /** @internal */ inlineTypes: boolean; /** @internal */ enumDecls: Map; /** @internal */ docFormatNodes: WeakMap; /** @internal */ sealedEnumDecls: string[]; /** @internal */ needsAnyCodable: boolean; constructor(schema: JSONSchema7Definition, opts?: SwiftConverterOpts); protected codableConformance(): string; /** @internal Public for `SwiftConverterContext`; treat as protected for subclasses. */ generateType(ir: IRNode, utils: GenerateTypeUtils): string; /** @internal Public for `BaseConverterContext`; treat as protected for subclasses. */ generateObjectType(ir: IRNode, utils: GenerateTypeUtils): string; /** @internal Public for `SwiftConverterContext`; treat as protected for subclasses. */ emitSwiftDiscriminatedEnum(ir: IRNode, utils: GenerateTypeUtils): string; }