import { JsonSchemaAllOfType, JsonSchemaAnyOfType, JsonSchemaArrayType, JsonSchemaBooleanType, JsonSchemaLiteralType, JsonSchemaMetadata, JsonSchemaNumberType, JsonSchemaObjectType, JsonSchemaPrimitiveLiteralType, JsonSchemaRecordType, JsonSchemaStringType, JsonSchemaTupleType, JsonSchemaType } from "./types.cjs";
import { StandardJSONSchemaV1 } from "@standard-schema/spec";

//#region src/schema.d.ts
/**
 * Type guard for {@link JsonSchemaAllOfType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaAllOfType}, false otherwise
 */
declare function isJsonSchemaAllOfType(schema: any): schema is JsonSchemaAllOfType;
/**
 * Type guard for {@link JsonSchemaAnyOfType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaAnyOfType}, false otherwise
 */
declare function isJsonSchemaAnyOfType(schema: any): schema is JsonSchemaAnyOfType;
/**
 * Type guard for {@link JsonSchemaObjectType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaObjectType}, false otherwise
 */
declare function isJsonSchemaObjectType(schema: any): schema is JsonSchemaObjectType;
/**
 * Type guard for {@link JsonSchemaStringType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaStringType}, false otherwise
 */
declare function isJsonSchemaStringType(schema: any): schema is JsonSchemaStringType;
/**
 * Type guard for {@link JsonSchemaNumberType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaNumberType}, false otherwise
 */
declare function isJsonSchemaNumberType(schema: any): schema is JsonSchemaNumberType;
/**
 * Type guard for {@link JsonSchemaBooleanType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaBooleanType}, false otherwise
 */
declare function isJsonSchemaBooleanType(schema: any): schema is JsonSchemaBooleanType;
/**
 * Type guard for {@link JsonSchemaArrayType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaArrayType}, false otherwise
 */
declare function isJsonSchemaArrayType(schema: any): schema is JsonSchemaArrayType;
/**
 * Type guard for {@link JsonSchemaTupleType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaTupleType}, false otherwise
 */
declare function isJsonSchemaTupleType(schema: any): schema is JsonSchemaTupleType;
/**
 * Type guard for {@link JsonSchemaPrimitiveLiteralType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaPrimitiveLiteralType}, false otherwise
 */
declare function isJsonSchemaPrimitiveLiteralType(schema: any): schema is JsonSchemaPrimitiveLiteralType;
/**
 * Type guard for {@link JsonSchemaLiteralType}
 *
 * @param schema - The schema to check
 * @returns True if the schema is a {@link JsonSchemaLiteralType}, false otherwise
 */
declare function isJsonSchemaLiteralType(schema: any): schema is JsonSchemaLiteralType;
declare function isJsonSchemaRecordType(schema: any): schema is JsonSchemaRecordType;
declare function isJsonSchemaMetadata(schema: any): schema is JsonSchemaMetadata;
/**
 * Type guard to check if a value is a {@link StandardJSONSchemaV1 | Standard JSON Schema}.
 *
 * @remarks
 * This function checks if the value has the structure of a Standard JSON Schema, which includes a `~standard` property with a `jsonSchema` object that has `input` and `output` functions.
 *
 * @see https://standardschema.dev/json-schema
 *
 * @param value - The value to check.
 * @returns True if the value is a {@link StandardJSONSchemaV1 | Standard JSON Schema}, false otherwise.
 */
declare function isStandardJsonSchema<Input = unknown, Output = Input>(value: any): value is StandardJSONSchemaV1<Input, Output>;
/**
 * Merges multiple {@link JsonSchemaMetadata} objects into a single object, combining their properties. If there are conflicting properties, the last one will take precedence.
 *
 * @param schemas - The schemas to merge
 * @returns The merged {@link JsonSchemaMetadata} object, or undefined if no valid schemas are provided
 */
declare function mergeMetadataSchemaSafe(...schemas: JsonSchemaMetadata[]): JsonSchemaMetadata | undefined;
/**
 * Merges multiple {@link JsonSchemaMetadata} objects into a single object, combining their properties. If there are conflicting properties, the last one will take precedence.
 *
 * @remarks
 * If any of the provided schemas are not valid {@link JsonSchemaMetadata} objects, or if no valid schemas are provided for merging, this function will throw an error. Use {@link mergeMetadataSchemaSafe} if you want to ignore invalid schemas instead.
 *
 * @param schemas - The schemas to merge
 * @returns The merged {@link JsonSchemaMetadata} object
 * @throws Error if any of the provided schemas are not valid {@link JsonSchemaMetadata} objects, or if no valid schemas are provided for merging. Use {@link mergeMetadataSchemaSafe} if you want to ignore invalid schemas instead.
 */
