import { IO } from "@baqhub/sdk";
declare const RProjectRecordTypeScope: IO.UnionC<[IO.LiteralC<"read">, IO.LiteralC<"write">, IO.LiteralC<"subscribe">]>;
declare const RLocalProjectRecordType: IO.Type<{
    readonly path: string;
    readonly recordId: string;
    readonly versionHash: string | undefined;
    readonly contentHash: string | undefined;
}, any, any>;
declare const RProjectRecordType: IO.IntersectionC<[IO.UnionC<[IO.Type<{
    readonly path: string;
    readonly recordId: string;
    readonly versionHash: string | undefined;
    readonly contentHash: string | undefined;
}, any, any>, IO.Type<{
    readonly entity: string;
    readonly recordId: string;
    readonly versionHash: string;
}, any, any>]>, IO.Type<{
    readonly scopes?: readonly ("read" | "write" | "subscribe")[] | undefined;
}, any, any>]>;
export type ProjectRecordTypeScope = IO.TypeOf<typeof RProjectRecordTypeScope>;
export type LocalProjectRecordType = IO.TypeOf<typeof RLocalProjectRecordType>;
export type ProjectRecordType = IO.TypeOf<typeof RProjectRecordType>;
export declare enum ProjectType {
    JS = "js",
    JS_REACT = "js-react",
    TS = "ts",
    TS_REACT = "ts-react"
}
declare const RProjectRaw: IO.IntersectionC<[IO.Type<{
    readonly name: string;
    readonly type: ProjectType;
    readonly path: string;
    readonly recordTypes: {
        [x: string]: ({
            readonly path: string;
            readonly recordId: string;
            readonly versionHash: string | undefined;
            readonly contentHash: string | undefined;
        } | {
            readonly entity: string;
            readonly recordId: string;
            readonly versionHash: string;
        }) & {
            readonly scopes?: readonly ("read" | "write" | "subscribe")[] | undefined;
        };
    };
}, any, any>, IO.Type<{
    readonly description?: string | undefined;
    readonly websiteUrl?: string | undefined;
}, any, any>]>;
export interface Project extends IO.TypeOf<typeof RProjectRaw> {
}
export declare const RProject: IO.Type<Project, any, unknown>;
export declare function buildProject(name: string, type: ProjectType, path: string): Project;
export declare function addTypeToProject(project: Project, name: string, projectRecordType: ProjectRecordType): Project;
export declare function removeTypeFromProject(project: Project, name: string): Project;
export {};
