import { type TSchema } from '../../types/schema.mjs';
import { type TEnum, type TEnumValue } from '../../types/enum.mjs';
import { type TLiteral, type TLiteralValue } from '../../types/literal.mjs';
import { type TUnion } from '../../types/union.mjs';
import { type TTemplateLiteral, type TTemplateLiteralDeferred } from '../../types/template_literal.mjs';
import { type TBigInt, BigIntPattern } from '../../types/bigint.mjs';
import { type TString, StringPattern } from '../../types/string.mjs';
import { type TNumber, NumberPattern } from '../../types/number.mjs';
import { type TInteger, IntegerPattern } from '../../types/integer.mjs';
import { type TBoolean } from '../../types/boolean.mjs';
import { NeverPattern } from '../../types/never.mjs';
import { type TEvaluateEnum } from '../evaluate/evaluate.mjs';
import { type TTemplateLiteralAction } from './instantiate.mjs';
type TJoinString = (Input extends [infer Left extends string, ...infer Right extends string[]] ? Result extends '' ? TJoinString : TJoinString : Result);
type TUnwrapTemplateLiteralPattern = (Pattern extends `^${infer Pattern extends string}$` ? Pattern : never);
type TEncodeLiteral = (TEncodeTypes);
type TEncodeBigInt = (TEncodeTypes);
type TEncodeInteger = (TEncodeTypes);
type TEncodeNumber = (TEncodeTypes);
type TEncodeBoolean = (TEncodeType, TLiteral<'true'>]>, Right, Pattern>);
type TEncodeString = (TEncodeTypes);
type TEncodeTemplateLiteral = (TEncodeTypes}`>);
type TEncodeTemplateLiteralDeferred, Result extends TSchema = TEncodeType> = Result;
type TEncodeEnum> = TEncodeType;
type TEncodeUnion = Types extends [infer Head extends TSchema, ...infer Tail extends TSchema[]] ? TEncodeUnion]> : TEncodeTypes})`>;
type TEncodeType = (Type extends TEnum ? TEncodeEnum : Type extends TInteger ? TEncodeInteger : Type extends TLiteral ? TEncodeLiteral : Type extends TBigInt ? TEncodeBigInt : Type extends TBoolean ? TEncodeBoolean : Type extends TNumber ? TEncodeNumber : Type extends TString ? TEncodeString : Type extends TTemplateLiteral ? TEncodeTemplateLiteral : Type extends TTemplateLiteralDeferred ? TEncodeTemplateLiteralDeferred : Type extends TUnion ? TEncodeUnion : typeof NeverPattern);
type TEncodeTypes = (Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]] ? TEncodeType : Pattern);
type TEncodePattern, Result extends string = `^${Encoded}$`> = Result;
/** Encodes a TemplateLiteral type sequence into a TemplateLiteral */
export type TTemplateLiteralEncode, Result extends TSchema = TTemplateLiteral> = Result;
/** Encodes a TemplateLiteral type sequence into a TemplateLiteral */
export declare function TemplateLiteralEncode(types: [...Types]): TTemplateLiteralEncode;
export {};