declare function mergeMetadataSchemaStrict(...schemas: JsonSchemaMetadata[]): JsonSchemaMetadata;
/**
 * Merges multiple {@link JsonSchemaObjectType} schemas into a single schema, combining their properties and required fields. If there are no valid object type schemas, throws an error.
 *
 * @remarks If there are overlapping properties, the last schema's property definition will take precedence. Required fields from all schemas will be combined, and duplicates will be removed. If all of the provided schemas are not valid {@link JsonSchemaObjectType} objects, or if no valid object type schemas are provided for merging, this function will throw an error. Use {@link mergeObjectTypeSchemaSafe} if you want to ignore invalid schemas instead.
 *
 * @param schemas - The schemas to merge
 * @returns The merged {@link JsonSchemaMetadata} object
 * @throws Error if all of the provided schemas are not valid {@link JsonSchemaObjectType} objects, or if no valid object type schemas are provided for merging. Use {@link mergeObjectTypeSchemaSafe} if you want to ignore invalid schemas instead.
 */
declare function mergeMetadataSchema(...schemas: JsonSchemaMetadata[]): JsonSchemaMetadata;
/**
 * Merges multiple {@link JsonSchemaMetadata} objects into a single object, combining their properties. If there are conflicting properties, the last one will take precedence.
 *
 * @param schemas - The schemas to merge
 * @returns The merged {@link JsonSchemaMetadata} object, or undefined if no valid schemas are provided
 */
declare function mergeObjectTypeSchemaSafe(...schemas: JsonSchemaObjectType[]): JsonSchemaObjectType | undefined;
/**
 * Merges multiple {@link JsonSchemaObjectType} objects into a single object, combining their properties. If there are conflicting properties, the last one will take precedence.
 *
 * @remarks
 * If any of the provided schemas are not valid {@link JsonSchemaObjectType} objects, or if no valid schemas are provided for merging, this function will throw an error. Use {@link mergeObjectTypeSchemaSafe} if you want to ignore invalid schemas instead.
 *
 * @param schemas - The schemas to merge
 * @returns The merged {@link JsonSchemaObjectType} object
 * @throws Error if any of the provided schemas are not valid {@link JsonSchemaObjectType} objects, or if no valid schemas are provided for merging. Use {@link mergeObjectTypeSchemaSafe} if you want to ignore invalid schemas instead.
 */
declare function mergeObjectTypeSchemaStrict(...schemas: JsonSchemaObjectType[]): JsonSchemaObjectType;
/**
 * Merges multiple {@link JsonSchemaObjectType} schemas into a single schema, combining their properties and required fields. If there are no valid object type schemas, throws an error.
 *
 * @remarks If there are overlapping properties, the last schema's property definition will take precedence. Required fields from all schemas will be combined, and duplicates will be removed. If all of the provided schemas are not valid {@link JsonSchemaObjectType} objects, or if no valid object type schemas are provided for merging, this function will throw an error. Use {@link mergeObjectTypeSchemaSafe} if you want to ignore invalid schemas instead.
 *
 * @param schemas - The schemas to merge
 * @returns The merged {@link JsonSchemaObjectType} object
 * @throws Error if all of the provided schemas are not valid {@link JsonSchemaObjectType} objects, or if no valid object type schemas are provided for merging. Use {@link mergeObjectTypeSchemaSafe} if you want to ignore invalid schemas instead.
 */
declare function mergeObjectTypeSchema(...schemas: JsonSchemaObjectType[]): JsonSchemaObjectType;
/**
 * Extracts a {@link JsonSchemaObjectType} from a given {@link JsonSchemaType}, if it exists.
 *
 * @param schema - The schema to extract the object type from
 * @returns The extracted {@link JsonSchemaObjectType}, or undefined if it does not exist
 */
declare function extractObjectTypeSchema(schema: JsonSchemaType): JsonSchemaObjectType | undefined;
//#endregion
export { extractObjectTypeSchema, isJsonSchemaAllOfType, isJsonSchemaAnyOfType, isJsonSchemaArrayType, isJsonSchemaBooleanType, isJsonSchemaLiteralType, isJsonSchemaMetadata, isJsonSchemaNumberType, isJsonSchemaObjectType, isJsonSchemaPrimitiveLiteralType, isJsonSchemaRecordType, isJsonSchemaStringType, isJsonSchemaTupleType, isStandardJsonSchema, mergeMetadataSchema, mergeMetadataSchemaSafe, mergeMetadataSchemaStrict, mergeObjectTypeSchema, mergeObjectTypeSchemaSafe, mergeObjectTypeSchemaStrict };
//# sourceMappingURL=schema.d.cts.map