import { Schema } from "effect";
/**
 * CIP-57 Plutus Blueprint types defined using Effect Schema
 *
 * @see https://cips.cardano.org/cip/CIP-0057
 * @since 2.0.0
 * @category blueprint
 */
export type BlueprintCompilerType = {
    readonly name: string;
    readonly version: string;
};
export type BlueprintPreambleType = {
    readonly title: string;
    readonly description?: string;
    readonly version: string;
    readonly plutusVersion: "v1" | "v2" | "v3";
    readonly compiler?: BlueprintCompilerType;
    readonly license?: string;
};
export type SchemaRefType = {
    readonly $ref: string;
};
export type BytesDefinitionType = {
    readonly title?: string;
    readonly description?: string;
    readonly dataType: "bytes";
};
export type IntegerDefinitionType = {
    readonly title?: string;
    readonly description?: string;
    readonly dataType: "integer";
};
export type DataDefinitionType = {
    readonly title: "Data";
    readonly description?: string;
};
export type EmptySchemaType = {};
export type ConstructorFieldType = {
    readonly title?: string;
    readonly description?: string;
    readonly $ref?: string;
    readonly schema?: SchemaDefinitionType;
};
export type ConstructorDefinitionType = {
    readonly title?: string;
    readonly description?: string;
    readonly dataType: "constructor";
    readonly index: number;
    readonly fields: ReadonlyArray<ConstructorFieldType>;
};
export type UnionDefinitionType = {
    readonly title?: string;
    readonly anyOf: ReadonlyArray<SchemaDefinitionType>;
};
export type ListDefinitionType = {
    readonly title?: string;
    readonly description?: string;
    readonly dataType: "list";
    readonly items: SchemaDefinitionType | SchemaRefType;
};
export type MapDefinitionType = {
    readonly title?: string;
    readonly description?: string;
    readonly dataType: "map";
    readonly keys: SchemaDefinitionType | SchemaRefType;
    readonly values: SchemaDefinitionType | SchemaRefType;
};
export type SchemaDefinitionType = BytesDefinitionType | IntegerDefinitionType | DataDefinitionType | EmptySchemaType | SchemaRefType | ConstructorDefinitionType | UnionDefinitionType | ListDefinitionType | MapDefinitionType;
export type ParameterSchemaType = {
    readonly title?: string;
    readonly schema: SchemaDefinitionType;
};
export type ValidatorDefinitionType = {
    readonly title: string;
    readonly description?: string;
    readonly datum?: ParameterSchemaType;
    readonly redeemer?: ParameterSchemaType;
    readonly parameters?: ReadonlyArray<ParameterSchemaType>;
    readonly compiledCode: string;
    readonly hash: string;
};
export type PlutusBlueprint = {
    readonly preamble: BlueprintPreambleType;
    readonly validators: ReadonlyArray<ValidatorDefinitionType>;
    readonly definitions: Record<string, SchemaDefinitionType>;
};
export declare const BlueprintCompiler: Schema.Struct<{
    name: typeof Schema.String;
    version: typeof Schema.String;
}>;
export declare const BlueprintPreamble: Schema.Struct<{
    title: typeof Schema.String;
    description: Schema.optional<typeof Schema.String>;
    version: typeof Schema.String;
    plutusVersion: Schema.Literal<["v1", "v2", "v3"]>;
    compiler: Schema.optional<Schema.Struct<{
        name: typeof Schema.String;
        version: typeof Schema.String;
    }>>;
    license: Schema.optional<typeof Schema.String>;
}>;
export declare const SchemaRef: Schema.Struct<{
    $ref: typeof Schema.String;
}>;
export declare const BaseSchemaDefinition: Schema.Struct<{
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
}>;
export declare const BytesDefinition: Schema.Struct<{
    dataType: Schema.Literal<["bytes"]>;
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
}>;
export declare const IntegerDefinition: Schema.Struct<{
    dataType: Schema.Literal<["integer"]>;
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
}>;
export declare const DataDefinition: Schema.Struct<{
    title: Schema.Literal<["Data"]>;
    description: Schema.optional<typeof Schema.String>;
}>;
export declare const EmptySchema: Schema.Struct<{}>;
declare const ConstructorField_base: Schema.Class<ConstructorField, {
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
    $ref: Schema.optional<typeof Schema.String>;
    schema: Schema.optional<Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>>;
}, Schema.Struct.Encoded<{
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
    $ref: Schema.optional<typeof Schema.String>;
    schema: Schema.optional<Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>>;
}>, never, {
    readonly description?: string | undefined;
} & {
    readonly title?: string | undefined;
} & {
    readonly schema?: SchemaDefinitionType | undefined;
} & {
    readonly $ref?: string | undefined;
}, {}, {}>;
/**
 * Constructor field with optional schema reference (recursive)
 */
