"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 = void 0;
const typebox_1 = require("@sinclair/typebox");
const index_js_1 = require("../../codec/index.js");
const index_js_2 = require("../../util/index.js");
/**
 * TypeBox Schema for encoding {@link FieldKey} in persisted data.
 */
exports.FieldKeySchema = (0, index_js_2.brandedStringType)();
exports.FieldKindIdentifierSchema = (0, index_js_2.brandedStringType)();
/**
 * TypeBox Schema for encoding {@link TreeNodeSchemaIdentifiers} in persisted data.
 */
exports.TreeNodeSchemaIdentifierSchema = (0, index_js_2.brandedStringType)();
const FieldSchemaFormatBase = typebox_1.Type.Object({
    kind: exports.FieldKindIdentifierSchema,
    types: 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 = {}));
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)),
}, index_js_1.unionOptions);
//# sourceMappingURL=formatV1.js.map