"use strict";
/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.FlexFieldKind = void 0;
/**
 * Functionality for FieldKinds that is stable,
 * meaning that it can not change in any measurable way without providing a new identifier.
 *
 * It is assumed that this information and policy is available on all clients interacting with a document
 * using the identifier.
 *
 * This must contain enough information to process remote edits to this FieldKind consistently with all clients.
 * All behavior must be deterministic, and not change across versions of the app/library.
 *
 * These policies include the data encoding, change encoding, change rebase and change application.
 *
 * @sealed @internal
 * @privateRemarks
 * This being @sealed is for users of this package.
 * This package itself may provide implementations.
 * This pattern was picked instead of an interface since we do not have a convention for how to mark interfaces as only allowed to be implemented by the package declaring them,
 * and using a class also gets stronger (nominal) typing for objects which will be down cast.
 */
class FlexFieldKind {
    /**
     * @param identifier - Globally scoped identifier.
     * @param multiplicity - bound on the number of children that fields of this kind may have.
     * TODO: consider replacing with numeric upper and lower bounds.
     */
    constructor(identifier, multiplicity) {
        this.identifier = identifier;
        this.multiplicity = multiplicity;
    }
}
exports.FlexFieldKind = FlexFieldKind;
//# sourceMappingURL=fieldKind.js.map