export declare class ConstructorField extends ConstructorField_base {
}
declare const ConstructorDefinition_base: Schema.Class<ConstructorDefinition, {
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
    dataType: Schema.Literal<["constructor"]>;
    index: typeof Schema.Number;
    fields: Schema.Array$<Schema.suspend<ConstructorField, {
        readonly description?: string | undefined;
        readonly title?: string | undefined;
        readonly schema?: SchemaDefinitionType | undefined;
        readonly $ref?: string | undefined;
    }, never>>;
}, Schema.Struct.Encoded<{
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
    dataType: Schema.Literal<["constructor"]>;
    index: typeof Schema.Number;
    fields: Schema.Array$<Schema.suspend<ConstructorField, {
        readonly description?: string | undefined;
        readonly title?: string | undefined;
        readonly schema?: SchemaDefinitionType | undefined;
        readonly $ref?: string | undefined;
    }, never>>;
}>, never, {
    readonly description?: string | undefined;
} & {
    readonly fields: readonly ConstructorField[];
} & {
    readonly title?: string | undefined;
} & {
    readonly index: number;
} & {
    readonly dataType: "constructor";
}, {}, {}>;
/**
 * Constructor definition (recursive)
 */
export declare class ConstructorDefinition extends ConstructorDefinition_base {
}
declare const UnionDefinition_base: Schema.Class<UnionDefinition, {
    title: Schema.optional<typeof Schema.String>;
    anyOf: Schema.Array$<Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>>;
}, Schema.Struct.Encoded<{
    title: Schema.optional<typeof Schema.String>;
    anyOf: Schema.Array$<Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>>;
}>, never, {
    readonly title?: string | undefined;
} & {
    readonly anyOf: readonly SchemaDefinitionType[];
}, {}, {}>;
/**
 * Union/Enum definition (recursive)
 */
export declare class UnionDefinition extends UnionDefinition_base {
}
declare const ListDefinition_base: Schema.Class<ListDefinition, {
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
    dataType: Schema.Literal<["list"]>;
    items: Schema.Union<[Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>, Schema.Struct<{
        $ref: typeof Schema.String;
    }>]>;
}, Schema.Struct.Encoded<{
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
    dataType: Schema.Literal<["list"]>;
    items: Schema.Union<[Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>, Schema.Struct<{
        $ref: typeof Schema.String;
    }>]>;
}>, never, {
    readonly description?: string | undefined;
} & {
    readonly title?: string | undefined;
} & {
    readonly items: SchemaDefinitionType | {
        readonly $ref: string;
    };
} & {
    readonly dataType: "list";
}, {}, {}>;
/**
 * List definition (recursive)
 */
export declare class ListDefinition extends ListDefinition_base {
}
declare const MapDefinition_base: Schema.Class<MapDefinition, {
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
    dataType: Schema.Literal<["map"]>;
    keys: Schema.Union<[Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>, Schema.Struct<{
        $ref: typeof Schema.String;
    }>]>;
    values: Schema.Union<[Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>, Schema.Struct<{
        $ref: typeof Schema.String;
    }>]>;
}, Schema.Struct.Encoded<{
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
    dataType: Schema.Literal<["map"]>;
    keys: Schema.Union<[Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>, Schema.Struct<{
        $ref: typeof Schema.String;
    }>]>;
    values: Schema.Union<[Schema.suspend<SchemaDefinitionType, SchemaDefinitionType, never>, Schema.Struct<{
        $ref: typeof Schema.String;
    }>]>;
}>, never, {
    readonly keys: SchemaDefinitionType | {
        readonly $ref: string;
    };
} & {
    readonly values: SchemaDefinitionType | {
        readonly $ref: string;
    };
} & {
    readonly description?: string | undefined;
} & {
    readonly title?: string | undefined;
} & {
    readonly dataType: "map";
}, {}, {}>;
/**
 * Map definition (recursive)
 */
