/** * TODO: * - Use conventional ordering of declarations * - Implement Objective-C enumeration, e.g. __C.NSURL? */ import { TargetClassDescriptor, TargetClassMetadata, TargetEnumDescriptor, TargetEnumMetadata, TargetMetadata, TargetProtocolDescriptor, TargetStructDescriptor, TargetStructMetadata, TargetTypeContextDescriptor, TargetValueMetadata } from "../abi/metadata.js"; import { RawFields } from "./buffer.js"; import { ProtocolConformanceMap } from "./macho.js"; type SwiftTypeKind = "Class" | "Enum" | "Struct"; export declare abstract class Type { readonly kind: SwiftTypeKind; readonly descriptor: TargetTypeContextDescriptor; readonly $conformances: ProtocolConformanceMap; readonly $name: string; readonly $fields?: FieldDetails[]; readonly $moduleName: string; abstract readonly $metadata: TargetMetadata; constructor(kind: SwiftTypeKind, descriptor: TargetTypeContextDescriptor, $conformances: ProtocolConformanceMap); get $metadataPointer(): NativePointer; toJSON(): { $fields: FieldDetails[]; $conformances: string[]; }; } export declare class Class extends Type { readonly $methods: MethodDetails[]; constructor(descriptor: TargetClassDescriptor, conformances: ProtocolConformanceMap); get $metadata(): TargetClassMetadata; toJSON(): { $fields: FieldDetails[]; $conformances: string[]; } & { $methods: MethodDetails[]; }; } export declare class Struct extends Type { constructor(descriptor: TargetStructDescriptor, conformances: ProtocolConformanceMap); get $metadata(): TargetStructMetadata; } export declare class Enum extends Type { constructor(descriptor: TargetEnumDescriptor, conformances: ProtocolConformanceMap); get $metadata(): TargetEnumMetadata; } export declare class Protocol { readonly descriptor: TargetProtocolDescriptor; readonly name: string; readonly numRequirements: number; readonly isClassOnly: boolean; readonly moduleName: string; constructor(descriptor: TargetProtocolDescriptor); toJSON(): { numRequirements: number; isClassOnly: boolean; }; } export declare class ProtocolComposition { readonly protocols: Protocol[]; readonly numProtocols: number; readonly isClassOnly: boolean; constructor(...protocols: Protocol[]); get sizeofExistentialContainer(): number; static fromSignature(sig: string): ProtocolComposition; } export declare abstract class RuntimeInstance { abstract readonly $metadata: TargetMetadata; abstract readonly handle: NativePointer; equals(other: RuntimeInstance): boolean; toJSON(): { handle: NativePointer; }; static fromAdopted(handle: NativePointer, metadata: TargetMetadata): RuntimeInstance; static fromExistentialContainer(handle: NativePointer, composition: ProtocolComposition): RuntimeInstance; } export declare abstract class ValueInstance extends RuntimeInstance { readonly $metadata: TargetValueMetadata; static fromCopy(src: NativePointer, metadata: TargetValueMetadata): ValueInstance; static fromAdopted(handle: NativePointer, metadata: TargetValueMetadata): ValueInstance; static fromRaw(raw: RawFields, metadata: TargetValueMetadata): ValueInstance; } interface StructValueConstructionOptions { raw?: RawFields; handle?: NativePointer; } export declare class StructValue implements ValueInstance { readonly $metadata: TargetStructMetadata; readonly handle: NativePointer; constructor(type: Struct | TargetStructMetadata, options: StructValueConstructionOptions); equals(other: StructValue): boolean; toJSON(): { handle: NativePointer; }; } interface EnumValueConstructionOptions { handle?: NativePointer; tag?: number; payload?: RuntimeInstance; raw?: RawFields; } export declare class EnumValue implements ValueInstance { #private; readonly $metadata: TargetEnumMetadata; readonly handle: NativePointer; readonly descriptor: TargetEnumDescriptor; constructor(type: Enum | TargetEnumMetadata, options: EnumValueConstructionOptions); get $tag(): number; get $payload(): RuntimeInstance; equals(e: EnumValue): boolean; toJSON(): { handle: NativePointer; $tag: number; $payload: RuntimeInstance; }; } export declare class ObjectInstance extends RuntimeInstance { #private; readonly handle: NativePointer; readonly $metadata: TargetClassMetadata; constructor(handle: NativePointer); } interface FieldDetails { name: string; typeName?: string; isVar?: boolean; } type MethodType = "Init" | "Getter" | "Setter" | "ModifyCoroutine" | "ReadCoroutine" | "Method"; interface MethodDetails { address: NativePointer; name: string; type: MethodType; } export {};