/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import * as Type from "@sinclair/typebox";
import type { Static } from "@sinclair/typebox";
/**
 * The format version for the schema.
 */
export declare const SimpleSchemaFormatVersion: {
    readonly v1: 1;
};
/**
 * The allowed types and their attributes in the simple schema format.
 * @see {@link SimpleAllowedTypes}.
 */
export declare const SimpleAllowedTypeAttributesFormat: Type.TObject<{
    isStaged: Type.TOptional<Type.TBoolean>;
}>;
export type SimpleAllowedTypeAttributesFormat = Static<typeof SimpleAllowedTypeAttributesFormat>;
/**
 * A set of allowed types in the simple schema format.
 * The keys are the type identifiers, and the values are their attributes.
 */
export declare const SimpleAllowedTypesFormat: Type.TRecord<Type.TString, Type.TObject<{
    isStaged: Type.TOptional<Type.TBoolean>;
}>>;
export type SimpleAllowedTypesFormat = Static<typeof SimpleAllowedTypesFormat>;
/**
 * Persisted format for a field schema in the simple schema format.
 * @see {@link SimpleFieldSchema}.
 */
export declare const SimpleFieldSchemaFormat: Type.TObject<{
    kind: Type.TInteger;
    simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
        isStaged: Type.TOptional<Type.TBoolean>;
    }>>;
}>;
export type SimpleFieldSchemaFormat = Static<typeof SimpleFieldSchemaFormat>;
/**
 * Persisted format for an object field schema in the simple schema format.
 * @see {@link SimpleObjectFieldSchema}.
 */
export declare const SimpleObjectFieldSchemaFormat: Type.TObject<{
    kind: Type.TInteger;
    simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
        isStaged: Type.TOptional<Type.TBoolean>;
    }>>;
    storedKey: Type.TString;
}>;
export type SimpleObjectFieldSchemaFormat = Static<typeof SimpleObjectFieldSchemaFormat>;
/**
 * Persisted format for an array node schema in the simple schema format.
 * @see {@link SimpleArrayNodeSchema}.
 */
export declare const SimpleArrayNodeSchemaFormat: Type.TObject<{
    kind: Type.TInteger;
    simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
        isStaged: Type.TOptional<Type.TBoolean>;
    }>>;
}>;
export type SimpleArrayNodeSchemaFormat = Static<typeof SimpleArrayNodeSchemaFormat>;
/**
 * Persisted format for a map node schema in the simple schema format.
 * @see {@link SimpleMapNodeSchema}.
 */
export declare const SimpleMapNodeSchemaFormat: Type.TObject<{
    kind: Type.TInteger;
    simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
        isStaged: Type.TOptional<Type.TBoolean>;
    }>>;
}>;
export type SimpleMapNodeSchemaFormat = Static<typeof SimpleMapNodeSchemaFormat>;
/**
 * Persisted format for a record node schema in the simple schema format.
 * @see {@link SimpleRecordNodeSchema}.
 */
export declare const SimpleRecordNodeSchemaFormat: Type.TObject<{
    kind: Type.TInteger;
    simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
        isStaged: Type.TOptional<Type.TBoolean>;
    }>>;
}>;
export type SimpleRecordNodeSchemaFormat = Static<typeof SimpleRecordNodeSchemaFormat>;
/**
 * Persisted format for a leaf node schema in the simple schema format.
 * @see {@link SimpleLeafNodeSchema}.
 */
export declare const SimpleLeafNodeSchemaFormat: Type.TObject<{
    kind: Type.TInteger;
    leafKind: Type.TInteger;
}>;
export type SimpleLeafNodeSchemaFormat = Static<typeof SimpleLeafNodeSchemaFormat>;
/**
 * Persisted format for the field schemas of an object node in the simple schema format.
 */
export declare const SimpleObjectFieldSchemasFormat: Type.TRecord<Type.TString, Type.TObject<{
    kind: Type.TInteger;
    simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
        isStaged: Type.TOptional<Type.TBoolean>;
    }>>;
    storedKey: Type.TString;
}>>;
export type SimpleObjectFieldSchemasFormat = Static<typeof SimpleObjectFieldSchemasFormat>;
/**
 * Persisted format for an object node schema in the simple schema format.
 * @see {@link SimpleObjectNodeSchema}.
 */