export declare class MapDefinition extends MapDefinition_base {
}
export declare const SchemaDefinition: Schema.Union<[Schema.Struct<{
    dataType: Schema.Literal<["bytes"]>;
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
}>, Schema.Struct<{
    dataType: Schema.Literal<["integer"]>;
    title: Schema.optional<typeof Schema.String>;
    description: Schema.optional<typeof Schema.String>;
}>, typeof ConstructorDefinition, typeof UnionDefinition, Schema.Struct<{
    title: Schema.Literal<["Data"]>;
    description: Schema.optional<typeof Schema.String>;
}>, Schema.Struct<{
    $ref: typeof Schema.String;
}>, Schema.Struct<{}>, typeof ListDefinition, typeof MapDefinition]>;
export declare const ParameterSchema: Schema.Struct<{
    title: Schema.optional<typeof Schema.String>;
    schema: Schema.Union<[Schema.Struct<{
        dataType: Schema.Literal<["bytes"]>;
        title: Schema.optional<typeof Schema.String>;
        description: Schema.optional<typeof Schema.String>;
    }>, Schema.Struct<{
        dataType: Schema.Literal<["integer"]>;
        title: Schema.optional<typeof Schema.String>;
        description: Schema.optional<typeof Schema.String>;
    }>, typeof ConstructorDefinition, typeof UnionDefinition, Schema.Struct<{
        title: Schema.Literal<["Data"]>;
        description: Schema.optional<typeof Schema.String>;
    }>, Schema.Struct<{
        $ref: typeof Schema.String;
    }>, Schema.Struct<{}>, typeof ListDefinition, typeof MapDefinition]>;
}>;
export declare const ValidatorDefinition: Schema.Struct<{
    title: typeof Schema.String;
    description: Schema.optional<typeof Schema.String>;
    datum: Schema.optional<Schema.Struct<{
        title: Schema.optional<typeof Schema.String>;
        schema: Schema.Union<[Schema.Struct<{
            dataType: Schema.Literal<["bytes"]>;
            title: Schema.optional<typeof Schema.String>;
            description: Schema.optional<typeof Schema.String>;
        }>, Schema.Struct<{
            dataType: Schema.Literal<["integer"]>;
            title: Schema.optional<typeof Schema.String>;
            description: Schema.optional<typeof Schema.String>;
        }>, typeof ConstructorDefinition, typeof UnionDefinition, Schema.Struct<{
            title: Schema.Literal<["Data"]>;
            description: Schema.optional<typeof Schema.String>;
        }>, Schema.Struct<{
            $ref: typeof Schema.String;
        }>, Schema.Struct<{}>, typeof ListDefinition, typeof MapDefinition]>;
    }>>;
    redeemer: Schema.optional<Schema.Struct<{
        title: Schema.optional<typeof Schema.String>;
        schema: Schema.Union<[Schema.Struct<{
            dataType: Schema.Literal<["bytes"]>;
            title: Schema.optional<typeof Schema.String>;
            description: Schema.optional<typeof Schema.String>;
        }>, Schema.Struct<{
            dataType: Schema.Literal<["integer"]>;
            title: Schema.optional<typeof Schema.String>;
            description: Schema.optional<typeof Schema.String>;
        }>, typeof ConstructorDefinition, typeof UnionDefinition, Schema.Struct<{
            title: Schema.Literal<["Data"]>;
            description: Schema.optional<typeof Schema.String>;
        }>, Schema.Struct<{
            $ref: typeof Schema.String;
        }>, Schema.Struct<{}>, typeof ListDefinition, typeof MapDefinition]>;
    }>>;
    parameters: Schema.optional<Schema.Array$<Schema.Struct<{
        title: Schema.optional<typeof Schema.String>;
        schema: Schema.Union<[Schema.Struct<{
            dataType: Schema.Literal<["bytes"]>;
            title: Schema.optional<typeof Schema.String>;
            description: Schema.optional<typeof Schema.String>;
        }>, Schema.Struct<{
            dataType: Schema.Literal<["integer"]>;
            title: Schema.optional<typeof Schema.String>;
            description: Schema.optional<typeof Schema.String>;
        }>, typeof ConstructorDefinition, typeof UnionDefinition, Schema.Struct<{
            title: Schema.Literal<["Data"]>;
            description: Schema.optional<typeof Schema.String>;
        }>, Schema.Struct<{
            $ref: typeof Schema.String;
        }>, Schema.Struct<{}>, typeof ListDefinition, typeof MapDefinition]>;
    }>>>;
    compiledCode: typeof Schema.String;
    hash: typeof Schema.String;
}>;
export declare const PlutusBlueprint: Schema.Struct<{
    preamble: Schema.Struct<{
        title: typeof Schema.String;
        description: Schema.optional<typeof Schema.String>;
        version: typeof Schema.String;
        plutusVersion: Schema.Literal<["v1", "v2", "v3"]>;
        compiler: Schema.optional<Schema.Struct<{
            name: typeof Schema.String;
            version: typeof Schema.String;
        }>>;
        license: Schema.optional<typeof Schema.String>;
    }>;
    validators: Schema.Array$<Schema.Struct<{
        title: typeof Schema.String;
        description: Schema.optional<typeof Schema.String>;
        datum: Schema.optional<Schema.Struct<{
            title: Schema.optional<typeof Schema.String>;
            schema: Schema.Union<[Schema.Struct<{
                dataType: Schema.Literal<["bytes"]>;
                title: Schema.optional<typeof Schema.String>;
                description: Schema.optional<typeof Schema.String>;
            }>, Schema.Struct<{
                dataType: Schema.Literal<["integer"]>;
                title: Schema.optional<typeof Schema.String>;
                description: Schema.optional<typeof Schema.String>;
            }>, typeof ConstructorDefinition, typeof UnionDefinition, Schema.Struct<{
                title: Schema.Literal<["Data"]>;
                description: Schema.optional<typeof Schema.String>;
            }>, Schema.Struct<{
                $ref: typeof Schema.String;
            }>, Schema.Struct<{}>, typeof ListDefinition, typeof MapDefinition]>;
        }>>;
        redeemer: Schema.optional<Schema.Struct<{
            title: Schema.optional<typeof Schema.String>;
            schema: Schema.Union<[Schema.Struct<{
                dataType: Schema.Literal<["bytes"]>;
                title: Schema.optional<typeof Schema.String>;
                description: Schema.optional<typeof Schema.String>;
            }>, Schema.Struct<{
                dataType: Schema.Literal<["integer"]>;
                title: Schema.optional<typeof Schema.String>;
                description: Schema.optional<typeof Schema.String>;
            }>, typeof ConstructorDefinition, typeof UnionDefinition, Schema.Struct<{
                title: Schema.Literal<["Data"]>;
                description: Schema.optional<typeof Schema.String>;
            }>, Schema.Struct<{
                $ref: typeof Schema.String;
            }>, Schema.Struct<{}>, typeof ListDefinition, typeof MapDefinition]>;
        }>>;
        parameters: Schema.optional<Schema.Array$<Schema.Struct<{
            title: Schema.optional<typeof Schema.String>;
            schema: Schema.Union<[Schema.Struct<{
                dataType: Schema.Literal<["bytes"]>;
                title: Schema.optional<typeof Schema.String>;
                description: Schema.optional<typeof Schema.String>;
            }>, Schema.Struct<{
                dataType: Schema.Literal<["integer"]>;
                title: Schema.optional<typeof Schema.String>;
                description: Schema.optional<typeof Schema.String>;
            }>, typeof ConstructorDefinition, typeof UnionDefinition, Schema.Struct<{
                title: Schema.Literal<["Data"]>;
                description: Schema.optional<typeof Schema.String>;
            }>, Schema.Struct<{
                $ref: typeof Schema.String;
            }>, Schema.Struct<{}>, typeof ListDefinition, typeof MapDefinition]>;
        }>>>;
        compiledCode: typeof Schema.String;
        hash: typeof Schema.String;
    }>>;
    definitions: Schema.Record$<typeof Schema.String, Schema.Union<[Schema.Struct<{
        dataType: Schema.Literal<["bytes"]>;
        title: Schema.optional<typeof Schema.String>;
        description: Schema.optional<typeof Schema.String>;
    }>, Schema.Struct<{
        dataType: Schema.Literal<["integer"]>;
        title: Schema.optional<typeof Schema.String>;
        description: Schema.optional<typeof Schema.String>;
    }>, typeof ConstructorDefinition, typeof UnionDefinition, Schema.Struct<{
        title: Schema.Literal<["Data"]>;
        description: Schema.optional<typeof Schema.String>;
    }>, Schema.Struct<{
        $ref: typeof Schema.String;
    }>, Schema.Struct<{}>, typeof ListDefinition, typeof MapDefinition]>>;
}>;
export interface ParsedBlueprint {
    schemas: Record<string, Schema.Schema.Any>;
    validators: Record<string, ValidatorMetadata>;
}
export interface ValidatorMetadata {
    title: string;
    hash: string;
    compiledCode: string;
    datum?: Schema.Schema.Any;
    redeemer?: Schema.Schema.Any;
    parameters?: Array<Schema.Schema.Any>;
}
export {};
//# sourceMappingURL=Types.d.ts.map