"use strict";
/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.TreeNodeSchemaDataFormat = exports.PersistedValueSchema = exports.FieldSchemaFormat = exports.TreeNodeSchemaIdentifierSchema = exports.FieldKindIdentifierSchema = exports.FieldKeySchema = exports.version = void 0;
const typebox_1 = require("@sinclair/typebox");
const codec_1 = require("../../codec");
const util_1 = require("../../util");
exports.version = 1;
/**
 * TypeBox Schema for encoding {@link FieldKey} in persisted data.
 */
exports.FieldKeySchema = (0, util_1.brandedStringType)();
exports.FieldKindIdentifierSchema = (0, util_1.brandedStringType)();
/**
 * TypeBox Schema for encoding {@link TreeNodeSchemaIdentifiers} in persisted data.
 */
exports.TreeNodeSchemaIdentifierSchema = (0, util_1.brandedStringType)();
const FieldSchemaFormatBase = typebox_1.Type.Object({
    kind: exports.FieldKindIdentifierSchema,
    types: typebox_1.Type.Optional(typebox_1.Type.Array(exports.TreeNodeSchemaIdentifierSchema)),
});
const noAdditionalProps = { additionalProperties: false };
exports.FieldSchemaFormat = typebox_1.Type.Composite([FieldSchemaFormatBase], noAdditionalProps);
/**
 * Persisted version of {@link ValueSchema}.
 */
var PersistedValueSchema;
(function (PersistedValueSchema) {
    PersistedValueSchema[PersistedValueSchema["Number"] = 0] = "Number";
    PersistedValueSchema[PersistedValueSchema["String"] = 1] = "String";
    PersistedValueSchema[PersistedValueSchema["Boolean"] = 2] = "Boolean";
    PersistedValueSchema[PersistedValueSchema["FluidHandle"] = 3] = "FluidHandle";
    PersistedValueSchema[PersistedValueSchema["Null"] = 4] = "Null";
})(PersistedValueSchema || (exports.PersistedValueSchema = PersistedValueSchema = {}));
/**
 * Discriminated union content of tree node schema.
 *
 * See {@link DiscriminatedUnionDispatcher} for more information on this pattern.
 */
exports.TreeNodeSchemaDataFormat = typebox_1.Type.Object({
    /**
     * Object node union member.
     */
    object: typebox_1.Type.Optional(typebox_1.Type.Record(typebox_1.Type.String(), exports.FieldSchemaFormat)),
    /**
     * Map node union member.
     */
    map: typebox_1.Type.Optional(exports.FieldSchemaFormat),
    /**
     * Leaf node union member.
     */
    leaf: typebox_1.Type.Optional(typebox_1.Type.Enum(PersistedValueSchema)),
}, codec_1.unionOptions);
//# sourceMappingURL=format.js.map