export declare const SimpleObjectNodeSchemaFormat: Type.TObject<{
    kind: Type.TInteger;
    fields: Type.TRecord<Type.TString, Type.TObject<{
        kind: Type.TInteger;
        simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
            isStaged: Type.TOptional<Type.TBoolean>;
        }>>;
        storedKey: Type.TString;
    }>>;
    allowUnknownOptionalFields: Type.TOptional<Type.TBoolean>;
}>;
export type SimpleObjectNodeSchemaFormat = Static<typeof SimpleObjectNodeSchemaFormat>;
/**
 * Discriminated union of all possible node schemas.
 *
 * See {@link DiscriminatedUnionDispatcher} for more information on this pattern.
 */
export declare const SimpleNodeSchemaUnionFormat: Type.TObject<{
    array: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
            isStaged: Type.TOptional<Type.TBoolean>;
        }>>;
    }>>;
    map: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
            isStaged: Type.TOptional<Type.TBoolean>;
        }>>;
    }>>;
    record: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
            isStaged: Type.TOptional<Type.TBoolean>;
        }>>;
    }>>;
    leaf: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        leafKind: Type.TInteger;
    }>>;
    object: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        fields: Type.TRecord<Type.TString, Type.TObject<{
            kind: Type.TInteger;
            simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
                isStaged: Type.TOptional<Type.TBoolean>;
            }>>;
            storedKey: Type.TString;
        }>>;
        allowUnknownOptionalFields: Type.TOptional<Type.TBoolean>;
    }>>;
}>;
export type SimpleNodeSchemaUnionFormat = Static<typeof SimpleNodeSchemaUnionFormat>;
/**
 * Helper type for the schema definitions map in the persisted format.
 */
export declare const SimpleSchemaDefinitionsFormat: Type.TRecord<Type.TString, Type.TObject<{
    array: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
            isStaged: Type.TOptional<Type.TBoolean>;
        }>>;
    }>>;
    map: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
            isStaged: Type.TOptional<Type.TBoolean>;
        }>>;
    }>>;
    record: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
            isStaged: Type.TOptional<Type.TBoolean>;
        }>>;
    }>>;
    leaf: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        leafKind: Type.TInteger;
    }>>;
    object: Type.TOptional<Type.TObject<{
        kind: Type.TInteger;
        fields: Type.TRecord<Type.TString, Type.TObject<{
            kind: Type.TInteger;
            simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
                isStaged: Type.TOptional<Type.TBoolean>;
            }>>;
            storedKey: Type.TString;
        }>>;
        allowUnknownOptionalFields: Type.TOptional<Type.TBoolean>;
    }>>;
}>>;
export type SimpleSchemaDefinitionsFormat = Static<typeof SimpleSchemaDefinitionsFormat>;
/**
 * Persisted format for the compatibility impacting subset of simple schema.
 * @see {@link SimpleTreeSchema}.
 */
export declare const SimpleTreeSchemaFormat: Type.TObject<{
    version: Type.TLiteral<1>;
    root: Type.TObject<{
        kind: Type.TInteger;
        simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
            isStaged: Type.TOptional<Type.TBoolean>;
        }>>;
    }>;
    definitions: Type.TRecord<Type.TString, Type.TObject<{
        array: Type.TOptional<Type.TObject<{
            kind: Type.TInteger;
            simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
                isStaged: Type.TOptional<Type.TBoolean>;
            }>>;
        }>>;
        map: Type.TOptional<Type.TObject<{
            kind: Type.TInteger;
            simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
                isStaged: Type.TOptional<Type.TBoolean>;
            }>>;
        }>>;
        record: Type.TOptional<Type.TObject<{
            kind: Type.TInteger;
            simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
                isStaged: Type.TOptional<Type.TBoolean>;
            }>>;
        }>>;
        leaf: Type.TOptional<Type.TObject<{
            kind: Type.TInteger;
            leafKind: Type.TInteger;
        }>>;
        object: Type.TOptional<Type.TObject<{
            kind: Type.TInteger;
            fields: Type.TRecord<Type.TString, Type.TObject<{
                kind: Type.TInteger;
                simpleAllowedTypes: Type.TRecord<Type.TString, Type.TObject<{
                    isStaged: Type.TOptional<Type.TBoolean>;
                }>>;
                storedKey: Type.TString;
            }>>;
            allowUnknownOptionalFields: Type.TOptional<Type.TBoolean>;
        }>>;
    }>>;
}>;
export type SimpleTreeSchemaFormat = Static<typeof SimpleTreeSchemaFormat>;
//# sourceMappingURL=simpleSchemaFormatV1.d.ts.map