/*!
 * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
 * Licensed under the MIT License.
 */
import type { ContainerRuntimeOptionsInternal } from "./containerRuntime.js";
/**
 * Our policy is to support N/N-1 compatibility by default, where N is the most
 * recent public major release of the runtime.
 * Therefore, if the customer does not provide a compatibility mode, we will
 * default to use N-1.
 *
 * However, this is not consistent with today's behavior. Some options (i.e.
 * batching, compression) are enabled by default despite not being compatible
 * with 1.x clients. Since the policy was introduced during 2.x's lifespan,
 * N/N-1 compatibility by **default** will be in effect starting with 3.0.
 * Importantly though, N/N-2 compatibility is still guaranteed with the proper
 * configurations set.
 *
 * Further to distinguish unspecified `compatibilityVersion` from a specified
 * version and allow `enableExplicitSchemaControl` to default to `true` for
 * any 2.0.0+ version, we will use a special value of `2.0.0-defaults`, which
 * is semantically less than 2.0.0.
 */
export declare const defaultCompatibilityVersion: "2.0.0-defaults";
/**
 * String in a valid semver format specifying bottom of a minor version
 * or special "defaults" prerelease of a major.
 * @remarks Only 2.0.0-defaults is expected, but index signatures cannot be a
 * literal; so, just allow any major -defaults prerelease.
 */
export type MinimumMinorSemanticVersion = `${bigint}.${bigint}.0` | `${bigint}.0.0-defaults`;
/**
 * String in a valid semver format of a specific version at least specifying minor.
 */
export type SemanticVersion = `${bigint}.${bigint}.${bigint}` | `${bigint}.${bigint}.${bigint}-${string}`;
/**
 * Generic type for runtimeOptionsAffectingDocSchemaConfigMap
 */
export type ConfigMap<T extends Record<string, unknown>> = {
    [K in keyof T]-?: {
        [version: MinimumMinorSemanticVersion]: T[K];
    };
};
/**
 * Subset of the {@link ContainerRuntimeOptionsInternal} properties which
 * affect {@link IDocumentSchemaFeatures}.
 *
 * @remarks
 * When a new option is added to {@link ContainerRuntimeOptionsInternal}, we
 * must consider if it changes the DocumentSchema. If so, then a corresponding
 * entry must be added to {@link runtimeOptionsAffectingDocSchemaConfigMap}
 * below. If not, then it must be omitted from this type.
 *
 * Note: `Omit` is used instead of `Pick` to ensure that all new options are
 * included in this type by default. If any new properties are added to
 * {@link ContainerRuntimeOptionsInternal}, they will be included in this
 * type unless explicitly omitted. This will prevent us from forgetting to
 * account for any new properties in the future.
 */
export type RuntimeOptionsAffectingDocSchema = Omit<ContainerRuntimeOptionsInternal, "chunkSizeInBytes" | "maxBatchSizeInBytes" | "loadSequenceNumberVerification" | "summaryOptions">;
/**
 * Returns the default RuntimeOptionsAffectingDocSchema configuration for a given compatibility version.
 */
export declare function getCompatibilityVersionDefaults(compatibilityVersion: SemanticVersion): RuntimeOptionsAffectingDocSchema;
/**
 * Returns a default configuration given compatibility version and configuration version map.
 */
export declare function getConfigsForCompatMode<T extends Record<SemanticVersion, unknown>>(compatibilityVersion: SemanticVersion, configMap: ConfigMap<T>): Partial<T>;
/**
 * Checks if the compatibility version is valid.
 * A valid compatibility version is a string that is a valid semver version and is less than or equal to the current package version.
 */
export declare function isValidCompatVersion(compatibilityVersion: SemanticVersion): boolean;
//# sourceMappingURL=compatUtils.d.ts.map