"use strict";
/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.ValueSchema = exports.GlobalFieldKeySchema = exports.FieldKindIdentifierSchema = exports.LocalFieldKeySchema = exports.TreeSchemaIdentifierSchema = void 0;
const util_1 = require("../../util");
exports.TreeSchemaIdentifierSchema = (0, util_1.brandedStringType)();
exports.LocalFieldKeySchema = (0, util_1.brandedStringType)();
exports.FieldKindIdentifierSchema = (0, util_1.brandedStringType)();
exports.GlobalFieldKeySchema = (0, util_1.brandedStringType)();
/**
 * Example for how we might want to handle values.
 *
 * This might be significantly different if we want to focus more on binary formats
 * (need to work out how Fluid GC would work with that).
 * For now, this is a simple easy to support setup.
 *
 * Note that use of non-Nothing values might be restricted in the actual user facing schema languages:
 * we could instead choose to get by with the only types supporting values being effectively builtin,
 * though this limitation could prevent users for updating/extending
 * the primitive schema to allow the annotations they might want.
 *
 * An interesting alternative to this simple value Enum would be to use something more expressive here, like JsonSchema:
 * since this is modeling immutable data, we really just need a way to figure out which if these value schema allow
 * super sets of each-other.
 *
 * TODO: come up with a final design for how to handle primitives / values.
 * This design is just a placeholder.
 * @alpha
 */
var ValueSchema;
(function (ValueSchema) {
    ValueSchema[ValueSchema["Nothing"] = 0] = "Nothing";
    ValueSchema[ValueSchema["Number"] = 1] = "Number";
    ValueSchema[ValueSchema["String"] = 2] = "String";
    ValueSchema[ValueSchema["Boolean"] = 3] = "Boolean";
    /**
     * Any Fluid serializable data.
     *
     * This includes Nothing / undefined.
     *
     * If it is desired to not include Nothing here, `anyNode` and `allowsValueSuperset` would need adjusting.
     */
    ValueSchema[ValueSchema["Serializable"] = 4] = "Serializable";
})(ValueSchema = exports.ValueSchema || (exports.ValueSchema = {}));
//# sourceMappingURL=schema.js.map